Gestion CORS
@duplojs/http/cors ajoute automatiquement les entêtes CORS sur les réponses classiques et crée une route OPTIONS /* pour répondre aux preflight request.
Exemple complet
ts
import { createHub } from "@duplojs/http";
import { corsPlugin } from "@duplojs/http/cors";
export const hub = createHub({ environment: "DEV" })
.plug(
corsPlugin({
allowOrigin: [
"https://app.example.com",
"https://admin.example.com",
],
allowHeaders: ["content-type", "authorization"],
exposeHeaders: ["x-request-id", "x-rate-limit-remaining"],
allowMethods: true,
credentials: true,
maxAge: 600,
}),
);Dans cet exemple :
allowOriginlimite les origines autorisées.allowHeadersdéclare les entêtes HTTP acceptés pendant la pré-vérification.exposeHeadersrend certains entêtes lisibles côté navigateur.allowMethods: truegénère automatiquementaccess-control-allow-methodsà partir des routes enregistrées dans leHub.credentials: trueajouteaccess-control-allow-credentials: truepour les credentials.maxAgedéfinit la durée de cache de la pré-vérification en secondes.
Interface des paramètres
ts
interface CorsPluginParams {
readonly allowOrigin?:
| string
| RegExp
| readonly string[]
| ((origin: string) => boolean | Promise<boolean>)
| true;
readonly allowHeaders?: string | readonly string[] | true;
readonly exposeHeaders?: string | readonly string[];
readonly maxAge?: number;
readonly credentials?: boolean;
readonly allowMethods?: RequestMethods | readonly RequestMethods[] | true;
}Il faut fournir au moins une option au plugin.
Détail des options
allowOriginaccepte une origine unique, une liste, une expression régulière, une fonction de validation, outruepour autoriser toutes les origines.allowHeadersaccepte une chaîne, une liste, outruepour tous les headers.exposeHeadersliste les entêtes que le navigateur pourra lire après la requête.allowMethodsaccepte une méthode, une liste, outruepour calculer automatiquement les méthodes autorisées par chemin.credentialsactive le partage des cookies et autres identifiants d'authentification.maxAgecontrôle la mise en cache de la réponseOPTIONS.
