import { json, error } from '@sveltejs/kit'; import { createJob, listJobs } from '$lib/server/db.js'; import { startYouTubeJob, startUploadJob } from '$lib/server/pipeline.js'; import type { AudioMode } from '$lib/types.js'; export async function GET() { return json(listJobs()); } export async function POST({ request }) { const contentType = request.headers.get('content-type') ?? ''; let url: string | null = null; let audioMode: AudioMode = 'auto'; let language: string | undefined; let fileBuffer: Buffer | null = null; let filename = 'upload'; if (contentType.includes('application/json')) { const body = await request.json(); url = body.url ?? null; audioMode = body.audioMode ?? 'auto'; language = body.language; } else if (contentType.includes('multipart/form-data')) { const form = await request.formData(); url = form.get('url')?.toString() ?? null; audioMode = (form.get('audioMode')?.toString() as AudioMode) ?? 'auto'; language = form.get('language')?.toString(); const file = form.get('file'); if (file instanceof File) { fileBuffer = Buffer.from(await file.arrayBuffer()); filename = file.name; } } else { throw error(415, 'Unsupported content type'); } if (!url && !fileBuffer) throw error(400, 'Provide url or file'); const jobId = url ? await startYouTubeJob(url, audioMode, language) : await startUploadJob(fileBuffer!, filename, audioMode, language); return json({ id: jobId }, { status: 201 }); }