// Scheduled tasks (cron) helpers. // Backend: /api/v1/admin/scheduled-tasks (CRUD + runs/enable/disable/trigger). import type { ArcadiaClient } from "@crema/arcadia-core-client" export type ScheduledTaskAction = "webhook" | "event" export interface ScheduledTask { id: string tenant_id: string | null name: string description: string | null cron_expression: string timezone: string action_type: ScheduledTaskAction /** Backend-encrypted; rendered as null on read but accepted on writes. */ action_config?: Record | null tags: string[] enabled: boolean last_run_at: string | null next_run_at: string | null max_retries: number timeout_seconds: number inserted_at: string updated_at: string } export interface ScheduledTaskInput { name: string description?: string | null cron_expression: string timezone?: string action_type: ScheduledTaskAction action_config: Record tags?: string[] enabled?: boolean max_retries?: number timeout_seconds?: number } export interface TaskRun { id: string task_id: string status: "pending" | "running" | "succeeded" | "failed" | string attempt: number started_at: string | null finished_at: string | null response_status: number | null response_body: string | null error: string | null inserted_at: string } const BASE = "/api/v1/admin/scheduled-tasks" export async function listScheduledTasks(arcadia: ArcadiaClient): Promise { const res = await arcadia.GET<{ data: ScheduledTask[] }>(BASE) return res.data } export async function getScheduledTask( arcadia: ArcadiaClient, id: string, ): Promise { const res = await arcadia.GET<{ data: ScheduledTask }>(`${BASE}/${id}`) return res.data } export async function createScheduledTask( arcadia: ArcadiaClient, input: ScheduledTaskInput, ): Promise { const res = await arcadia.POST<{ data: ScheduledTask }>(BASE, { body: { scheduled_task: input }, }) return res.data } export async function updateScheduledTask( arcadia: ArcadiaClient, id: string, input: Partial, ): Promise { const res = await arcadia.PATCH<{ data: ScheduledTask }>(`${BASE}/${id}`, { body: { scheduled_task: input }, }) return res.data } export async function deleteScheduledTask( arcadia: ArcadiaClient, id: string, ): Promise { await arcadia.DELETE(`${BASE}/${id}`) } export async function enableScheduledTask( arcadia: ArcadiaClient, id: string, ): Promise { const res = await arcadia.POST<{ data: ScheduledTask }>(`${BASE}/${id}/enable`) return res.data } export async function disableScheduledTask( arcadia: ArcadiaClient, id: string, ): Promise { const res = await arcadia.POST<{ data: ScheduledTask }>(`${BASE}/${id}/disable`) return res.data } export async function triggerScheduledTask( arcadia: ArcadiaClient, id: string, ): Promise { const res = await arcadia.POST<{ data: TaskRun }>(`${BASE}/${id}/trigger`) return res.data } export async function listTaskRuns( arcadia: ArcadiaClient, id: string, params?: { limit?: number; offset?: number }, ): Promise { const res = await arcadia.GET<{ data: TaskRun[] }>(`${BASE}/${id}/runs`, { params: params as Record, }) return res.data }