import { getToken, setToken } from './auth-storage'; export const API_URL = import.meta.env.VITE_API_URL ?? 'http://localhost:3000'; export class ApiError extends Error { constructor( public status: number, message: string ) { super(message); this.name = 'ApiError'; } } export async function apiFetch(path: string, init: RequestInit = {}): Promise { const token = getToken(); const headers = new Headers(init.headers); if (token) headers.set('Authorization', `Bearer ${token}`); if (init.body && !headers.has('Content-Type')) headers.set('Content-Type', 'application/json'); const res = await fetch(`${API_URL}${path}`, { ...init, headers }); if (!res.ok) throw new ApiError(res.status, `Request failed: ${res.status}`); const text = await res.text(); return (text ? JSON.parse(text) : undefined) as T; } // Sign in: POST /api/auth/sign-in/email, capture the bearer token from the response header. export async function signIn(email: string, password: string): Promise { const res = await fetch(`${API_URL}/api/auth/sign-in/email`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email, password }), }); if (!res.ok) throw new ApiError(res.status, 'Inloggen mislukt'); const token = res.headers.get('set-auth-token'); if (!token) throw new ApiError(500, 'Geen token ontvangen'); setToken(token); }