bunnel
Version:
Websocket reverse tunnel
34 lines (32 loc) • 1.25 kB
JavaScript
import { Command } from 'commander';
import { TunnelClient } from '../client/index.js';
import 'pino';
import 'ws';
const program = new Command();
program.name("bunnel").description("Bunnel client").requiredOption("-l, --local <url>", "local server URL, for example http://localhost:3000").requiredOption("-t, --tunnel <url>", "tunnel server URL, for example, ws://myserver.com:4444").action(async (options) => {
const localServerUrl = options.local;
const tunnel = new TunnelClient({
localServerUrl,
tunnelServerUrl: options.tunnel,
onClosed: () => {
console.log("\u{1F50C} Tunnel closed");
process.exit(0);
}
});
console.log(`\u{1F4E1} Connecting to tunnel server at ${options.tunnel}...`);
console.log(`\u{1F504} Will forward requests to ${options.local}`);
try {
const { subdomain, tunnelUrl } = await tunnel.connect();
console.log(`Tunnel to ${localServerUrl} available on remote:`);
console.log(`\u{1F310} Tunnel URL: ${tunnelUrl}`);
process.on("SIGINT", () => {
console.log("\n\u{1F6D1} Shutting down tunnel...");
tunnel.disconnect();
});
} catch (error) {
console.error("\u274C Tunnel error:", error);
process.exit(1);
}
});
program.parse();