40 lines
1.3 KiB
JavaScript
40 lines
1.3 KiB
JavaScript
// Einfacher TCP-Relay fuer CI unter Docker-in-Docker (Issue #38, D2).
|
|
//
|
|
// Die Supabase-Ports (Kong 54321, Postgres 54322, Mailpit 54324, Extra-GoTrue 9998) liegen im dind,
|
|
// nicht im Job-Container. Die Tests und die Web-App erwarten 127.0.0.1. Dieses Skript leitet
|
|
// 127.0.0.1:<port> an <host>:<port> weiter (HTTP und Postgres, rein TCP).
|
|
//
|
|
// Aufruf: node tcp-forward.mjs <ziel-host> <port> [<port> ...]
|
|
import net from 'node:net';
|
|
|
|
const [host, ...ports] = process.argv.slice(2);
|
|
if (!host || ports.length === 0) {
|
|
console.error('Aufruf: node tcp-forward.mjs <ziel-host> <port> [<port> ...]');
|
|
process.exit(2);
|
|
}
|
|
|
|
for (const p of ports) {
|
|
const port = Number(p);
|
|
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
console.error(`Ungueltiger Port: ${p}`);
|
|
process.exit(2);
|
|
}
|
|
net
|
|
.createServer((client) => {
|
|
const upstream = net.connect(port, host);
|
|
client.pipe(upstream).pipe(client);
|
|
const close = () => {
|
|
client.destroy();
|
|
upstream.destroy();
|
|
};
|
|
client.on('error', close);
|
|
upstream.on('error', close);
|
|
client.on('close', close);
|
|
upstream.on('close', close);
|
|
})
|
|
.on('error', (err) => {
|
|
console.error(`Relay ${port}: ${err.message}`);
|
|
process.exit(1);
|
|
})
|
|
.listen(port, '127.0.0.1', () => console.log(`127.0.0.1:${port} -> ${host}:${port}`));
|
|
}
|