@stigg/node-server-sdk 3.26.0 → 3.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -17,7 +17,6 @@ export declare class RedisSingleExecutionService {
|
|
|
17
17
|
private readonly pendingNotifications;
|
|
18
18
|
constructor(operationName: string, environmentPrefix: string, notificationTimeoutMs: number, redisClient: Redis, redlock: Redlock, loggerService: LoggerService);
|
|
19
19
|
executeOnceAcrossMultipleProcesses<ApiResponse, Response>(context: OperationContext<ApiResponse, Response>): Promise<Response>;
|
|
20
|
-
refetchFromApiAndNotify<ApiResponse, Response>({ reloadFromApi, transformApiResult }: OperationContext<ApiResponse, Response>, { cancelNotificationSubscription, notify }: NotificationContext): Promise<Response>;
|
|
21
20
|
waitForNotificationAndLoadFromCache<ApiResponse, Response>({ customerId, resourceId, reloadFromApi, loadFromCache, transformApiResult, }: OperationContext<ApiResponse, Response>, { cancelNotificationSubscription, notificationPromise }: NotificationContext): Promise<Response>;
|
|
22
21
|
private isLockTakenByAnotherClientError;
|
|
23
22
|
private subscribeForNotification;
|
|
@@ -34,37 +34,31 @@ class RedisSingleExecutionService {
|
|
|
34
34
|
this.subscribeClient.on('message', this.onEventNotification.bind(this));
|
|
35
35
|
}
|
|
36
36
|
async executeOnceAcrossMultipleProcesses(context) {
|
|
37
|
-
const { customerId, resourceId } = context;
|
|
37
|
+
const { customerId, resourceId, reloadFromApi, transformApiResult } = context;
|
|
38
38
|
const notificationContext = await this.subscribeForNotification(context);
|
|
39
|
+
const { notify, cancelNotificationSubscription } = notificationContext;
|
|
39
40
|
const lockKey = (0, cacheKeysHelpers_1.buildLockKey)(this.environmentPrefix, customerId, resourceId, this.operationName);
|
|
40
41
|
try {
|
|
41
|
-
|
|
42
|
+
const response = await this.redlock.using([lockKey], RedisSingleExecution_utils_1.LOCK_DURATION, RedisSingleExecution_utils_1.LOCK_NO_RETRY_SETTINGS, async () => {
|
|
42
43
|
// At this point, this process has the responsibility to fetch data from
|
|
43
44
|
// the API, cache it, and then notify other clients to continue their execution.
|
|
44
|
-
|
|
45
|
+
// no need to listen anymore as this process is the one who will notify later
|
|
46
|
+
await cancelNotificationSubscription();
|
|
47
|
+
// perform the operation
|
|
48
|
+
const response = await reloadFromApi();
|
|
49
|
+
return transformApiResult(response);
|
|
45
50
|
});
|
|
46
|
-
}
|
|
47
|
-
catch (err) {
|
|
48
|
-
if (!this.isLockTakenByAnotherClientError(err)) {
|
|
49
|
-
throw err;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
// At this point, another process is responsible for fetching data from
|
|
53
|
-
// the API and caching it. This process waits until the data fetching and
|
|
54
|
-
// caching is complete, then retrieves the data from the cache.
|
|
55
|
-
return this.waitForNotificationAndLoadFromCache(context, notificationContext);
|
|
56
|
-
}
|
|
57
|
-
async refetchFromApiAndNotify({ reloadFromApi, transformApiResult }, { cancelNotificationSubscription, notify }) {
|
|
58
|
-
try {
|
|
59
|
-
// no need to listen anymore as this process is the one who will notify later
|
|
60
|
-
await cancelNotificationSubscription();
|
|
61
|
-
// perform the operation
|
|
62
|
-
const response = await reloadFromApi();
|
|
63
51
|
// notify other clients that the data is ready
|
|
64
52
|
await notify();
|
|
65
|
-
return
|
|
53
|
+
return response;
|
|
66
54
|
}
|
|
67
55
|
catch (err) {
|
|
56
|
+
if (this.isLockTakenByAnotherClientError(err)) {
|
|
57
|
+
// At this point, another process is responsible for fetching data from
|
|
58
|
+
// the API and caching it. This process waits until the data fetching and
|
|
59
|
+
// caching is complete, then retrieves the data from the cache.
|
|
60
|
+
return this.waitForNotificationAndLoadFromCache(context, notificationContext);
|
|
61
|
+
}
|
|
68
62
|
await notify(err.message);
|
|
69
63
|
throw err;
|
|
70
64
|
}
|
|
@@ -184,4 +178,4 @@ __decorate([
|
|
|
184
178
|
(0, ReuseOngoingExecution_1.ReuseOngoingExecution)(({ customerId, resourceId }) => (0, lodash_1.compact)([customerId, resourceId]).join(':'))
|
|
185
179
|
], RedisSingleExecutionService.prototype, "executeOnceAcrossMultipleProcesses", null);
|
|
186
180
|
exports.RedisSingleExecutionService = RedisSingleExecutionService;
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVkaXNTaW5nbGVFeGVjdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvY2FjaGUvUmVkaXNTaW5nbGVFeGVjdXRpb25TZXJ2aWNlL1JlZGlzU2luZ2xlRXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLHFDQUFrRDtBQUVsRCxzRUFBK0Q7QUFDL0QsbUNBQWlDO0FBQ2pDLDJGQUF3RjtBQUN4Riw2RUFTc0M7QUFFdEM7OztHQUdHO0FBQ0gsTUFBYSwyQkFBMkI7SUFJdEMsWUFDbUIsYUFBcUIsRUFDckIsaUJBQXlCO0lBQzFDLGlFQUFpRTtJQUNqRSxxRUFBcUU7SUFDcEQscUJBQTZCLEVBQzdCLFdBQWtCLEVBQ2xCLE9BQWdCLEVBQ2hCLGFBQTRCO1FBUDVCLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtRQUd6QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQVE7UUFDN0IsZ0JBQVcsR0FBWCxXQUFXLENBQU87UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVY5Qix5QkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztRQVkzRSxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0csSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQztRQUN0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
|