import { $fetch } from 'ofetch' /** * Options d'un appel HTTP externe. */ export interface HttpExternalOptions { /** Parametres de query string (encodes par ofetch). */ query?: Record /** Timeout en millisecondes avant abandon (defaut 5000). */ timeoutMs?: number } /** * Petit client HTTP pour les APIs PUBLIQUES EXTERNES (domaine tiers, hors `/api`). * * Pourquoi un helper dedie plutot que `useApi()` : `useApi()` est le client de * l'API interne Starseed (baseURL `/api`, cookie JWT `credentials: 'include'`, * parsing/erreurs Hydra, redirection `/login` sur 401, toasts i18n). Tout cela * est inadapte — voire indesirable — pour un endpoint public externe comme la * Base Adresse Nationale (`api-adresse.data.gouv.fr`). * * Ce helper est donc le SEUL point d'entree autorise pour un `$fetch` brut vers * l'externe (cf. regle frontend n°4 : pas de `$fetch` eparpille dans les * composants). Il : * - cible une URL absolue (pas de baseURL `/api`) ; * - n'envoie PAS le cookie de session (`credentials: 'omit'`) ; * - ne retente pas (`retry: 0`) et applique un timeout ; * - laisse remonter l'erreur (throw) — au consommateur de gerer le mode degrade. */ export async function httpExternal( url: string, opts: HttpExternalOptions = {}, ): Promise { return $fetch(url, { query: opts.query, credentials: 'omit', retry: 0, timeout: opts.timeoutMs ?? 5000, }) }