@nestjs/throttler
Advanced tools
Comparing version 1.2.0 to 1.2.1
@@ -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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
498
129701
51
34