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(path: string): Promise { 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(path: string, fallback: T): Promise { try { return await marketplaceFetch(path) } catch { return fallback } }