import { artifactFormBody, BETA_REVISION_FORM_LIMIT } from '$lib/server/request-body.js'; import { isHttpError, json } from '@sveltejs/kit'; import { BetaError, reviseBeta, type BetaRevisionUpload } from '$lib/server/fleet/beta.js'; import { ScriptError } from '$lib/server/fleet/scripts.js'; import { kick } from '$lib/server/pipeline/worker.js'; export async function POST({ params, request }: { params: { id: string }; request: Request }) { const id = Number(params.id); if (!Number.isSafeInteger(id) || id < 1) return json({ ok: false, error: 'Invalid beta ID' }, { status: 400 }); try { const form = await artifactFormBody(request, BETA_REVISION_FORM_LIMIT); const expectedRevision = Number(form.get('expectedRevision')); if (!Number.isSafeInteger(expectedRevision) || expectedRevision < 1) throw new Error('A reviewed revision is required.'); const uploads: BetaRevisionUpload[] = []; for (const [key, value] of form) { if (!key.startsWith('file:')) continue; const scriptId = Number(key.slice(5)); if (!Number.isSafeInteger(scriptId) || scriptId < 1 || !(value instanceof File)) throw new Error('Invalid replacement file.'); uploads.push({ scriptId, content: Buffer.from(await value.arrayBuffer()), releaseVersion: form.has(`release:${scriptId}`) ? String(form.get(`release:${scriptId}`)) : undefined }); } const result = await reviseBeta( id, expectedRevision, uploads, String(form.get('notes') ?? '') ); void kick(); return json({ ok: true, result }); } catch (error) { if (isHttpError(error)) throw error; return json( { ok: false, error: (error as Error).message }, { status: error instanceof BetaError || error instanceof ScriptError ? 409 : 400 } ); } }