Files
rf4-spotter/apps/web/src/pages/api/v1/media/assets/[digest].ts
T
ik b47a6cc366
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
feat: publish approved RF4 media catalog
2026-09-14 22:20:46 +07:00

22 lines
914 B
TypeScript

import type { APIRoute } from "astro";
const apiBase = process.env.API_INTERNAL_URL || import.meta.env.API_INTERNAL_URL || "http://localhost:8000";
export const GET: APIRoute = async ({ params }) => {
const digest = params.digest ?? "";
if (!/^[a-f0-9]{64}$/.test(digest)) return new Response("Not found", { status: 404 });
try {
const upstream = await fetch(`${apiBase}/api/v1/media/assets/${digest}`);
if (!upstream.ok || !upstream.body) return new Response("Not found", { status: upstream.status === 404 ? 404 : 502 });
const headers = new Headers();
for (const name of ["content-type", "content-length", "cache-control", "etag"]) {
const value = upstream.headers.get(name);
if (value) headers.set(name, value);
}
return new Response(upstream.body, { status: 200, headers });
} catch {
return new Response("Media service unavailable", { status: 502 });
}
};