SvelteKit
Protégez une application SvelteKit avec le hook serveur @zarex/sveltekit.
Installation
npm install @zarex/sveltekitZAREX_KEY=zarex_test_...Protéger l'application
import { zarexHandle, shield, rateLimit } from "@zarex/sveltekit";
export const handle = zarexHandle({
key: process.env.ZAREX_KEY!,
rules: [shield(), rateLimit({ max: 100, window: "1m" })],
});Avec d'autres hooks, combinez-les avec sequence :
import { sequence } from "@sveltejs/kit/hooks";
import { zarexHandle, shield } from "@zarex/sveltekit";
export const handle = sequence(
zarexHandle({ key: process.env.ZAREX_KEY!, rules: [shield()] }),
monAutreHandle
);Une requête refusée reçoit automatiquement 403, ou 429 avec retry-after.
L'adresse IP du visiteur
Zarex utilise event.getClientAddress(), donné par votre adaptateur de déploiement. Avec adapter-node derrière un proxy, réglez les variables ADDRESS_HEADER et XFF_DEPTH ; avec les autres adaptateurs, voir leur documentation.
Identifiants et données de formulaire
export const handle = zarexHandle({
key: process.env.ZAREX_KEY!,
rules: [rateLimit({ max: 100, window: "1m", characteristics: ["userId"] })],
call: (event) => ({ characteristics: { userId: event.locals.user?.id } }),
});call peut aussi fournir email, phone, text et tokensRequested. Les identifiants sont hachés (SHA-256) avant l'envoi.
Lire la décision
La décision est disponible dans locals.zarex :
export function load({ locals }) {
console.log(locals.zarex?.verdict); // "ALLOW" | "DENY"
}Personnaliser le refus
zarexHandle({
key: process.env.ZAREX_KEY!,
rules: [shield()],
onDeny: (event, decision) =>
new Response("Requête refusée", { status: 403 }),
});onDeny doit toujours renvoyer une Response : c'est elle qui est envoyée au visiteur. Si elle n'en renvoie pas (un return oublié, par exemple), le SDK envoie la réponse de refus par défaut et le signale dans vos logs : la requête reste bloquée (depuis la version 0.1.4).
En-têtes de sécurité et réponses
secureHeaders: true et responseGuard: true s'appliquent automatiquement à toutes les réponses, sans autre réglage.