Aller au contenu

Rate Limiting

Passez un middleware de rate limiting à createServer pour l’appliquer globalement :

import { createServer } from 'lacis'
import { createRateLimit } from 'lacis'
createServer('./routes', {
middleware: {
beforeRequest: createRateLimit({ windowMs: 60_000, max: 100 }),
},
})

Ou limitez-le à une route spécifique via un fichier middleware :

// routes/api/+middleware.ts
import { createRateLimit } from 'lacis'
export const beforeRequest = createRateLimit({ windowMs: 60_000, max: 20 })
OptionTypeDéfautDescription
windowMsnumber60000Fenêtre de temps en millisecondes
maxnumber100Nombre max de requêtes par fenêtre et par clé
messagestring'Too Many Requests'Message d’erreur dans la réponse 429
keyGenerator(req) => stringPremier IP de X-Forwarded-For, ou socket.remoteAddressFonction pour identifier le requêteur

Chaque réponse inclut :

HeaderDescription
X-RateLimit-LimitLe max configuré
X-RateLimit-RemainingRequêtes restantes dans la fenêtre courante
X-RateLimit-ResetTimestamp Unix (secondes) de réinitialisation de la fenêtre

Quand la limite est dépassée, une réponse 429 Too Many Requests est envoyée avec un header Retry-After supplémentaire indiquant les secondes avant la réinitialisation.

Par défaut, le rate limiter utilise l’IP du client. Utilisez keyGenerator pour clé par utilisateur, token API ou tout autre identifiant :

createRateLimit({
windowMs: 60_000,
max: 1000,
keyGenerator: (req) => req.getHeader('x-api-key') ?? req.connection.remoteAddress ?? 'unknown',
})