Skip to content

Commit 32695fc

Browse files
update changelog and make single retry manager for all APIs
1 parent e930fda commit 32695fc

File tree

6 files changed

+41
-34
lines changed

6 files changed

+41
-34
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77

8+
---
9+
## [v0.6.0] - 2023-12-26
10+
### Added
11+
- Added retry mechanism for APIs getting used inside extension library if Fynd Platform server is down.
812
---
913
## [v0.5.4] - 2023-03-03
1014
### Changed

express/extension.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class Extension {
2020
this.cluster = "https://api.fynd.com";
2121
this.webhookRegistry = null;
2222
this._isInitialized = false;
23-
this.retryManager = new RetryManger();
23+
this._retryManager = new RetryManger();
2424
}
2525

2626
async initialize(data) {
@@ -57,7 +57,7 @@ class Extension {
5757
}
5858
this.cluster = data.cluster;
5959
}
60-
this.webhookRegistry = new WebhookRegistry();
60+
this.webhookRegistry = new WebhookRegistry(this._retryManager);
6161

6262
await this.getExtensionDetails();
6363

@@ -151,9 +151,9 @@ class Extension {
151151
let url = `${this.cluster}/service/panel/partners/v1.0/extensions/details/${this.api_key}`;
152152
const uniqueKey = `${url}`;
153153

154-
const retryInfo = this.retryManager.retryInfoMap.get(uniqueKey);
154+
const retryInfo = this._retryManager.retryInfoMap.get(uniqueKey);
155155
if (retryInfo && !retryInfo.isRetry) {
156-
this.retryManager.resetRetryState(uniqueKey);
156+
this._retryManager.resetRetryState(uniqueKey);
157157
}
158158

159159
try {
@@ -177,10 +177,10 @@ class Extension {
177177

178178
if (
179179
RetryManger.shouldRetryOnError(err)
180-
&& !this.retryManager.retryInfoMap.get(uniqueKey)?.isRetryInProgress
180+
&& !this._retryManager.isRetryInProgress(uniqueKey)
181181
) {
182182
logger.debug(`API call failed. Starting retry for ${uniqueKey}`)
183-
return await this.retryManager.retry(uniqueKey, this.getExtensionDetails.bind(this));
183+
return await this._retryManager.retry(uniqueKey, this.getExtensionDetails.bind(this));
184184
}
185185

186186
throw new FdkInvalidExtensionConfig("Invalid api_key or api_secret. Reason:" + err.message);

express/retry_manager.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,28 +49,28 @@ class RetryManger {
4949
retryInfo.retryCount++;
5050

5151
await (new Promise((resolve, reject) => {
52-
retryInfo.retryTimer = setTimeout(resolve, this.getNextRetryMilliseconds(retryInfo.retryCount));
52+
retryInfo.retryTimer = setTimeout(resolve, this._getNextRetrySeconds(retryInfo.retryCount));
5353
}))
5454

55-
return await this.makeRetry(uniqueKey);
55+
return await this._makeRetry(uniqueKey);
5656
}
5757

5858

59-
getNextRetryMilliseconds(retryCount) {
60-
let nextRetryMilliseconds = 30 * 1000; // 30 seconds
59+
_getNextRetrySeconds(retryCount) {
60+
let nextRetrySeconds = 30 * 1000; // 30 seconds
6161

6262
if (retryCount > 3) {
6363
const MAX_MINUTES_TO_WAIT = 3;
6464
const MINUTES_TO_WAIT = Math.min((retryCount - 3), MAX_MINUTES_TO_WAIT);
65-
nextRetryMilliseconds = 1000 * 60 * MINUTES_TO_WAIT;
65+
nextRetrySeconds = 1000 * 60 * MINUTES_TO_WAIT;
6666
}
6767

68-
return nextRetryMilliseconds;
68+
return nextRetrySeconds;
6969
}
7070

7171

7272

73-
async makeRetry(uniqueKey) {
73+
async _makeRetry(uniqueKey) {
7474

7575
const retryInfo = this.retryInfoMap.get(uniqueKey);
7676

@@ -105,6 +105,10 @@ class RetryManger {
105105
retryInfo.isRetryInProgress = false;
106106
retryInfo.retryCount = 0;
107107
}
108+
109+
isRetryInProgress(uniqueKey) {
110+
return this.retryInfoMap.get(uniqueKey)? this.retryInfoMap.get(uniqueKey).isRetryInProgress: false;
111+
}
108112
}
109113

110114
module.exports = {

express/webhook.js

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@ const { FdkWebhookProcessError, FdkWebhookHandlerNotFound, FdkWebhookRegistratio
77
const logger = require("./logger");
88
const { RetryManger } = require("./retry_manager");
99

10-
let retryManager = new RetryManger();
11-
1210
let eventConfig = {}
1311
class WebhookRegistry {
14-
constructor() {
12+
constructor(retryManager) {
1513
this._handlerMap = null;
1614
this._config = null;
1715
this._fdkConfig = null;
16+
this._retryManager = retryManager;
1817
}
1918

2019
async initialize(config, fdkConfig) {
@@ -322,19 +321,19 @@ class WebhookRegistry {
322321
async registerSubscriberConfig(platformClient, subscriberConfig) {
323322
const uniqueKey = `registerSubscriberToEvent_${platformClient.config.companyId}_${this._fdkConfig.api_key}`;
324323

325-
const retryInfo = retryManager.retryInfoMap.get(uniqueKey);
324+
const retryInfo = this._retryManager.retryInfoMap.get(uniqueKey);
326325
if (retryInfo && !retryInfo.isRetry) {
327-
retryManager.resetRetryState(uniqueKey);
326+
this._retryManager.resetRetryState(uniqueKey);
328327
}
329328

330329
try {
331330
return await platformClient.webhook.registerSubscriberToEvent({body: subscriberConfig});
332331
} catch(err) {
333332
if (
334333
RetryManger.shouldRetryOnError(err)
335-
&& !retryManager.retryInfoMap.get(uniqueKey)?.isRetryInProgress
334+
&& !this._retryManager.isRetryInProgress(uniqueKey)
336335
) {
337-
return await retryManager.retry(
336+
return await this._retryManager.retry(
338337
uniqueKey,
339338
this.registerSubscriberConfig.bind(this),
340339
platformClient,
@@ -348,19 +347,19 @@ class WebhookRegistry {
348347
async updateSubscriberConfig(platformClient, subscriberConfig) {
349348
const uniqueKey = `updateSubscriberConfig_${platformClient.config.companyId}_${this._fdkConfig.api_key}`;
350349

351-
const retryInfo = retryManager.retryInfoMap.get(uniqueKey);
350+
const retryInfo = this._retryManager.retryInfoMap.get(uniqueKey);
352351
if (retryInfo && !retryInfo.isRetry) {
353-
retryManager.resetRetryState(uniqueKey);
352+
this._retryManager.resetRetryState(uniqueKey);
354353
}
355354

356355
try {
357356
return await platformClient.webhook.updateSubscriberConfig({body: subscriberConfig});
358357
} catch(err) {
359358
if (
360359
RetryManger.shouldRetryOnError(err)
361-
&& !retryManager.retryInfoMap.get(uniqueKey)?.isRetryInProgress
360+
&& !this._retryManager.isRetryInProgress(uniqueKey)
362361
) {
363-
return await retryManager.retry(
362+
return await this._retryManager.retry(
364363
uniqueKey,
365364
this.updateSubscriberConfig.bind(this),
366365
platformClient,
@@ -374,9 +373,9 @@ class WebhookRegistry {
374373
async getSubscriberConfig(platformClient) {
375374
const uniqueKey = `getSubscribersByExtensionId_${platformClient.config.companyId}_${this._fdkConfig.api_key}`;
376375

377-
const retryInfo = retryManager.retryInfoMap.get(uniqueKey);
376+
const retryInfo = this._retryManager.retryInfoMap.get(uniqueKey);
378377
if (retryInfo && !retryInfo.isRetry) {
379-
retryManager.resetRetryState(uniqueKey);
378+
this._retryManager.resetRetryState(uniqueKey);
380379
}
381380

382381
try {
@@ -386,9 +385,9 @@ class WebhookRegistry {
386385
catch(err){
387386
if (
388387
RetryManger.shouldRetryOnError(err)
389-
&& !retryManager.retryInfoMap.get(uniqueKey)?.isRetryInProgress
388+
&& !this._retryManager.isRetryInProgress(uniqueKey)
390389
) {
391-
return await retryManager.retry(
390+
return await this._retryManager.retry(
392391
uniqueKey,
393392
this.getSubscriberConfig.bind(this),
394393
platformClient
@@ -402,10 +401,10 @@ class WebhookRegistry {
402401
let url = `${this._fdkConfig.cluster}/service/common/webhook/v1.0/events/query-event-details`;
403402
const uniqueKey = `${url}_${this._fdkConfig.api_key}`;
404403

405-
const retryInfo = retryManager.retryInfoMap.get(uniqueKey);
404+
const retryInfo = this._retryManager.retryInfoMap.get(uniqueKey);
406405

407406
if (retryInfo && !retryInfo.isRetry) {
408-
retryManager.resetRetryState(uniqueKey);
407+
this._retryManager.resetRetryState(uniqueKey);
409408
}
410409

411410
try {
@@ -440,9 +439,9 @@ class WebhookRegistry {
440439

441440
if (
442441
RetryManger.shouldRetryOnError(err)
443-
&& !retryManager.retryInfoMap.get(uniqueKey)?.isRetryInProgress
442+
&& !this._retryManager.isRetryInProgress(uniqueKey)
444443
) {
445-
return await retryManager.retry(uniqueKey, this.getEventConfig.bind(this), handlerConfig);
444+
return await this._retryManager.retry(uniqueKey, this.getEventConfig.bind(this), handlerConfig);
446445
}
447446

448447
throw new FdkInvalidWebhookConfig(`Error while fetching webhook events configuration, Reason: ${err.message}`)

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
},
5757
"name": "fdk-extension-javascript",
5858
"description": "FDK Extension Helper Library",
59-
"version": "0.6.0-beta.3",
59+
"version": "0.6.0",
6060
"main": "index.js",
6161
"directories": {
6262
"example": "examples"

0 commit comments

Comments
 (0)