import type { DagSummary, DagDetail, DagRun, RunDetail, SchedulerStatus, } from "./types"; const BASE = "/api"; async function fetchJSON(path: string, init?: RequestInit): Promise { const res = await fetch(`${BASE}${path}`, init); if (!res.ok) { const err = await res.json().catch(() => ({ error: res.statusText })); throw new Error(err.error || res.statusText); } return res.json(); } export function listDags(): Promise { return fetchJSON("/dags"); } export function getDag(name: string): Promise { return fetchJSON(`/dags/${encodeURIComponent(name)}`); } export function triggerDag( name: string ): Promise<{ status: string; dag: string; message: string }> { return fetchJSON(`/dags/${encodeURIComponent(name)}/run`, { method: "POST", }); } export function listRuns(params?: { dag?: string; limit?: number; offset?: number; }): Promise<{ runs: DagRun[]; total: number }> { const search = new URLSearchParams(); if (params?.dag) search.set("dag", params.dag); if (params?.limit) search.set("limit", String(params.limit)); if (params?.offset) search.set("offset", String(params.offset)); const qs = search.toString(); return fetchJSON(`/runs${qs ? "?" + qs : ""}`); } export function getRun(id: string): Promise { return fetchJSON(`/runs/${encodeURIComponent(id)}`); } export function startScheduler(): Promise { return fetchJSON("/scheduler/start", { method: "POST" }); } export function stopScheduler(): Promise { return fetchJSON("/scheduler/stop", { method: "POST" }); } export function getSchedulerStatus(): Promise { return fetchJSON("/scheduler/status"); }