import type { AppConfig, ContentResponse, ContractMap, DemoResult } from "./types"; async function fetchJson(path: string, init?: RequestInit): Promise { const response = await fetch(path, init); if (!response.ok) { throw new Error(`Request failed for ${path}`); } return (await response.json()) as T; } export async function getConfig(): Promise { return fetchJson("/api/config"); } export async function getContent(): Promise { return fetchJson("/api/content"); } export async function getContracts(): Promise { const [voiceRegistry, routeMatrix, seedLibrary, providerConfig] = await Promise.all([ fetchJson("/api/contracts/voice_registry"), fetchJson("/api/contracts/route_model_matrix"), fetchJson("/api/contracts/seed_voice_library"), fetchJson("/api/contracts/provider_config"), ]); return { voice_registry: voiceRegistry, route_model_matrix: routeMatrix, seed_voice_library: seedLibrary, provider_config: providerConfig, }; } export async function runDemo(workflowId: string): Promise { return fetchJson("/api/demo/simulate", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ workflow_id: workflowId }), }); }