import { NextRequest, NextResponse } from "next/server"; import { requireAuth } from "../auth-check"; const STIRLING_PDF_URL = process.env.STIRLING_PDF_URL; const STIRLING_PDF_API_KEY = process.env.STIRLING_PDF_API_KEY; export async function POST(req: NextRequest) { const authErr = await requireAuth(req); if (authErr) return authErr; if (!STIRLING_PDF_URL || !STIRLING_PDF_API_KEY) { return NextResponse.json( { error: "Stirling PDF nu este configurat" }, { status: 503 }, ); } try { // Stream body directly to Stirling — avoids FormData re-serialization // failure on large files ("Failed to parse body as FormData") const res = await fetch( `${STIRLING_PDF_URL}/api/v1/security/remove-password`, { method: "POST", headers: { "X-API-KEY": STIRLING_PDF_API_KEY, "Content-Type": req.headers.get("content-type") || "", }, body: req.body, // @ts-expect-error duplex required for streaming request bodies in Node duplex: "half", }, ); if (!res.ok) { const text = await res.text().catch(() => res.statusText); return NextResponse.json( { error: `Stirling PDF error: ${res.status} — ${text}` }, { status: res.status }, ); } const blob = await res.blob(); const buffer = Buffer.from(await blob.arrayBuffer()); return new NextResponse(buffer, { status: 200, headers: { "Content-Type": "application/pdf", "Content-Disposition": 'attachment; filename="unlocked.pdf"', }, }); } catch (err) { const message = err instanceof Error ? err.message : "Unknown error"; return NextResponse.json( { error: `Nu s-a putut contacta Stirling PDF: ${message}` }, { status: 502 }, ); } }