import { NextResponse } from "next/server"; import { defineQuery } from "next-sanity"; import { sanity } from "@/lib/sanity"; import { getAuthToken } from "@/lib/auth"; export const revalidate = 86400; const BOOKLET_URL_QUERY = defineQuery(` *[_type == "release" && slug.current == $slug][0]{ "bookletPdfUrl": bookletPdf.asset->url } `); export async function GET(_req: Request, { params }: { params: Promise<{ slug: string }> }) { const token = await getAuthToken(); if (!token) { return NextResponse.json({ error: "Authentication required" }, { status: 401 }); } const { slug } = await params; if (!slug) return NextResponse.json({ error: "Not found" }, { status: 404 }); const release = await sanity.fetch<{ bookletPdfUrl?: string }>(BOOKLET_URL_QUERY, { slug: slug.toLowerCase(), }); if (!release?.bookletPdfUrl) { return NextResponse.json({ error: "Not found" }, { status: 404 }); } if (!release.bookletPdfUrl.startsWith("https://cdn.sanity.io/")) { return NextResponse.json({ error: "Invalid PDF source" }, { status: 400 }); } const pdfResponse = await fetch(release.bookletPdfUrl); if (!pdfResponse.ok) { return NextResponse.json({ error: "Failed to fetch PDF" }, { status: 502 }); } const pdfBuffer = await pdfResponse.arrayBuffer(); return new NextResponse(pdfBuffer, { headers: { "Content-Type": "application/pdf", "Content-Disposition": "inline", "X-Robots-Tag": "noindex, nofollow", "Cache-Control": "public, max-age=86400, s-maxage=86400", }, }); }