87 lines
1.8 KiB
TypeScript
87 lines
1.8 KiB
TypeScript
/**
|
|
* API client for FastAPI backend
|
|
*/
|
|
|
|
import type {
|
|
MediaAsset,
|
|
TranscodePreset,
|
|
TranscodeJob,
|
|
CreateJobRequest,
|
|
SystemStatus,
|
|
WorkerStatus,
|
|
} from "./types";
|
|
|
|
const API_BASE = "/api";
|
|
|
|
async function request<T>(path: string, options?: RequestInit): Promise<T> {
|
|
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<MediaAsset[]> {
|
|
return request("/assets/");
|
|
}
|
|
|
|
export async function getAsset(id: string): Promise<MediaAsset> {
|
|
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<TranscodePreset[]> {
|
|
return request("/presets/");
|
|
}
|
|
|
|
// Jobs
|
|
export async function getJobs(): Promise<TranscodeJob[]> {
|
|
return request("/jobs/");
|
|
}
|
|
|
|
export async function getJob(id: string): Promise<TranscodeJob> {
|
|
return request(`/jobs/${id}`);
|
|
}
|
|
|
|
export async function createJob(data: CreateJobRequest): Promise<TranscodeJob> {
|
|
return request("/jobs/", {
|
|
method: "POST",
|
|
body: JSON.stringify(data),
|
|
});
|
|
}
|
|
|
|
export async function cancelJob(id: string): Promise<TranscodeJob> {
|
|
return request(`/jobs/${id}/cancel`, {
|
|
method: "POST",
|
|
});
|
|
}
|
|
|
|
// System
|
|
export async function getSystemStatus(): Promise<SystemStatus> {
|
|
return request("/system/status");
|
|
}
|
|
|
|
export async function getWorkerStatus(): Promise<WorkerStatus> {
|
|
return request("/system/worker");
|
|
}
|