UNPKG

@api-guard/trafix

Version:

A NestJS guard for API rate limiting using Redis and sliding window algorithm

39 lines (37 loc) 1.16 kB
import { DynamicModule, Global, Module } from '@nestjs/common'; import { TrafixGuard } from './guards/trafix.guard'; import { RedisModule } from '@nestjs-modules/ioredis'; import { ConfigExtractor, SlidingWindowService } from './service'; import { ConfigModule } from '@nestjs/config'; import { RedisService } from './memory-store'; import { IRateLimiterOption } from './types'; import { RATE_LIMIT_CONFIG } from './constant'; @Global() @Module({}) export class TrafixModule { static forRootAsync(options: IRateLimiterOption): DynamicModule { return { module: TrafixModule, imports: [ ...(options.redis.imports || []), ConfigModule, RedisModule.forRootAsync({ useFactory: options.redis.useFactory, inject: options.redis.inject, imports: options.redis.imports, }), ], providers: [ { provide: RATE_LIMIT_CONFIG, useValue: options.config, }, SlidingWindowService, TrafixGuard, RedisService, ConfigExtractor, ], exports: [SlidingWindowService, TrafixGuard, ConfigExtractor], }; } }