| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | #!/usr/bin/env node/* eslint-disable no-console */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);  /**   * `cachedUrl` is set when using a proxy server that support resource caching.   * This URL generally remains available after the tunnel itself has closed.   * @see https://github.com/localtunnel/localtunnel/pull/319#discussion_r319846289   */  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);    });  }})();
 |