49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
import {mkdirSync, rmSync} from "node:fs";
|
|
import net from "node:net";
|
|
|
|
const mode = process.env.BRIDGE_MODE || "network";
|
|
const socketPath = process.env.BRIDGE_SOCKET || "/run/provider-proxy/upstream.sock";
|
|
const listenPort = Number.parseInt(process.env.LISTEN_PORT || "17897", 10);
|
|
const upstreamHost = process.env.UPSTREAM_HOST || "127.0.0.1";
|
|
const upstreamPort = Number.parseInt(process.env.UPSTREAM_PORT || "7897", 10);
|
|
|
|
if (mode === "host") {
|
|
mkdirSync("/run/provider-proxy", {recursive: true});
|
|
rmSync(socketPath, {force: true});
|
|
}
|
|
|
|
const server = net.createServer((client) => {
|
|
client.pause();
|
|
const upstream = mode === "host"
|
|
? net.connect({host: upstreamHost, port: upstreamPort})
|
|
: net.connect(socketPath);
|
|
upstream.once("connect", () => {
|
|
client.pipe(upstream);
|
|
upstream.pipe(client);
|
|
client.resume();
|
|
});
|
|
const close = () => {
|
|
client.destroy();
|
|
upstream.destroy();
|
|
};
|
|
client.on("error", close);
|
|
upstream.on("error", close);
|
|
});
|
|
|
|
const listenTarget = mode === "host" ? socketPath : {host: "0.0.0.0", port: listenPort};
|
|
server.listen(listenTarget, () => {
|
|
const target = mode === "host" ? socketPath : `0.0.0.0:${listenPort}`;
|
|
const upstream = mode === "host" ? `${upstreamHost}:${upstreamPort}` : socketPath;
|
|
console.log(`provider proxy ${mode} bridge ${target} -> ${upstream}`);
|
|
});
|
|
|
|
function shutdown() {
|
|
server.close(() => {
|
|
if (mode === "host") rmSync(socketPath, {force: true});
|
|
process.exit(0);
|
|
});
|
|
}
|
|
|
|
process.on("SIGTERM", shutdown);
|
|
process.on("SIGINT", shutdown);
|