Consume the safe chain proxy min package age reporting webhook

This commit is contained in:
Sander Declerck 2026-03-10 11:46:27 +01:00
parent 127447d425
commit ceefaabe57
No known key found for this signature in database
6 changed files with 115 additions and 43 deletions

View file

@ -10,7 +10,13 @@ const SERVER_STOP_TIMEOUT_MS = 1000;
*/
/**
* @typedef {{ blockReceived: [BlockEvent] }} ReportingServerEvents
* @typedef {Object} MinPackageAgeEvent
* @property {number} ts_ms
* @property {{ product: string, identifier: string, suppressed_versions: string[] }} artifact
*/
/**
* @typedef {{ blockReceived: [BlockEvent], minPackageAgeSuppressionReceived: [MinPackageAgeEvent] }} ReportingServerEvents
*/
/**
@ -38,6 +44,11 @@ export function getReportingServer() {
emitter.emit("blockReceived", blockEvent);
});
}
else if (req.method === "POST" && req.url?.startsWith("/events/min-package-age")) {
await parseMinPackageAgeEventFromRequest(req).then((minPackageAgeEvent) => {
emitter.emit("minPackageAgeSuppressionReceived", minPackageAgeEvent);
});
}
res.writeHead(200);
res.end();
}
@ -75,12 +86,30 @@ export function getReportingServer() {
* @param {http.IncomingMessage} req
* @returns {Promise<BlockEvent>}
*/
function parseBlockEventFromRequest(req) {
async function parseBlockEventFromRequest(req) {
const requestData = await getRequestDataAsString(req);
return JSON.parse(requestData);
}
/**
* @param {http.IncomingMessage} req
* @returns {Promise<MinPackageAgeEvent>}
*/
async function parseMinPackageAgeEventFromRequest(req) {
const requestData = await getRequestDataAsString(req);
return JSON.parse(requestData);
}
/**
* @param {http.IncomingMessage} req
* @returns {Promise<string>}
*/
function getRequestDataAsString(req) {
return new Promise((resolve, reject) => {
/** @type {Buffer[]} */
const chunks = [];
req.on("data", (chunk) => chunks.push(chunk));
req.on("end", () => resolve(JSON.parse(Buffer.concat(chunks).toString())));
req.on("end", () => resolve(Buffer.concat(chunks).toString()));
req.on("error", reject);
});
}