11import Redis from 'ioredis' ;
22import { RateLimiterOptions , RateLimiterSelection } from '../@types/rateLimit' ;
3+ import SlidingWindowLog from '../rateLimiters/slidingWindowLog' ;
34import TokenBucket from '../rateLimiters/tokenBucket' ;
45
56/**
@@ -18,24 +19,23 @@ export default function setupRateLimiter(
1819) {
1920 switch ( selection ) {
2021 case 'TOKEN_BUCKET' :
21- // todo validate options
22- return new TokenBucket ( options . bucketSize , options . refillRate , client ) ;
23- break ;
22+ if ( options . typename === 'bucket' ) {
23+ return new TokenBucket ( options . bucketSize , options . refillRate , client ) ;
24+ }
25+ throw new Error ( 'Invalid options for token bucket' ) ;
2426 case 'LEAKY_BUCKET' :
2527 throw new Error ( 'Leaky Bucket algonithm has not be implemented.' ) ;
26- break ;
2728 case 'FIXED_WINDOW' :
2829 throw new Error ( 'Fixed Window algonithm has not be implemented.' ) ;
29- break ;
3030 case 'SLIDING_WINDOW_LOG' :
31- throw new Error ( 'Sliding Window Log has not be implemented.' ) ;
32- break ;
31+ if ( options . typename === 'window' ) {
32+ return new SlidingWindowLog ( options . windowSize , options . capacity , client ) ;
33+ }
34+ throw new Error ( 'Invalid options for sliding window log' ) ;
3335 case 'SLIDING_WINDOW_COUNTER' :
3436 throw new Error ( 'Sliding Window Counter algonithm has not be implemented.' ) ;
35- break ;
3637 default :
3738 // typescript should never let us invoke this function with anything other than the options above
3839 throw new Error ( 'Selected rate limiting algorithm is not suppported' ) ;
39- break ;
4040 }
4141}
0 commit comments