public
anord
read
Ledger
Why work hard when you can work easier?
Languages
Repository composition by tracked source files.
TypeScript
86%
CSS
10%
SQL
3%
Shell
1%
HTML
0%
const API_BASE = import.meta.env.VITE_API_URL ?? "";
async function request<T>(path: string, init?: RequestInit): Promise<T> {
const headers = new Headers(init?.headers);
if (!(init?.body instanceof FormData) && !headers.has("Content-Type")) {
headers.set("Content-Type", "application/json");
}
const response = await fetch(`${API_BASE}${path}`, {
...init,
credentials: "include",
headers
});
if (!response.ok) {
const body = await response.json().catch(() => ({ error: "Request failed" }));
throw new Error(body.error ?? "Request failed");
}
if (response.status === 204) {
return undefined as T;
}
return response.json() as Promise<T>;
}
export const api = {
get: <T>(path: string) => request<T>(path),
post: <T>(path: string, body?: unknown) =>
request<T>(path, {
method: "POST",
body: body instanceof FormData ? body : body ? JSON.stringify(body) : undefined
}),
put: <T>(path: string, body: unknown) =>
request<T>(path, {
method: "PUT",
body: JSON.stringify(body)
}),
delete: <T>(path: string) =>
request<T>(path, {
method: "DELETE"
})
};