@stigg/node-server-sdk 3.24.2 → 3.26.0
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.
- package/dist/client.js +33 -10
- package/dist/configuration.d.ts +14 -0
- package/dist/configuration.js +1 -1
- package/dist/services/cache/RedisSingleExecutionService/RedisSingleExecution.d.ts +28 -0
- package/dist/services/cache/RedisSingleExecutionService/RedisSingleExecution.js +187 -0
- package/dist/services/cache/RedisSingleExecutionService/RedisSingleExecution.utils.d.ts +26 -0
- package/dist/services/cache/RedisSingleExecutionService/RedisSingleExecution.utils.js +18 -0
- package/dist/services/cache/RedisSingleExecutionService/index.d.ts +1 -0
- package/dist/services/cache/RedisSingleExecutionService/index.js +6 -0
- package/dist/services/cache/cacheService.d.ts +5 -3
- package/dist/services/cache/inMemoryCacheService.d.ts +2 -1
- package/dist/services/cache/inMemoryCacheService.js +4 -2
- package/dist/services/cache/redisCacheService.d.ts +6 -2
- package/dist/services/cache/redisCacheService.js +40 -14
- package/dist/services/entitlementsService.d.ts +34 -8
- package/dist/services/entitlementsService.js +63 -61
- package/dist/services/inMemoryEntitlementsService.d.ts +3 -1
- package/dist/services/inMemoryEntitlementsService.js +97 -61
- package/dist/services/redisEntitlementsService.d.ts +8 -4
- package/dist/services/redisEntitlementsService.js +67 -50
- package/dist/types.d.ts +1 -0
- package/dist/types.js +3 -0
- package/dist/utils/ModelMapper.js +4 -3
- package/dist/utils/cacheKeysHelpers.d.ts +1 -1
- package/dist/utils/cacheKeysHelpers.js +11 -4
- package/dist/utils/isMetered.d.ts +7 -0
- package/dist/utils/isMetered.js +13 -0
- package/package.json +1 -1
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
2
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
9
|
exports.InMemoryEntitlementsService = void 0;
|
|
4
10
|
const sdk_1 = require("@stigg/api-client-js/src/generated/sdk");
|
|
5
11
|
const entitlementsService_1 = require("./entitlementsService");
|
|
12
|
+
const entitlementDecisionService_1 = require("./entitlementDecisionService");
|
|
13
|
+
const ReuseOngoingExecution_1 = require("../utils/decorators/ReuseOngoingExecution");
|
|
14
|
+
const lodash_1 = require("lodash");
|
|
6
15
|
const WS_ERROR_RECONNECT_INTERVAL_MS = 5 * 1000;
|
|
7
16
|
class InMemoryEntitlementsService extends entitlementsService_1.EntitlementsService {
|
|
8
17
|
constructor(cacheService, client, batchedGraphqlClient, eventEmitter, loggerService, edgeApiClient) {
|
|
@@ -12,66 +21,6 @@ class InMemoryEntitlementsService extends entitlementsService_1.EntitlementsServ
|
|
|
12
21
|
this.entitlementsSubscription = null;
|
|
13
22
|
this.usageSubscription = null;
|
|
14
23
|
this.packagePublished = null;
|
|
15
|
-
this.onEntitlementsUpdated = (result) => {
|
|
16
|
-
if (result.errors || !result.data) {
|
|
17
|
-
this.loggerService.error(`Failed to handle entitlements updated event. Errors: ${result.errors}`, {
|
|
18
|
-
errors: JSON.stringify(result.errors),
|
|
19
|
-
});
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
const entitlementsUpdated = result.data.entitlementsUpdated;
|
|
23
|
-
this.loggerService.debug(`Entitlements updated event arrived.`, {
|
|
24
|
-
customerId: entitlementsUpdated.customerId,
|
|
25
|
-
entitlements: entitlementsUpdated.entitlements,
|
|
26
|
-
});
|
|
27
|
-
const entitlements = this.cacheMapper.mapCachedEntitlements(entitlementsUpdated.entitlements);
|
|
28
|
-
this.cacheService.setCustomer(entitlementsUpdated.customerId, entitlements, entitlementsUpdated.resourceId || undefined);
|
|
29
|
-
this.eventEmitter.emit('entitlementsUpdated', entitlementsUpdated);
|
|
30
|
-
};
|
|
31
|
-
this.onUsageUpdated = (result) => {
|
|
32
|
-
if (result.errors || !result.data) {
|
|
33
|
-
this.loggerService.error(`Failed to handle usage updated event. Errors: ${result.errors}`, {
|
|
34
|
-
errors: JSON.stringify(result.errors),
|
|
35
|
-
});
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
const { usage: { customerId, featureId, resourceId, currentUsage, nextResetDate }, } = result.data.usageUpdated;
|
|
39
|
-
this.loggerService.debug(`Usage updated event arrived.`, {
|
|
40
|
-
customerId: customerId,
|
|
41
|
-
featureId: featureId,
|
|
42
|
-
resourceId: resourceId,
|
|
43
|
-
currentUsage: currentUsage,
|
|
44
|
-
nextResetDate: nextResetDate,
|
|
45
|
-
});
|
|
46
|
-
const wasSet = this.cacheService.updateFeatureUsage({
|
|
47
|
-
timestamp: new Date(),
|
|
48
|
-
customerId,
|
|
49
|
-
resourceId: resourceId || undefined,
|
|
50
|
-
featureId,
|
|
51
|
-
currentUsage,
|
|
52
|
-
nextResetDate: nextResetDate || undefined,
|
|
53
|
-
});
|
|
54
|
-
if (wasSet) {
|
|
55
|
-
this.eventEmitter.emit('usageUpdated', result.data.usageUpdated);
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
this.onPackagePublished = (result) => {
|
|
59
|
-
var _a, _b;
|
|
60
|
-
if (result.errors || !result.data) {
|
|
61
|
-
this.loggerService.error(`Failed to handle package published event. Errors: ${result.errors}`, {
|
|
62
|
-
errors: JSON.stringify(result.errors),
|
|
63
|
-
});
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
this.loggerService.debug(`Package published event arrived.`, {
|
|
67
|
-
data: (_a = result.data) === null || _a === void 0 ? void 0 : _a.packagePublished,
|
|
68
|
-
});
|
|
69
|
-
if (((_b = result.data) === null || _b === void 0 ? void 0 : _b.packagePublished.migrationType) === sdk_1.PublishMigrationType.AllCustomers) {
|
|
70
|
-
this.loggerService.log('Clearing cache due to package published event');
|
|
71
|
-
this.clearCache();
|
|
72
|
-
}
|
|
73
|
-
this.eventEmitter.emit('packagePublished', result.data.packagePublished);
|
|
74
|
-
};
|
|
75
24
|
}
|
|
76
25
|
init() {
|
|
77
26
|
this.loggerService.log('Subscribing to real-time updates');
|
|
@@ -109,6 +58,49 @@ class InMemoryEntitlementsService extends entitlementsService_1.EntitlementsServ
|
|
|
109
58
|
this.cacheService.clearCache();
|
|
110
59
|
this.isInitialized = false;
|
|
111
60
|
}
|
|
61
|
+
onEntitlementsUpdated(result) {
|
|
62
|
+
if (result.errors || !result.data) {
|
|
63
|
+
this.loggerService.error(`Failed to handle entitlements updated event. Errors: ${result.errors}`, {
|
|
64
|
+
errors: JSON.stringify(result.errors),
|
|
65
|
+
});
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const entitlementsUpdated = result.data.entitlementsUpdated;
|
|
69
|
+
this.loggerService.debug(`Entitlements updated event arrived.`, {
|
|
70
|
+
customerId: entitlementsUpdated.customerId,
|
|
71
|
+
entitlements: entitlementsUpdated.entitlements,
|
|
72
|
+
});
|
|
73
|
+
const entitlements = this.cacheMapper.mapCachedEntitlements(entitlementsUpdated.entitlements);
|
|
74
|
+
this.cacheService.setCustomer(entitlementsUpdated.customerId, entitlements, entitlementsUpdated.resourceId || undefined);
|
|
75
|
+
this.eventEmitter.emit('entitlementsUpdated', entitlementsUpdated);
|
|
76
|
+
}
|
|
77
|
+
onUsageUpdated(result) {
|
|
78
|
+
if (result.errors || !result.data) {
|
|
79
|
+
this.loggerService.error(`Failed to handle usage updated event. Errors: ${result.errors}`, {
|
|
80
|
+
errors: JSON.stringify(result.errors),
|
|
81
|
+
});
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const { usage: { customerId, featureId, resourceId, currentUsage, nextResetDate }, } = result.data.usageUpdated;
|
|
85
|
+
this.loggerService.debug(`Usage updated event arrived.`, {
|
|
86
|
+
customerId: customerId,
|
|
87
|
+
featureId: featureId,
|
|
88
|
+
resourceId: resourceId,
|
|
89
|
+
currentUsage: currentUsage,
|
|
90
|
+
nextResetDate: nextResetDate,
|
|
91
|
+
});
|
|
92
|
+
const wasSet = this.cacheService.updateFeatureUsage({
|
|
93
|
+
timestamp: new Date(),
|
|
94
|
+
customerId,
|
|
95
|
+
resourceId: resourceId || undefined,
|
|
96
|
+
featureId,
|
|
97
|
+
currentUsage,
|
|
98
|
+
nextResetDate: nextResetDate || undefined,
|
|
99
|
+
});
|
|
100
|
+
if (wasSet) {
|
|
101
|
+
this.eventEmitter.emit('usageUpdated', result.data.usageUpdated);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
112
104
|
isErrorRecoverable(err) {
|
|
113
105
|
const isInvalidAPIKeyError = err.reason === 'Invalid API key';
|
|
114
106
|
return !isInvalidAPIKeyError;
|
|
@@ -116,6 +108,50 @@ class InMemoryEntitlementsService extends entitlementsService_1.EntitlementsServ
|
|
|
116
108
|
clearCache() {
|
|
117
109
|
return this.cacheService.clearCache();
|
|
118
110
|
}
|
|
111
|
+
onPackagePublished(result) {
|
|
112
|
+
var _a, _b;
|
|
113
|
+
if (result.errors || !result.data) {
|
|
114
|
+
this.loggerService.error(`Failed to handle package published event. Errors: ${result.errors}`, {
|
|
115
|
+
errors: JSON.stringify(result.errors),
|
|
116
|
+
});
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.loggerService.debug(`Package published event arrived.`, {
|
|
120
|
+
data: (_a = result.data) === null || _a === void 0 ? void 0 : _a.packagePublished,
|
|
121
|
+
});
|
|
122
|
+
if (((_b = result.data) === null || _b === void 0 ? void 0 : _b.packagePublished.migrationType) === sdk_1.PublishMigrationType.AllCustomers) {
|
|
123
|
+
this.loggerService.log('Clearing cache due to package published event');
|
|
124
|
+
this.clearCache();
|
|
125
|
+
}
|
|
126
|
+
this.eventEmitter.emit('packagePublished', result.data.packagePublished);
|
|
127
|
+
}
|
|
128
|
+
async getCustomerEntitlementsWithUsage(customerRefId, resourceId) {
|
|
129
|
+
const loadFromCache = () => this.cacheService.getCustomerEntitlements(customerRefId, resourceId);
|
|
130
|
+
let { entitlements, customerExists } = loadFromCache();
|
|
131
|
+
if (!customerExists || !this.isInitialized) {
|
|
132
|
+
({ entitlements, customerExists } = await this.refetchEntitlementsAfterCacheMiss({
|
|
133
|
+
customerId: customerRefId,
|
|
134
|
+
resourceId,
|
|
135
|
+
triggeredBy: 'getCustomerEntitlementsWithUsage',
|
|
136
|
+
loadFromCache,
|
|
137
|
+
transformApiResult: (x) => x,
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
if (!entitlements) {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
return Array.from(entitlements.values()).map((value) => {
|
|
144
|
+
const decision = entitlementDecisionService_1.EntitlementDecisionService.decideEntitlementPolicy(customerExists, value);
|
|
145
|
+
return this.modelMapper.mapEntitlement(value, decision);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
async refetchEntitlementsAfterCacheMiss(props) {
|
|
149
|
+
const response = await this.refetchEntitlements(props);
|
|
150
|
+
return props.transformApiResult(response);
|
|
151
|
+
}
|
|
119
152
|
}
|
|
153
|
+
__decorate([
|
|
154
|
+
(0, ReuseOngoingExecution_1.ReuseOngoingExecution)(({ customerId, resourceId }) => (0, lodash_1.compact)([customerId, resourceId]).join(':'))
|
|
155
|
+
], InMemoryEntitlementsService.prototype, "refetchEntitlementsAfterCacheMiss", null);
|
|
120
156
|
exports.InMemoryEntitlementsService = InMemoryEntitlementsService;
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5NZW1vcnlFbnRpdGxlbWVudHNTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2luTWVtb3J5RW50aXRsZW1lbnRzU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQSxnRUFLZ0Q7QUFHaEQsK0RBQW9HO0FBSXBHLDZFQUEwRTtBQUMxRSxxRkFBa0Y7QUFDbEYsbUNBQWlDO0FBRWpDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUVoRCxNQUFhLDJCQUE0QixTQUFRLHlDQUFtQjtJQUtsRSxZQUNxQixZQUFrQyxFQUNyRCxNQUEyQyxFQUMzQyxvQkFBeUQsRUFDeEMsWUFBK0IsRUFDaEQsYUFBNEIsRUFDNUIsYUFBbUM7UUFFbkMsS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBUDdELGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQUdwQyxpQkFBWSxHQUFaLFlBQVksQ0FBbUI7UUFSMUMsNkJBQXdCLEdBQWtDLElBQUksQ0FBQztRQUMvRCxzQkFBaUIsR0FBa0MsSUFBSSxDQUFDO1FBQ3hELHFCQUFnQixHQUFrQyxJQUFJLENBQUM7SUFXL0QsQ0FBQztJQUVRLElBQUk7UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixFQUFFLENBQUMsU0FBUyxDQUMzRixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUM1QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUMx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
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
import { EntitlementsService } from './entitlementsService';
|
|
1
|
+
import { EntitlementsService, RefetchEntitlementsAfterCacheMissProps } from './entitlementsService';
|
|
2
2
|
import { ApolloClient, NormalizedCacheObject } from '@apollo/client/core';
|
|
3
3
|
import { LoggerService } from './loggerService';
|
|
4
4
|
import { RedisCacheService } from './cache/redisCacheService';
|
|
5
|
-
import { MeteredEntitlement, MeteredEntitlementOptions } from '../models';
|
|
6
5
|
import { EdgeApiClient } from './EdgeApiClient';
|
|
6
|
+
import CachedEntitlement from './cache/cachedEntitlement';
|
|
7
7
|
export declare class RedisEntitlementsService extends EntitlementsService {
|
|
8
8
|
protected readonly cacheService: RedisCacheService;
|
|
9
9
|
protected readonly graphqlClient: ApolloClient<NormalizedCacheObject>;
|
|
10
10
|
protected readonly loggerService: LoggerService;
|
|
11
11
|
protected readonly batchedGraphClient: ApolloClient<NormalizedCacheObject>;
|
|
12
12
|
constructor(cacheService: RedisCacheService, graphqlClient: ApolloClient<NormalizedCacheObject>, loggerService: LoggerService, batchedGraphClient: ApolloClient<NormalizedCacheObject>, edgeApiClient: EdgeApiClient | null);
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
protected tryGetCacheCustomerAndEntitlement(featureRefId: string, customerRefId: string, resourceId?: string): Promise<{
|
|
14
|
+
customerExists: boolean;
|
|
15
|
+
entitlement: CachedEntitlement | null;
|
|
16
|
+
}>;
|
|
17
|
+
getCustomerEntitlementsWithUsage(customerRefId: string, resourceId: string | undefined): Promise<import("..").Entitlement[]>;
|
|
18
|
+
protected refetchEntitlementsAfterCacheMiss<T>({ loadFromCache, transformApiResult, ...restProps }: RefetchEntitlementsAfterCacheMissProps<T>): Promise<T>;
|
|
15
19
|
clearCache(): Promise<void>;
|
|
16
20
|
init(): void | Promise<void>;
|
|
17
21
|
cleanup(): void | Promise<void>;
|
|
@@ -1,10 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
9
|
+
var t = {};
|
|
10
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
11
|
+
t[p] = s[p];
|
|
12
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
13
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
14
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
15
|
+
t[p[i]] = s[p[i]];
|
|
16
|
+
}
|
|
17
|
+
return t;
|
|
18
|
+
};
|
|
2
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
20
|
exports.RedisEntitlementsService = void 0;
|
|
4
21
|
const entitlementsService_1 = require("./entitlementsService");
|
|
5
|
-
const models_1 = require("../models");
|
|
6
22
|
const entitlementDecisionService_1 = require("./entitlementDecisionService");
|
|
23
|
+
const ReuseOngoingExecution_1 = require("../utils/decorators/ReuseOngoingExecution");
|
|
7
24
|
const lodash_1 = require("lodash");
|
|
25
|
+
const isMetered_1 = require("../utils/isMetered");
|
|
26
|
+
const identityFn = (x) => x;
|
|
8
27
|
class RedisEntitlementsService extends entitlementsService_1.EntitlementsService {
|
|
9
28
|
constructor(cacheService, graphqlClient, loggerService, batchedGraphClient, edgeApiClient) {
|
|
10
29
|
super(graphqlClient, loggerService, batchedGraphClient, edgeApiClient, cacheService);
|
|
@@ -14,66 +33,62 @@ class RedisEntitlementsService extends entitlementsService_1.EntitlementsService
|
|
|
14
33
|
this.batchedGraphClient = batchedGraphClient;
|
|
15
34
|
this.isInitialized = true; // redis is always considered as initialized
|
|
16
35
|
}
|
|
17
|
-
async
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (!(0, lodash_1.isEmpty)(entitlement)) {
|
|
36
|
+
async tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId, resourceId) {
|
|
37
|
+
const result = await super.tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId, resourceId);
|
|
38
|
+
const { customerExists } = result;
|
|
39
|
+
let { entitlement } = result;
|
|
40
|
+
if ((0, isMetered_1.isMetered)(entitlement === null || entitlement === void 0 ? void 0 : entitlement.calculatedEntitlement.feature)) {
|
|
23
41
|
const featureUsageData = await this.cacheService.getFeatureUsage(customerRefId, featureRefId, resourceId);
|
|
24
42
|
if (featureUsageData === null) {
|
|
25
|
-
this.loggerService.error('Failed to find metered feature usage -
|
|
43
|
+
this.loggerService.error('Failed to find metered feature usage - considering it as cache miss', {
|
|
26
44
|
customerRefId,
|
|
27
45
|
featureRefId,
|
|
28
46
|
});
|
|
29
|
-
entitlement
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
const cachedFeatureUsage = JSON.parse(featureUsageData);
|
|
33
|
-
const { calculatedEntitlement, featureUsage } = entitlement;
|
|
34
|
-
entitlement = { calculatedEntitlement, featureUsage: Object.assign(Object.assign({}, featureUsage), cachedFeatureUsage) };
|
|
47
|
+
return { customerExists: false, entitlement: null };
|
|
35
48
|
}
|
|
49
|
+
const cachedFeatureUsage = JSON.parse(featureUsageData);
|
|
50
|
+
const { calculatedEntitlement, featureUsage } = entitlement;
|
|
51
|
+
entitlement = { calculatedEntitlement, featureUsage: Object.assign(Object.assign({}, featureUsage), cachedFeatureUsage) };
|
|
36
52
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
((_b = entitlement.calculatedEntitlement.feature) === null || _b === void 0 ? void 0 : _b.meterType) !== models_1.MeterType.Fluctuating &&
|
|
45
|
-
((_c = entitlement.calculatedEntitlement.feature) === null || _c === void 0 ? void 0 : _c.meterType) !== models_1.MeterType.Incremental) {
|
|
46
|
-
const entitlementResult = this.modelMapper.mapFallbackMeteredEntitlementResult(fallbackEntitlement, decision, requestUsage);
|
|
47
|
-
this.tryTrackEntitlementCheck(shouldTrack, featureRefId, customerRefId, resourceId, entitlementResult, requestUsage);
|
|
48
|
-
return fallbackEntitlement;
|
|
49
|
-
}
|
|
50
|
-
if (!entitlement) {
|
|
51
|
-
this.loggerService.log(`Customer Id or resource Id cannot be found on API response`, {
|
|
53
|
+
return { customerExists, entitlement };
|
|
54
|
+
}
|
|
55
|
+
async getCustomerEntitlementsWithUsage(customerRefId, resourceId) {
|
|
56
|
+
const loadFromCache = () => this.cacheService.getCustomerEntitlementsWithUsage(customerRefId, resourceId);
|
|
57
|
+
let { entitlements, customerExists } = await loadFromCache();
|
|
58
|
+
if (!customerExists) {
|
|
59
|
+
({ entitlements, customerExists } = await this.refetchEntitlementsAfterCacheMiss({
|
|
52
60
|
customerId: customerRefId,
|
|
53
61
|
resourceId,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
62
|
+
triggeredBy: 'getCustomerEntitlementsWithUsage',
|
|
63
|
+
loadFromCache,
|
|
64
|
+
transformApiResult: identityFn,
|
|
65
|
+
}));
|
|
58
66
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return this.modelMapper.mapMeteredEntitlement(entitlement, decision, requestUsage);
|
|
62
|
-
}
|
|
63
|
-
async getCustomerEntitlementsWithUsage(customerRefId, resourceId) {
|
|
64
|
-
let cachedEntitlements = await this.cacheService.getCustomerEntitlementsWithUsage(customerRefId, resourceId);
|
|
65
|
-
if (cachedEntitlements === null) {
|
|
66
|
-
await this.refetchEntitlements(customerRefId, resourceId, false, 'getCustomerEntitlementsWithUsage');
|
|
67
|
-
cachedEntitlements = await this.cacheService.getCustomerEntitlementsWithUsage(customerRefId, resourceId);
|
|
68
|
-
if (cachedEntitlements === null) {
|
|
69
|
-
return [];
|
|
70
|
-
}
|
|
67
|
+
if (!entitlements) {
|
|
68
|
+
return [];
|
|
71
69
|
}
|
|
72
|
-
return Array.from(
|
|
73
|
-
const decision = entitlementDecisionService_1.EntitlementDecisionService.decideEntitlementPolicy(
|
|
70
|
+
return Array.from(entitlements.values()).map((entitlement) => {
|
|
71
|
+
const decision = entitlementDecisionService_1.EntitlementDecisionService.decideEntitlementPolicy(customerExists, entitlement);
|
|
74
72
|
return this.modelMapper.mapEntitlement(entitlement, decision);
|
|
75
73
|
});
|
|
76
74
|
}
|
|
75
|
+
async refetchEntitlementsAfterCacheMiss(_a) {
|
|
76
|
+
var { loadFromCache, transformApiResult } = _a, restProps = __rest(_a, ["loadFromCache", "transformApiResult"]);
|
|
77
|
+
const { customerId, resourceId } = restProps;
|
|
78
|
+
const { distributedRefetchEntitlementsService } = this.cacheService;
|
|
79
|
+
const reloadFromApi = () => this.refetchEntitlements(restProps);
|
|
80
|
+
if (!distributedRefetchEntitlementsService) {
|
|
81
|
+
const response = await reloadFromApi();
|
|
82
|
+
return transformApiResult(response);
|
|
83
|
+
}
|
|
84
|
+
return distributedRefetchEntitlementsService.executeOnceAcrossMultipleProcesses({
|
|
85
|
+
customerId,
|
|
86
|
+
resourceId,
|
|
87
|
+
reloadFromApi,
|
|
88
|
+
transformApiResult,
|
|
89
|
+
loadFromCache,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
77
92
|
clearCache() {
|
|
78
93
|
// Clearing persisted cache is not supported
|
|
79
94
|
return Promise.resolve();
|
|
@@ -83,9 +98,11 @@ class RedisEntitlementsService extends entitlementsService_1.EntitlementsService
|
|
|
83
98
|
return;
|
|
84
99
|
}
|
|
85
100
|
cleanup() {
|
|
86
|
-
|
|
87
|
-
return;
|
|
101
|
+
return this.cacheService.cleanup();
|
|
88
102
|
}
|
|
89
103
|
}
|
|
104
|
+
__decorate([
|
|
105
|
+
(0, ReuseOngoingExecution_1.ReuseOngoingExecution)(({ customerId, resourceId }) => (0, lodash_1.compact)([customerId, resourceId]).join(':'))
|
|
106
|
+
], RedisEntitlementsService.prototype, "refetchEntitlementsAfterCacheMiss", null);
|
|
90
107
|
exports.RedisEntitlementsService = RedisEntitlementsService;
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXNFbnRpdGxlbWVudHNTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3JlZGlzRW50aXRsZW1lbnRzU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtEQUFvRztBQUlwRyw2RUFBMEU7QUFHMUUscUZBQWtGO0FBQ2xGLG1DQUFpQztBQUNqQyxrREFBK0M7QUFFL0MsTUFBTSxVQUFVLEdBQUcsQ0FBSSxDQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVsQyxNQUFhLHdCQUF5QixTQUFRLHlDQUFtQjtJQUMvRCxZQUNxQixZQUErQixFQUMvQixhQUFrRCxFQUNsRCxhQUE0QixFQUM1QixrQkFBdUQsRUFDMUUsYUFBbUM7UUFFbkMsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBTmxFLGlCQUFZLEdBQVosWUFBWSxDQUFtQjtRQUMvQixrQkFBYSxHQUFiLGFBQWEsQ0FBcUM7UUFDbEQsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFxQztRQUkxRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDLDRDQUE0QztJQUN6RSxDQUFDO0lBRWtCLEtBQUssQ0FBQyxpQ0FBaUMsQ0FDeEQsWUFBb0IsRUFDcEIsYUFBcUIsRUFDckIsVUFBbUI7UUFFbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsaUNBQWlDLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV0RyxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ2xDLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFN0IsSUFBSSxJQUFBLHFCQUFTLEVBQUMsV0FBVyxhQUFYLFdBQVcs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
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare type OptionalPromise<T> = T | Promise<T>;
|
package/dist/types.js
ADDED
|
@@ -4,6 +4,7 @@ exports.ModelMapper = void 0;
|
|
|
4
4
|
const sdk_1 = require("@stigg/api-client-js/src/generated/sdk");
|
|
5
5
|
const models_1 = require("../models");
|
|
6
6
|
const lodash_1 = require("lodash");
|
|
7
|
+
const isMetered_1 = require("./isMetered");
|
|
7
8
|
class ModelMapper {
|
|
8
9
|
constructor() {
|
|
9
10
|
this.mapSlimCustomer = (customer) => {
|
|
@@ -302,7 +303,7 @@ class ModelMapper {
|
|
|
302
303
|
units: feature.featureUnits || undefined,
|
|
303
304
|
unitsPlural: feature.featureUnitsPlural || undefined,
|
|
304
305
|
displayName: feature.displayName,
|
|
305
|
-
isMetered:
|
|
306
|
+
isMetered: (0, isMetered_1.isMetered)(feature),
|
|
306
307
|
metadata: feature.additionalMetaData,
|
|
307
308
|
},
|
|
308
309
|
hasUnlimitedUsage: entitlement.hasUnlimitedUsage,
|
|
@@ -411,7 +412,7 @@ class ModelMapper {
|
|
|
411
412
|
meterType: feature.meterType || undefined,
|
|
412
413
|
units: feature.featureUnits || undefined,
|
|
413
414
|
unitsPlural: feature.featureUnitsPlural || undefined,
|
|
414
|
-
isMetered:
|
|
415
|
+
isMetered: (0, isMetered_1.isMetered)(feature),
|
|
415
416
|
metadata: feature.additionalMetaData,
|
|
416
417
|
},
|
|
417
418
|
hasUnlimitedUsage: entitlement.hasUnlimitedUsage,
|
|
@@ -578,4 +579,4 @@ class ModelMapper {
|
|
|
578
579
|
}
|
|
579
580
|
}
|
|
580
581
|
exports.ModelMapper = ModelMapper;
|
|
581
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxNYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvTW9kZWxNYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0VBbUNnRDtBQUNoRCxzQ0FxQ21CO0FBR25CLG1DQUF5QztBQUV6QyxNQUFNLFdBQVc7SUFBakI7UUF5SUUsb0JBQWUsR0FBRyxDQUFDLFFBQThCLEVBQWdCLEVBQUU7WUFDakUsT0FBTztnQkFDTCxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ2xCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLFNBQVM7Z0JBQ2hDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLFNBQVM7Z0JBQ2xDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxJQUFJLFNBQVM7Z0JBQzFDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUN2QyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDdkMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7Z0JBQ3JDLHdCQUF3QixFQUFFLFFBQVEsQ0FBQyx3QkFBd0I7YUFDNUQsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVGLDJCQUFzQixHQUFHLENBQUMsd0JBQW1ELEVBQXVCLEVBQUU7WUFDcEcsTUFBTSxRQUFRLEdBQWlCLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFekcsTUFBTSxZQUFZLEdBQTZCLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLFlBQVk7Z0JBQ3BHLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDO2dCQUNuRixDQUFDLENBQUMsU0FBUyxDQUFDO1lBRWQsT0FBTztnQkFDTCxRQUFRO2dCQUNSLDRCQUE0QixF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
|
|
582
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxNYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvTW9kZWxNYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0VBbUNnRDtBQUNoRCxzQ0FxQ21CO0FBR25CLG1DQUF5QztBQUN6QywyQ0FBd0M7QUFFeEMsTUFBTSxXQUFXO0lBQWpCO1FBeUlFLG9CQUFlLEdBQUcsQ0FBQyxRQUE4QixFQUFnQixFQUFFO1lBQ2pFLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNsQixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxTQUFTO2dCQUNoQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssSUFBSSxTQUFTO2dCQUNsQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsSUFBSSxTQUFTO2dCQUMxQyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDdkMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7Z0JBQ3ZDLFFBQVEsRUFBRSxRQUFRLENBQUMsa0JBQWtCO2dCQUNyQyx3QkFBd0IsRUFBRSxRQUFRLENBQUMsd0JBQXdCO2FBQzVELENBQUM7UUFDSixDQUFDLENBQUM7UUFFRiwyQkFBc0IsR0FBRyxDQUFDLHdCQUFtRCxFQUF1QixFQUFFO1lBQ3BHLE1BQU0sUUFBUSxHQUFpQixJQUFJLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXpHLE1BQU0sWUFBWSxHQUE2Qix3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZO2dCQUNwRyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQztnQkFDbkYsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUVkLE9BQU87Z0JBQ0wsUUFBUTtn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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function buildLockKey(environmentPrefix: string, customerId: string, resourceId: string | undefined): string;
|
|
1
|
+
export declare function buildLockKey(environmentPrefix: string, customerId: string, resourceId: string | undefined, operationName?: string): string;
|
|
2
2
|
export declare const buildCachedCustomerKey: (customerId: string, resourceId: string | undefined) => string;
|
|
3
3
|
export declare const buildCustomerKey: (environmentPrefix: string, customerId: string, resourceId: string | undefined) => string;
|
|
4
4
|
export declare const buildUsageKey: (environmentPrefix: string, customerId: string, featureId: string, resourceId: string | undefined) => string;
|