29 lines · 1.4 KB
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);
}