Passa al contenuto principale

Rate Limiting

API rate limiting and throttling configuration powered by @nestjs/throttler.

Configuration

Rate limiting is enabled by default in production.

THROTTLE_ENABLED=true    # Enabled by default in production
THROTTLE_TTL=60000 # Default window (ms)
THROTTLE_LIMIT=100 # Default global limit

Set THROTTLE_ENABLED=false to disable (not recommended in production).

Guard Setup

@Module({
imports: [
ThrottlerModule.forRoot({
ttl: configService.get("THROTTLE_TTL"),
limit: configService.get("THROTTLE_LIMIT"),
}),
],
})
export class AppModule {}

Per-Endpoint Rate Limits

Authentication endpoints have stricter per-endpoint limits to prevent brute-force attacks:

EndpointLimitWindow
POST /auth/login5 requests60 seconds
POST /auth/register3 requests60 seconds
POST /auth/signin.email3 requests60 seconds
POST /auth/signin.email/confirm5 requests60 seconds
POST /auth/signin.email.password5 requests60 seconds
POST /auth/signin.email.social5 requests60 seconds
POST /auth/signin.workspace5 requests60 seconds
POST /auth/signup.provider.social5 requests60 seconds
POST /auth/signup.link.account3 requests60 seconds
POST /auth/request-password3 requests60 seconds
POST /auth/reset-password3 requests60 seconds
POST /auth/refresh-token5 requests60 seconds

Per-Endpoint Configuration

@Controller('/auth')
export class AuthController {
@Post('login')
@Throttle({ default: { limit: 5, ttl: 60 } }) // Stricter for login
async login() { ... }

@Get('check')
@SkipThrottle() // No rate limiting
async check() { ... }
}

Response Headers

Rate-limited responses include:

HeaderDescription
X-RateLimit-LimitMax requests per window
X-RateLimit-RemainingRemaining requests
X-RateLimit-ResetWindow reset timestamp
Retry-AfterSeconds until retry (429 only)
Endpoint CategoryLimitWindow
Authentication560s
General API6060s
File upload1060s
Report generation560s
Public endpoints3060s