0.4.0 • Published 4 years ago

@ffdc/nestjs-proxy v0.4.0

Weekly downloads
31
License
MIT
Repository
-
Last release
4 years ago

Proxy module

NestJS module to decorate and proxy calls.\ It exposes a /proxy endpoint.

Use it

You can import the module like so :

app.module.ts

ProxyModule.forRoot({
    config: {},
    services: [
      {
        id: 'ACCOUNT_INFORMATION_US',
        url: `https://api.fusionfabric.cloud/retail-us/me/account/v1/accounts`,
        config: {}
      }
    ]
}),

Or asynchronously

app.module.ts

ProxyModule.forRootAsync({
    useClass: ProxyConfigService,
    imports: [ConfigModule],
}),

proxy-config.service.ts

import { ConfigService } from '@nestjs/config';
import { Injectable, Logger } from '@nestjs/common';
import { ProxyModuleOptions, ProxyModuleOptionsFactory } from '@ffdc/nestjs-proxy';

@Injectable()
export class ProxyConfigService implements ProxyModuleOptionsFactory {
  constructor(private configService: ConfigService) {}

  createModuleConfig(): ProxyModuleOptions {
    const FFDC = this.configService.get('FFDC');

    const services = [
      {
        id: 'ACCOUNT_INFORMATION_US',
        url: `${FFDC}/retail-us/me/account/v1/accounts`,
        config: {}
      };
    ];

    return {
      services,
    };
  }
}

Configuration

Whether synchronously or asynchronously, the module takes two parameters (both optionals).

  • services : which is a collection of urls with a given id so that you can query them more efficiently
  • config : which is the configuration from http-proxy which we're using under the hood. Find the offical documentation of this configuration here.

A service can also take an optional config, which is the same signature as the parent one, allowing you to override configuration for that particular service !

Default module configuration

If you do not provide any, the default proxy configuration for this module can be found in proxy.constants.ts, under defaultProxyOptions

Client-side usage examples

Requesting without pre-defined service

const serverUri = 'http://localhost:3000';
const target = 'http://localhost:3001/cats';

// GET
fetch(`${serverUri}/proxy?target=${target}`);

// POST
const data = { name: 'Garfield' };
fetch(`${serverUri}/proxy?target=${target}`, {
  method: 'POST',
  body: JSON.stringify(data),
});

Requesting a specific service

const serverUri = 'http://localhost:3000';
const serviceId = 'ACCOUNT_INFORMATION_US';

fetch(`${serverUri}/proxy?serviceId=${serviceId}`);

// Defining path
const accountId = '112';
const target = `${accountId}/details`;
fetch(`${serverUri}/proxy?serviceId=${serviceId}&target=${target}`);

Using module with a service using OIDC module with multitenancy configuration

All proxy calls need to be prefixed by /${TENANT_ID}/${CHANEL_TYPE}

0.4.0

4 years ago

0.3.1

4 years ago

0.3.0

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.1.0

4 years ago

0.0.9

4 years ago