Socket
Socket
Sign inDemoInstall

@nestjs/throttler

Package Overview
Dependencies
Maintainers
2
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nestjs/throttler - npm Package Compare versions

Comparing version 1.2.0 to 1.2.1

69

dist/index.js

@@ -1,24 +0,47 @@

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
'use strict';
var __createBinding =
(this && this.__createBinding) ||
(Object.create
? function (o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, {
enumerable: true,
get: function () {
return m[k];
},
});
}
: function (o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
});
var __exportStar =
(this && this.__exportStar) ||
function (m, exports) {
for (var p in m)
if (p !== 'default' && !Object.prototype.hasOwnProperty.call(exports, p))
__createBinding(exports, m, p);
};
Object.defineProperty(exports, '__esModule', { value: true });
exports.getStorageToken = exports.getOptionsToken = void 0;
__exportStar(require("./throttler-module-options.interface"), exports);
__exportStar(require("./throttler-storage.interface"), exports);
__exportStar(require("./throttler.decorator"), exports);
__exportStar(require("./throttler.exception"), exports);
__exportStar(require("./throttler.guard"), exports);
__exportStar(require("./throttler.module"), exports);
var throttler_providers_1 = require("./throttler.providers");
Object.defineProperty(exports, "getOptionsToken", { enumerable: true, get: function () { return throttler_providers_1.getOptionsToken; } });
Object.defineProperty(exports, "getStorageToken", { enumerable: true, get: function () { return throttler_providers_1.getStorageToken; } });
__exportStar(require("./throttler.service"), exports);
//# sourceMappingURL=index.js.map
__exportStar(require('./throttler-module-options.interface'), exports);
__exportStar(require('./throttler-storage.interface'), exports);
__exportStar(require('./throttler.decorator'), exports);
__exportStar(require('./throttler.exception'), exports);
__exportStar(require('./throttler.guard'), exports);
__exportStar(require('./throttler.module'), exports);
var throttler_providers_1 = require('./throttler.providers');
Object.defineProperty(exports, 'getOptionsToken', {
enumerable: true,
get: function () {
return throttler_providers_1.getOptionsToken;
},
});
Object.defineProperty(exports, 'getStorageToken', {
enumerable: true,
get: function () {
return throttler_providers_1.getStorageToken;
},
});
__exportStar(require('./throttler.service'), exports);
//# sourceMappingURL=index.js.map

@@ -1,3 +0,3 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=throttler-module-options.interface.js.map
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
//# sourceMappingURL=throttler-module-options.interface.js.map

@@ -1,5 +0,5 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
exports.ThrottlerStorage = void 0;
exports.ThrottlerStorage = Symbol('ThrottlerStorage');
//# sourceMappingURL=throttler-storage.interface.js.map
//# sourceMappingURL=throttler-storage.interface.js.map

@@ -1,4 +0,8 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.THROTTLER_SKIP = exports.THROTTLER_OPTIONS = exports.THROTTLER_TTL = exports.THROTTLER_LIMIT = void 0;
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
exports.THROTTLER_SKIP =
exports.THROTTLER_OPTIONS =
exports.THROTTLER_TTL =
exports.THROTTLER_LIMIT =
void 0;
exports.THROTTLER_LIMIT = 'THROTTLER:LIMIT';

@@ -8,2 +12,2 @@ exports.THROTTLER_TTL = 'THROTTLER:TTL';

exports.THROTTLER_SKIP = 'THROTTLER:SKIP';
//# sourceMappingURL=throttler.constants.js.map
//# sourceMappingURL=throttler.constants.js.map

@@ -1,31 +0,35 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.InjectThrottlerStorage = exports.InjectThrottlerOptions = exports.SkipThrottle = exports.Throttle = void 0;
const common_1 = require("@nestjs/common");
const throttler_constants_1 = require("./throttler.constants");
const throttler_providers_1 = require("./throttler.providers");
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
exports.InjectThrottlerStorage =
exports.InjectThrottlerOptions =
exports.SkipThrottle =
exports.Throttle =
void 0;
const common_1 = require('@nestjs/common');
const throttler_constants_1 = require('./throttler.constants');
const throttler_providers_1 = require('./throttler.providers');
function setThrottlerMetadata(target, limit, ttl) {
Reflect.defineMetadata(throttler_constants_1.THROTTLER_TTL, ttl, target);
Reflect.defineMetadata(throttler_constants_1.THROTTLER_LIMIT, limit, target);
Reflect.defineMetadata(throttler_constants_1.THROTTLER_TTL, ttl, target);
Reflect.defineMetadata(throttler_constants_1.THROTTLER_LIMIT, limit, target);
}
const Throttle = (limit = 20, ttl = 60) => {
return (target, propertyKey, descriptor) => {
if (descriptor) {
setThrottlerMetadata(descriptor.value, limit, ttl);
return descriptor;
}
setThrottlerMetadata(target, limit, ttl);
return target;
};
return (target, propertyKey, descriptor) => {
if (descriptor) {
setThrottlerMetadata(descriptor.value, limit, ttl);
return descriptor;
}
setThrottlerMetadata(target, limit, ttl);
return target;
};
};
exports.Throttle = Throttle;
const SkipThrottle = (skip = true) => {
return (target, propertyKey, descriptor) => {
if (descriptor) {
Reflect.defineMetadata(throttler_constants_1.THROTTLER_SKIP, skip, descriptor.value);
return descriptor;
}
Reflect.defineMetadata(throttler_constants_1.THROTTLER_SKIP, skip, target);
return target;
};
return (target, propertyKey, descriptor) => {
if (descriptor) {
Reflect.defineMetadata(throttler_constants_1.THROTTLER_SKIP, skip, descriptor.value);
return descriptor;
}
Reflect.defineMetadata(throttler_constants_1.THROTTLER_SKIP, skip, target);
return target;
};
};

@@ -37,2 +41,2 @@ exports.SkipThrottle = SkipThrottle;

exports.InjectThrottlerStorage = InjectThrottlerStorage;
//# sourceMappingURL=throttler.decorator.js.map
//# sourceMappingURL=throttler.decorator.js.map

@@ -1,12 +0,12 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
exports.ThrottlerException = exports.throttlerMessage = void 0;
const common_1 = require("@nestjs/common");
const common_1 = require('@nestjs/common');
exports.throttlerMessage = 'ThrottlerException: Too Many Requests';
class ThrottlerException extends common_1.HttpException {
constructor(message) {
super(`${message || exports.throttlerMessage}`, common_1.HttpStatus.TOO_MANY_REQUESTS);
}
constructor(message) {
super(`${message || exports.throttlerMessage}`, common_1.HttpStatus.TOO_MANY_REQUESTS);
}
}
exports.ThrottlerException = ThrottlerException;
//# sourceMappingURL=throttler.exception.js.map
//# sourceMappingURL=throttler.exception.js.map

@@ -1,94 +0,119 @@

"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;
'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 });
};
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.ThrottlerGuard = void 0;
const common_1 = require("@nestjs/common");
const core_1 = require("@nestjs/core");
const md5 = require("md5");
const throttler_storage_interface_1 = require("./throttler-storage.interface");
const throttler_constants_1 = require("./throttler.constants");
const throttler_decorator_1 = require("./throttler.decorator");
const throttler_exception_1 = require("./throttler.exception");
const common_1 = require('@nestjs/common');
const core_1 = require('@nestjs/core');
const md5 = require('md5');
const throttler_storage_interface_1 = require('./throttler-storage.interface');
const throttler_constants_1 = require('./throttler.constants');
const throttler_decorator_1 = require('./throttler.decorator');
const throttler_exception_1 = require('./throttler.exception');
let ThrottlerGuard = class ThrottlerGuard {
constructor(options, storageService, reflector) {
this.options = options;
this.storageService = storageService;
this.reflector = reflector;
this.headerPrefix = 'X-RateLimit';
this.errorMessage = throttler_exception_1.throttlerMessage;
constructor(options, storageService, reflector) {
this.options = options;
this.storageService = storageService;
this.reflector = reflector;
this.headerPrefix = 'X-RateLimit';
this.errorMessage = throttler_exception_1.throttlerMessage;
}
async canActivate(context) {
const handler = context.getHandler();
const classRef = context.getClass();
if (
this.reflector.getAllAndOverride(throttler_constants_1.THROTTLER_SKIP, [handler, classRef])
) {
return true;
}
async canActivate(context) {
const handler = context.getHandler();
const classRef = context.getClass();
if (this.reflector.getAllAndOverride(throttler_constants_1.THROTTLER_SKIP, [handler, classRef])) {
return true;
const routeOrClassLimit = this.reflector.getAllAndOverride(
throttler_constants_1.THROTTLER_LIMIT,
[handler, classRef],
);
const routeOrClassTtl = this.reflector.getAllAndOverride(throttler_constants_1.THROTTLER_TTL, [
handler,
classRef,
]);
const limit = routeOrClassLimit || this.options.limit;
const ttl = routeOrClassTtl || this.options.ttl;
return this.handleRequest(context, limit, ttl);
}
async handleRequest(context, limit, ttl) {
const { req, res } = this.getRequestResponse(context);
if (Array.isArray(this.options.ignoreUserAgents)) {
for (const pattern of this.options.ignoreUserAgents) {
if (pattern.test(req.headers['user-agent'])) {
return true;
}
const routeOrClassLimit = this.reflector.getAllAndOverride(throttler_constants_1.THROTTLER_LIMIT, [
handler,
classRef,
]);
const routeOrClassTtl = this.reflector.getAllAndOverride(throttler_constants_1.THROTTLER_TTL, [
handler,
classRef,
]);
const limit = routeOrClassLimit || this.options.limit;
const ttl = routeOrClassTtl || this.options.ttl;
return this.handleRequest(context, limit, ttl);
}
}
async handleRequest(context, limit, ttl) {
const { req, res } = this.getRequestResponse(context);
if (Array.isArray(this.options.ignoreUserAgents)) {
for (const pattern of this.options.ignoreUserAgents) {
if (pattern.test(req.headers['user-agent'])) {
return true;
}
}
}
const tracker = this.getTracker(req);
const key = this.generateKey(context, tracker);
const ttls = await this.storageService.getRecord(key);
const nearestExpiryTime = ttls.length > 0 ? Math.ceil((ttls[0] - Date.now()) / 1000) : 0;
if (ttls.length >= limit) {
res.header('Retry-After', nearestExpiryTime);
this.throwThrottlingException(context);
}
res.header(`${this.headerPrefix}-Limit`, limit);
res.header(`${this.headerPrefix}-Remaining`, Math.max(0, limit - (ttls.length + 1)));
res.header(`${this.headerPrefix}-Reset`, nearestExpiryTime);
await this.storageService.addRecord(key, ttl);
return true;
const tracker = this.getTracker(req);
const key = this.generateKey(context, tracker);
const ttls = await this.storageService.getRecord(key);
const nearestExpiryTime = ttls.length > 0 ? Math.ceil((ttls[0] - Date.now()) / 1000) : 0;
if (ttls.length >= limit) {
res.header('Retry-After', nearestExpiryTime);
this.throwThrottlingException(context);
}
getTracker(req) {
return req.ip;
}
getRequestResponse(context) {
const http = context.switchToHttp();
return { req: http.getRequest(), res: http.getResponse() };
}
generateKey(context, suffix) {
const prefix = `${context.getClass().name}-${context.getHandler().name}`;
return md5(`${prefix}-${suffix}`);
}
throwThrottlingException(context) {
throw new throttler_exception_1.ThrottlerException(this.errorMessage);
}
res.header(`${this.headerPrefix}-Limit`, limit);
res.header(`${this.headerPrefix}-Remaining`, Math.max(0, limit - (ttls.length + 1)));
res.header(`${this.headerPrefix}-Reset`, nearestExpiryTime);
await this.storageService.addRecord(key, ttl);
return true;
}
getTracker(req) {
return req.ip;
}
getRequestResponse(context) {
const http = context.switchToHttp();
return { req: http.getRequest(), res: http.getResponse() };
}
generateKey(context, suffix) {
const prefix = `${context.getClass().name}-${context.getHandler().name}`;
return md5(`${prefix}-${suffix}`);
}
throwThrottlingException(context) {
throw new throttler_exception_1.ThrottlerException(this.errorMessage);
}
};
ThrottlerGuard = __decorate([
ThrottlerGuard = __decorate(
[
common_1.Injectable(),
__param(0, throttler_decorator_1.InjectThrottlerOptions()),
__param(1, throttler_decorator_1.InjectThrottlerStorage()),
__metadata("design:paramtypes", [Object, Object, core_1.Reflector])
], ThrottlerGuard);
__metadata('design:paramtypes', [Object, Object, core_1.Reflector]),
],
ThrottlerGuard,
);
exports.ThrottlerGuard = ThrottlerGuard;
//# sourceMappingURL=throttler.guard.js.map
//# sourceMappingURL=throttler.guard.js.map

@@ -1,64 +0,83 @@

"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;
'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 ThrottlerModule_1;
Object.defineProperty(exports, "__esModule", { value: true });
Object.defineProperty(exports, '__esModule', { value: true });
exports.ThrottlerModule = void 0;
const common_1 = require("@nestjs/common");
const throttler_constants_1 = require("./throttler.constants");
const throttler_providers_1 = require("./throttler.providers");
let ThrottlerModule = ThrottlerModule_1 = class ThrottlerModule {
static forRoot(options = {}) {
const providers = [...throttler_providers_1.createThrottlerProviders(options), throttler_providers_1.ThrottlerStorageProvider];
return {
module: ThrottlerModule_1,
providers,
exports: providers,
};
const common_1 = require('@nestjs/common');
const throttler_constants_1 = require('./throttler.constants');
const throttler_providers_1 = require('./throttler.providers');
let ThrottlerModule = (ThrottlerModule_1 = class ThrottlerModule {
static forRoot(options = {}) {
const providers = [
...throttler_providers_1.createThrottlerProviders(options),
throttler_providers_1.ThrottlerStorageProvider,
];
return {
module: ThrottlerModule_1,
providers,
exports: providers,
};
}
static forRootAsync(options) {
const providers = [
...this.createAsyncProviders(options),
throttler_providers_1.ThrottlerStorageProvider,
];
return {
module: ThrottlerModule_1,
imports: options.imports || [],
providers,
exports: providers,
};
}
static createAsyncProviders(options) {
if (options.useExisting || options.useFactory) {
return [this.createAsyncOptionsProvider(options)];
}
static forRootAsync(options) {
const providers = [...this.createAsyncProviders(options), throttler_providers_1.ThrottlerStorageProvider];
return {
module: ThrottlerModule_1,
imports: options.imports || [],
providers,
exports: providers,
};
return [
this.createAsyncOptionsProvider(options),
{
provide: options.useClass,
useClass: options.useClass,
},
];
}
static createAsyncOptionsProvider(options) {
if (options.useFactory) {
return {
provide: throttler_constants_1.THROTTLER_OPTIONS,
useFactory: options.useFactory,
inject: options.inject || [],
};
}
static createAsyncProviders(options) {
if (options.useExisting || options.useFactory) {
return [this.createAsyncOptionsProvider(options)];
}
return [
this.createAsyncOptionsProvider(options),
{
provide: options.useClass,
useClass: options.useClass,
},
];
}
static createAsyncOptionsProvider(options) {
if (options.useFactory) {
return {
provide: throttler_constants_1.THROTTLER_OPTIONS,
useFactory: options.useFactory,
inject: options.inject || [],
};
}
return {
provide: throttler_constants_1.THROTTLER_OPTIONS,
useFactory: async (optionsFactory) => await optionsFactory.createThrottlerOptions(),
inject: [options.useExisting || options.useClass],
};
}
};
ThrottlerModule = ThrottlerModule_1 = __decorate([
common_1.Global(),
common_1.Module({})
], ThrottlerModule);
return {
provide: throttler_constants_1.THROTTLER_OPTIONS,
useFactory: async (optionsFactory) => await optionsFactory.createThrottlerOptions(),
inject: [options.useExisting || options.useClass],
};
}
});
ThrottlerModule = ThrottlerModule_1 = __decorate(
[common_1.Global(), common_1.Module({})],
ThrottlerModule,
);
exports.ThrottlerModule = ThrottlerModule;
//# sourceMappingURL=throttler.module.js.map
//# sourceMappingURL=throttler.module.js.map

@@ -1,22 +0,26 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getStorageToken = exports.getOptionsToken = exports.ThrottlerStorageProvider = exports.createThrottlerProviders = void 0;
const throttler_storage_interface_1 = require("./throttler-storage.interface");
const throttler_constants_1 = require("./throttler.constants");
const throttler_service_1 = require("./throttler.service");
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
exports.getStorageToken =
exports.getOptionsToken =
exports.ThrottlerStorageProvider =
exports.createThrottlerProviders =
void 0;
const throttler_storage_interface_1 = require('./throttler-storage.interface');
const throttler_constants_1 = require('./throttler.constants');
const throttler_service_1 = require('./throttler.service');
function createThrottlerProviders(options) {
return [
{
provide: throttler_constants_1.THROTTLER_OPTIONS,
useValue: options,
},
];
return [
{
provide: throttler_constants_1.THROTTLER_OPTIONS,
useValue: options,
},
];
}
exports.createThrottlerProviders = createThrottlerProviders;
exports.ThrottlerStorageProvider = {
provide: throttler_storage_interface_1.ThrottlerStorage,
useFactory: (options) => {
return options.storage ? options.storage : new throttler_service_1.ThrottlerStorageService();
},
inject: [throttler_constants_1.THROTTLER_OPTIONS],
provide: throttler_storage_interface_1.ThrottlerStorage,
useFactory: (options) => {
return options.storage ? options.storage : new throttler_service_1.ThrottlerStorageService();
},
inject: [throttler_constants_1.THROTTLER_OPTIONS],
};

@@ -27,2 +31,2 @@ const getOptionsToken = () => throttler_constants_1.THROTTLER_OPTIONS;

exports.getStorageToken = getStorageToken;
//# sourceMappingURL=throttler.providers.js.map
//# sourceMappingURL=throttler.providers.js.map

@@ -1,42 +0,53 @@

"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;
'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;
};
Object.defineProperty(exports, "__esModule", { value: true });
};
Object.defineProperty(exports, '__esModule', { value: true });
exports.ThrottlerStorageService = void 0;
const common_1 = require("@nestjs/common");
const common_1 = require('@nestjs/common');
let ThrottlerStorageService = class ThrottlerStorageService {
constructor() {
this._storage = {};
this.timeoutIds = [];
constructor() {
this._storage = {};
this.timeoutIds = [];
}
get storage() {
return this._storage;
}
async getRecord(key) {
return this.storage[key] || [];
}
async addRecord(key, ttl) {
const ttlMilliseconds = ttl * 1000;
if (!this.storage[key]) {
this.storage[key] = [];
}
get storage() {
return this._storage;
}
async getRecord(key) {
return this.storage[key] || [];
}
async addRecord(key, ttl) {
const ttlMilliseconds = ttl * 1000;
if (!this.storage[key]) {
this.storage[key] = [];
}
this.storage[key].push(Date.now() + ttlMilliseconds);
const timeoutId = setTimeout(() => {
this.storage[key].shift();
clearTimeout(timeoutId);
}, ttlMilliseconds);
this.timeoutIds.push(timeoutId);
}
onApplicationShutdown() {
this.timeoutIds.forEach(clearTimeout);
}
this.storage[key].push(Date.now() + ttlMilliseconds);
const timeoutId = setTimeout(() => {
this.storage[key].shift();
clearTimeout(timeoutId);
}, ttlMilliseconds);
this.timeoutIds.push(timeoutId);
}
onApplicationShutdown() {
this.timeoutIds.forEach(clearTimeout);
}
};
ThrottlerStorageService = __decorate([
common_1.Injectable()
], ThrottlerStorageService);
ThrottlerStorageService = __decorate([common_1.Injectable()], ThrottlerStorageService);
exports.ThrottlerStorageService = ThrottlerStorageService;
//# sourceMappingURL=throttler.service.js.map
//# sourceMappingURL=throttler.service.js.map
{
"name": "@nestjs/throttler",
"version": "1.2.0",
"version": "1.2.1",
"description": "A Rate-Limiting module for NestJS to work on Express, Fastify, Websockets, Socket.IO, and GraphQL, all rolled up into a simple package.",

@@ -53,23 +53,24 @@ "author": "Jay McDoniel <me@jaymcdoniel.dev>",

"@commitlint/config-angular": "12.1.4",
"@nestjs/cli": "7.6.0",
"@nestjs/common": "7.6.18",
"@nestjs/core": "7.6.18",
"@nestjs/graphql": "7.10.6",
"@nestjs/platform-express": "7.6.18",
"@nestjs/platform-fastify": "7.6.18",
"@nestjs/platform-socket.io": "7.6.18",
"@nestjs/platform-ws": "7.6.18",
"@nestjs/schematics": "7.3.1",
"@nestjs/testing": "7.6.18",
"@nestjs/websockets": "7.6.18",
"@types/express": "4.17.12",
"@types/express-serve-static-core": "4.17.21",
"@types/jest": "26.0.23",
"@types/md5": "2.3.0",
"@types/node": "14.17.4",
"@types/socket.io": "3.0.1",
"@types/socket.io-client": "1.4.36",
"@nestjs/cli": "8.0.2",
"@nestjs/common": "8.0.1",
"@nestjs/core": "8.0.1",
"@nestjs/graphql": "8.0.2",
"@nestjs/platform-express": "8.0.1",
"@nestjs/platform-fastify": "8.0.1",
"@nestjs/platform-socket.io": "8.0.1",
"@nestjs/platform-ws": "8.0.1",
"@nestjs/schematics": "8.0.0",
"@nestjs/testing": "8.0.1",
"@nestjs/websockets": "8.0.1",
"@semantic-release/git": "^9.0.0",
"@types/express": "4.17.13",
"@types/express-serve-static-core": "4.17.24",
"@types/jest": "26.0.24",
"@types/md5": "2.3.1",
"@types/node": "16.3.0",
"@types/socket.io": "3.0.2",
"@types/socket.io-client": "3.0.0",
"@types/supertest": "2.0.11",
"@typescript-eslint/eslint-plugin": "4.28.0",
"@typescript-eslint/parser": "4.28.0",
"@typescript-eslint/eslint-plugin": "4.28.2",
"@typescript-eslint/parser": "4.28.2",
"apollo-server-express": "2.25.2",

@@ -79,29 +80,29 @@ "apollo-server-fastify": "2.25.2",

"cz-conventional-changelog": "3.3.0",
"eslint": "7.29.0",
"eslint-config-prettier": "7.2.0",
"eslint": "7.30.0",
"eslint-config-prettier": "8.3.0",
"eslint-plugin-import": "2.23.4",
"graphql": "15.5.1",
"graphql-tools": "7.0.5",
"husky": "6.0.0",
"jest": "26.6.3",
"husky": "7.0.1",
"jest": "27.0.6",
"lint-staged": "11.0.0",
"nodemon": "2.0.7",
"nodemon": "2.0.10",
"pinst": "2.1.6",
"prettier": "2.3.1",
"prettier": "2.3.2",
"reflect-metadata": "0.1.13",
"rimraf": "3.0.2",
"rxjs": "7.1.0",
"rxjs": "7.2.0",
"semantic-release": "17.4.4",
"socket.io": "4.1.2",
"supertest": "6.1.3",
"ts-jest": "26.5.6",
"ts-loader": "8.3.0",
"ts-node": "9.1.1",
"tsconfig-paths": "3.9.0",
"typescript": "4.3.4",
"ws": "7.5.0"
"ts-jest": "27.0.3",
"ts-loader": "9.2.3",
"ts-node": "10.0.0",
"tsconfig-paths": "3.10.1",
"typescript": "4.3.5",
"ws": "7.5.2"
},
"peerDependencies": {
"@nestjs/common": "^7.0.0",
"@nestjs/core": "^7.0.0",
"@nestjs/common": "^7.0.0 || ^8.0.0",
"@nestjs/core": "^7.0.0 || ^8.0.0",
"reflect-metadata": "^0.1.13"

@@ -108,0 +109,0 @@ },

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc