@stigg/node-server-sdk 3.34.0 → 3.36.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.
@@ -10,16 +10,13 @@ const sdk_1 = require("@stigg/api-client-js/src/generated/sdk");
10
10
  const redlock_1 = __importDefault(require("redlock"));
11
11
  const cacheKeysHelpers_1 = require("../../utils/cacheKeysHelpers");
12
12
  const RedisSingleExecutionService_1 = require("./RedisSingleExecutionService");
13
- const entitlementsService_1 = require("../entitlementsService");
14
- const TIMESTAMP_SUFFIX = 'timestamp';
15
- const LOCK_DURATION = 5000;
16
- const DEFAULT_TTL_SECS = 7 * 24 * 60 * 60;
17
- const REFETCH_ENTITLEMENTS_AFTER_CACHE_MISS_OPERATION_NAME = 'refetchEntitlementsAfterCacheMiss';
18
- const REFETCH_ENTITLEMENTS_AFTER_CACHE_MISS_NOTIFICATION_TIMEOUT_MS = 60000;
13
+ const entitlementsService_utils_1 = require("../entitlementsService.utils");
14
+ const redisCacheService_constants_1 = require("./redisCacheService.constants");
15
+ const isMetered_1 = require("../../utils/isMetered");
19
16
  class RedisCacheService {
20
17
  constructor(options, loggerService) {
21
18
  this.loggerService = loggerService;
22
- const { environmentPrefix, ttl = DEFAULT_TTL_SECS, distributedEntitlementsFetching = {} } = options;
19
+ const { environmentPrefix, ttl = redisCacheService_constants_1.DEFAULT_TTL_SECS, distributedEntitlementsFetching = {} } = options;
23
20
  this.redisClient = new ioredis_1.default(options);
24
21
  this.redlock = new redlock_1.default([this.redisClient]);
25
22
  this.environmentPrefix = environmentPrefix;
@@ -28,8 +25,8 @@ class RedisCacheService {
28
25
  this.redisClient.on('error', (err) => this.loggerService.error('Redis client error: ', err));
29
26
  this.redisClient.on('connect', () => this.loggerService.log('Redis client connected!'));
30
27
  if (!distributedEntitlementsFetching.disabled) {
31
- const { notificationTimeoutMs = REFETCH_ENTITLEMENTS_AFTER_CACHE_MISS_NOTIFICATION_TIMEOUT_MS } = distributedEntitlementsFetching;
32
- this.distributedRefetchEntitlementsService = new RedisSingleExecutionService_1.RedisSingleExecutionService(REFETCH_ENTITLEMENTS_AFTER_CACHE_MISS_OPERATION_NAME, this.environmentPrefix, notificationTimeoutMs, this.redisClient, this.redlock, this.loggerService);
28
+ const { notificationTimeoutMs = redisCacheService_constants_1.REFETCH_NOTIFICATION_TIMEOUT_MS } = distributedEntitlementsFetching;
29
+ this.distributedRefetchEntitlementsService = new RedisSingleExecutionService_1.RedisSingleExecutionService(redisCacheService_constants_1.REFETCH_OPERATION_NAME, this.environmentPrefix, notificationTimeoutMs, this.redisClient, this.redlock, this.loggerService);
33
30
  }
34
31
  }
35
32
  async updateFeatureUsage({ featureId, currentUsage, customerId, nextResetDate, resourceId, timestamp, }) {
@@ -45,7 +42,7 @@ class RedisCacheService {
45
42
  const lockKey = (0, cacheKeysHelpers_1.buildLockKey)(this.environmentPrefix, customerId, resourceId);
46
43
  const entitlementsDbKey = (0, cacheKeysHelpers_1.buildCustomerKey)(this.environmentPrefix, customerId, resourceId);
47
44
  const customerEntitlementsAsObject = Object.fromEntries(customerEntitlements);
48
- await this.redlock.using([lockKey], LOCK_DURATION, async () => {
45
+ await this.redlock.using([lockKey], redisCacheService_constants_1.LOCK_DURATION, async () => {
49
46
  await this.updateKey(new Date(entitlementsTimestamp), entitlementsDbKey, customerEntitlementsAsObject);
50
47
  const entitlements = new Array(...customerEntitlements.values());
51
48
  const updateUsagesPromises = entitlements
@@ -100,19 +97,53 @@ class RedisCacheService {
100
97
  .forEach((result) => this.loggerService.error(`Failed to update feature usage result: ${result.reason}`));
101
98
  });
102
99
  }
103
- async getCustomerEntitlements(customerId, resourceId) {
100
+ async getCustomerEntitlementsWithoutUsage(customerId, resourceId) {
104
101
  const customerKey = (0, cacheKeysHelpers_1.buildCustomerKey)(this.environmentPrefix, customerId, resourceId);
105
- const entitlementsRaw = await this.redisClient.get(customerKey);
106
- if (entitlementsRaw === null || (0, lodash_1.isEmpty)(entitlementsRaw)) {
107
- return entitlementsService_1.entitlementsResponse.cacheMiss();
102
+ const keysToFetch = [customerKey];
103
+ if (resourceId) {
104
+ const globalCustomerKey = (0, cacheKeysHelpers_1.buildCustomerKey)(this.environmentPrefix, customerId, undefined);
105
+ keysToFetch.push(`${customerKey}#${redisCacheService_constants_1.TIMESTAMP_SUFFIX}`);
106
+ keysToFetch.push(`${globalCustomerKey}#${redisCacheService_constants_1.TIMESTAMP_SUFFIX}`);
107
+ }
108
+ const [entitlementsRaw, entitlementsTimestampValue, globalEntitlementsTimestampValue] = await this.redisClient.mget(keysToFetch);
109
+ const entitlements = !(0, lodash_1.isNil)(entitlementsRaw) && !(0, lodash_1.isEmpty)(entitlementsRaw)
110
+ ? new Map(Object.entries(JSON.parse(entitlementsRaw)))
111
+ : null;
112
+ const entitlementsTimestamp = this.parseTimestamp(entitlementsTimestampValue);
113
+ const globalEntitlementsTimestamp = this.parseTimestamp(globalEntitlementsTimestampValue);
114
+ const globalCustomerMissing = this.isGlobalCustomerMissingInCache(customerId, resourceId, entitlements, entitlementsTimestamp, globalEntitlementsTimestamp);
115
+ if (!entitlements || globalCustomerMissing) {
116
+ return entitlementsService_utils_1.entitlementsResponseMapper.cacheMiss(globalCustomerMissing);
108
117
  }
109
118
  this.loggerService.debug(`Found entitlements in persisted cache for customer`, { customerId, resourceId });
110
- const entitlements = new Map(Object.entries(JSON.parse(entitlementsRaw)));
111
- return entitlementsService_1.entitlementsResponse.cacheHit(entitlements);
119
+ return entitlementsService_utils_1.entitlementsResponseMapper.cacheHit(entitlements);
120
+ }
121
+ // resource entitlements are affected by global entitlements, so if global
122
+ // entitlements are missing or newer, we should refetch since the cache is stale
123
+ isGlobalCustomerMissingInCache(customerId, resourceId, entitlements, entitlementsTimestamp, globalEntitlementsTimestamp) {
124
+ if ((0, lodash_1.isNil)(resourceId)) {
125
+ return false;
126
+ }
127
+ if (!entitlements) {
128
+ // in case no entitlements are found, it's a cache miss anyway for the resource
129
+ // so we just need to check if the global entitlements are missing
130
+ return !globalEntitlementsTimestamp;
131
+ }
132
+ const isResourceTimestampAfterGlobalTimestamp = entitlementsTimestamp && globalEntitlementsTimestamp && entitlementsTimestamp >= globalEntitlementsTimestamp;
133
+ if (isResourceTimestampAfterGlobalTimestamp) {
134
+ return false;
135
+ }
136
+ this.loggerService.log(`cache miss for resource due to global customer`, {
137
+ customerId,
138
+ resourceId,
139
+ entitlementsTimestamp,
140
+ globalEntitlementsTimestamp,
141
+ });
142
+ return true;
112
143
  }
113
- async getCustomerEntitlementsWithUsage(customerId, resourceId) {
114
- const response = await this.getCustomerEntitlements(customerId, resourceId);
115
- if (!response.customerExists) {
144
+ async getCustomerEntitlements(customerId, resourceId) {
145
+ const response = await this.getCustomerEntitlementsWithoutUsage(customerId, resourceId);
146
+ if (response.cacheMiss) {
116
147
  return response;
117
148
  }
118
149
  const { entitlements } = response;
@@ -123,34 +154,33 @@ class RedisCacheService {
123
154
  ((_b = entitlement.calculatedEntitlement.feature) === null || _b === void 0 ? void 0 : _b.meterType) !== sdk_1.MeterType.None;
124
155
  })
125
156
  .map((entitlement) => entitlement.calculatedEntitlement.feature.id);
126
- const featuresUsageByFeatureKey = await this.getFeaturesUsage(this.environmentPrefix, customerId, resourceId, meteredFeatureIds);
127
- const foundFeatureIds = Array.from(featuresUsageByFeatureKey.keys());
128
- const missingFeatureIds = (0, lodash_1.difference)(meteredFeatureIds, foundFeatureIds);
129
- if (!(0, lodash_1.isEmpty)(missingFeatureIds)) {
130
- this.loggerService.error(`Failed to find metered features usage - considering it as cache miss`, {
131
- customerId,
132
- resourceId,
133
- missingFeatureIds,
134
- });
135
- return entitlementsService_1.entitlementsResponse.cacheMiss();
136
- }
137
- featuresUsageByFeatureKey.forEach((usageValue, featureKey) => {
138
- const cachedEntitlement = entitlements.get(featureKey);
139
- if (cachedEntitlement) {
140
- const { calculatedEntitlement, featureUsage } = cachedEntitlement;
141
- entitlements.set(featureKey, { calculatedEntitlement, featureUsage: Object.assign(Object.assign({}, featureUsage), usageValue) });
142
- }
143
- else {
144
- this.loggerService.log(`Found usage for a feature the customer is not entitled to.`, {
157
+ if (!(0, lodash_1.isEmpty)(meteredFeatureIds)) {
158
+ const featuresUsageByFeatureKey = await this.getFeaturesUsage(this.environmentPrefix, customerId, resourceId, meteredFeatureIds);
159
+ const foundFeatureIds = Array.from(featuresUsageByFeatureKey.keys());
160
+ const missingFeatureIds = (0, lodash_1.difference)(meteredFeatureIds, foundFeatureIds);
161
+ if (!(0, lodash_1.isEmpty)(missingFeatureIds)) {
162
+ this.loggerService.error(`Failed to find metered features usage - considering it as cache miss`, {
145
163
  customerId,
146
- featureKey,
164
+ resourceId,
165
+ missingFeatureIds,
147
166
  });
167
+ return entitlementsService_utils_1.entitlementsResponseMapper.cacheMiss();
148
168
  }
149
- });
150
- return entitlementsService_1.entitlementsResponse.cacheHit(entitlements);
151
- }
152
- async getFeatureUsage(customerId, featureId, resourceId) {
153
- return this.redisClient.get((0, cacheKeysHelpers_1.buildUsageKey)(this.environmentPrefix, customerId, featureId, resourceId));
169
+ featuresUsageByFeatureKey.forEach((usageValue, featureKey) => {
170
+ const cachedEntitlement = entitlements.get(featureKey);
171
+ if (cachedEntitlement) {
172
+ const { calculatedEntitlement, featureUsage } = cachedEntitlement;
173
+ entitlements.set(featureKey, { calculatedEntitlement, featureUsage: Object.assign(Object.assign({}, featureUsage), usageValue) });
174
+ }
175
+ else {
176
+ this.loggerService.log(`Found usage for a feature the customer is not entitled to.`, {
177
+ customerId,
178
+ featureKey,
179
+ });
180
+ }
181
+ });
182
+ }
183
+ return entitlementsService_utils_1.entitlementsResponseMapper.cacheHit(entitlements);
154
184
  }
155
185
  async getFeaturesUsage(environmentPrefix, customerId, resourceId, meteredFeatureIds) {
156
186
  const keysToFetch = meteredFeatureIds.map((featureId) => (0, cacheKeysHelpers_1.buildUsageKey)(environmentPrefix, customerId, featureId, resourceId));
@@ -170,15 +200,16 @@ class RedisCacheService {
170
200
  clearCache() {
171
201
  return;
172
202
  }
173
- async updateKey(timestamp, key, value) {
203
+ async updateKey(messageTimestamp, key, value) {
174
204
  const latestTimestamp = await this.getKeyLatestTimestamp(key);
175
- const messageTimestamp = timestamp.getTime();
176
- if (!latestTimestamp || latestTimestamp.getTime() <= messageTimestamp) {
205
+ if (!latestTimestamp ||
206
+ messageTimestamp.getTime() === entitlementsService_utils_1.DATE_IN_FAR_PAST.getTime() ||
207
+ latestTimestamp.getTime() <= messageTimestamp.getTime()) {
177
208
  const writeableValue = typeof value === 'string' ? value : JSON.stringify(value);
178
209
  await this.redisClient
179
210
  .multi()
180
211
  .set(key, writeableValue, 'EX', this.ttl)
181
- .set(`${key}#${TIMESTAMP_SUFFIX}`, messageTimestamp, 'EX', this.ttl)
212
+ .set(`${key}#${redisCacheService_constants_1.TIMESTAMP_SUFFIX}`, messageTimestamp.getTime(), 'EX', this.ttl)
182
213
  .exec();
183
214
  }
184
215
  else {
@@ -190,11 +221,14 @@ class RedisCacheService {
190
221
  }
191
222
  }
192
223
  async getKeyLatestTimestamp(key) {
193
- const value = await this.redisClient.get(`${key}#${TIMESTAMP_SUFFIX}`);
224
+ const value = await this.redisClient.get(`${key}#${redisCacheService_constants_1.TIMESTAMP_SUFFIX}`);
225
+ return this.parseTimestamp(value);
226
+ }
227
+ parseTimestamp(value) {
194
228
  if ((0, lodash_1.isNil)(value)) {
195
229
  return undefined;
196
230
  }
197
- const number = parseInt(value, 10);
231
+ const number = (0, lodash_1.parseInt)(value, 10);
198
232
  if (Number.isNaN(number)) {
199
233
  return undefined;
200
234
  }
@@ -205,6 +239,29 @@ class RedisCacheService {
205
239
  await this.redlock.quit();
206
240
  await ((_a = this.distributedRefetchEntitlementsService) === null || _a === void 0 ? void 0 : _a.cleanup());
207
241
  }
242
+ async getCustomerEntitlement(featureId, customerId, resourceId) {
243
+ const { entitlements, customerExists, cacheMiss, globalCustomerMissing } = await this.getCustomerEntitlementsWithoutUsage(customerId, resourceId);
244
+ const entitlement = !cacheMiss ? (entitlements === null || entitlements === void 0 ? void 0 : entitlements.get(featureId)) || null : null;
245
+ const result = { cacheMiss, customerExists, entitlement, globalCustomerMissing };
246
+ if (!(0, isMetered_1.isMetered)(entitlement === null || entitlement === void 0 ? void 0 : entitlement.calculatedEntitlement.feature)) {
247
+ return result;
248
+ }
249
+ const featureUsageData = await this.redisClient.get((0, cacheKeysHelpers_1.buildUsageKey)(this.environmentPrefix, customerId, featureId, resourceId));
250
+ if (featureUsageData === null) {
251
+ this.loggerService.error('Failed to find metered feature usage - considering it as cache miss', {
252
+ customerId,
253
+ resourceId,
254
+ featureId,
255
+ });
256
+ return { cacheMiss: true, customerExists: false, entitlement: null, globalCustomerMissing: false };
257
+ }
258
+ const cachedFeatureUsage = JSON.parse(featureUsageData);
259
+ const { calculatedEntitlement, featureUsage } = entitlement;
260
+ return Object.assign(Object.assign({}, result), { entitlement: {
261
+ calculatedEntitlement,
262
+ featureUsage: Object.assign(Object.assign({}, featureUsage), cachedFeatureUsage),
263
+ } });
264
+ }
208
265
  }
209
266
  exports.RedisCacheService = RedisCacheService;
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXNDYWNoZVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY2FjaGUvcmVkaXNDYWNoZVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsc0RBQTRCO0FBQzVCLG1DQUFvRDtBQUNwRCxnRUFBbUU7QUFFbkUsc0RBQThCO0FBRTlCLG1FQUE2RjtBQUM3RiwrRUFBNEU7QUFDNUUsZ0VBQW9GO0FBRXBGLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO0FBQ3JDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQztBQUMzQixNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUUxQyxNQUFNLG9EQUFvRCxHQUFHLG1DQUFtQyxDQUFDO0FBQ2pHLE1BQU0sNkRBQTZELEdBQUcsS0FBTSxDQUFDO0FBRTdFLE1BQWEsaUJBQWlCO0lBUTVCLFlBQVksT0FBMEIsRUFBbUIsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDbkYsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsR0FBRyxnQkFBZ0IsRUFBRSwrQkFBK0IsR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFcEcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGlCQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGlCQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFDM0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFFZixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7UUFFeEYsSUFBSSxDQUFDLCtCQUErQixDQUFDLFFBQVEsRUFBRTtZQUM3QyxNQUFNLEVBQUUscUJBQXFCLEdBQUcsNkRBQTZELEVBQUUsR0FDN0YsK0JBQStCLENBQUM7WUFDbEMsSUFBSSxDQUFDLHFDQUFxQyxHQUFHLElBQUkseURBQTJCLENBQzFFLG9EQUFvRCxFQUNwRCxJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLHFCQUFxQixFQUNyQixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxhQUFhLENBQ25CLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsYUFBYSxFQUNiLFVBQVUsRUFDVixTQUFTLEdBQ2lCO1FBQzFCLE1BQU0sbUJBQW1CLEdBQUcsSUFBQSxnQ0FBYSxFQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JHLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLFlBQVk7WUFDWixhQUFhO1NBQ2QsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FDZixVQUFrQixFQUNsQixvQkFBb0QsRUFDcEQsVUFBOEIsRUFDOUIscUJBQTZCLEVBQzdCLHlCQUE4QztRQUU5QyxNQUFNLE9BQU8sR0FBRyxJQUFBLCtCQUFZLEVBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM3RSxNQUFNLGlCQUFpQixHQUFHLElBQUEsbUNBQWdCLEVBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRixNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM5RSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzVELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLDRCQUE0QixDQUFDLENBQUM7WUFFdkcsTUFBTSxZQUFZLEdBQTZCLElBQUksS0FBSyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMzRixNQUFNLG9CQUFvQixHQUFHLFlBQVk7aUJBQ3RDLE1BQU0sQ0FDTCxDQUFDLFdBQVcsRUFBRSxFQUFFOztnQkFDZCxPQUFBLENBQUEsTUFBQSxXQUFXLENBQUMscUJBQXFCLENBQUMsT0FBTywwQ0FBRSxTQUFTO29CQUNwRCxDQUFBLE1BQUEsV0FBVyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sMENBQUUsU0FBUyxNQUFLLGVBQVMsQ0FBQyxJQUFJLENBQUE7YUFBQSxDQUMxRTtpQkFDQSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTs7Z0JBQ25CLElBQUk7b0JBQ0YsTUFBTSxFQUNKLHFCQUFxQixFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQ2xDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsR0FDOUMsR0FBRyxXQUFXLENBQUM7b0JBQ2hCLElBQUksSUFBQSxnQkFBTyxFQUFDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxFQUFFLENBQUMsRUFBRTt3QkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsaUJBQWlCLDJDQUEyQyxDQUFDLENBQUM7cUJBQ2hHO29CQUNELE1BQU0sU0FBUyxHQUFHLE9BQVEsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLE1BQU0scUJBQXFCLEdBQUcseUJBQXlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUV2RSxJQUFJLHFCQUFxQixFQUFFO3dCQUN6QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzs0QkFDN0IsU0FBUzs0QkFDVCxVQUFVOzRCQUNWLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQzs0QkFDMUMsWUFBWTs0QkFDWixhQUFhLEVBQUUsYUFBYTs0QkFDNUIsVUFBVTt5QkFDWCxDQUFDLENBQUM7cUJBQ0o7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsK0JBQStCLFNBQVMsYUFBYSxFQUFFOzRCQUM5RSxVQUFVOzRCQUNWLFVBQVU7NEJBQ1YsU0FBUzt5QkFDVixDQUFDLENBQUM7d0JBQ0gsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7cUJBQzFCO2lCQUNGO2dCQUFDLE9BQU8sR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLHdFQUF3RSxFQUFFO3dCQUNqRyxLQUFLLEVBQUUsR0FBRzt3QkFDVixVQUFVO3dCQUNWLFVBQVU7d0JBQ1YsU0FBUyxFQUFFLHFCQUFxQjt3QkFDaEMsU0FBUyxFQUFFLE1BQUEsV0FBVyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sMENBQUUsRUFBRTtxQkFDekQsQ0FBQyxDQUFDO29CQUNILE1BQU0sR0FBRyxDQUFDO2lCQUNYO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFTCxtRUFBbUU7WUFDbkUsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUUxRSxrQkFBa0I7aUJBQ2YsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQztpQkFDaEQsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQ3RCLDBDQUEyQyxNQUFnQyxDQUFDLE1BQU0sRUFBRSxDQUNyRixDQUNGLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsdUJBQXVCLENBQUMsVUFBa0IsRUFBRSxVQUE4QjtRQUM5RSxNQUFNLFdBQVcsR0FBRyxJQUFBLG1DQUFnQixFQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckYsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRSxJQUFJLGVBQWUsS0FBSyxJQUFJLElBQUksSUFBQSxnQkFBTyxFQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ3hELE9BQU8sMENBQW9CLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDekM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxvREFBb0QsRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUE0QixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLE9BQU8sMENBQW9CLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsZ0NBQWdDLENBQ3BDLFVBQWtCLEVBQ2xCLFVBQThCO1FBRTlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRTtZQUM1QixPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUVELE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFFbEMsTUFBTSxpQkFBaUIsR0FBa0IsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDdkUsTUFBTSxDQUNMLENBQUMsV0FBVyxFQUFFLEVBQUU7O1lBQ2QsT0FBQSxDQUFBLE1BQUEsV0FBVyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sMENBQUUsU0FBUztnQkFDcEQsQ0FBQSxNQUFBLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLDBDQUFFLFNBQVMsTUFBSyxlQUFTLENBQUMsSUFBSSxDQUFBO1NBQUEsQ0FDMUU7YUFDQSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdkUsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FDM0QsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixVQUFVLEVBQ1YsVUFBVSxFQUNWLGlCQUFpQixDQUNsQixDQUFDO1FBRUYsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0saUJBQWlCLEdBQUcsSUFBQSxtQkFBVSxFQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxJQUFBLGdCQUFPLEVBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxzRUFBc0UsRUFBRTtnQkFDL0YsVUFBVTtnQkFDVixVQUFVO2dCQUNWLGlCQUFpQjthQUNsQixDQUFDLENBQUM7WUFDSCxPQUFPLDBDQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3pDO1FBRUQseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFO1lBQzNELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2RCxJQUFJLGlCQUFpQixFQUFFO2dCQUNyQixNQUFNLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ2xFLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxrQ0FBTyxZQUFZLEdBQUssVUFBVSxDQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzNHO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLDREQUE0RCxFQUFFO29CQUNuRixVQUFVO29CQUNWLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sMENBQW9CLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLFVBQWtCLEVBQUUsU0FBaUIsRUFBRSxVQUE4QjtRQUN6RixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUEsZ0NBQWEsRUFBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQzVCLGlCQUF5QixFQUN6QixVQUFrQixFQUNsQixVQUE4QixFQUM5QixpQkFBZ0M7UUFFaEMsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDdEQsSUFBQSxnQ0FBYSxFQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQ3BFLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTdELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUUxQyxvRkFBb0Y7UUFDcEYsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzdDLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTdDLElBQUksaUJBQWlCLEtBQUssSUFBSSxFQUFFO2dCQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDakYsT0FBTzthQUNSO1lBRUQsdUJBQXVCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sdUJBQXVCLENBQUM7SUFDakMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPO0lBQ1QsQ0FBQztJQUVPLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBZSxFQUFFLEdBQVcsRUFBRSxLQUFtQztRQUN2RixNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5RCxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUU3QyxJQUFJLENBQUMsZUFBZSxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxnQkFBZ0IsRUFBRTtZQUNyRSxNQUFNLGNBQWMsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRixNQUFNLElBQUksQ0FBQyxXQUFXO2lCQUNuQixLQUFLLEVBQUU7aUJBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7aUJBQ3hDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDO2lCQUNuRSxJQUFJLEVBQUUsQ0FBQztTQUNYO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsRUFBRTtnQkFDN0YsZ0JBQWdCO2dCQUNoQixlQUFlO2dCQUNmLEdBQUc7YUFDSixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMscUJBQXFCLENBQUMsR0FBVztRQUM3QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUN2RSxJQUFJLElBQUEsY0FBSyxFQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEIsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTzs7UUFDWCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFBLE1BQUEsSUFBSSxDQUFDLHFDQUFxQywwQ0FBRSxPQUFPLEVBQUUsQ0FBQSxDQUFDO0lBQzlELENBQUM7Q0FDRjtBQXpRRCw4Q0F5UUMifQ==
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXNDYWNoZVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY2FjaGUvcmVkaXNDYWNoZVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsc0RBQTRCO0FBQzVCLG1DQUE4RDtBQUM5RCxnRUFBbUU7QUFFbkUsc0RBQThCO0FBRTlCLG1FQUE2RjtBQUM3RiwrRUFBNEU7QUFDNUUsNEVBS3NDO0FBQ3RDLCtFQU11QztBQUN2QyxxREFBa0Q7QUFFbEQsTUFBYSxpQkFBaUI7SUFRNUIsWUFBWSxPQUEwQixFQUFtQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUNuRixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxHQUFHLDhDQUFnQixFQUFFLCtCQUErQixHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUVwRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksaUJBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUVmLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENB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
@@ -1,42 +1,13 @@
1
1
  import EntitlementsApi from '../api/entitlements/entitlementsApi';
2
2
  import { LoggerService } from './loggerService';
3
3
  import { ApolloClient, FetchResult, NormalizedCacheObject } from '@apollo/client/core';
4
- import { BooleanEntitlement, BooleanEntitlementOptions, CreateUsageMeasurement, Entitlement, MeteredEntitlement, MeteredEntitlementOptions, NumericEntitlement, NumericEntitlementOptions, ReportEvent } from '../models';
4
+ import { BooleanEntitlement, BooleanEntitlementOptions, CreateUsageMeasurement, MeteredEntitlement, MeteredEntitlementOptions, NumericEntitlement, NumericEntitlementOptions, ReportEvent } from '../models';
5
5
  import { ModelMapper } from '../utils/ModelMapper';
6
- import CachedEntitlement from './cache/cachedEntitlement';
7
6
  import { CacheService } from './cache/cacheService';
8
7
  import { EdgeApiClient } from './EdgeApiClient';
9
- import { ReportUsageMutation, ReportEventMutation, EntitlementCheckResult, EntitlementFragment, ReportUsageBulkInput, ReportUsageBulkMutation, ReportUsageFragment } from '@stigg/api-client-js/src/generated/sdk';
8
+ import { EntitlementCheckResult, EntitlementFragment, ReportEventMutation, ReportUsageBulkInput, ReportUsageBulkMutation, ReportUsageFragment, ReportUsageMutation } from '@stigg/api-client-js/src/generated/sdk';
10
9
  import CacheMapper from '../utils/CacheMapper';
11
- import { OptionalPromise } from '../types';
12
- export declare type GetEntitlementsOperations = 'getBooleanEntitlement' | 'getNumericEntitlement' | 'getMeteredEntitlement' | 'getCustomerEntitlementsWithUsage';
13
- export declare type RefetchEntitlementsTriggeredBy = GetEntitlementsOperations | 'updateSubscription' | 'cancelSubscription' | 'createSubscription' | 'reloadEntitlements';
14
- export declare type EntitlementsResponseCacheHit = {
15
- entitlements: Map<string, CachedEntitlement>;
16
- customerExists: true;
17
- };
18
- export declare type EntitlementsResponseCacheMiss = {
19
- entitlements: null;
20
- customerExists: false;
21
- };
22
- export declare type EntitlementsResponse = EntitlementsResponseCacheHit | EntitlementsResponseCacheMiss;
23
- export declare const entitlementsResponse: {
24
- cacheHit: (entitlements: Map<string, CachedEntitlement>) => EntitlementsResponseCacheHit;
25
- cacheMiss: () => EntitlementsResponseCacheMiss;
26
- };
27
- export declare type RefetchEntitlementsAfterCacheMissProps<T> = {
28
- customerId: string;
29
- resourceId: string | undefined;
30
- triggeredBy: GetEntitlementsOperations;
31
- loadFromCache: () => OptionalPromise<T>;
32
- transformApiResult: (result: EntitlementsResponse) => T;
33
- };
34
- export declare type RefetchEntitlementsProps = {
35
- customerId: string;
36
- resourceId: string | undefined;
37
- skipEdge?: boolean;
38
- triggeredBy: RefetchEntitlementsTriggeredBy;
39
- };
10
+ import { EntitlementsResponse, EntitlementsResponseCacheHit, RefetchEntitlementsAfterCacheMissParams, RefetchEntitlementsParams, RefetchEntityEntitlementsAfterCacheMissParams } from './entitlementsService.utils';
40
11
  export declare abstract class EntitlementsService {
41
12
  protected readonly loggerService: LoggerService;
42
13
  protected readonly cacheService: CacheService;
@@ -50,26 +21,27 @@ export declare abstract class EntitlementsService {
50
21
  getNumericEntitlement(customerRefId: string, featureRefId: string, fallbackEntitlement: NumericEntitlement, resourceId?: string, options?: NumericEntitlementOptions): Promise<NumericEntitlement>;
51
22
  getMeteredEntitlement(customerRefId: string, featureRefId: string, fallbackEntitlement: MeteredEntitlement, resourceId?: string, options?: MeteredEntitlementOptions): Promise<MeteredEntitlement>;
52
23
  private getCustomerAndEntitlementFromCacheOrRefetch;
53
- abstract getCustomerEntitlementsWithUsage(customerRefId: string, resourceId: string | undefined): Promise<Entitlement[]>;
24
+ getCustomerEntitlements(customerRefId: string, resourceId: string | undefined): Promise<import("../models").Entitlement[]>;
54
25
  abstract clearCache(): void | Promise<void>;
55
26
  abstract init(): void | Promise<void>;
56
27
  abstract cleanup(): void | Promise<void>;
57
28
  reportUsage(input: CreateUsageMeasurement): Promise<FetchResult<ReportUsageMutation>>;
58
29
  reportUsageBulk(input: ReportUsageBulkInput): Promise<FetchResult<ReportUsageBulkMutation>>;
59
30
  reportEvent(input: ReportEvent[]): Promise<FetchResult<ReportEventMutation>>;
60
- protected tryGetCacheCustomerAndEntitlement(featureRefId: string, customerRefId: string, resourceId?: string): Promise<{
61
- customerExists: boolean;
62
- entitlement: CachedEntitlement | null;
63
- }>;
64
- protected abstract refetchEntitlementsAfterCacheMiss<T>(props: RefetchEntitlementsAfterCacheMissProps<T>): Promise<T>;
65
- refetchEntitlements({ customerId, resourceId, skipEdge, triggeredBy, }: RefetchEntitlementsProps): Promise<EntitlementsResponse>;
66
- setEntitlements({ entitlements, customerId, resourceId, }: {
31
+ protected refetchEntitlementsAfterCacheMiss(params: RefetchEntitlementsAfterCacheMissParams): Promise<EntitlementsResponse>;
32
+ protected abstract refetchEntityEntitlementsAfterCacheMiss(params: RefetchEntityEntitlementsAfterCacheMissParams): Promise<EntitlementsResponse>;
33
+ refetchEntitlements({ customerId, resourceId, skipEdge, triggeredBy, }: RefetchEntitlementsParams): Promise<EntitlementsResponseCacheHit>;
34
+ setEntitlementsIfExists(options: {
67
35
  entitlements?: EntitlementFragment[] | null;
68
36
  customerId: string;
69
37
  resourceId: string | undefined;
70
- }): Promise<{
71
- entitlements: Map<string, CachedEntitlement>;
72
- } | null>;
38
+ }): Promise<Map<string, import("./cache/cachedEntitlement").default> | null>;
39
+ setEntitlements(params: {
40
+ entitlements: EntitlementFragment[];
41
+ customerId: string;
42
+ resourceId: string | undefined;
43
+ }): Promise<Map<string, import("./cache/cachedEntitlement").default>>;
44
+ private getEntitlementsUpdatedAtTimestamp;
73
45
  protected tryTrackEntitlementCheck(shouldTrack: boolean, featureRefId: string, customerRefId: string, resourceRefId: string | undefined, result: EntitlementCheckResult, requestedUsage?: number): void;
74
46
  updateFeatureUsage({ featureId, customerId, resourceId, currentUsage, nextResetDate, timestamp, }: ReportUsageFragment): Promise<void>;
75
47
  }