Cleanup reportingServer code

This commit is contained in:
Sander Declerck 2026-03-03 14:30:18 +01:00
parent 8c38c0e35c
commit 48221196be
No known key found for this signature in database

View file

@ -31,35 +31,40 @@ export function getReportingServer() {
/** @type {{server: http.Server | null, address: string }} */ /** @type {{server: http.Server | null, address: string }} */
let state = {server: null, address: ""}; let state = {server: null, address: ""};
return Object.assign(emitter, { /** @param {http.IncomingMessage} req @param {http.ServerResponse} res */
start: async () => { function handleRequest(req, res) {
state = await startServer(async (req, res) => { if (req.method === "POST" && req.url?.startsWith("/events/block")) {
if (req.method == "POST" && req.url?.startsWith("/events/block")) { parseBlockEventFromRequest(req).then((blockEvent) => {
const blockEvent = await parseBlockEventFromRequest(req);
emitter.emit("blockReceived", blockEvent); emitter.emit("blockReceived", blockEvent);
});
} }
res.writeHead(200); res.writeHead(200);
res.end(); res.end();
}); }
},
stop: () => { async function start() {
state = await startServer(handleRequest);
}
function stop() {
return /** @type {Promise<void>} */ (new Promise((resolve) => { return /** @type {Promise<void>} */ (new Promise((resolve) => {
try {
if (!state.server) { if (!state.server) {
resolve(); resolve();
return; return;
} }
const timeout = setTimeout(resolve, SERVER_STOP_TIMEOUT_MS);
state.server.close(() => { state.server.close(() => {
clearTimeout(timeout);
resolve(); resolve();
}); });
} catch {
resolve();
}
setTimeout(() => resolve(), SERVER_STOP_TIMEOUT_MS);
})); }));
}, }
getAddress: () => state.address,
}); function getAddress() {
return state.address;
}
return Object.assign(emitter, { start, stop, getAddress });
} }
/** /**
@ -80,16 +85,16 @@ function parseBlockEventFromRequest(req) {
* @param {http.RequestListener} requestListener * @param {http.RequestListener} requestListener
* @returns {Promise<{server: http.Server, address: string}>} * @returns {Promise<{server: http.Server, address: string}>}
*/ */
async function startServer(requestListener) { function startServer(requestListener) {
let server = http.createServer(requestListener); const server = http.createServer(requestListener);
return await new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
server.listen(0, '127.0.0.1', () => { server.listen(0, "127.0.0.1", () => {
const address = server.address(); const address = server.address();
if (address && typeof address === "object") { if (address && typeof address === "object") {
resolve({ resolve({
address: `http://${address.address}:${address.port}`, address: `http://${address.address}:${address.port}`,
server: server, server,
}); });
} else { } else {
reject(new Error("Failed to start proxy server")); reject(new Error("Failed to start proxy server"));