import { handleBadge } from "./badge";
import { handleCacheApi } from "./cache-api";
import { jobTokenAccess } from "./job-token";
import { handleOidcRoutes } from "./oidc";
import { serveActionArchive } from "./actions/serve";
import { serveActionImage } from "./actions/serve-image";
/** Worker-level Actions endpoints: job cache, action archives and images, OIDC token issuance and discovery, and status badges. */
export async function handleActionsRoutes(request: Request, url: URL): Promise<Response | null> {
if (url.pathname === "/api/actions/cache") {
const access = await jobTokenAccess(request);
if (!access) return Response.json({ error: "invalid job token" }, { status: 401 });
return handleCacheApi(request, url, access);
}
if (url.pathname === "/api/actions/archive") {
const access = await jobTokenAccess(request);
if (!access) return Response.json({ error: "invalid job token" }, { status: 401 });
return serveActionArchive(access.jobId, url.searchParams.get("key") ?? "");
}
if (url.pathname === "/api/actions/image") {
const access = await jobTokenAccess(request);
if (!access) return Response.json({ error: "invalid job token" }, { status: 401 });
return serveActionImage(access.jobId, url.searchParams.get("digest") ?? "");
}
const oidc = await handleOidcRoutes(request, url);
if (oidc) return oidc;
return handleBadge(request, url);
}