- 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>
43 lines
1.2 KiB
JavaScript
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
|
|
};
|