@stigg/node-server-sdk 0.72.0 → 0.73.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/api/entitlements/entitlementsApi.d.ts +5 -3
- package/dist/api/entitlements/entitlementsApi.js +7 -4
- package/dist/api/entitlements/entitlementsGql.js +3 -1
- package/dist/api/generated/types.d.ts +1493 -1374
- package/dist/api/generated/types.js +119 -1
- package/dist/client.d.ts +4 -1
- package/dist/client.js +21 -48
- package/dist/clientInitialization.d.ts +12 -0
- package/dist/clientInitialization.js +59 -0
- package/dist/configuration.d.ts +6 -0
- package/dist/configuration.js +1 -1
- package/dist/services/cache/cacheService.d.ts +3 -6
- package/dist/services/cache/inMemoryCacheService.d.ts +2 -5
- package/dist/services/cache/inMemoryCacheService.js +3 -9
- package/dist/services/cache/redisCacheService.d.ts +21 -0
- package/dist/services/cache/redisCacheService.js +142 -0
- package/dist/services/entitlementsService.d.ts +28 -30
- package/dist/services/entitlementsService.js +46 -93
- package/dist/services/inMemoryEntitlementsService.d.ts +20 -0
- package/dist/services/inMemoryEntitlementsService.js +80 -0
- package/dist/services/redisEntitlementsService.d.ts +18 -0
- package/dist/services/redisEntitlementsService.js +83 -0
- package/dist/utils/ModelMapper.d.ts +3 -3
- package/dist/utils/ModelMapper.js +24 -26
- package/dist/utils/apiErrorHandling.js +1 -1
- package/package.json +4 -1
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import CachedEntitlement from './cachedEntitlement';
|
|
2
2
|
export interface CacheService {
|
|
3
|
-
clearCache(): void
|
|
4
|
-
setCustomer(customerId: string, customerEntitlements: Map<string, CachedEntitlement>): void
|
|
5
|
-
getCustomerEntitlements(customerId: string): Map<string, CachedEntitlement> | null
|
|
6
|
-
setEntitlement(customerId: string, featureId: string, entitlement: CachedEntitlement): boolean;
|
|
7
|
-
validateFeature(featureId: string): boolean;
|
|
8
|
-
setFeatures(features: string[]): void;
|
|
3
|
+
clearCache(): void | Promise<void>;
|
|
4
|
+
setCustomer(environmentPrefix: string, customerId: string, customerEntitlements: Map<string, CachedEntitlement>, entitlementsTimestamp: number, usageTimestamp: Map<string, number>): void | Promise<void>;
|
|
5
|
+
getCustomerEntitlements(environmentPrefix: string, customerId: string): Map<string, CachedEntitlement> | null | Promise<Map<string, CachedEntitlement> | null>;
|
|
9
6
|
}
|
|
@@ -2,12 +2,9 @@ import { CacheService } from './cacheService';
|
|
|
2
2
|
import CachedEntitlement from './cachedEntitlement';
|
|
3
3
|
export declare class InMemoryCacheService implements CacheService {
|
|
4
4
|
private readonly entitlements;
|
|
5
|
-
private featureIds;
|
|
6
5
|
constructor();
|
|
7
|
-
validateFeature(featureId: string): boolean;
|
|
8
6
|
clearCache: () => void;
|
|
9
|
-
|
|
10
|
-
setCustomer(customerId: string, customerEntitlements: Map<string, CachedEntitlement>): void;
|
|
7
|
+
setCustomer(environmentPrefix: string, customerId: string, customerEntitlements: Map<string, CachedEntitlement>): void;
|
|
11
8
|
setEntitlement(customerId: string, featureId: string, entitlement: CachedEntitlement): boolean;
|
|
12
|
-
getCustomerEntitlements(customerId: string): Map<string, CachedEntitlement> | null;
|
|
9
|
+
getCustomerEntitlements(environmentId: string, customerId: string): Map<string, CachedEntitlement> | null;
|
|
13
10
|
}
|
|
@@ -5,16 +5,10 @@ class InMemoryCacheService {
|
|
|
5
5
|
constructor() {
|
|
6
6
|
this.clearCache = () => {
|
|
7
7
|
this.entitlements.clear();
|
|
8
|
-
this.featureIds.clear();
|
|
9
8
|
};
|
|
10
|
-
this.setFeatures = (featureIds) => (this.featureIds = new Set(featureIds));
|
|
11
9
|
this.entitlements = new Map();
|
|
12
|
-
this.featureIds = new Set();
|
|
13
10
|
}
|
|
14
|
-
|
|
15
|
-
return this.featureIds.has(featureId);
|
|
16
|
-
}
|
|
17
|
-
setCustomer(customerId, customerEntitlements) {
|
|
11
|
+
setCustomer(environmentPrefix, customerId, customerEntitlements) {
|
|
18
12
|
this.entitlements.set(customerId, customerEntitlements);
|
|
19
13
|
}
|
|
20
14
|
setEntitlement(customerId, featureId, entitlement) {
|
|
@@ -26,9 +20,9 @@ class InMemoryCacheService {
|
|
|
26
20
|
customerEntitlements.set(featureId, entitlement);
|
|
27
21
|
return true;
|
|
28
22
|
}
|
|
29
|
-
getCustomerEntitlements(customerId) {
|
|
23
|
+
getCustomerEntitlements(environmentId, customerId) {
|
|
30
24
|
return this.entitlements.get(customerId) || null;
|
|
31
25
|
}
|
|
32
26
|
}
|
|
33
27
|
exports.InMemoryCacheService = InMemoryCacheService;
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5NZW1vcnlDYWNoZVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY2FjaGUvaW5NZW1vcnlDYWNoZVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsTUFBYSxvQkFBb0I7SUFFL0I7UUFJQSxlQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDO1FBTEEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBMEMsQ0FBQztJQUN4RSxDQUFDO0lBTUQsV0FBVyxDQUNULGlCQUF5QixFQUN6QixVQUFrQixFQUNsQixvQkFBb0Q7UUFFcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFrQixFQUFFLFNBQWlCLEVBQUUsV0FBOEI7UUFDbEYsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDekIsa0ZBQWtGO1lBQ2xGLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHVCQUF1QixDQUFDLGFBQXFCLEVBQUUsVUFBa0I7UUFDL0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDbkQsQ0FBQztDQUNGO0FBakNELG9EQWlDQyJ9
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CacheService } from './cacheService';
|
|
2
|
+
import CachedEntitlement from './cachedEntitlement';
|
|
3
|
+
import { LoggerService } from '../loggerService';
|
|
4
|
+
import { StiggRedisOptions } from '../../configuration';
|
|
5
|
+
export declare class RedisCacheService implements CacheService {
|
|
6
|
+
private readonly loggerService;
|
|
7
|
+
private readonly environmentPrefix;
|
|
8
|
+
private readonly ttl;
|
|
9
|
+
private readonly redisClient;
|
|
10
|
+
private readonly redlock;
|
|
11
|
+
constructor(options: StiggRedisOptions, loggerService: LoggerService);
|
|
12
|
+
setCustomer(environmentPrefix: string, customerId: string, customerEntitlements: Map<string, CachedEntitlement>, entitlementsTimestamp: number, featureIdToUsageTimestamp: Map<string, number>): Promise<void>;
|
|
13
|
+
getCustomerEntitlements(environmentPrefix: string, customerId: string): Promise<Map<string, CachedEntitlement> | null>;
|
|
14
|
+
getCustomerEntitlementsWithUsage(environmentPrefix: string, customerId: string): Promise<Map<string, CachedEntitlement> | null>;
|
|
15
|
+
getFeatureUsage(environmentPrefix: string, customerId: string, featureId: string): Promise<string | null>;
|
|
16
|
+
private getFeaturesUsage;
|
|
17
|
+
clearCache(): void | Promise<void>;
|
|
18
|
+
private buildCustomerKey;
|
|
19
|
+
private buildUsageKey;
|
|
20
|
+
private updateKey;
|
|
21
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RedisCacheService = void 0;
|
|
7
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
const types_1 = require("../../api/generated/types");
|
|
10
|
+
const redlock_1 = __importDefault(require("redlock"));
|
|
11
|
+
const TIMESTAMP_SUFFIX = 'timestamp';
|
|
12
|
+
const LOCK_DURATION = 5000;
|
|
13
|
+
const DEFAULT_TTL_SECS = 7 * 24 * 60 * 60;
|
|
14
|
+
class RedisCacheService {
|
|
15
|
+
constructor(options, loggerService) {
|
|
16
|
+
this.loggerService = loggerService;
|
|
17
|
+
this.redisClient = new ioredis_1.default(options);
|
|
18
|
+
this.redlock = new redlock_1.default([this.redisClient]);
|
|
19
|
+
this.environmentPrefix = options.environmentPrefix;
|
|
20
|
+
this.ttl = options.ttl || DEFAULT_TTL_SECS;
|
|
21
|
+
this.redlock.on('clientError', (err) => this.loggerService.error('Redis client ran into an issue: ', err));
|
|
22
|
+
}
|
|
23
|
+
async setCustomer(environmentPrefix, customerId, customerEntitlements, entitlementsTimestamp, featureIdToUsageTimestamp) {
|
|
24
|
+
const entitlementsDbKey = this.buildCustomerKey(environmentPrefix, customerId);
|
|
25
|
+
const customerEntitlementsAsObject = Object.fromEntries(customerEntitlements);
|
|
26
|
+
await this.redlock.using([environmentPrefix, customerId], LOCK_DURATION, async () => {
|
|
27
|
+
await this.updateKey(new Date(entitlementsTimestamp), entitlementsDbKey, customerEntitlementsAsObject);
|
|
28
|
+
const entitlements = new Array(...customerEntitlements.values());
|
|
29
|
+
const updateUsagesPromises = entitlements
|
|
30
|
+
.filter((entitlement) => {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
return ((_a = entitlement.calculatedEntitlement.feature) === null || _a === void 0 ? void 0 : _a.meterType) &&
|
|
33
|
+
((_b = entitlement.calculatedEntitlement.feature) === null || _b === void 0 ? void 0 : _b.meterType) !== types_1.MeterType.None;
|
|
34
|
+
})
|
|
35
|
+
.map((entitlement) => {
|
|
36
|
+
const { calculatedEntitlement: { feature }, featureUsage: { currentUsage, nextResetDate }, } = entitlement;
|
|
37
|
+
const featureId = (feature === null || feature === void 0 ? void 0 : feature.id) || '';
|
|
38
|
+
const entitlementUsageKey = this.buildUsageKey(environmentPrefix, customerId, featureId);
|
|
39
|
+
const usageValue = {
|
|
40
|
+
currentUsage,
|
|
41
|
+
nextResetDate,
|
|
42
|
+
};
|
|
43
|
+
const featureUsageTimestamp = featureIdToUsageTimestamp.get(featureId);
|
|
44
|
+
if (featureUsageTimestamp) {
|
|
45
|
+
return this.updateKey(new Date(featureUsageTimestamp), entitlementUsageKey, usageValue);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.loggerService.error(`Failed to find usage timestamp for feature with id: ${featureId}`);
|
|
49
|
+
return Promise.resolve();
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
// TODO: Partial success is not covered yet, it awaits transactions
|
|
53
|
+
const updateUsagesResult = await Promise.allSettled(updateUsagesPromises);
|
|
54
|
+
updateUsagesResult
|
|
55
|
+
.filter((result) => result.status === 'rejected')
|
|
56
|
+
.forEach((result) => console.log(`Failed to update feature usage result: ${result.reason}`));
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async getCustomerEntitlements(environmentPrefix, customerId) {
|
|
60
|
+
const entitlements = await this.redisClient.get(this.buildCustomerKey(environmentPrefix, customerId));
|
|
61
|
+
if (entitlements === null || (0, lodash_1.isEmpty)(entitlements)) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
this.loggerService.debug(`Found entitlements in persisted cache for customer`, { customerId });
|
|
65
|
+
return new Map(Object.entries(JSON.parse(entitlements)));
|
|
66
|
+
}
|
|
67
|
+
async getCustomerEntitlementsWithUsage(environmentPrefix, customerId) {
|
|
68
|
+
const cachedEntitlements = await this.getCustomerEntitlements(environmentPrefix, customerId);
|
|
69
|
+
if (cachedEntitlements === null) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
const meteredEntitlementsIds = Array.from(cachedEntitlements === null || cachedEntitlements === void 0 ? void 0 : cachedEntitlements.values())
|
|
73
|
+
.filter((entitlement) => {
|
|
74
|
+
var _a, _b;
|
|
75
|
+
return ((_a = entitlement.calculatedEntitlement.feature) === null || _a === void 0 ? void 0 : _a.meterType) &&
|
|
76
|
+
((_b = entitlement.calculatedEntitlement.feature) === null || _b === void 0 ? void 0 : _b.meterType) !== types_1.MeterType.None;
|
|
77
|
+
})
|
|
78
|
+
.map((entitlement) => entitlement.calculatedEntitlement.feature.id);
|
|
79
|
+
const featuresUsageByFeatureId = await this.getFeaturesUsage(environmentPrefix, customerId, meteredEntitlementsIds);
|
|
80
|
+
featuresUsageByFeatureId.forEach((usageValue, featureId) => {
|
|
81
|
+
const cachedEntitlement = cachedEntitlements.get(featureId);
|
|
82
|
+
if (cachedEntitlement) {
|
|
83
|
+
const { calculatedEntitlement, featureUsage } = cachedEntitlement;
|
|
84
|
+
cachedEntitlements.set(featureId, { calculatedEntitlement, featureUsage: Object.assign(Object.assign({}, featureUsage), usageValue) });
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
this.loggerService.log(`Found usage for a feature the customer is not entitled to.`, {
|
|
88
|
+
customerId: customerId,
|
|
89
|
+
featureId,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
return cachedEntitlements;
|
|
94
|
+
}
|
|
95
|
+
async getFeatureUsage(environmentPrefix, customerId, featureId) {
|
|
96
|
+
return this.redisClient.get(this.buildUsageKey(environmentPrefix, customerId, featureId));
|
|
97
|
+
}
|
|
98
|
+
async getFeaturesUsage(environmentPrefix, customerId, featureIds) {
|
|
99
|
+
const keysToFetch = featureIds.map((featureId) => this.buildUsageKey(environmentPrefix, customerId, featureId));
|
|
100
|
+
const usageValues = await this.redisClient.mget(keysToFetch);
|
|
101
|
+
const featureIdToFeatureUsage = new Map();
|
|
102
|
+
// Redis guarantees returning values in the same order of the keys so this is legit!
|
|
103
|
+
featureIds.forEach((featureId, index) => {
|
|
104
|
+
const featureUsageValue = usageValues[index];
|
|
105
|
+
if (featureUsageValue === null) {
|
|
106
|
+
this.loggerService.log(`Failed to find usage for metered feature: ${featureId}`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
featureIdToFeatureUsage.set(featureId, JSON.parse(featureUsageValue));
|
|
110
|
+
});
|
|
111
|
+
return featureIdToFeatureUsage;
|
|
112
|
+
}
|
|
113
|
+
clearCache() {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
buildCustomerKey(environmentPrefix, customerId) {
|
|
117
|
+
return `${environmentPrefix}:${customerId}`;
|
|
118
|
+
}
|
|
119
|
+
buildUsageKey(environmentPrefix, customerId, featureId) {
|
|
120
|
+
return `${environmentPrefix}:${customerId}:${featureId}`;
|
|
121
|
+
}
|
|
122
|
+
async updateKey(timestamp, key, value) {
|
|
123
|
+
const latestTimestampValue = await this.redisClient.get(`${key}#${TIMESTAMP_SUFFIX}`);
|
|
124
|
+
const latestTimestamp = latestTimestampValue !== null && parseInt(latestTimestampValue, 10) !== Number.NaN
|
|
125
|
+
? new Date(parseInt(latestTimestampValue, 10))
|
|
126
|
+
: undefined;
|
|
127
|
+
const messageTimestamp = timestamp.getTime();
|
|
128
|
+
if (!latestTimestamp || (latestTimestamp === null || latestTimestamp === void 0 ? void 0 : latestTimestamp.getTime()) < messageTimestamp) {
|
|
129
|
+
const writeableValue = typeof value === 'string' ? value : JSON.stringify(value);
|
|
130
|
+
await this.redisClient
|
|
131
|
+
.multi()
|
|
132
|
+
.set(key, writeableValue, 'EX', this.ttl)
|
|
133
|
+
.set(`${key}#${TIMESTAMP_SUFFIX}`, messageTimestamp, 'EX', this.ttl)
|
|
134
|
+
.exec();
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
this.loggerService.log('Cache data timestamp is after message timestamp', { messageTimestamp, latestTimestamp });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.RedisCacheService = RedisCacheService;
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXNDYWNoZVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY2FjaGUvcmVkaXNDYWNoZVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsc0RBQTRCO0FBQzVCLG1DQUFpQztBQUNqQyxxREFBc0Q7QUFFdEQsc0RBQThCO0FBRzlCLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO0FBQ3JDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQztBQUMzQixNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUUxQyxNQUFhLGlCQUFpQjtJQUs1QixZQUFZLE9BQTBCLEVBQW1CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ25GLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUNuRCxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksZ0JBQWdCLENBQUM7UUFFM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUNmLGlCQUF5QixFQUN6QixVQUFrQixFQUNsQixvQkFBb0QsRUFDcEQscUJBQTZCLEVBQzdCLHlCQUE4QztRQUU5QyxNQUFNLGlCQUFpQixHQUFHLElBQUks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
|
|
@@ -1,40 +1,38 @@
|
|
|
1
|
-
import
|
|
1
|
+
import EntitlementsApi from '../api/entitlements/entitlementsApi';
|
|
2
|
+
import { LoggerService } from './loggerService';
|
|
2
3
|
import { ApolloClient, FetchResult, NormalizedCacheObject } from '@apollo/client/core';
|
|
3
4
|
import { BooleanEntitlement, BooleanEntitlementOptions, CreateUsageMeasurement, MeteredEntitlement, MeteredEntitlementOptions, NumericEntitlement, NumericEntitlementOptions } from '../models';
|
|
4
|
-
import {
|
|
5
|
+
import { CreateUsageMeasurementMutation, EntitlementCheckResult } from '../api/generated/types';
|
|
6
|
+
import { ModelMapper } from '../utils/ModelMapper';
|
|
5
7
|
import CachedEntitlement from './cache/cachedEntitlement';
|
|
6
|
-
import {
|
|
7
|
-
import { TypedEventEmitter } from './eventEmitter';
|
|
8
|
+
import { CacheService } from './cache/cacheService';
|
|
8
9
|
import { EdgeApiClient } from './EdgeApiClient';
|
|
9
|
-
export declare class EntitlementsService {
|
|
10
|
-
private
|
|
11
|
-
|
|
12
|
-
private readonly
|
|
13
|
-
|
|
10
|
+
export declare abstract class EntitlementsService {
|
|
11
|
+
private client;
|
|
12
|
+
protected readonly loggerService: LoggerService;
|
|
13
|
+
private readonly batchedGraphqlClient;
|
|
14
|
+
protected readonly cacheService: CacheService;
|
|
15
|
+
protected readonly environmentPrefix: string;
|
|
14
16
|
private readonly entitlementCheckReportingService;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
constructor(cacheService: CacheService, client: ApolloClient<NormalizedCacheObject>, batchedGraphqlClient: ApolloClient<NormalizedCacheObject>, edgeApiClient: EdgeApiClient | null, eventEmitter: TypedEventEmitter, loggerService: LoggerService);
|
|
19
|
-
subscribeToUpdates(): void;
|
|
20
|
-
private websocketErrorHandling;
|
|
21
|
-
unsubscribeFromUpdates(): void;
|
|
22
|
-
refetchEntitlements(customerRefId: string): Promise<{
|
|
23
|
-
entitlements: Map<string, CachedEntitlement> | null;
|
|
24
|
-
customerExists: boolean;
|
|
25
|
-
}>;
|
|
17
|
+
protected readonly entitlementsApi: EntitlementsApi;
|
|
18
|
+
protected readonly modelMapper: ModelMapper;
|
|
19
|
+
protected constructor(client: ApolloClient<NormalizedCacheObject>, loggerService: LoggerService, batchedGraphqlClient: ApolloClient<NormalizedCacheObject>, edgeApiClient: EdgeApiClient | null, cacheService: CacheService, environmentPrefix: string);
|
|
26
20
|
getBooleanEntitlement(customerRefId: string, featureRefId: string, fallbackEntitlement: BooleanEntitlement, options?: BooleanEntitlementOptions): Promise<BooleanEntitlement>;
|
|
27
21
|
getNumericEntitlement(customerRefId: string, featureRefId: string, fallbackEntitlement: NumericEntitlement, options?: NumericEntitlementOptions): Promise<NumericEntitlement>;
|
|
28
22
|
getMeteredEntitlement(customerRefId: string, featureRefId: string, fallbackEntitlement: MeteredEntitlement, options?: MeteredEntitlementOptions): Promise<MeteredEntitlement>;
|
|
23
|
+
getCustomerEntitlementsWithUsage(customerRefId: string): Promise<import("../models").Entitlement[]>;
|
|
29
24
|
getCustomerEntitlements(customerRefId: string): Promise<import("../models").Entitlement[]>;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
25
|
+
abstract clearCache(): void | Promise<void>;
|
|
26
|
+
abstract init(): void | Promise<void>;
|
|
27
|
+
abstract cleanup(): void | Promise<void>;
|
|
28
|
+
createUsageMeasurement(input: CreateUsageMeasurement): Promise<FetchResult<CreateUsageMeasurementMutation>>;
|
|
29
|
+
protected tryGetCacheCustomerAndEntitlement(featureRefId: string, customerRefId: string): Promise<{
|
|
30
|
+
customerExists: boolean;
|
|
31
|
+
entitlement: CachedEntitlement | null;
|
|
32
|
+
}>;
|
|
33
|
+
refetchEntitlements(customerRefId: string, skipEdge?: boolean): Promise<{
|
|
34
|
+
entitlements: Map<string, CachedEntitlement> | null;
|
|
35
|
+
customerExists: boolean;
|
|
36
|
+
}>;
|
|
37
|
+
protected tryTrackEntitlementCheck(shouldTrack: boolean, featureRefId: string, customerRefId: string, result: EntitlementCheckResult, requestedUsage?: number): void;
|
|
36
38
|
}
|
|
37
|
-
export declare type GetEntitlementResult = {
|
|
38
|
-
entitlement: CachedEntitlement | null;
|
|
39
|
-
decision: Decision;
|
|
40
|
-
};
|
|
@@ -4,98 +4,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.EntitlementsService = void 0;
|
|
7
|
+
const entitlementCheckReportingService_1 = require("./entitlementCheckReportingService");
|
|
7
8
|
const entitlementsApi_1 = __importDefault(require("../api/entitlements/entitlementsApi"));
|
|
8
|
-
const ModelMapper_1 = require("../utils/ModelMapper");
|
|
9
9
|
const models_1 = require("../models");
|
|
10
|
+
const ModelMapper_1 = require("../utils/ModelMapper");
|
|
10
11
|
const entitlementDecisionService_1 = require("./entitlementDecisionService");
|
|
11
|
-
const entitlementCheckReportingService_1 = require("./entitlementCheckReportingService");
|
|
12
12
|
const lodash_1 = require("lodash");
|
|
13
13
|
class EntitlementsService {
|
|
14
|
-
constructor(
|
|
15
|
-
this.
|
|
16
|
-
this.eventEmitter = eventEmitter;
|
|
14
|
+
constructor(client, loggerService, batchedGraphqlClient, edgeApiClient, cacheService, environmentPrefix) {
|
|
15
|
+
this.client = client;
|
|
17
16
|
this.loggerService = loggerService;
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
const entitlementsUpdated = result.data.entitlementsUpdated;
|
|
28
|
-
this.loggerService.debug(`Entitlements updated event arrived.`, {
|
|
29
|
-
customerId: entitlementsUpdated.customerId,
|
|
30
|
-
entitlements: entitlementsUpdated.entitlements,
|
|
31
|
-
});
|
|
32
|
-
const entitlements = this.modelMapper.mapCachedEntitlements(entitlementsUpdated.entitlements);
|
|
33
|
-
this.cacheService.setCustomer(entitlementsUpdated.customerId, entitlements);
|
|
34
|
-
this.eventEmitter.emit('entitlementsUpdated', entitlementsUpdated);
|
|
35
|
-
};
|
|
36
|
-
this.onUsageUpdated = (result) => {
|
|
37
|
-
if (result.errors || !result.data) {
|
|
38
|
-
this.loggerService.error(`Failed to handle usage updated event. Errors: ${result.errors}`, {
|
|
39
|
-
errors: JSON.stringify(result.errors),
|
|
40
|
-
});
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const { usage: { customerId, featureId, currentUsage, nextResetDate }, entitlement, } = result.data.usageUpdated;
|
|
44
|
-
this.loggerService.debug(`Usage updated event arrived.`, {
|
|
45
|
-
customerId: customerId,
|
|
46
|
-
featureId: featureId,
|
|
47
|
-
currentUsage: currentUsage,
|
|
48
|
-
nextResetDate: nextResetDate,
|
|
49
|
-
});
|
|
50
|
-
const wasSet = this.cacheService.setEntitlement(customerId, featureId, this.modelMapper.mapCachedEntitlement(entitlement, currentUsage, nextResetDate));
|
|
51
|
-
if (wasSet) {
|
|
52
|
-
this.eventEmitter.emit('usageUpdated', result.data.usageUpdated);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
this.entitlementsApi = new entitlementsApi_1.default(client, edgeApiClient);
|
|
56
|
-
this.entitlementCheckReportingService = new entitlementCheckReportingService_1.EntitlementCheckReportingService(new entitlementsApi_1.default(batchedGraphqlClient, edgeApiClient), this.loggerService);
|
|
17
|
+
this.batchedGraphqlClient = batchedGraphqlClient;
|
|
18
|
+
this.cacheService = cacheService;
|
|
19
|
+
this.environmentPrefix = environmentPrefix;
|
|
20
|
+
this.modelMapper = new ModelMapper_1.ModelMapper();
|
|
21
|
+
this.entitlementsApi = new entitlementsApi_1.default(client, edgeApiClient, loggerService);
|
|
22
|
+
this.entitlementCheckReportingService = new entitlementCheckReportingService_1.EntitlementCheckReportingService(new entitlementsApi_1.default(batchedGraphqlClient, edgeApiClient, loggerService), this.loggerService);
|
|
57
23
|
this.modelMapper = new ModelMapper_1.ModelMapper();
|
|
58
|
-
}
|
|
59
|
-
subscribeToUpdates() {
|
|
60
|
-
this.loggerService.log('Subscribing to real-time updates');
|
|
61
|
-
this.unsubscribeFromUpdates();
|
|
62
|
-
this.entitlementsSubscription = this.entitlementsApi.subscribeEntitlementsUpdated().subscribe((value) => this.onEntitlementsUpdated(value), (err) => this.websocketErrorHandling(err));
|
|
63
|
-
this.usageSubscription = this.entitlementsApi.subscribeUsageUpdated().subscribe((value) => this.onUsageUpdated(value), (err) => this.websocketErrorHandling(err));
|
|
64
|
-
}
|
|
65
|
-
websocketErrorHandling(err) {
|
|
66
|
-
const isErrorRecoverable = this.isErrorRecoverable(err);
|
|
67
|
-
const actionDescription = isErrorRecoverable ? 'retrying to connect' : 'giving up permanently';
|
|
68
|
-
const errorReason = err.message || err.reason;
|
|
69
|
-
this.loggerService.error(`Received error while handling entitlements updated event. Error: ${errorReason} - ${actionDescription}`);
|
|
70
|
-
if (isErrorRecoverable) {
|
|
71
|
-
this.subscribeToUpdates();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
unsubscribeFromUpdates() {
|
|
75
|
-
var _a, _b;
|
|
76
|
-
(_a = this.entitlementsSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
77
|
-
this.entitlementsSubscription = null;
|
|
78
|
-
(_b = this.usageSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();
|
|
79
|
-
this.usageSubscription = null;
|
|
80
|
-
this.cacheService.clearCache();
|
|
81
|
-
}
|
|
82
|
-
async refetchEntitlements(customerRefId) {
|
|
83
|
-
let cachedEntitlements = null;
|
|
84
|
-
let customerExists = false;
|
|
85
|
-
this.loggerService.log(`Customer with id: ${customerRefId} not found in cache`, { customerRefId });
|
|
86
|
-
const entitlementsResult = await this.entitlementsApi.getEntitlements(customerRefId);
|
|
87
|
-
const entitlements = entitlementsResult.data.entitlements;
|
|
88
|
-
if (!(0, lodash_1.isEmpty)(entitlements)) {
|
|
89
|
-
cachedEntitlements = this.modelMapper.mapCachedEntitlements(entitlements);
|
|
90
|
-
this.cacheService.setCustomer(customerRefId, cachedEntitlements);
|
|
91
|
-
customerExists = true;
|
|
92
|
-
}
|
|
93
|
-
return { entitlements: cachedEntitlements, customerExists };
|
|
94
24
|
}
|
|
95
25
|
async getBooleanEntitlement(customerRefId, featureRefId, fallbackEntitlement, options) {
|
|
96
26
|
var _a, _b;
|
|
97
27
|
const shouldTrack = (options === null || options === void 0 ? void 0 : options.shouldTrack) || false;
|
|
98
|
-
let { entitlement, customerExists } = this.tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId);
|
|
28
|
+
let { entitlement, customerExists } = await this.tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId);
|
|
99
29
|
if (!entitlement) {
|
|
100
30
|
const refetchResult = await this.refetchEntitlements(customerRefId);
|
|
101
31
|
entitlement = ((_a = refetchResult.entitlements) === null || _a === void 0 ? void 0 : _a.get(featureRefId)) || null;
|
|
@@ -121,7 +51,7 @@ class EntitlementsService {
|
|
|
121
51
|
async getNumericEntitlement(customerRefId, featureRefId, fallbackEntitlement, options) {
|
|
122
52
|
var _a, _b;
|
|
123
53
|
const shouldTrack = (options === null || options === void 0 ? void 0 : options.shouldTrack) || false;
|
|
124
|
-
let { entitlement, customerExists } = this.tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId);
|
|
54
|
+
let { entitlement, customerExists } = await this.tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId);
|
|
125
55
|
if (!entitlement) {
|
|
126
56
|
const refetchResult = await this.refetchEntitlements(customerRefId);
|
|
127
57
|
entitlement = ((_a = refetchResult.entitlements) === null || _a === void 0 ? void 0 : _a.get(featureRefId)) || null;
|
|
@@ -148,7 +78,7 @@ class EntitlementsService {
|
|
|
148
78
|
var _a, _b, _c;
|
|
149
79
|
const shouldTrack = (options === null || options === void 0 ? void 0 : options.shouldTrack) || false;
|
|
150
80
|
const requestUsage = options === null || options === void 0 ? void 0 : options.requestedUsage;
|
|
151
|
-
let { entitlement, customerExists } = this.tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId);
|
|
81
|
+
let { entitlement, customerExists } = await this.tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId);
|
|
152
82
|
if (!entitlement) {
|
|
153
83
|
const refetchResult = await this.refetchEntitlements(customerRefId);
|
|
154
84
|
entitlement = ((_a = refetchResult.entitlements) === null || _a === void 0 ? void 0 : _a.get(featureRefId)) || null;
|
|
@@ -172,32 +102,55 @@ class EntitlementsService {
|
|
|
172
102
|
this.tryTrackEntitlementCheck(shouldTrack, featureRefId, customerRefId, entitlementResult, requestUsage);
|
|
173
103
|
return this.modelMapper.mapMeteredEntitlement(entitlement, decision, requestUsage);
|
|
174
104
|
}
|
|
105
|
+
async getCustomerEntitlementsWithUsage(customerRefId) {
|
|
106
|
+
return this.getCustomerEntitlements(customerRefId);
|
|
107
|
+
}
|
|
175
108
|
async getCustomerEntitlements(customerRefId) {
|
|
176
|
-
const entitlements = this.cacheService.getCustomerEntitlements(customerRefId);
|
|
109
|
+
const entitlements = this.cacheService.getCustomerEntitlements(this.environmentPrefix, customerRefId);
|
|
177
110
|
if (!entitlements) {
|
|
178
111
|
await this.refetchEntitlements(customerRefId);
|
|
179
112
|
// todo currently there is no good way to find out if the customer exists or not
|
|
180
113
|
}
|
|
181
|
-
const cachedEntitlements = this.cacheService.getCustomerEntitlements(customerRefId) || [];
|
|
114
|
+
const cachedEntitlements = (await this.cacheService.getCustomerEntitlements(this.environmentPrefix, customerRefId)) || [];
|
|
182
115
|
return Array.from(cachedEntitlements.values()).map((entitlement) => {
|
|
183
116
|
const decision = entitlementDecisionService_1.EntitlementDecisionService.decideEntitlementPolicy(true, entitlement);
|
|
184
117
|
return this.modelMapper.mapEntitlement(entitlement, decision);
|
|
185
118
|
});
|
|
186
119
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
return !isInvalidAPIKeyError;
|
|
120
|
+
createUsageMeasurement(input) {
|
|
121
|
+
return this.entitlementsApi.createUsageMeasurement(input);
|
|
190
122
|
}
|
|
191
|
-
tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId) {
|
|
192
|
-
const customer = this.cacheService.getCustomerEntitlements(customerRefId);
|
|
123
|
+
async tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId) {
|
|
124
|
+
const customer = await this.cacheService.getCustomerEntitlements(this.environmentPrefix, customerRefId);
|
|
193
125
|
if (!customer) {
|
|
194
126
|
return { customerExists: false, entitlement: null };
|
|
195
127
|
}
|
|
196
128
|
const entitlement = customer.get(featureRefId) || null;
|
|
197
129
|
return { customerExists: true, entitlement };
|
|
198
130
|
}
|
|
199
|
-
async
|
|
200
|
-
|
|
131
|
+
async refetchEntitlements(customerRefId, skipEdge = false) {
|
|
132
|
+
var _a;
|
|
133
|
+
let cachedEntitlements = null;
|
|
134
|
+
let customerExists = false;
|
|
135
|
+
this.loggerService.log(`Customer with id: ${customerRefId} not found in cache`, { customerRefId });
|
|
136
|
+
const entitlementsResult = await this.entitlementsApi.getEntitlements(customerRefId, skipEdge);
|
|
137
|
+
const entitlements = entitlementsResult.data.entitlements;
|
|
138
|
+
if (!(0, lodash_1.isEmpty)(entitlements)) {
|
|
139
|
+
const entitlementsUpdatedAtTimestamp = ((_a = entitlements.find((entitlement) => Number.isInteger(entitlement === null || entitlement === void 0 ? void 0 : entitlement.entitlementUpdatedAt))) === null || _a === void 0 ? void 0 : _a.entitlementUpdatedAt) || new Date().getTime();
|
|
140
|
+
const featureIdToUsageTimestamp = new Map(entitlements
|
|
141
|
+
.filter((entitlement) => {
|
|
142
|
+
var _a, _b;
|
|
143
|
+
return ((_a = entitlement === null || entitlement === void 0 ? void 0 : entitlement.feature) === null || _a === void 0 ? void 0 : _a.meterType) &&
|
|
144
|
+
((_b = entitlement === null || entitlement === void 0 ? void 0 : entitlement.feature) === null || _b === void 0 ? void 0 : _b.meterType) !== models_1.MeterType.None &&
|
|
145
|
+
(entitlement === null || entitlement === void 0 ? void 0 : entitlement.feature.refId) &&
|
|
146
|
+
Number.isInteger(entitlement.usageUpdatedAt);
|
|
147
|
+
})
|
|
148
|
+
.map((entitlement) => [entitlement.feature.refId, entitlement.usageUpdatedAt]));
|
|
149
|
+
cachedEntitlements = this.modelMapper.mapCachedEntitlements(entitlements);
|
|
150
|
+
await this.cacheService.setCustomer(this.environmentPrefix, customerRefId, cachedEntitlements, entitlementsUpdatedAtTimestamp, featureIdToUsageTimestamp);
|
|
151
|
+
customerExists = true;
|
|
152
|
+
}
|
|
153
|
+
return { entitlements: cachedEntitlements, customerExists };
|
|
201
154
|
}
|
|
202
155
|
tryTrackEntitlementCheck(shouldTrack, featureRefId, customerRefId, result, requestedUsage) {
|
|
203
156
|
if (!shouldTrack) {
|
|
@@ -207,4 +160,4 @@ class EntitlementsService {
|
|
|
207
160
|
}
|
|
208
161
|
}
|
|
209
162
|
exports.EntitlementsService = EntitlementsService;
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRsZW1lbnRzU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGxlbWVudHNTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLDBGQUFrRTtBQUNsRSxzREFBbUQ7QUFDbkQsc0NBVW1CO0FBQ25CLDZFQUFvRjtBQVFwRix5RkFBc0Y7QUFDdEYsbUNBQWlDO0FBSWpDLE1BQWEsbUJBQW1CO0lBUTlCLFlBQ21CLFlBQTBCLEVBQzNDLE1BQTJDLEVBQzNDLG9CQUF5RCxFQUN6RCxhQUFtQyxFQUNsQixZQUErQixFQUMvQixhQUE0QjtRQUw1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUkxQixpQkFBWSxHQUFaLFlBQVksQ0FBbUI7UUFDL0Isa0JBQWEsR0FBYixhQUFhLENBQWU7UUFUdkMsNkJBQXdCLEdBQXNDLElBQUksQ0FBQztRQUNuRSxzQkFBaUIsR0FBc0MsSUFBSSxDQUFDO1FBOE41RCwwQkFBcUIsR0FBRyxDQUFDLE1BQW9ELEVBQUUsRUFBRTtZQUN2RixJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyx3REFBd0QsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNoRyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUN0QyxDQUFDLENBQUM7Z0JBQ0gsT0FBTzthQUNSO1lBRUQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBRTVELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFO2dCQUM5RCxVQUFVLEVBQUUsbUJBQW1CLENBQUMsVUFBVTtnQkFDMUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLFlBQVk7YUFDL0MsQ0FBQyxDQUFDO1lBRUgsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUU5RixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUM7UUFFTSxtQkFBYyxHQUFHLENBQUMsTUFBNkMsRUFBRSxFQUFFO1lBQ3pFLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ3pGLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7aUJBQ3RDLENBQUMsQ0FBQztnQkFDSCxPQUFPO2FBQ1I7WUFFRCxNQUFNLEVBQ0osS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEVBQzdELFdBQVcsR0FDWixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBRTdCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFO2dCQUN2RCxVQUFVLEVBQUUsVUFBVTtnQkFDdEIsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLFlBQVksRUFBRSxZQUFZO2dCQUMxQixhQUFhLEVBQUUsYUFBYTthQUM3QixDQUFDLENBQUM7WUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FDN0MsVUFBVSxFQUNWLFNBQVMsRUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQ2hGLENBQUM7WUFFRixJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsRTtRQUNILENBQUMsQ0FBQztRQXZRQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUkseUJBQWUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksbUVBQWdDLENBQzFFLElBQUkseUJBQWUsQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLENBQUMsRUFDeEQsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixFQUFFLENBQUMsU0FBUyxDQUMzRixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUM1QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUMxQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLENBQzdFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUNyQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVPLHNCQUFzQixDQUFDLEdBQVE7UUFDckMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEQsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDO1FBQy9GLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FDdEIsb0VBQW9FLFdBQVcsTUFBTSxpQkFBaUIsRUFBRSxDQUN6RyxDQUFDO1FBQ0YsSUFBSSxrQkFBa0IsRUFBRTtZQUN0QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCxzQkFBc0I7O1FBQ3BCLE1BQUEsSUFBSSxDQUFDLHdCQUF3QiwwQ0FBRSxXQUFXLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLE1BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxXQUFXLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxhQUFxQjtRQUM3QyxJQUFJLGtCQUFrQixHQUEwQyxJQUFJLENBQUM7UUFDckUsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHFCQUFxQixhQUFhLHFCQUFxQixFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNuRyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckYsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUUxRCxJQUFJLENBQUMsSUFBQSxnQkFBTyxFQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzFCLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFFakUsY0FBYyxHQUFHLElBQUksQ0FBQztTQUN2QjtRQUVELE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FDekIsYUFBcUIsRUFDckIsWUFBb0IsRUFDcEIsbUJBQXVDLEVBQ3ZDLE9BQW1DOztRQUVuQyxNQUFNLFdBQVcsR0FBRyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXLEtBQUksS0FBSyxDQUFDO1FBQ2xELElBQUksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BFLFdBQVcsR0FBRyxDQUFBLE1BQUEsYUFBYSxDQUFDLFlBQVksMENBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFJLElBQUksQ0FBQztZQUNwRSxjQUFjLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQztTQUMvQztRQUNELE1BQU0sUUFBUSxHQUFHLHVEQUEwQixDQUFDLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVqRyxJQUNFLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLHFCQUFxQixDQUFDLE9BQU87WUFDMUMsQ0FBQSxNQUFBLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLDBDQUFFLFdBQVcsTUFBSyxvQkFBVyxDQUFDLE9BQU8sRUFDOUU7WUFDQSxNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsbUNBQW1DLENBQ3BGLG1CQUFtQixFQUNuQixRQUFRLENBQ1QsQ0FBQztZQUNGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBQ25HLE9BQU8sbUJBQW1CLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHFCQUFxQixhQUFhLG1CQUFtQixFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNqRyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDM0YsdUNBQVksUUFBUSxLQUFFLFVBQVUsRUFBRSxLQUFLLElBQUc7U0FDM0M7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRTNGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FDekIsYUFBcUIsRUFDckIsWUFBb0IsRUFDcEIsbUJBQXVDLEVBQ3ZDLE9BQW1DOztRQUVuQyxNQUFNLFdBQVcsR0FBRyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXLEtBQUksS0FBSyxDQUFDO1FBQ2xELElBQUksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BFLFdBQVcsR0FBRyxDQUFBLE1BQUEsYUFBYSxDQUFDLFlBQVksMENBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFJLElBQUksQ0FBQztZQUNwRSxjQUFjLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQztTQUMvQztRQUNELE1BQU0sUUFBUSxHQUFHLHVEQUEwQixDQUFDLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVqRyxJQUNFLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLHFCQUFxQixDQUFDLE9BQU87WUFDMUMsQ0FBQSxNQUFBLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLDBDQUFFLFdBQVcsTUFBSyxvQkFBVyxDQUFDLE9BQU8sRUFDOUU7WUFDQSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsbUNBQW1DLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDM0YsT0FBTyxtQkFBbUIsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMscUJBQXFCLGFBQWEsbUJBQW1CLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBRWpHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUUzRix1Q0FBWSxRQUFRLEtBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFHO1NBQy9EO1FBRUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUUzRixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQ3pCLGFBQXFCLEVBQ3JCLFlBQW9CLEVBQ3BCLG1CQUF1QyxFQUN2QyxPQUFtQzs7UUFFbkMsTUFBTSxXQUFXLEdBQUcsQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsV0FBVyxLQUFJLEtBQUssQ0FBQztRQUNsRCxNQUFNLFlBQVksR0FBRyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsY0FBYyxDQUFDO1FBQzdDLElBQUksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BFLFdBQVcsR0FBRyxDQUFBLE1BQUEsYUFBYSxDQUFDLFlBQVksMENBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFJLElBQUksQ0FBQztZQUNwRSxjQUFjLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQztTQUMvQztRQUNELE1BQU0sUUFBUSxHQUFHLHVEQUEwQixDQUFDLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFL0csSUFDRSxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxxQkFBcUIsQ0FBQyxPQUFPO1lBQzFDLENBQUEsTUFBQSxXQUFXLENBQUMscUJBQXFCLENBQUMsT0FBTywwQ0FBRSxTQUFTLE1BQUssa0JBQVMsQ0FBQyxXQUFXO1lBQzlFLENBQUEsTUFBQSxXQUFXLENBQUMscUJBQXFCLENBQUMsT0FBTywwQ0FBRSxTQUFTLE1BQUssa0JBQVMsQ0FBQyxXQUFXLEVBQzlFO1lBQ0EsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLG1DQUFtQyxDQUM1RSxtQkFBbUIsRUFDbkIsUUFBUSxFQUNSLFlBQVksQ0FDYixDQUFDO1lBQ0YsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3pHLE9BQU8sbUJBQW1CLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHFCQUFxQixhQUFhLG1CQUFtQixFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUVqRyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNuRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUUzRix1Q0FDSyxRQUFRLEtBQ1gsWUFBWSxFQUFFLENBQUMsRUFDZixVQUFVLEVBQUUsS0FBSyxFQUNqQixXQUFXLEVBQUUsS0FBSyxFQUNsQixjQUFjLEVBQUUsWUFBWSxJQUFJLENBQUMsSUFDakM7U0FDSDtRQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV6RyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QixDQUFDLGFBQXFCO1FBQ2pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUUsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM5QyxnRkFBZ0Y7U0FDakY7UUFFRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTFGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2pFLE1BQU0sUUFBUSxHQUFHLHVEQUEwQixDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN2RixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxHQUFRO1FBQ2pDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQztRQUM5RCxPQUFPLENBQUMsb0JBQW9CLENBQUM7SUFDL0IsQ0FBQztJQXVETyxpQ0FBaUMsQ0FDdkMsWUFBb0IsRUFDcEIsYUFBcUI7UUFFckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUxRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3JEO1FBRUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUM7UUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxLQUE2QjtRQUN4RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLHdCQUF3QixDQUM5QixXQUFvQixFQUNwQixZQUFvQixFQUNwQixhQUFxQixFQUNyQixNQUE4QixFQUM5QixjQUF1QjtRQUV2QixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQywrQkFBK0IsQ0FDbkUsWUFBWSxFQUNaLGFBQWEsRUFDYixNQUFNLEVBQ04sY0FBYyxDQUNmLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE3VEQsa0RBNlRDIn0=
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRsZW1lbnRzU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGxlbWVudHNTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHlGQUFzRjtBQUN0RiwwRkFBa0U7QUFHbEUsc0NBVW1CO0FBRW5CLHNEQUFtRDtBQUNuRCw2RUFBMEU7QUFHMUUsbUNBQWlDO0FBR2pDLE1BQXNCLG1CQUFtQjtJQUt2QyxZQUNVLE1BQTJDLEVBQ2hDLGFBQTRCLEVBQzlCLG9CQUF5RCxFQUMxRSxhQUFtQyxFQUNoQixZQUEwQixFQUMxQixpQkFBeUI7UUFMcEMsV0FBTSxHQUFOLE1BQU0sQ0FBcUM7UUFDaEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDOUIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQztRQUV2RCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQVE7UUFFNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHlCQUFXLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUkseUJBQWUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLG1FQUFnQyxDQUMxRSxJQUFJLHlCQUFlLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxFQUN2RSxJQUFJLENBQUMsYUFBYSxDQUNuQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHlCQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUN6QixhQUFxQixFQUNyQixZQUFvQixFQUNwQixtQkFBdUMsRUFDdkMsT0FBbUM7O1FBRW5DLE1BQU0sV0FBVyxHQUFHLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFF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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ApolloClient, NormalizedCacheObject } from '@apollo/client/core';
|
|
2
|
+
import { LoggerService } from './loggerService';
|
|
3
|
+
import { TypedEventEmitter } from './eventEmitter';
|
|
4
|
+
import { EntitlementsService } from './entitlementsService';
|
|
5
|
+
import { InMemoryCacheService } from './cache/inMemoryCacheService';
|
|
6
|
+
import { EdgeApiClient } from './EdgeApiClient';
|
|
7
|
+
export declare class InMemoryEntitlementsService extends EntitlementsService {
|
|
8
|
+
protected readonly cacheService: InMemoryCacheService;
|
|
9
|
+
private readonly eventEmitter;
|
|
10
|
+
private entitlementsSubscription;
|
|
11
|
+
private usageSubscription;
|
|
12
|
+
constructor(cacheService: InMemoryCacheService, client: ApolloClient<NormalizedCacheObject>, batchedGraphqlClient: ApolloClient<NormalizedCacheObject>, eventEmitter: TypedEventEmitter, loggerService: LoggerService, edgeApiClient: EdgeApiClient | null);
|
|
13
|
+
init(): void;
|
|
14
|
+
private websocketErrorHandling;
|
|
15
|
+
cleanup(): void;
|
|
16
|
+
private onEntitlementsUpdated;
|
|
17
|
+
private onUsageUpdated;
|
|
18
|
+
private isErrorRecoverable;
|
|
19
|
+
clearCache(): void;
|
|
20
|
+
}
|