Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 16 additions & 4 deletions backend/src/middleware/rate-limiter.middleware.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
import { rateLimit } from 'express-rate-limit';
import { rateLimit, type Options } from 'express-rate-limit';

export const globalRateLimiter = rateLimit({
/**
* Shared factory to create an express-rate-limit instance with common configuration.
*
* @param options Configuration options for express-rate-limit
* @returns Express rate limit middleware
*/
export function createRateLimiter(options: Partial<Options>) {
return rateLimit({
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
...options,
});
}

export const globalRateLimiter = createRateLimiter({
windowMs: 1 * 60 * 1000, // 1 minute
max: 100, // Limit each IP to 100 requests per `window` (here, per minute)
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
message: {
message: 'Too many requests, please try again later.',
status: 429,
Expand Down
6 changes: 2 additions & 4 deletions backend/src/middleware/stream-rate-limiter.middleware.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { rateLimit } from 'express-rate-limit';
import { createRateLimiter } from './rate-limiter.middleware.js';
import { type Request, type Response, type NextFunction } from 'express';
import type { AuthenticatedRequest } from '../types/auth.types.js';
import logger from '../logger.js';
Expand All @@ -22,11 +22,9 @@ export function createStreamRateLimiter(
// Read from environment variable, default to 10 if not set
const max = options?.max ?? (process.env.STREAM_CREATE_RATE_LIMIT ? parseInt(process.env.STREAM_CREATE_RATE_LIMIT, 10) : 10);

return rateLimit({
return createRateLimiter({
windowMs,
max,
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
message: {
error: 'Too many stream creation requests - rate limit exceeded',
message: 'You have exceeded the rate limit for stream creation. Please try again later.',
Expand Down
Loading