feat(auth): named rate limiters (skip in tests)

This commit is contained in:
2026-05-20 22:52:42 +02:00
parent 0b62aad7d8
commit c9d593984d
3 changed files with 50 additions and 0 deletions

View File

@@ -22,6 +22,7 @@
"cookie-parser": "^1.4.7",
"drizzle-orm": "^0.33.0",
"express": "^4.19.0",
"express-rate-limit": "^8.5.2",
"multer": "^1.4.5-lts.1",
"nodemailer": "^8.0.7",
"xlsx": "^0.18.5",

View File

@@ -0,0 +1,21 @@
import rateLimit from 'express-rate-limit';
const fifteenMin = 15 * 60 * 1000;
function makeLimiter(max: number, codeMessage = 'Too many attempts, please try again later') {
return rateLimit({
windowMs: fifteenMin,
limit: max,
standardHeaders: 'draft-7',
legacyHeaders: false,
skip: () => process.env.NODE_ENV === 'test',
handler: (_req, res) => {
res.status(429).json({ error: { code: 'RATE_LIMITED', message: codeMessage } });
},
});
}
export const loginLimiter = makeLimiter(10);
export const registerLimiter = makeLimiter(5);
export const forgotPasswordLimiter = makeLimiter(5);
export const tokenLimiter = makeLimiter(20);