import { NextResponse } from 'next/server'; import { buildCharacterSpec, cleanupCharacterAnchor } from '@/lib/packGenerator'; import { detectProvider } from '@/lib/providers'; import { loadSession, saveSession } from '@/lib/storage'; import type { LockCharacterRequest, LockCharacterResponse } from '@/lib/types'; export const runtime = 'nodejs'; export const dynamic = 'force-dynamic'; export async function POST(req: Request) { const { sessionId, imageId, force = false } = (await req.json()) as LockCharacterRequest; if (!sessionId || !imageId) { return NextResponse.json({ error: 'sessionId and imageId required' }, { status: 400 }); } const session = await loadSession(sessionId); if (!session) return NextResponse.json({ error: 'session not found' }, { status: 404 }); const sourceImage = session.images.find(image => image.id === imageId); if (!sourceImage) return NextResponse.json({ error: 'image not found' }, { status: 404 }); if (!force && session.characterSpec?.sourceImageId === imageId) { const response: LockCharacterResponse = { characterSpec: session.characterSpec, provider: detectProvider(), }; return NextResponse.json(response); } try { const characterSpec = await buildCharacterSpec(session, sourceImage); const cleaned = await cleanupCharacterAnchor({ session, sourceImage, characterSpec, force, }); session.characterSpec = cleaned.characterSpec; await saveSession(session); const response: LockCharacterResponse = { characterSpec: cleaned.characterSpec, provider: detectProvider(), }; return NextResponse.json(response); } catch (error) { return NextResponse.json({ error: String(error) }, { status: 500 }); } }