// @ts-expect-error The window.__CONFIG__ only exists in production const baseUrl = window.__CONFIG__?.API_URL || import.meta.env.VITE_API_URL || 'http://localhost:8080/api'; export async function getRequest(endpoint: string, params: Record = {}): Promise { Object.keys(params).forEach((key) => params[key] === undefined && delete params[key]); const urlParams = new URLSearchParams(params); const url = urlParams && urlParams.size > 0 ? `${baseUrl}/${endpoint}?${urlParams}` : `${baseUrl}/${endpoint}`; return await fetch(url, { method: 'GET', credentials: 'include' }); } interface PostOptions { headers?: Record; type?: 'json' | 'form'; } export async function postRequest(endpoint: string, body?: any, options?: PostOptions): Promise { const url = `${baseUrl}/${endpoint}`; let response; if (body && (!options?.type || options.type === 'json')) { response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify(body) }); } else { response = await fetch(url, { method: 'POST', credentials: 'include', body }); } return response; } export async function putRequest(endpoint: string, body?: any, options?: PostOptions): Promise { const url = `${baseUrl}/${endpoint}`; let response; if (body && (!options?.type || options.type === 'json')) { response = await fetch(url, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify(body) }); } else { response = await fetch(url, { method: 'PUT', credentials: 'include', body }); } return response; } export async function deleteRequest(endpoint: string): Promise { const url = `${baseUrl}/${endpoint}`; const response = await fetch(url, { method: 'DELETE', credentials: 'include' }); return response; }