| #!/usr/bin/env node |
| |
|
|
| const openurl = require('openurl'); |
| const yargs = require('yargs'); |
|
|
| const localtunnel = require('../localtunnel'); |
| const { version } = require('../package'); |
|
|
| const { argv } = yargs |
| .usage('Usage: lt --port [num] <options>') |
| .env(true) |
| .option('p', { |
| alias: 'port', |
| describe: 'Internal HTTP server port', |
| }) |
| .option('h', { |
| alias: 'host', |
| describe: 'Upstream server providing forwarding', |
| default: 'https://localtunnel.me', |
| }) |
| .option('s', { |
| alias: 'subdomain', |
| describe: 'Request this subdomain', |
| }) |
| .option('l', { |
| alias: 'local-host', |
| describe: 'Tunnel traffic to this host instead of localhost, override Host header to this host', |
| }) |
| .option('local-https', { |
| describe: 'Tunnel traffic to a local HTTPS server', |
| }) |
| .option('local-cert', { |
| describe: 'Path to certificate PEM file for local HTTPS server', |
| }) |
| .option('local-key', { |
| describe: 'Path to certificate key file for local HTTPS server', |
| }) |
| .option('local-ca', { |
| describe: 'Path to certificate authority file for self-signed certificates', |
| }) |
| .option('allow-invalid-cert', { |
| describe: 'Disable certificate checks for your local HTTPS server (ignore cert/key/ca options)', |
| }) |
| .options('o', { |
| alias: 'open', |
| describe: 'Opens the tunnel URL in your browser', |
| }) |
| .option('print-requests', { |
| describe: 'Print basic request info', |
| }) |
| .require('port') |
| .boolean('local-https') |
| .boolean('allow-invalid-cert') |
| .boolean('print-requests') |
| .help('help', 'Show this help and exit') |
| .version(version); |
|
|
| if (typeof argv.port !== 'number') { |
| yargs.showHelp(); |
| console.error('\nInvalid argument: `port` must be a number'); |
| process.exit(1); |
| } |
|
|
| (async () => { |
| const tunnel = await localtunnel({ |
| port: argv.port, |
| host: argv.host, |
| subdomain: argv.subdomain, |
| local_host: argv.localHost, |
| local_https: argv.localHttps, |
| local_cert: argv.localCert, |
| local_key: argv.localKey, |
| local_ca: argv.localCa, |
| allow_invalid_cert: argv.allowInvalidCert, |
| }).catch(err => { |
| throw err; |
| }); |
|
|
| tunnel.on('error', err => { |
| throw err; |
| }); |
|
|
| console.log('your url is: %s', tunnel.url); |
|
|
| |
| |
| |
| |
| |
| if (tunnel.cachedUrl) { |
| console.log('your cachedUrl is: %s', tunnel.cachedUrl); |
| } |
|
|
| if (argv.open) { |
| openurl.open(tunnel.url); |
| } |
|
|
| if (argv['print-requests']) { |
| tunnel.on('request', info => { |
| console.log(new Date().toString(), info.method, info.path); |
| }); |
| } |
| })(); |
|
|