feat(front) : util httpExternal + autocomplete adresse BAN (ERP-66)
- httpExternal : client dedie aux API publiques externes (URL absolue, sans cookie de session, timeout), seul point d'entree autorise pour un $fetch externe (regle frontend n°4). - useAddressAutocomplete : implementation BAN (api-adresse.data.gouv.fr), recherche ville (type=municipality) et adresse, mapping GeoJSON, throw en cas d'erreur/timeout (mode degrade cote composant). La recherche d'adresse n'impose pas type=housenumber (sinon 0 resultat tant qu'aucun numero n'est saisi) — spec-front mise a jour en consequence. - Tests Vitest : httpExternal, useAddressAutocomplete, et cas limites supplementaires pour formatPhoneFR.
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
import { $fetch } from 'ofetch'
|
||||
|
||||
/**
|
||||
* Options d'un appel HTTP externe.
|
||||
*/
|
||||
export interface HttpExternalOptions {
|
||||
/** Parametres de query string (encodes par ofetch). */
|
||||
query?: Record<string, string | number | undefined>
|
||||
/** 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<T>(
|
||||
url: string,
|
||||
opts: HttpExternalOptions = {},
|
||||
): Promise<T> {
|
||||
return $fetch<T>(url, {
|
||||
query: opts.query,
|
||||
credentials: 'omit',
|
||||
retry: 0,
|
||||
timeout: opts.timeoutMs ?? 5000,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user