function getAuthHeader(): string { const token = localStorage.getItem("token"); return token ? `Bearer ${token}` : ""; } async function apiGet(url: string): Promise { return fetch(`/api${url}`, { headers: { Authorization: getAuthHeader(), "Content-Type": "application/json", }, }); } async function apiPost(url: string, data?: unknown): Promise { return fetch(`/api${url}`, { method: "POST", headers: { Authorization: getAuthHeader(), "Content-Type": "application/json", }, body: data ? JSON.stringify(data) : undefined, }); } async function apiPut(url: string, data?: unknown): Promise { return fetch(`/api${url}`, { method: "PUT", headers: { Authorization: getAuthHeader(), "Content-Type": "application/json", }, body: data ? JSON.stringify(data) : undefined, }); } async function apiDelete( url: string, data?: T, ): Promise { return fetch(`/api${url}`, { method: "DELETE", headers: { Authorization: getAuthHeader(), "Content-Type": "application/json", }, body: data ? JSON.stringify(data) : undefined, }); } async function apiPatch(url: string, data?: unknown): Promise { return fetch(`/api${url}`, { method: "PATCH", headers: { Authorization: getAuthHeader(), "Content-Type": "application/json", }, body: data ? JSON.stringify(data) : undefined, }); } async function handleResponse(response: Response): Promise { if (!response.ok) { const errorData = await response .json() .catch(() => ({ error: "Unknown error" })); throw new Error(errorData.error || `HTTP ${response.status}`); } return response.json(); } async function handleVoidResponse(response: Response): Promise { if (!response.ok) { const errorData = await response .json() .catch(() => ({ error: "Unknown error" })); throw new Error(errorData.error || `HTTP ${response.status}`); } } function handleError(error: unknown, context: string): void { console.error(`${context}:`, error); const message = error instanceof Error ? error.message : "An unexpected error occurred"; if ((window as any).showToast?.error) { (window as any).showToast.error(message); } } (window as any).api = { get: apiGet, post: apiPost, put: apiPut, delete: apiDelete, patch: apiPatch, handleResponse, handleVoidResponse, handleError, };