Update checked-in dependencies

This commit is contained in:
github-actions[bot] 2025-04-21 18:01:41 +00:00
parent c9f0d30a86
commit 95d52b7807
647 changed files with 498055 additions and 3880 deletions

View file

@ -0,0 +1,11 @@
const WEBHOOK_HEADERS = [
"x-github-event",
"x-hub-signature-256",
"x-github-delivery"
];
function getMissingHeaders(request) {
return WEBHOOK_HEADERS.filter((header) => !request.headers.has(header));
}
export {
getMissingHeaders
};

View file

@ -0,0 +1,6 @@
function getPayload(request) {
return request.text();
}
export {
getPayload
};

View file

@ -0,0 +1,14 @@
import { createLogger } from "../../createLogger.js";
import { middleware } from "./middleware.js";
function createWebMiddleware(webhooks, {
path = "/api/github/webhooks",
log = createLogger()
} = {}) {
return middleware.bind(null, webhooks, {
path,
log
});
}
export {
createWebMiddleware
};

View file

@ -0,0 +1,103 @@
import { getMissingHeaders } from "./get-missing-headers.js";
import { getPayload } from "./get-payload.js";
import { onUnhandledRequestDefault } from "./on-unhandled-request-default.js";
async function middleware(webhooks, options, request) {
let pathname;
try {
pathname = new URL(request.url, "http://localhost").pathname;
} catch (error) {
return new Response(
JSON.stringify({
error: `Request URL could not be parsed: ${request.url}`
}),
{
status: 422,
headers: {
"content-type": "application/json"
}
}
);
}
if (pathname !== options.path || request.method !== "POST") {
return onUnhandledRequestDefault(request);
}
if (typeof request.headers.get("content-type") !== "string" || !request.headers.get("content-type").startsWith("application/json")) {
return new Response(
JSON.stringify({
error: `Unsupported "Content-Type" header value. Must be "application/json"`
}),
{
status: 415,
headers: {
"content-type": "application/json"
}
}
);
}
const missingHeaders = getMissingHeaders(request).join(", ");
if (missingHeaders) {
return new Response(
JSON.stringify({
error: `Required headers missing: ${missingHeaders}`
}),
{
status: 422,
headers: {
"content-type": "application/json"
}
}
);
}
const eventName = request.headers.get("x-github-event");
const signatureSHA256 = request.headers.get("x-hub-signature-256");
const id = request.headers.get("x-github-delivery");
options.log.debug(`${eventName} event received (id: ${id})`);
let didTimeout = false;
let timeout;
const timeoutPromise = new Promise((resolve) => {
timeout = setTimeout(() => {
didTimeout = true;
resolve(
new Response("still processing\n", {
status: 202,
headers: { "Content-Type": "text/plain" }
})
);
}, 9e3).unref();
});
const processWebhook = async () => {
try {
const payload = await getPayload(request);
await webhooks.verifyAndReceive({
id,
name: eventName,
payload,
signature: signatureSHA256
});
clearTimeout(timeout);
if (didTimeout) return new Response(null);
return new Response("ok\n");
} catch (error) {
clearTimeout(timeout);
if (didTimeout) return new Response(null);
const err = Array.from(error.errors)[0];
const errorMessage = err.message ? `${err.name}: ${err.message}` : "Error: An Unspecified error occurred";
options.log.error(error);
return new Response(
JSON.stringify({
error: errorMessage
}),
{
status: typeof err.status !== "undefined" ? err.status : 500,
headers: {
"content-type": "application/json"
}
}
);
}
};
return await Promise.race([timeoutPromise, processWebhook()]);
}
export {
middleware
};

View file

@ -0,0 +1,16 @@
function onUnhandledRequestDefault(request) {
return new Response(
JSON.stringify({
error: `Unknown route: ${request.method} ${request.url}`
}),
{
status: 404,
headers: {
"content-type": "application/json"
}
}
);
}
export {
onUnhandledRequestDefault
};