Aller au contenu

Installation

Prérequis

HTTP Guardian cible les projets TypeScript modernes qui disposent de fetch.

Sujet Valeur attendue Pourquoi
Node >= 22 Runtime CI et développement aligné sur les packages actuels.
TypeScript Résolution de modules moderne Les déclarations publiques doivent être résolues par le consommateur.
Navigateur fetch, Headers, AbortController Utilisés par le terminal HTTP et les timeouts.
RxJS Optionnel Requis uniquement avec @cedvict/http-guardian-rx.

Installer le noyau

npm i @cedvict/http-guardian

Ajouter RxJS seulement si l'application en a besoin

npm i @cedvict/http-guardian-rx rxjs

L'adaptateur RxJS ne change pas le contrat de parsing. Il expose les mêmes résultats sous forme d'Observable, ce qui évite d'avoir deux modèles d'erreurs dans une application Angular.

Ajouter des plugins au cas par cas

npm i @cedvict/http-guardian-plugin-retry
npm i @cedvict/http-guardian-plugin-timeout
npm i @cedvict/http-guardian-plugin-logger
npm i @cedvict/http-guardian-plugin-sentry
npm i @cedvict/http-guardian-plugin-otel
npm i @cedvict/http-guardian-plugin-rate-limit

Chaque plugin doit correspondre à une politique explicite. Installer un package ne suffit pas : il faut aussi le passer dans plugins ou dans les guards selon son contrat.

Premier client

import {
  bearerAuth,
  createApiParserRestClassic,
  createHttpClient,
  memoryCache
} from "@cedvict/http-guardian";

type User = { id: string; email: string };

export const api = createHttpClient({
  baseUrl: "https://api.example.com/v1",
  auth: bearerAuth(() => localStorage.getItem("token")),
  parser: createApiParserRestClassic(),
  cache: memoryCache({ maxEntries: 500 })
});

const result = await api.get<User>("/me", {
  cache: { ttlMs: 30_000, tags: ["me"] }
});

if (result.ok) {
  console.log(result.data.email);
} else {
  console.error(result.errors);
}

Ne pas masquer la configuration

Même une API publique doit déclarer auth: noAuth(). Une absence silencieuse d'auth rend les refresh guards, les diagnostics et les exceptions par requête plus ambigus.