Files
overlord/Overlord-Server/src/server/http-dispatch.ts
T

22 lines
807 B
TypeScript
Raw Normal View History

2026-05-06 18:24:33 -05:00
export type RouteHandler = (req: Request, url: URL, server: unknown) => Promise<Response | null>;
2026-03-05 00:04:26 -06:00
2026-05-06 18:24:33 -05:00
export function createHttpFetchHandler(deps: {
2026-03-05 00:04:26 -06:00
metrics: { withHttpMetrics: (fn: () => Promise<Response>) => Promise<Response> };
CORS_HEADERS: Record<string, string>;
2026-05-06 18:24:33 -05:00
routes: RouteHandler[];
}) {
2026-03-05 00:04:26 -06:00
return async function fetchHandler(req: Request, server: unknown): Promise<Response> {
return deps.metrics.withHttpMetrics(async () => {
if (req.method === "OPTIONS") {
return new Response("", { headers: deps.CORS_HEADERS });
}
2026-05-06 18:24:33 -05:00
const url = new URL(req.url);
for (const route of deps.routes) {
const response = await route(req, url, server);
if (response) return response;
}
2026-03-05 00:04:26 -06:00
return new Response("Not found", { status: 404 });
});
};
}