From 48221196be5c2854cbaf4d330bdf4c3ac89a7b5b Mon Sep 17 00:00:00 2001 From: Sander Declerck Date: Tue, 3 Mar 2026 14:30:18 +0100 Subject: [PATCH] Cleanup reportingServer code --- .../ramaProxy/reportingServer.js | 71 ++++++++++--------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/packages/safe-chain/src/registryProxy/ramaProxy/reportingServer.js b/packages/safe-chain/src/registryProxy/ramaProxy/reportingServer.js index 1c26059..dced653 100644 --- a/packages/safe-chain/src/registryProxy/ramaProxy/reportingServer.js +++ b/packages/safe-chain/src/registryProxy/ramaProxy/reportingServer.js @@ -31,35 +31,40 @@ export function getReportingServer() { /** @type {{server: http.Server | null, address: string }} */ let state = {server: null, address: ""}; - return Object.assign(emitter, { - start: async () => { - state = await startServer(async (req, res) => { - if (req.method == "POST" && req.url?.startsWith("/events/block")) { - const blockEvent = await parseBlockEventFromRequest(req); - emitter.emit("blockReceived", blockEvent); - } - res.writeHead(200); - res.end(); + /** @param {http.IncomingMessage} req @param {http.ServerResponse} res */ + function handleRequest(req, res) { + if (req.method === "POST" && req.url?.startsWith("/events/block")) { + parseBlockEventFromRequest(req).then((blockEvent) => { + emitter.emit("blockReceived", blockEvent); }); - }, - stop: () => { - return /** @type {Promise} */ (new Promise((resolve) => { - try { - if (!state.server) { - resolve(); - return; - } - state.server.close(() => { - resolve(); - }); - } catch { - resolve(); - } - setTimeout(() => resolve(), SERVER_STOP_TIMEOUT_MS); - })); - }, - getAddress: () => state.address, - }); + } + res.writeHead(200); + res.end(); + } + + async function start() { + state = await startServer(handleRequest); + } + + function stop() { + return /** @type {Promise} */ (new Promise((resolve) => { + if (!state.server) { + resolve(); + return; + } + const timeout = setTimeout(resolve, SERVER_STOP_TIMEOUT_MS); + state.server.close(() => { + clearTimeout(timeout); + resolve(); + }); + })); + } + + function getAddress() { + return state.address; + } + + return Object.assign(emitter, { start, stop, getAddress }); } /** @@ -80,16 +85,16 @@ function parseBlockEventFromRequest(req) { * @param {http.RequestListener} requestListener * @returns {Promise<{server: http.Server, address: string}>} */ -async function startServer(requestListener) { - let server = http.createServer(requestListener); +function startServer(requestListener) { + const server = http.createServer(requestListener); - return await new Promise((resolve, reject) => { - server.listen(0, '127.0.0.1', () => { + return new Promise((resolve, reject) => { + server.listen(0, "127.0.0.1", () => { const address = server.address(); if (address && typeof address === "object") { resolve({ address: `http://${address.address}:${address.port}`, - server: server, + server, }); } else { reject(new Error("Failed to start proxy server"));