import { initialiseClientId } from './identity/client-id-service.js'; import { Options } from './options.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: Options, isCli = false ): Promise { 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(` Aplikasi lokalmu sepertinya belum menyala di port ${port}.`)} Agar KatanyaTunnel dapat bekerja, kamu harus menyalakan aplikasi lokalmu di port ${chalk.bold(port)} sehingga bisa diakses dari internet, kemudian jalankan kembali KatanyaTunnel. Atau mungkin kamu memasukkan port yang salah. Pastikan port aplikasi kamu benar, lalu jalankan KatanyaTunnel dengan port tersebut. ` ); process.exit(1); } const client = await connect(options); setUpAutoReconnect(options, client); console.log("Waiting for URL_ASSIGNED event..."); return new Promise((resolve) => { eventHandler.on(URL_ASSIGNED, (url: string) => { resolve(url); }); }); }