export class Client { private baseUrl: string; private token: string; constructor(baseUrl: string, token: string) { this.baseUrl = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl; this.token = token; } private getHeaders(contentType?: string): HeadersInit { const headers: HeadersInit = { Authorization: `Bearer ${this.token}`, }; if (contentType) { headers["Content-Type"] = contentType; } return headers; } private async handleResponse(response: Response): Promise { if (!response.ok) { throw new Error(`API request failed: ${response.statusText}`); } return response.json(); } async get(path: string): Promise { const url = `${this.baseUrl}${path.startsWith("/") ? path : "/" + path}`; const response = await fetch(url, { headers: this.getHeaders(), }); return this.handleResponse(response); } async post(path: string, payload: unknown): Promise { const url = `${this.baseUrl}${path.startsWith("/") ? path : "/" + path}`; const response = await fetch(url, { method: "POST", headers: this.getHeaders("application/json"), body: JSON.stringify(payload), }); return this.handleResponse(response); } }