import { claimRun } from '@/lib/db'; import { findAutomation, resolveSteps, resolveGuards, resolveAuthSteps } from '@/lib/automations'; import { corsJson, corsPreflight } from '../../cors'; /** The Python runner polls this. Returns the run plus the steps to execute, so * the runner never needs its own copy of the automation definitions. */ export async function POST() { const row = claimRun(); if (!row) return corsJson({ run: null }); const found = findAutomation(row.automation_id); if (!found) { return corsJson({ run: null, reason: `Unknown automation ${row.automation_id}` }); } return corsJson({ run: { id: row.id, automationId: row.automation_id, firm: found.firm.label, label: found.automation.label, steps: resolveSteps(found.firm, found.automation, safeInputs(row.inputs)), guards: resolveGuards(found.firm), // Pre-0.20 runners know nothing of guards; keep feeding them the // old shape until they are restarted. authSteps: resolveAuthSteps(found.firm), }, }); } /** Stored inputs are already clamped; this only guards against a malformed row. */ function safeInputs(json: string): Record { try { const parsed = JSON.parse(json); return parsed && typeof parsed === 'object' ? parsed : {}; } catch { return {}; } } export async function OPTIONS() { return corsPreflight(); }