// frontend/src/api.ts import 'tus-js-client' import type { UrlStorage } from 'tus-js-client' declare module 'tus-js-client' { interface UploadOptions { /** Send cookies on CORS requests */ withCredentials?: boolean /** Disable reading/writing resume URLs (older defs may miss this) */ resume?: boolean /** Do not store fingerprints for resuming */ storeFingerprintForResuming?: boolean /** Remove any stored fingerprint after a successful upload */ removeFingerprintOnSuccess?: boolean /** Allow providing a no-op storage to fully disable resuming */ urlStorage?: UrlStorage } } export async function api(path: string, init?: RequestInit): Promise { const r = await fetch(path, { credentials:'include', ...init }); if (!r.ok) throw new Error(await r.text()); const ct = r.headers.get('content-type') || ''; if (ct.includes('json')) return r.json() as Promise; // Fallback: try to parse body as JSON; otherwise return text const txt = await r.text(); try { return JSON.parse(txt) as T } catch { return txt as any as T } } export type WhoAmI = { username: string; root: string };