import path from "path"; import { runStoryPipeline } from "@/lib/pipeline/pipeline"; export const runtime = "nodejs"; export const dynamic = "force-dynamic"; export const maxDuration = 300; // seconds type RunBody = { storyName: string; force?: boolean; skipUpload?: boolean; concurrency?: number; }; function isRunBody(value: unknown): value is RunBody { if (typeof value !== "object" || value === null) return false; const v = value as Record; return typeof v.storyName === "string"; } export async function POST(request: Request) { const bodyUnknown: unknown = await request.json().catch(() => null); if (!isRunBody(bodyUnknown)) { return Response.json({ ok: false, error: "'storyName' is required" }, { status: 400 }); } const storyName = bodyUnknown.storyName; const force = !!bodyUnknown.force; const skipUpload = !!bodyUnknown.skipUpload; const concurrency = Math.max(1, Math.min(10, Number(bodyUnknown.concurrency) || 3)); // Keep using repo root for stories unless you move them into the Next.js folder const baseDir = path.resolve(process.cwd(), ".."); try { const result = await runStoryPipeline(storyName, { force, skipUpload, concurrency, baseDir }); return Response.json({ ok: true, result }); } catch (error: unknown) { const message = error instanceof Error ? error.message : String(error); return Response.json({ ok: false, error: message }, { status: 500 }); } }