nakama/backend/middleware/rateLimiter.js

58 lines
2.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const rateLimit = require('express-rate-limit');
// Общий лимит для API
const generalLimiter = rateLimit({
windowMs: 15 * 1000, // 15 секунд
max: 100, // 100 запросов
message: 'Слишком много запросов, попробуйте позже',
standardHeaders: true,
legacyHeaders: false,
});
// Строгий лимит для создания постов
const postCreationLimiter = rateLimit({
windowMs: 15 * 1000, // 15 секунд
max: 10, // 10 постов
message: 'Вы создаёте слишком много постов, подождите немного',
skipSuccessfulRequests: true,
});
// Лимит для авторизации
const authLimiter = rateLimit({
windowMs: 15 * 1000, // 15 секунд
max: 5, // 5 попыток
message: 'Слишком много попыток авторизации',
});
// Лимит для поиска
const searchLimiter = rateLimit({
windowMs: 15 * 1000, // 15 секунд
max: 30, // 30 запросов
message: 'Слишком много поисковых запросов',
});
// Лимит для лайков/комментариев (защита от спама)
const interactionLimiter = rateLimit({
windowMs: 15 * 1000, // 15 секунд
max: 20, // 20 действий
message: 'Вы слишком активны, немного подождите',
});
// Мягкий лимит для прокси изображений (больше запросов, так как это медиа)
const proxyLimiter = rateLimit({
windowMs: 15 * 1000, // 15 секунд
max: 200, // 200 запросов (больше для загрузки множества изображений)
message: 'Слишком много запросов изображений',
skipSuccessfulRequests: true, // Не считать успешные запросы
});
module.exports = {
generalLimiter,
postCreationLimiter,
authLimiter,
searchLimiter,
interactionLimiter,
proxyLimiter
};