Rate Limiting
Configuration
Section intitulée « Configuration »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.tsimport { createRateLimit } from 'lacis'
export const beforeRequest = createRateLimit({ windowMs: 60_000, max: 20 })| Option | Type | Défaut | Description |
|---|---|---|---|
windowMs | number | 60000 | Fenêtre de temps en millisecondes |
max | number | 100 | Nombre max de requêtes par fenêtre et par clé |
message | string | 'Too Many Requests' | Message d’erreur dans la réponse 429 |
keyGenerator | (req) => string | Premier IP de X-Forwarded-For, ou socket.remoteAddress | Fonction pour identifier le requêteur |
Headers de réponse
Section intitulée « Headers de réponse »Chaque réponse inclut :
| Header | Description |
|---|---|
X-RateLimit-Limit | Le max configuré |
X-RateLimit-Remaining | Requêtes restantes dans la fenêtre courante |
X-RateLimit-Reset | Timestamp 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.
Clé personnalisée
Section intitulée « Clé personnalisée »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',})