Files
carmanagement/apps/marketplace/src/lib/api.ts
T
2026-05-06 22:58:23 -04:00

32 lines
951 B
TypeScript

const API_BASE =
(typeof window === 'undefined' ? process.env.API_INTERNAL_URL : process.env.NEXT_PUBLIC_API_URL)
?? process.env.NEXT_PUBLIC_API_URL
?? 'http://localhost:4000/api/v1'
export class MarketplaceApiError extends Error {
status: number
code?: string
constructor(message: string, status: number, code?: string) {
super(message)
this.name = 'MarketplaceApiError'
this.status = status
this.code = code
}
}
export async function marketplaceFetch<T>(path: string): Promise<T> {
const res = await fetch(`${API_BASE}${path}`, { cache: 'no-store' })
const json = await res.json().catch(() => null)
if (!res.ok) throw new MarketplaceApiError(json?.message ?? 'Request failed', res.status, json?.error)
return json.data as T
}
export async function marketplaceFetchOrDefault<T>(path: string, fallback: T): Promise<T> {
try {
return await marketplaceFetch<T>(path)
} catch {
return fallback
}
}