Skip to content

Commit a6e4aec

Browse files
authored
Merge pull request #436 from g-ongenae/feature/keep-alive
Ensure calls on categories
2 parents 10759fc + 957b6c4 commit a6e4aec

File tree

5 files changed

+62
-5
lines changed

5 files changed

+62
-5
lines changed

config/default.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,7 @@
2626
"customerIdPassword": "password",
2727
"activateBridgeRequestInterceptor": true,
2828
"forceBridgeUsersDeletion": false,
29-
"disableMasking": false
29+
"disableMasking": false,
30+
"cacheTtlOfCategory": 604800,
31+
"cacheTtlOfBankInfo": 86400
3032
}

package-lock.json

Lines changed: 38 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"@nestjs/core": "^8.4.7",
3232
"@nestjs/platform-express": "^8.4.7",
3333
"axios": "^0.27.2",
34+
"axios-retry": "^4.5.0",
3435
"cache-manager": "^4.0.1",
3536
"class-transformer": "^0.5.1",
3637
"class-validator": "^0.14.0",

src/aggregator/services/aggregator.service.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
BridgeAccount,
99
BridgeRefreshStatus,
1010
BridgeTransaction,
11-
BridgeUserInformation,
1211
UserAccount,
1312
} from '../interfaces/bridge.interface';
1413
import { BridgeClient, ClientConfig } from './bridge/bridge.client';

src/aggregator/services/bridge/bridge.client.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import { Agent } from 'node:http';
12
import { HttpService } from '@nestjs/axios';
23
import { CACHE_MANAGER, Inject, Injectable, Logger } from '@nestjs/common';
34
import { AxiosError, AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse, AxiosResponseHeaders } from 'axios';
5+
import axiosRetry, { exponentialDelay } from 'axios-retry';
46
import { Cache } from 'cache-manager';
57
import { isNil } from 'lodash';
68
import { config } from 'node-config-ts';
@@ -44,6 +46,19 @@ export class BridgeClient {
4446
private readonly logger: Logger = new Logger(BridgeClient.name);
4547

4648
constructor(@Inject(CACHE_MANAGER) private readonly cacheManager: Cache, private readonly httpService: HttpService) {
49+
const httpAgent = new Agent({ keepAlive: true });
50+
51+
this.httpService.axiosRef.defaults.httpAgent = httpAgent;
52+
this.httpService.axiosRef.defaults.httpsAgent = httpAgent;
53+
54+
axiosRetry(this.httpService.axiosRef, {
55+
retries: 3,
56+
retryDelay: exponentialDelay,
57+
retryCondition: (err: AxiosError) =>
58+
axiosRetry.isNetworkOrIdempotentRequestError(err) ||
59+
['ECONNRESET', 'ETIMEDOUT', 'EAI_AGAIN'].includes(err.code as string),
60+
});
61+
4762
if (config.activateBridgeRequestInterceptor) {
4863
this.httpService.axiosRef.interceptors.request.use((_config: AxiosRequestConfig): AxiosRequestConfig => {
4964
this.logger.log(`${_config.method} ${_config.url} - Request to Bridge`);
@@ -82,7 +97,9 @@ export class BridgeClient {
8297
const url: string = `${config.bridge.baseUrl}/v2/users`;
8398

8499
const resp: AxiosResponse<UserResponse> = await BridgeClient.toPromise(
85-
this.httpService.post(url, userAccount, { headers: { ...BridgeClient.getHeaders(clientConfig) } }),
100+
this.httpService.post(url, userAccount, {
101+
headers: { ...BridgeClient.getHeaders(clientConfig) },
102+
}),
86103
);
87104
this.logger.debug(`User created with email ${userAccount.email}`);
88105

@@ -232,7 +249,7 @@ export class BridgeClient {
232249
}),
233250
);
234251
const { name } = resp.data;
235-
await this.cacheManager.set(url, name, { ttl: 86400 });
252+
await this.cacheManager.set(url, name, { ttl: config.cacheTtlOfCategory });
236253

237254
return name;
238255
} catch (err) {
@@ -274,7 +291,7 @@ export class BridgeClient {
274291
name: resp.data.name,
275292
logoUrl: resp.data.logo_url,
276293
};
277-
await this.cacheManager.set(url, bankInfo, { ttl: 86400 });
294+
await this.cacheManager.set(url, bankInfo, { ttl: config.cacheTtlOfBankInfo });
278295

279296
return bankInfo;
280297
} catch (err) {

0 commit comments

Comments
 (0)