netakhoj-api / middleware /rateLimiter.js
Rakeshops71
Deploy app with LFS for large files
3eedfc9
Raw
History Blame Contribute Delete
1.34 kB
import rateLimit from 'express-rate-limit';
import Logger from '../services/logger.js';
const IS_RENDER = process.env.RENDER === 'true' || !!process.env.RENDER_SERVICE_NAME;
const customKeyGenerator = (req) => {
if (IS_RENDER) {
const forwarded = req.headers['x-forwarded-for'];
return forwarded ? forwarded.split(',')[0].trim() : req.connection.remoteAddress;
}
const forwarded = req.headers['x-forwarded-for'];
const ip = forwarded ? forwarded.split(',')[0].trim() : req.connection.remoteAddress;
return ip;
};
const skip = (req) => {
if (IS_RENDER) return false;
if (process.env.NODE_ENV === 'development') {
const ip = req.ip || req.connection.remoteAddress;
return ip === '127.0.0.1' || ip === '::1' || ip === '::ffff:127.0.0.1';
}
return false;
};
export const apiLimiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: IS_RENDER ? 100 : 200,
keyGenerator: customKeyGenerator,
skip: skip,
standardHeaders: true,
legacyHeaders: false,
validate: {
trustProxy: false,
xForwardedForHeader: false,
}
});
export const memberLimiter = rateLimit({
windowMs: 1 * 60 * 1000,
max: IS_RENDER ? 30 : 60,
keyGenerator: customKeyGenerator,
skip: skip,
validate: {
trustProxy: false,
xForwardedForHeader: false,
}
});
export const scraperLimiter = apiLimiter;