/** * API client for FastAPI backend */ import type { MediaAsset, TranscodePreset, TranscodeJob, CreateJobRequest, SystemStatus, WorkerStatus, } from "./types"; const API_BASE = "/api"; async function request(path: string, options?: RequestInit): Promise { const response = await fetch(`${API_BASE}${path}`, { headers: { "Content-Type": "application/json", }, ...options, }); if (!response.ok) { const error = await response.text(); throw new Error(`API error: ${response.status} - ${error}`); } return response.json(); } // Assets export async function getAssets(): Promise { return request("/assets/"); } export async function getAsset(id: string): Promise { return request(`/assets/${id}`); } export async function scanMediaFolder(): Promise<{ found: number; registered: number; skipped: number; files: string[]; }> { return request("/assets/scan", { method: "POST", }); } // Presets export async function getPresets(): Promise { return request("/presets/"); } // Jobs export async function getJobs(): Promise { return request("/jobs/"); } export async function getJob(id: string): Promise { return request(`/jobs/${id}`); } export async function createJob(data: CreateJobRequest): Promise { return request("/jobs/", { method: "POST", body: JSON.stringify(data), }); } export async function cancelJob(id: string): Promise { return request(`/jobs/${id}/cancel`, { method: "POST", }); } // System export async function getSystemStatus(): Promise { return request("/system/status"); } export async function getWorkerStatus(): Promise { return request("/system/worker"); }