Redis-backed rate limiter for NestJS with sliding window and per-user/IP limits.
npm install @kasifraza/api-rate-limiter ioredisimport { RateLimitModule } from '@kasifraza/api-rate-limiter';
@Module({
imports: [
RateLimitModule.register({
host: 'localhost',
port: 6379,
password: 'optional',
keyPrefix: 'rl',
}),
],
})
export class AppModule {}import { RateLimit, RateLimitGuard } from '@kasifraza/api-rate-limiter';
import { UseGuards, Controller, Get } from '@nestjs/common';
@Controller('api')
export class ApiController {
@Get('data')
@UseGuards(RateLimitGuard)
@RateLimit({ limit: 100, window: 60 }) // 100 requests per 60 seconds
getData() {
return { data: 'ok' };
}
}@RateLimit({ limit: 10, window: 60, key: 'user.id' })Uses a sliding window algorithm with Redis sorted sets (ZADD, ZREMRANGEBYSCORE, ZCARD) for accurate per-window counting.
MIT