New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@knawat/advanced-client-module

Package Overview
Dependencies
Maintainers
3
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@knawat/advanced-client-module

This is a Client Proxy providing module.

1.0.5
latest
Source
npm
Version published
Weekly downloads
1
Maintainers
3
Weekly downloads
 
Created
Source

Advanced NestJS Client Proxy Module

Sample usages

First import the package:

import { AdvancedClientModule } from "@knawat/advanced-client-module";

Registration:

    AdvancedClientModule.register({
        transport: 'TCP',
        options: {
          url: 'http://localhost:8080',
        },
    }),

Replace all MessagePattern with MessagePatternExtended and EventPattern with EventPatternExtended decorators to add NAMESPACE in calls.

Now for replacing the new Extended decorators with valid replacement and because we can not alter Reflect.metaData over the Controller class from the npm package we have to do it manually.

First you need to create a service to process decorators like this:

import { Injectable } from '@nestjs/common';
import { EventPattern, MessagePattern } from '@nestjs/microservices';
import {
  EVENT_PATTERN_EXTENDED,
  MESSAGE_PATTERN_EXTENDED,
} from '@knawat/advanced-client-module';

@Injectable()
export class AdvancedClientDecoratorProcessorService {
  processCustomDecorators(namespace: string, types: any[]) {
    for (const type of types) {
      const propNames = Object.getOwnPropertyNames(type.prototype);
      for (const prop of propNames) {
        const propValue = Reflect.getMetadata(
          MESSAGE_PATTERN_EXTENDED,
          Reflect.get(type.prototype, prop),
        );
        if (propValue) {
          propValue.cmd = `${namespace}-${propValue.cmd}`;
          propValue.role = `${namespace}-${propValue.role}`;
          Reflect.decorate(
            [MessagePattern(propValue)],
            type.prototype,
            prop,
            Reflect.getOwnPropertyDescriptor(type.prototype, prop),
          );
        }
        let eventValue = Reflect.getMetadata(
          EVENT_PATTERN_EXTENDED,
          Reflect.get(type.prototype, prop),
        );
        if (eventValue) {
          eventValue = `${namespace}-${eventValue}`;
          Reflect.decorate(
            [EventPattern(eventValue)],
            type.prototype,
            prop,
            Reflect.getOwnPropertyDescriptor(type.prototype, prop),
          );
        }
      }
    }
  }
}

Now add the processor to the main.ts as below:

  app
    .get(AdvancedClientDecoratorProcessorService)
    .processCustomDecorators(process.env.NAMESPACE, [...CONTROLLERS-WITH-EXTENDED-DECORATORS]);

In order to use microservice client you need to inject the SERVICE_CLIENT class:

  constructor(
    @Inject(SERVICE_CLIENT)
    private readonly client: ClientProxy,
  ) {}

FAQs

Package last updated on 24 Aug 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts