confluent/ConfluentTranslator/rateLimiter.js
StillHammer f2143bb10b WIP: Custom API keys + rate limiter fixes (à continuer)
- Ajout support custom API keys (Anthropic/OpenAI) dans localStorage
- Backend utilise custom keys si fournis (pas de déduction rate limit)
- Tentative fix rate limiter pour /api/llm/limit (skip globalLimiter)
- Fix undefined/undefined dans compteur requêtes
- Ajout error loop prevention (stop après 5 erreurs)
- Reset quotidien à minuit pour compteur LLM

Note: Problème 429 persiste, à débugger à la maison

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 16:40:48 +08:00

43 lines
1.2 KiB
JavaScript

const rateLimit = require('express-rate-limit');
// Rate limiter global par IP
const globalLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 200, // max 200 requêtes par IP
standardHeaders: true,
legacyHeaders: false,
skip: (req) => {
// Skip pour les endpoints qui doivent être appelés très fréquemment
return req.path === '/api/llm/limit';
},
message: { error: 'Too many requests from this IP, please try again later.' }
});
// Rate limiter pour les traductions (plus strict)
const translationLimiter = rateLimit({
windowMs: 60 * 1000, // 1 minute
max: 10, // max 10 traductions par minute
standardHeaders: true,
legacyHeaders: false,
skip: (req) => {
// Skip si l'utilisateur est admin
return req.user && req.user.role === 'admin';
},
message: { error: 'Too many translation requests. Please wait a moment.' }
});
// Rate limiter pour les endpoints sensibles (admin)
const adminLimiter = rateLimit({
windowMs: 5 * 60 * 1000, // 5 minutes
max: 50,
standardHeaders: true,
legacyHeaders: false,
message: { error: 'Too many admin requests.' }
});
module.exports = {
globalLimiter,
translationLimiter,
adminLimiter
};