import createClient from 'openapi-fetch' import type { paths } from './types' // Vue CLI uses process.env.VUE_APP_* const vueCliBase: string | undefined = typeof process !== 'undefined' ? (process.env?.VUE_APP_API_BASE ?? undefined) : undefined const isTest = typeof process !== 'undefined' && (process.env?.VITEST === 'true' || process.env?.NODE_ENV === 'test') // Prefer absolute http URL in tests to avoid TLS issues and ease MSW interception // Use host-only base URL; always pass full "/api/v1/..." paths to the client methods const defaultBase = '' const baseUrl: string = isTest ? 'http://localhost' : (vueCliBase || defaultBase) let householdSlugProvider: (() => string | null) | null = null let authTokenProvider: (() => string | null) | null = null export function setHouseholdSlugProvider(provider: (() => string | null) | null) { householdSlugProvider = provider } // Expose current household slug for SDK convenience (temporary during migration) export function getHouseholdSlug(): string | null { return householdSlugProvider ? householdSlugProvider() : null } export function setAuthTokenProvider(provider: (() => string | null) | null) { authTokenProvider = provider } export const api = createClient({ baseUrl, fetch: (input: RequestInfo | URL, init?: RequestInit) => { const headers = new Headers(init?.headers || {}) const slug = householdSlugProvider ? householdSlugProvider() : null if (slug) headers.set('X-Household-Slug', slug) const token = authTokenProvider ? authTokenProvider() : null if (token) headers.set('Authorization', `Bearer ${token}`) return globalThis.fetch(input, { credentials: 'include', ...init, headers, }) }, }) // For endpoints not yet in OpenAPI, provide a raw fetch that preserves header injection and base URL behavior export async function fetchApi(path: string, init?: RequestInit): Promise { const headers = new Headers(init?.headers || {}) const slug = householdSlugProvider ? householdSlugProvider() : null if (slug) headers.set('X-Household-Slug', slug) const token = authTokenProvider ? authTokenProvider() : null if (token) headers.set('Authorization', `Bearer ${token}`) const url = baseUrl ? new URL(path, baseUrl).toString() : path return globalThis.fetch(url, { credentials: 'include', ...init, headers, }) }