Spaces:
Runtime error
Runtime error
File size: 2,310 Bytes
bc45e54 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | import { API_BASE_URL } from "./config";
const TOKEN_KEY = "classlens_token";
export function getToken(): string | null {
return localStorage.getItem(TOKEN_KEY);
}
export function setToken(token: string) {
localStorage.setItem(TOKEN_KEY, token);
}
export function clearToken() {
localStorage.removeItem(TOKEN_KEY);
}
function authHeaders(): Record<string, string> {
const token = getToken();
return token ? { Authorization: `Bearer ${token}` } : {};
}
async function handleResponse<T>(res: Response): Promise<T> {
if (res.status === 401) {
clearToken();
window.location.reload();
throw new Error("Unauthorized");
}
if (!res.ok) {
const text = await res.text();
let msg = text;
try {
const j = JSON.parse(text);
msg = j.detail || j.message || text;
} catch {}
throw new Error(msg);
}
return res.json();
}
export async function apiGet<T>(path: string): Promise<T> {
const res = await fetch(`${API_BASE_URL}${path}`, {
headers: { ...authHeaders() },
});
return handleResponse<T>(res);
}
export async function apiPost<T>(path: string, body?: unknown): Promise<T> {
const res = await fetch(`${API_BASE_URL}${path}`, {
method: "POST",
headers: { "Content-Type": "application/json", ...authHeaders() },
body: body ? JSON.stringify(body) : undefined,
});
return handleResponse<T>(res);
}
export async function apiPut<T>(path: string, body: unknown): Promise<T> {
const res = await fetch(`${API_BASE_URL}${path}`, {
method: "PUT",
headers: { "Content-Type": "application/json", ...authHeaders() },
body: JSON.stringify(body),
});
return handleResponse<T>(res);
}
export async function apiDelete(path: string): Promise<void> {
const res = await fetch(`${API_BASE_URL}${path}`, {
method: "DELETE",
headers: { ...authHeaders() },
});
if (res.status === 401) {
clearToken();
window.location.reload();
throw new Error("Unauthorized");
}
if (!res.ok) {
const text = await res.text();
throw new Error(text);
}
}
export async function apiUpload<T>(path: string, formData: FormData): Promise<T> {
const res = await fetch(`${API_BASE_URL}${path}`, {
method: "POST",
headers: { ...authHeaders() },
body: formData,
});
return handleResponse<T>(res);
}
|