import { NextRequest, NextResponse } from "next/server"; import { isExtAuthorized } from "@/lib/render-pipeline/ext-auth"; import { toErrorResponse } from "@/lib/render-pipeline/errors"; import { createExport } from "@/lib/render-pipeline/exports"; // ── POST /api/ext/exports (E1 — Queue Export) ──────────────────────────────── // // Body: { manifest: RenderManifest, submittedByEmail?, priority?, force? } // The server decides the new version number, updates Shot.shotVersion/exrOutput, // supersedes older non-terminal exports, and creates Export(QUEUED) + RenderJob. export async function POST(req: NextRequest) { if (!isExtAuthorized(req)) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } let body: { manifest?: unknown; submittedByEmail?: string; priority?: number; force?: boolean; vfxScope?: string | null; submissionNote?: string | null; }; try { body = await req.json(); } catch { return NextResponse.json({ error: "Invalid JSON" }, { status: 400 }); } if (!body.manifest) { return NextResponse.json({ error: "manifest is required" }, { status: 400 }); } try { const result = await createExport({ manifest: body.manifest, submittedByEmail: body.submittedByEmail ?? null, priority: typeof body.priority === "number" ? body.priority : undefined, force: body.force === true, // undefined inherits the shot's previous export values vfxScope: body.vfxScope, submissionNote: body.submissionNote, }); return NextResponse.json(result, { status: 201 }); } catch (err) { const { body: errBody, status } = toErrorResponse(err); return NextResponse.json(errBody, { status }); } }