| const BASE = import.meta.env.BASE_URL.replace(/\/$/, ''); |
|
|
| export async function apiFetch<T>(path: string, options?: RequestInit): Promise<T> { |
| const token = localStorage.getItem('adminToken'); |
| const headers = { |
| 'Content-Type': 'application/json', |
| ...(token ? { Authorization: `Bearer ${token}` } : {}), |
| ...options?.headers, |
| }; |
|
|
| const res = await fetch(`${BASE}${path}`, { |
| ...options, |
| headers, |
| }); |
|
|
| if (!res.ok) { |
| if (res.status === 401) { |
| localStorage.removeItem('adminToken'); |
| window.dispatchEvent(new Event('unauthorized')); |
| } |
| const body = await res.json().catch(() => ({ error: { message: res.statusText } })); |
| throw new Error(body.error?.message ?? `HTTP ${res.status}`); |
| } |
| return res.json(); |
| } |
|
|