38 lines
1008 B
TypeScript
38 lines
1008 B
TypeScript
// Utility to handle API calls in both dev and production
|
|
export async function apiCall(endpoint: string, options: RequestInit = {}) {
|
|
const baseUrl = typeof window !== "undefined" ? window.location.origin : ""
|
|
const url = `${baseUrl}${endpoint}`
|
|
|
|
const defaultOptions: RequestInit = {
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
"Cache-Control": "no-cache",
|
|
},
|
|
...options,
|
|
}
|
|
|
|
try {
|
|
const response = await fetch(url, defaultOptions)
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`API call failed: ${response.status} ${response.statusText}`)
|
|
}
|
|
|
|
const text = await response.text()
|
|
|
|
if (!text) {
|
|
return null
|
|
}
|
|
|
|
try {
|
|
return JSON.parse(text)
|
|
} catch (parseError) {
|
|
console.error("JSON parse error:", parseError, "Response text:", text)
|
|
throw new Error("Invalid JSON response")
|
|
}
|
|
} catch (error) {
|
|
console.error(`API call to ${endpoint} failed:`, error)
|
|
throw error
|
|
}
|
|
}
|