mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
Cleanup reportingServer code
This commit is contained in:
parent
8c38c0e35c
commit
48221196be
1 changed files with 38 additions and 33 deletions
|
|
@ -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"));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue