import { listGenerationJobsFiltered } from "@/lib/server/data-store"; import { jsonOk, readJsonBody } from "@/lib/server/api"; import { authenticatePublicApiRequest } from "@/lib/server/public-api-auth"; import { createPublicGenerationJob, type PublicJobCreateBody } from "@/lib/server/public-api-jobs"; import { publicApiError } from "@/lib/server/public-api-response"; import { DEFAULT_OWNER_ID, requestOrigin } from "@/lib/server/runtime"; import type { GenerationCapability, GenerationStatus } from "@/lib/types"; export const runtime = "nodejs"; export async function GET(request: Request) { try { const client = authenticatePublicApiRequest(request); const url = new URL(request.url); const jobs = await listGenerationJobsFiltered({ ownerId: DEFAULT_OWNER_ID, externalClientId: client.id, status: parseStatus(url.searchParams.get("status")), capability: parseCapability(url.searchParams.get("capability")), limit: parseLimit(url.searchParams.get("limit")), before: url.searchParams.get("before") || undefined }); return jsonOk({ jobs }); } catch (error) { return publicApiError(error); } } export async function POST(request: Request) { try { const client = authenticatePublicApiRequest(request); const body = await readJsonBody(request); const result = await createPublicGenerationJob({ client, body, request, origin: requestOrigin(request) }); return jsonOk({ job: result.job, reused: result.reused }, { status: result.reused ? 200 : 202 }); } catch (error) { return publicApiError(error); } } function parseStatus(value: string | null): GenerationStatus | undefined { if (!value) return undefined; if (["queued", "running", "succeeded", "failed", "expired", "cancelled"].includes(value)) { return value as GenerationStatus; } throw new Error(`Unsupported status filter: ${value}`); } function parseCapability(value: string | null): GenerationCapability | undefined { if (!value) return undefined; if (["image.generate", "image.inpaint", "image.upscale", "video.generate"].includes(value)) { return value as GenerationCapability; } throw new Error(`Unsupported capability filter: ${value}`); } function parseLimit(value: string | null): number { const parsed = Number(value || 50); if (!Number.isFinite(parsed)) return 50; return Math.max(1, Math.min(200, Math.trunc(parsed))); }