Files
server/index.ts
T

68 lines
1.7 KiB
TypeScript
Executable File

import "localenv";
import optimist from "optimist";
import Debug from "debug";
import { CreateServer } from "./server";
import { type AddressInfo } from "ws";
const debug = Debug("localtunnel");
const argv = optimist
.usage("Usage: $0 --port [num]")
.options("secure", {
default: false,
describe: "use this flag to indicate proxy over https",
})
.options("port", {
default: "80",
describe: "listen on this port for outside requests",
})
.options("address", {
default: "0.0.0.0",
describe: "IP address to bind to",
})
.options("domain", {
describe:
"Specify the base domain name. This is optional if hosting localtunnel from a regular example.com domain. This is required if hosting a localtunnel server from a subdomain (i.e. lt.example.dom where clients will be client-app.lt.example.come)",
})
.options("max-sockets", {
default: 10,
describe:
"maximum number of tcp sockets each client is allowed to establish at one time (the tunnels)",
}).argv;
if (argv.help) {
console.log("Showing help");
optimist.showHelp();
process.exit();
}
const server = CreateServer({
max_tcp_sockets: argv["max-sockets"],
secure: argv.secure,
domain: argv.domain,
});
server.listen(argv.port, argv.address, () => {
debug("server listening on port: %d", (server.address() as AddressInfo).port);
});
process.on("SIGINT", () => {
console.error("SIGINT");
process.exit();
});
process.on("SIGTERM", () => {
console.warn("SIGTERM");
// process.exit();
});
process.on("uncaughtException", (err) => {
console.error("err:");
console.error(err);
});
process.on("unhandledRejection", (reason, promise) => {
console.error("reason:");
console.error(reason);
});