// API client for channels navigation and channel-specific config flows. export type ChannelConfig = Record export type AppConfig = Record export interface SupportedChannel { name: string display_name?: string config_key: string variant?: string } interface ChannelsCatalogResponse { channels: SupportedChannel[] } interface ConfigActionResponse { status: string errors?: string[] } const BASE_URL = "" async function request(path: string, options?: RequestInit): Promise { const res = await fetch(`${BASE_URL}${path}`, options) if (!res.ok) { let message = `API error: ${res.status} ${res.statusText}` try { const body = (await res.json()) as { error?: string errors?: string[] status?: string } if (Array.isArray(body.errors) && body.errors.length > 0) { message = body.errors.join("; ") } else if (typeof body.error === "string" && body.error.trim() !== "") { message = body.error } } catch { // Keep default fallback message if response body is not JSON. } throw new Error(message) } return res.json() as Promise } export async function getChannelsCatalog(): Promise { return request("/api/channels/catalog") } export async function getAppConfig(): Promise { return request("/api/config") } export async function patchAppConfig( patch: Record, ): Promise { return request("/api/config", { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify(patch), }) } export type { ChannelsCatalogResponse, ConfigActionResponse }