24 lines
743 B
JavaScript
24 lines
743 B
JavaScript
export class ApiHttpClient {
|
|
constructor(baseUrl = null) {
|
|
const envBase = window.__API_BASE_URL__ || null;
|
|
this.baseUrl = (baseUrl || envBase || "http://localhost:8081").replace(/\/$/, "");
|
|
}
|
|
|
|
async request(path, options = {}) {
|
|
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
...options,
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
...(options.headers || {})
|
|
}
|
|
});
|
|
const isJson = (response.headers.get("content-type") || "").includes("application/json");
|
|
const body = isJson ? await response.json() : null;
|
|
if (!response.ok) {
|
|
const desc = body?.desc || body?.detail || `HTTP ${response.status}`;
|
|
throw new Error(desc);
|
|
}
|
|
return body;
|
|
}
|
|
}
|