import net from "node:net"; const [host, portStr, timeoutStr] = process.argv.slice(2); const port = Number.parseInt(portStr ?? "", 10); const timeoutMs = Number.parseInt(timeoutStr ?? "30000", 10); if (!host || Number.isNaN(port)) { console.error("Usage: node wait-for-port.mjs [timeoutMs]"); process.exit(1); } const start = Date.now(); function tryConnect() { const socket = new net.Socket(); socket.setTimeout(1000); socket.once("connect", () => { socket.destroy(); process.exit(0); }); socket.once("error", () => { socket.destroy(); if (Date.now() - start > timeoutMs) { console.error(`Timed out waiting for ${host}:${port}`); process.exit(1); } setTimeout(tryConnect, 500); }); socket.once("timeout", () => { socket.destroy(); if (Date.now() - start > timeoutMs) { console.error(`Timed out waiting for ${host}:${port}`); process.exit(1); } setTimeout(tryConnect, 500); }); socket.connect(port, host); } tryConnect();