UNPKG

nest-ratelimiter

Version:

Distributed consistent flexible NestJS rate limiter based on Redis

58 lines 2.9 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.rateLimiterAsserterProvider = exports.RateLimiterAsserterImpl = void 0; const common_1 = require("@nestjs/common"); const asserter_interface_1 = require("./asserter.interface"); const params_1 = require("./params"); const default_error_body_creator_1 = require("./utils/default-error-body-creator"); const get_limit_1 = require("./utils/get-limit"); let RateLimiterAsserterImpl = class RateLimiterAsserterImpl { defaultParams; constructor(defaultParams) { this.defaultParams = defaultParams; } async assert(params) { let limiterInfo; try { limiterInfo = await (0, get_limit_1.getLimit)({ id: params.id, db: this.defaultParams.db, max: params.max || this.defaultParams.max, duration: params.duration || this.defaultParams.duration, }); } catch (error) /* istanbul ignore next */ { // Redis error while creating limiter throw new common_1.InternalServerErrorException('Can not create rate limiter', String(error)); } if (limiterInfo.remaining < 1) { const body = (params.createErrorBody || this.defaultParams.createErrorBody || default_error_body_creator_1.defaultErrorBodyCreator)(limiterInfo); throw new asserter_interface_1.RateLimiterError(body, limiterInfo); } return limiterInfo; } }; exports.RateLimiterAsserterImpl = RateLimiterAsserterImpl; exports.RateLimiterAsserterImpl = RateLimiterAsserterImpl = __decorate([ __param(0, (0, common_1.Inject)(params_1.MODULE_PARAMS_TOKEN)), __metadata("design:paramtypes", [Object]) ], RateLimiterAsserterImpl); exports.rateLimiterAsserterProvider = { provide: asserter_interface_1.RATE_LIMITER_ASSERTER_TOKEN, useClass: RateLimiterAsserterImpl, }; //# sourceMappingURL=asserter.svc.js.map