Notoriously Problematic Merge

    @finastra/nestjs-proxy
    TypeScript icon, indicating that this package has built-in type declarations

    0.7.0 • Public • Published

    NestJS Proxy module Nest Logo

    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 '@finastra/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 !

    Token forwarding

    By default, OAuth token are forwarded to the service call being proxied. You can disable this by setting the forwardToken property to false in the service configuration.

    services: [
      {
        id: 'THIRD_PARTY_SERVICE',
        url: 'https://some-service.com/some-endpoint',
        forwardToken: false,
      },
    ];

    Be careful to only forward tokens to internal services. Don't forward the token to third party services.

    Cookies forwarding

    Cookies are not proxied by default. You can opt in by listing the cookie names in the allowedCookies option:

    allowedCookies: ['cookie1', 'cookie2'],

    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

    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}`);

    target parameter is optional

    Using module with a service using OIDC module with multitenancy configuration

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

    Keywords

    none

    Install

    npm i @finastra/nestjs-proxy

    DownloadsWeekly Downloads

    43

    Version

    0.7.0

    License

    MIT

    Unpacked Size

    119 kB

    Total Files

    36

    Last publish

    Collaborators

    • david.bocle
    • ffdcbot
    • ttalbot