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 }} */
|
/** @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"));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue