Files
hms-licht-ton/frontend/composables/useApi.ts
T

58 lines
1.2 KiB
TypeScript
Raw Normal View History

import type { $Fetch } from "nitropack";
/**
* Base API client composable.
* Wraps $fetch with the configured API base URL from runtime config.
* Provides typed GET, POST, PUT, DELETE helpers.
*/
export function useApi() {
const config = useRuntimeConfig();
const apiBase = config.public.apiBase;
/**
* Typed $fetch wrapper bound to API base URL.
*/
const client: $Fetch = $fetch.create({
baseURL: apiBase,
headers: {
"Content-Type": "application/json",
},
});
async function get<T>(url: string, params?: Record<string, string | number | boolean | undefined>): Promise<T> {
return client<T>(url, {
method: "GET",
params: params as Record<string, string> | undefined,
});
}
async function post<T>(url: string, body?: unknown): Promise<T> {
return client<T>(url, {
method: "POST",
body,
});
}
async function put<T>(url: string, body?: unknown): Promise<T> {
return client<T>(url, {
method: "PUT",
body,
});
}
async function del<T>(url: string): Promise<T> {
return client<T>(url, {
method: "DELETE",
});
}
return {
apiBase,
client,
get,
post,
put,
del,
};
}