2025-09-16 00:05:16 -05:00
|
|
|
// frontend/src/api.ts
|
2025-09-16 04:32:16 -05:00
|
|
|
import 'tus-js-client'
|
|
|
|
|
|
|
|
|
|
declare module 'tus-js-client' {
|
|
|
|
|
interface UploadOptions {
|
|
|
|
|
withCredentials?: boolean
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-08 00:48:47 -05:00
|
|
|
export async function api<T=any>(path: string, init?: RequestInit): Promise<T> {
|
|
|
|
|
const r = await fetch(path, { credentials:'include', ...init });
|
|
|
|
|
if (!r.ok) throw new Error(await r.text());
|
|
|
|
|
const ct = r.headers.get('content-type') || '';
|
2025-09-16 04:32:16 -05:00
|
|
|
if (ct.includes('json')) return r.json() as Promise<T>;
|
|
|
|
|
const txt = await r.text();
|
|
|
|
|
try { return JSON.parse(txt) as T } catch { return txt as any as T }
|
2025-09-08 00:48:47 -05:00
|
|
|
}
|
2025-09-16 04:32:16 -05:00
|
|
|
|
2025-09-16 23:06:40 -05:00
|
|
|
export type WhoAmI = {
|
|
|
|
|
username: string;
|
|
|
|
|
root?: string;
|
|
|
|
|
roots?: string[];
|
|
|
|
|
libs?: string[];
|
|
|
|
|
};
|