1
1
import { Reflector } from '@nestjs/core'
2
- import { NestInterceptor , Injectable , ExecutionContext , CallHandler , Inject , HttpStatus , Logger } from '@nestjs/common'
2
+ import { NestInterceptor , Injectable , ExecutionContext , CallHandler , Inject , HttpStatus , Logger , HttpException } from '@nestjs/common'
3
3
import {
4
4
RateLimiterMemory ,
5
5
RateLimiterRes ,
@@ -155,8 +155,8 @@ export class RateLimiterInterceptor implements NestInterceptor {
155
155
const rateLimiter : RateLimiterAbstract = await this . getRateLimiter ( reflectedOptions )
156
156
const key = request . ip . replace ( / ^ .* : / , '' )
157
157
158
- const operation = await this . responseHandler ( response , key , rateLimiter , points , pointsConsumed , next )
159
- return operation
158
+ await this . responseHandler ( response , key , rateLimiter , points , pointsConsumed )
159
+ return next . handle ( )
160
160
}
161
161
162
162
private httpHandler ( context : ExecutionContext ) {
@@ -178,7 +178,7 @@ export class RateLimiterInterceptor implements NestInterceptor {
178
178
}
179
179
}
180
180
181
- private async responseHandler ( response : any , key : any , rateLimiter : RateLimiterAbstract , points : number , pointsConsumed : number , next : CallHandler ) {
181
+ private async responseHandler ( response : any , key : any , rateLimiter : RateLimiterAbstract , points : number , pointsConsumed : number ) {
182
182
if ( this . options . for === 'Fastify' || this . options . for === 'FastifyGraphql' ) {
183
183
try {
184
184
if ( this . spesificOptions ?. queueEnabled || this . options . queueEnabled ) await this . queueLimiter . removeTokens ( 1 )
@@ -190,18 +190,9 @@ export class RateLimiterInterceptor implements NestInterceptor {
190
190
response . header ( 'X-Retry-Remaining' , rateLimiterResponse . remainingPoints )
191
191
response . header ( 'X-Retry-Reset' , new Date ( Date . now ( ) + rateLimiterResponse . msBeforeNext ) . toUTCString ( ) )
192
192
}
193
- return next . handle ( )
194
193
} catch ( rateLimiterResponse ) {
195
194
response . header ( 'Retry-After' , Math . ceil ( rateLimiterResponse . msBeforeNext / 1000 ) )
196
- response
197
- . code ( 429 )
198
- . header ( 'Content-Type' , 'application/json; charset=utf-8' )
199
- . send ( {
200
- statusCode : HttpStatus . TOO_MANY_REQUESTS ,
201
- error : 'Too Many Requests' ,
202
- message : this . spesificOptions ?. errorMessage || this . options . errorMessage
203
- } )
204
- return [ ]
195
+ throw new HttpException ( this . spesificOptions ?. errorMessage || this . options . errorMessage , HttpStatus . TOO_MANY_REQUESTS )
205
196
}
206
197
} else {
207
198
try {
@@ -214,15 +205,9 @@ export class RateLimiterInterceptor implements NestInterceptor {
214
205
response . set ( 'X-Retry-Remaining' , rateLimiterResponse . remainingPoints )
215
206
response . set ( 'X-Retry-Reset' , new Date ( Date . now ( ) + rateLimiterResponse . msBeforeNext ) . toUTCString ( ) )
216
207
}
217
- return next . handle ( )
218
208
} catch ( rateLimiterResponse ) {
219
209
response . set ( 'Retry-After' , Math . ceil ( rateLimiterResponse . msBeforeNext / 1000 ) )
220
- response . status ( 429 ) . json ( {
221
- statusCode : HttpStatus . TOO_MANY_REQUESTS ,
222
- error : 'Too Many Requests' ,
223
- message : this . spesificOptions ?. errorMessage || this . options . errorMessage
224
- } )
225
- return [ ]
210
+ throw new HttpException ( this . spesificOptions ?. errorMessage || this . options . errorMessage , HttpStatus . TOO_MANY_REQUESTS )
226
211
}
227
212
}
228
213
}
0 commit comments