import { NextRequest, NextResponse } from "next/server"; import { PremiumRequiredError, premiumRequiredResponse } from "@/lib/entitlements"; import { saveUploadedFile, type UploadFileType } from "@/lib/jobs/create-job"; import { getSessionUser } from "@/lib/session"; export const maxDuration = 120; export async function POST(req: NextRequest) { const user = await getSessionUser(); if (!user) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const formData = await req.formData(); const file = formData.get("file") as File | null; const type = formData.get("type") as string | null; const sessionKey = (formData.get("session") as string | null)?.trim() || undefined; if ( !file || !type || (type !== "image" && type !== "audio" && type !== "logo" && type !== "font") ) { return NextResponse.json( { error: "Missing file or type (image | audio | logo | font)" }, { status: 400 }, ); } try { const result = await saveUploadedFile(user.id, file, type as UploadFileType, user.plan, { sessionKey, }); return NextResponse.json(result); } catch (err) { if (err instanceof PremiumRequiredError) { return NextResponse.json(premiumRequiredResponse(err.message), { status: 403 }); } const message = err instanceof Error ? err.message : "Upload failed"; return NextResponse.json({ error: message }, { status: 400 }); } }