tunnelmole
Version:
Tunnelmole, an open source ngrok alternative. Instant public URLs for any http/https based application. Available as a command line application or as an NPM dependency for your code. Stable and maintained. Good test coverage. Works behind firewalls
37 lines • 1.62 kB
JavaScript
import { initialiseClientId } from './identity/client-id-service.js';
import { initStorage } from './node-persist/storage.js';
import { eventHandler, URL_ASSIGNED } from './events/event-handler.js';
import { setUpAutoReconnect } from './websocket/setup-auto-reconnect.js';
import { connect } from './websocket/connect.js';
import { setIsCli } from './websocket/connection-info-service.js';
import detectPort from 'detect-port';
import chalk from 'chalk';
export default async function tunnelmole(options, isCli = false) {
await initStorage();
await initialiseClientId();
setIsCli(isCli);
const { port } = options;
// Set port to 3000 if port is not specified
if (port === undefined) {
options.port = 3000;
}
if (options.setApiKey) {
return "We are simply setting the API key here. No need to set up a tunnel";
}
const availablePort = await detectPort(options.port);
if (availablePort == options.port) {
console.warn(`
${chalk.yellow.bold(`You currently don't have anything running on port ${port}`)}. Please start your service on port ${chalk.bold(port)} so that requests can reach your service. You may have also chosen the wrong port, in which case, find out what port your service is actually running on.
`);
}
const websocket = await connect(options);
// Set up auto reconnect
setUpAutoReconnect(options, websocket);
// Return the URL as soon as its assigned
return new Promise((resolve) => {
eventHandler.on(URL_ASSIGNED, (url) => {
resolve(url);
});
});
}
//# sourceMappingURL=tunnelmole.js.map