From ea31a9c86b82550e2d43f3433ec618785cf2b34a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20=E9=87=91=E5=8F=AF=E6=98=8E?= Date: Sun, 7 Jun 2020 16:26:38 +0800 Subject: [PATCH] feat(decorator): add setThrottlerMetadata() function back --- src/throttle.decorator.ts | 11 +++++++---- src/throttler.guard.ts | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/throttle.decorator.ts b/src/throttle.decorator.ts index a1d5e252..d2bdc4b4 100644 --- a/src/throttle.decorator.ts +++ b/src/throttle.decorator.ts @@ -1,5 +1,10 @@ import { THROTTLER_LIMIT, THROTTLER_SKIP, THROTTLER_TTL } from './throttler.constants'; +function setThrottlerMetadata(target: any, limit: number, ttl: number): void { + Reflect.defineMetadata(THROTTLER_TTL, ttl, target); + Reflect.defineMetadata(THROTTLER_LIMIT, limit, target); +} + /** * Adds metadata to the target which will be handled by the ThrottlerGuard to * handle incoming requests based on the given metadata. @@ -12,12 +17,10 @@ export const Throttle = (limit = 20, ttl = 60): MethodDecorator & ClassDecorator descriptor?: TypedPropertyDescriptor, ) => { if (descriptor) { - Reflect.defineMetadata(THROTTLER_LIMIT, limit, descriptor.value); - Reflect.defineMetadata(THROTTLER_TTL, ttl, descriptor.value); + setThrottlerMetadata(descriptor.value, limit, ttl); return descriptor; } - Reflect.defineMetadata(THROTTLER_LIMIT, limit, target); - Reflect.defineMetadata(THROTTLER_TTL, ttl, target); + setThrottlerMetadata(target, limit, ttl); return target; }; }; diff --git a/src/throttler.guard.ts b/src/throttler.guard.ts index bf230bea..4109cd5c 100644 --- a/src/throttler.guard.ts +++ b/src/throttler.guard.ts @@ -118,8 +118,8 @@ export class ThrottlerGuard implements CanActivate { ): Promise { const client = context.switchToWs().getClient(); const ip = ['conn', '_socket'] - .map(key => client[key]) - .filter(obj => obj) + .map((key) => client[key]) + .filter((obj) => obj) .shift().remoteAddress; const key = this.generateKey(context, ip); const ttls = await this.storageService.getRecord(key);