File size: 1,558 Bytes
e3eb984 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
import rateLimit from 'express-rate-limit'
// General rate limiter
export const rateLimiter = rateLimit({
windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS || '900000'), // 15 minutes
max: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS || '100'), // limit each IP to 100 requests per windowMs
message: {
success: false,
error: 'Too many requests, please try again later',
code: 'RATE_LIMIT_EXCEEDED'
},
standardHeaders: true,
legacyHeaders: false,
})
// Strict rate limiter for auth endpoints
export const authRateLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 5, // limit each IP to 5 requests per windowMs
message: {
success: false,
error: 'Too many authentication attempts, please try again later',
code: 'AUTH_RATE_LIMIT_EXCEEDED'
},
standardHeaders: true,
legacyHeaders: false,
})
// Message rate limiter
export const messageRateLimiter = rateLimit({
windowMs: 60 * 1000, // 1 minute
max: 30, // limit each IP to 30 messages per minute
message: {
success: false,
error: 'Too many messages, please slow down',
code: 'MESSAGE_RATE_LIMIT_EXCEEDED'
},
standardHeaders: true,
legacyHeaders: false,
})
// File upload rate limiter
export const uploadRateLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 10, // limit each IP to 10 uploads per 15 minutes
message: {
success: false,
error: 'Too many file uploads, please try again later',
code: 'UPLOAD_RATE_LIMIT_EXCEEDED'
},
standardHeaders: true,
legacyHeaders: false,
})
|