// Test stand-in for the guest agent's shell service: node http on the unix socket argv[2], "listening" on // stdout once up. Every answer is JSON {method, url, headers, body, n (this connection's request count), // conns (connections so far)}. Query flags: ms= answer after n ms; chunked=1 a chunked body; // close=1 connection: close; die= drop the connection unanswered unless marker exists (creates it). import { existsSync, rmSync, writeFileSync } from "node:fs"; import { createServer } from "node:http"; let conns = 0; const server = createServer((req, res) => { const q = new URL(req.url, "http://guest").searchParams; const parts = []; req.on("data", (d) => parts.push(d)); req.on("end", () => { req.socket.n = (req.socket.n ?? 0) + 1; if (q.get("die") && !existsSync(q.get("die"))) return writeFileSync(q.get("die"), ""), req.socket.destroy(); const text = JSON.stringify({ method: req.method, url: req.url, headers: req.headers, body: Buffer.concat(parts).toString(), n: req.socket.n, conns }); setTimeout(() => { if (q.get("close")) res.setHeader("connection", "close"); if (!q.get("chunked")) return res.setHeader("content-type", "application/json"), res.end(text); res.setHeader("content-type", "text/event-stream"); res.write(text.slice(0, 5)); setTimeout(() => res.end(text.slice(5)), 20); }, Number(q.get("ms") ?? 0)); }); }); server.on("connection", () => conns++); rmSync(process.argv[2], { force: true }); server.listen(process.argv[2], () => console.log("listening"));