NestJS module to decorate and proxy calls.
It exposes a /proxy
endpoint.
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: {}
}
]
}),
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,
};
}
}
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 !
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 are not proxied by default. You can opt in by listing the cookie names in the allowedCookies
option:
allowedCookies: ['cookie1', 'cookie2'],
If you do not provide any, the default proxy configuration for this module can be found in proxy.constants.ts, under defaultProxyOptions
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
All proxy calls need to be prefixed by /${TENANT_ID}/${CHANEL_TYPE}