@amsom-habitat/nest-http-client
v1.0.0
Published
Appel HTTP vers une API interne : délai maximal, erreur typée HttpClientError, traduction en exception Nest (sous-chemin /nest).
Readme
@amsom-habitat/nest-http-client
Appel HTTP vers une API interne (API Mail, API Document, GED…) : délai maximal, erreur typée, traduction en
exception Nest. Le cœur n'a aucune dépendance (fetch natif, Node ≥ 20).
import { fetchOk, HttpClientError } from '@amsom-habitat/nest-http-client'
const response = await fetchOk(`${baseUrl}/word_publipostage_pdf`, { method: 'POST', body }, {
label: 'API Document',
timeoutMs: 10_000, // défaut : 30 s
})
const pdf = Buffer.from(await response.arrayBuffer())| Cas | Résultat |
|---|---|
| Réponse 2xx | la Response, corps non lu |
| Réponse non-2xx | HttpClientError : status amont, body (tronqué) |
| Échec réseau | HttpClientError : status: null, timedOut: false, cause |
| Délai dépassé | HttpClientError : status: null, timedOut: true |
| init.signal abandonné par l'appelant | l'erreur d'abandon d'origine, telle quelle |
Le délai couvre la réponse et la lecture du corps : un corps lu trop tard lève l'erreur TimeoutError du
fetch natif.
body sert aux journaux, jamais à une réponse client (certaines API renvoient une trace complète).
Nest
@nestjs/common est une peerDependency optionnelle, requise seulement par ce sous-chemin.
import { httpClientErrorToHttpException } from '@amsom-habitat/nest-http-client/nest'
try {
return await fetchOk(url, init, { label: 'API Document' })
} catch (error) {
if (error instanceof HttpClientError) throw httpClientErrorToHttpException(error)
throw error
}| HttpClientError | Exception Nest | Message |
|---|---|---|
| injoignable | 503 | <label> injoignable |
| délai dépassé | 504 | <label> : délai dépassé |
| réponse non-2xx | 502 | Erreur <label> (<status>) |
Le corps amont est journalisé (Logger Nest, contexte HttpClient), jamais recopié dans l'exception.
