// js/api.js import { showLoading, showMessage } from './utils.js'; const API_BASE_URL = '/api'; // This function will be the single point of contact with the server. export async function apiCall(endpoint, method = 'GET', body = null) { const authToken = localStorage.getItem('authToken'); const headers = { 'Content-Type': 'application/json' }; if (authToken) headers['Authorization'] = `Bearer ${authToken}`; try { showLoading(true); const response = await fetch(`${API_BASE_URL}${endpoint}`, { method, headers, body: body ? JSON.stringify(body) : null }); // The original logic for handling responses remains the same. if (response.status === 401) { // We'll need to pass the signOut function in or handle it differently // For now, let's just redirect. localStorage.clear(); window.location.reload(); // A more robust solution would use a custom event. return { success: false, message: 'Session expired.' }; } const text = await response.text(); let data; try { data = text ? JSON.parse(text) : null; } catch (error) { if (!response.ok) { throw new Error(text || `Request failed with status ${response.status}`); } return { success: true, data: text }; } if (!response.ok) { throw new Error(data.message || `An unknown error occurred.`); } return { success: true, data }; } catch (error) { showMessage(error.message, 'error'); return { success: false }; } finally { showLoading(false); } }