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 }} */
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<void>} */ (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<void>} */ (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"));