@stigg/node-server-sdk 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +3 -0
  3. package/dist/api/configurationApi.d.ts +8 -0
  4. package/dist/api/configurationApi.js +19 -0
  5. package/dist/api/entitlements/entitlementsApi.d.ts +16 -0
  6. package/dist/api/entitlements/entitlementsApi.js +70 -0
  7. package/dist/api/entitlements/entitlementsGql.d.ts +4 -0
  8. package/dist/api/entitlements/entitlementsGql.js +57 -0
  9. package/dist/api/generated/types.d.ts +2413 -0
  10. package/dist/api/generated/types.js +379 -0
  11. package/dist/api/initApolloClient.d.ts +12 -0
  12. package/dist/api/initApolloClient.js +75 -0
  13. package/dist/api/managementApi.d.ts +12 -0
  14. package/dist/api/managementApi.js +80 -0
  15. package/dist/client.d.ts +61 -0
  16. package/dist/client.js +166 -0
  17. package/dist/configuration.d.ts +18 -0
  18. package/dist/configuration.js +47 -0
  19. package/dist/index.d.ts +6 -0
  20. package/dist/index.js +19 -0
  21. package/dist/models.d.ts +107 -0
  22. package/dist/models.js +27 -0
  23. package/dist/services/cache/cacheService.d.ts +9 -0
  24. package/dist/services/cache/cacheService.js +3 -0
  25. package/dist/services/cache/cachedEntitlement.d.ts +18 -0
  26. package/dist/services/cache/cachedEntitlement.js +10 -0
  27. package/dist/services/cache/inMemoryCacheService.d.ts +13 -0
  28. package/dist/services/cache/inMemoryCacheService.js +33 -0
  29. package/dist/services/entitlementDecisionService.d.ts +9 -0
  30. package/dist/services/entitlementDecisionService.js +43 -0
  31. package/dist/services/entitlementsService.d.ts +22 -0
  32. package/dist/services/entitlementsService.js +80 -0
  33. package/dist/services/loggerService.d.ts +14 -0
  34. package/dist/services/loggerService.js +32 -0
  35. package/dist/utils/ModelMapper.d.ts +13 -0
  36. package/dist/utils/ModelMapper.js +109 -0
  37. package/package.json +80 -0
package/dist/client.js ADDED
@@ -0,0 +1,166 @@
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.Stigg = void 0;
7
+ const models_1 = require("./models");
8
+ const initApolloClient_1 = __importDefault(require("./api/initApolloClient"));
9
+ const ModelMapper_1 = require("./utils/ModelMapper");
10
+ const managementApi_1 = __importDefault(require("./api/managementApi"));
11
+ const configuration_1 = require("./configuration");
12
+ const configurationApi_1 = __importDefault(require("./api/configurationApi"));
13
+ const inMemoryCacheService_1 = require("./services/cache/inMemoryCacheService");
14
+ const entitlementsService_1 = require("./services/entitlementsService");
15
+ const loggerService_1 = require("./services/loggerService");
16
+ function meow(num) {
17
+ if (num === 1) {
18
+ return {
19
+ abc: 1,
20
+ zubi: 'wuff',
21
+ };
22
+ }
23
+ else {
24
+ return false;
25
+ }
26
+ }
27
+ /**
28
+ * Stigg SDK client
29
+ */
30
+ class Stigg {
31
+ /**
32
+ * Create an instance of the Stigg SDK client.
33
+ * @param graphClient
34
+ * @param entitlementsCacheService
35
+ * @param loggerService
36
+ * @param environmentId
37
+ */
38
+ constructor(graphClient, entitlementsCacheService, loggerService, environmentId) {
39
+ this.graphqlClient = graphClient;
40
+ this.modelMapper = new ModelMapper_1.ModelMapper();
41
+ this.cacheService = entitlementsCacheService;
42
+ this.loggerService = loggerService;
43
+ this.entitlementsService = new entitlementsService_1.EntitlementsService(this.cacheService, this.graphqlClient, this.loggerService);
44
+ this.managementApi = new managementApi_1.default(this.graphqlClient, environmentId);
45
+ }
46
+ /**
47
+ * Initialize an instance of the Stigg SDK client.
48
+ * @param {Partial<ClientConfiguration>} configuration - client configuration object provided by the consumer.
49
+ */
50
+ static async initialize(configuration) {
51
+ try {
52
+ (0, configuration_1.validateConfiguration)(configuration);
53
+ const sdkConfiguration = (0, configuration_1.getConfiguration)(configuration);
54
+ const loggerService = new loggerService_1.LoggerService(sdkConfiguration.logConfiguration.logger, sdkConfiguration.logConfiguration.logLevel);
55
+ const entitlementsCacheService = new inMemoryCacheService_1.InMemoryCacheService();
56
+ const graphqlClient = (0, initApolloClient_1.default)(Object.assign(Object.assign({}, sdkConfiguration), { onConnected: entitlementsCacheService.clearCache, loggerService }));
57
+ const configurationApi = new configurationApi_1.default(graphqlClient);
58
+ const environmentId = (await configurationApi.getEnvironment()).data.currentEnvironment;
59
+ return new Stigg(graphqlClient, entitlementsCacheService, loggerService, environmentId);
60
+ }
61
+ catch (err) {
62
+ throw new Error(`Failed to initialize api ${err}`);
63
+ }
64
+ }
65
+ /**
66
+ * Fetch a specific boolean Entitlement.
67
+ * @return {Promise<boolean>} List of features.
68
+ */
69
+ async getEntitlement(featureRefId, customerRefId, options) {
70
+ try {
71
+ const entitlement = await this.entitlementsService.getEntitlement(featureRefId, customerRefId, options === null || options === void 0 ? void 0 : options.requestedUsage);
72
+ if (!entitlement) {
73
+ return this.handleNoEntitlementFound(options === null || options === void 0 ? void 0 : options.fallbackGrantedValue);
74
+ }
75
+ return entitlement;
76
+ }
77
+ catch (err) {
78
+ this.loggerService.error(`Failed to get entitlement: ${JSON.stringify(err.graphQLErrors['0'].extensions)}`);
79
+ return this.handleNoEntitlementFound(options === null || options === void 0 ? void 0 : options.fallbackGrantedValue);
80
+ }
81
+ }
82
+ handleNoEntitlementFound(fallbackGrantedValue) {
83
+ if (fallbackGrantedValue) {
84
+ return {
85
+ isValid: false,
86
+ isGranted: fallbackGrantedValue,
87
+ accessDeniedReason: fallbackGrantedValue ? models_1.AccessDeniedReason.Unknown : null,
88
+ };
89
+ }
90
+ return models_1.INVALID_ENTITLEMENT;
91
+ }
92
+ async decrement(featureRefId, customerRefId, value = 1) {
93
+ try {
94
+ await this.entitlementsService.createUsageMeasurement({
95
+ featureId: featureRefId,
96
+ customerId: customerRefId,
97
+ value: -value,
98
+ });
99
+ }
100
+ catch (err) {
101
+ this.loggerService.error(`Failed to decrement: ${JSON.stringify(err.graphQLErrors['0'].extensions)}`);
102
+ }
103
+ }
104
+ async increment(featureRefId, customerRefId, value = 1) {
105
+ try {
106
+ await this.entitlementsService.createUsageMeasurement({
107
+ featureId: featureRefId,
108
+ customerId: customerRefId,
109
+ value,
110
+ });
111
+ }
112
+ catch (err) {
113
+ this.loggerService.error(`Failed to increment: ${JSON.stringify(err.graphQLErrors['0'].extensions)}`);
114
+ }
115
+ }
116
+ /**
117
+ * Create a Customer.
118
+ * @return {Promise<Customer>} Newly created customer.
119
+ * @param customerRefId
120
+ */
121
+ async createCustomer(customerRefId) {
122
+ try {
123
+ const { data } = await this.managementApi.createCustomer(customerRefId);
124
+ if (!data)
125
+ throw new Error('Invalid response');
126
+ return this.modelMapper.mapCustomer(data);
127
+ }
128
+ catch (err) {
129
+ throw new Error(`Failed to create customer: ${err}`);
130
+ }
131
+ }
132
+ /**
133
+ * Create a Subscription
134
+ * @return {Promise<Subscription>} Newly created subscription.
135
+ * @param createSubscription
136
+ */
137
+ async createSubscription(createSubscription) {
138
+ try {
139
+ const { data } = await this.managementApi.createSubscription(createSubscription);
140
+ if (!data)
141
+ throw new Error('Invalid response');
142
+ return this.modelMapper.mapSubscription(data);
143
+ }
144
+ catch (err) {
145
+ throw new Error(`Failed to create subscription: ${err}`);
146
+ }
147
+ }
148
+ /**
149
+ * Initiate a checkout to purchase a plan
150
+ * @return {Promise<Checkout>} Container object for the checkout process.
151
+ * @param initiateCheckout
152
+ */
153
+ async initiateCheckout(initiateCheckout) {
154
+ try {
155
+ const { data } = await this.managementApi.initiateCheckout(initiateCheckout);
156
+ if (!data)
157
+ throw new Error('Invalid response');
158
+ return this.modelMapper.mapCheckout(data.initiateCheckout);
159
+ }
160
+ catch (err) {
161
+ throw new Error(`Failed to begin checkout: ${err}`);
162
+ }
163
+ }
164
+ }
165
+ exports.Stigg = Stigg;
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxQ0FZa0I7QUFDbEIsOEVBQXNEO0FBQ3RELHFEQUFrRDtBQUNsRCx3RUFBZ0Q7QUFDaEQsbURBQStGO0FBQy9GLDhFQUFzRDtBQUN0RCxnRkFBNkU7QUFDN0Usd0VBQXFFO0FBRXJFLDREQUF5RDtBQWlCekQsU0FBUyxJQUFJLENBQUMsR0FBVztJQUN2QixJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7UUFDYixPQUFPO1lBQ0wsR0FBRyxFQUFFLENBQUM7WUFDTixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUM7S0FDSDtTQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILE1BQWEsS0FBSztJQVFoQjs7Ozs7O09BTUc7SUFDSCxZQUNFLFdBQWdELEVBQ2hELHdCQUFzQyxFQUN0QyxhQUE0QixFQUM1QixhQUFxQjtRQUVyQixJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsd0JBQXdCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUkseUNBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksdUJBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFrQztRQUN4RCxJQUFJ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
@@ -0,0 +1,18 @@
1
+ import { LogLevel } from './services/loggerService';
2
+ export interface Logger {
3
+ log: (message: string, object?: Record<string, string>) => void;
4
+ error: (message: string, error?: Record<string, string>) => void;
5
+ }
6
+ export interface LogConfiguration {
7
+ logger: Logger;
8
+ logLevel: LogLevel;
9
+ }
10
+ declare type ClientConfiguration = {
11
+ sdkKey: string;
12
+ baseUri?: string;
13
+ wsUrl?: string;
14
+ logConfiguration?: LogConfiguration;
15
+ };
16
+ declare function getConfiguration(configuration: Partial<ClientConfiguration>): Required<ClientConfiguration>;
17
+ declare function validateConfiguration(configuration: Partial<ClientConfiguration>): void;
18
+ export { getConfiguration, ClientConfiguration, validateConfiguration };
@@ -0,0 +1,47 @@
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.validateConfiguration = exports.getConfiguration = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const loggerService_1 = require("./services/loggerService");
9
+ const defaults = () => {
10
+ const baseUri = 'https://api.stigg.io';
11
+ return {
12
+ baseUri,
13
+ wsUrl: getWsUrl(baseUri),
14
+ logConfiguration: {
15
+ logger: console,
16
+ logLevel: loggerService_1.LogLevel.ERROR,
17
+ },
18
+ };
19
+ };
20
+ function getConfiguration(configuration) {
21
+ const defaultConfig = defaults();
22
+ const wsUrl = configuration.wsUrl
23
+ ? configuration.wsUrl
24
+ : configuration.baseUri
25
+ ? getWsUrl(configuration.baseUri)
26
+ : defaultConfig.wsUrl;
27
+ return lodash_1.default.merge(defaultConfig, configuration, { wsUrl });
28
+ }
29
+ exports.getConfiguration = getConfiguration;
30
+ function getWsUrl(apiUrl) {
31
+ const url = new URL(apiUrl);
32
+ if (url.protocol === 'http:') {
33
+ url.protocol = 'ws:';
34
+ }
35
+ else if (url.protocol === 'https:') {
36
+ url.protocol = 'wss:';
37
+ }
38
+ // Remove last char since URL.toString() adds a redundant backslash
39
+ return url.toString().slice(0, -1);
40
+ }
41
+ function validateConfiguration(configuration) {
42
+ if (!configuration.sdkKey) {
43
+ throw new Error('You must configure the client with an SDK key');
44
+ }
45
+ }
46
+ exports.validateConfiguration = validateConfiguration;
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUF1QjtBQUN2Qiw0REFBb0Q7QUFtQnBELE1BQU0sUUFBUSxHQUFHLEdBQWlDLEVBQUU7SUFDbEQsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLENBQUM7SUFDdkMsT0FBTztRQUNMLE9BQU87UUFDUCxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUN4QixnQkFBZ0IsRUFBRTtZQUNoQixNQUFNLEVBQUUsT0FBTztZQUNmLFFBQVEsRUFBRSx3QkFBUSxDQUFDLEtBQUs7U0FDekI7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsU0FBUyxnQkFBZ0IsQ0FBQyxhQUEyQztJQUNuRSxNQUFNLGFBQWEsR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSztRQUMvQixDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUs7UUFDckIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPO1lBQ3ZCLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztZQUNqQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUV4QixPQUFPLGdCQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBa0MsQ0FBQztBQUMzRixDQUFDO0FBcUJRLDRDQUFnQjtBQW5CekIsU0FBUyxRQUFRLENBQUMsTUFBYztJQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1QixJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFO1FBQzVCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0tBQ3RCO1NBQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUNwQyxHQUFHLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztLQUN2QjtJQUVELG1FQUFtRTtJQUNuRSxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsYUFBMkM7SUFDeEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0tBQ2xFO0FBQ0gsQ0FBQztBQUUrQyxzREFBcUIifQ==
@@ -0,0 +1,6 @@
1
+ export { ClientConfiguration } from './configuration';
2
+ export { LogLevel } from './services/loggerService';
3
+ export * from './models';
4
+ export { StiggEntitlementAPI, StiggManagementAPI } from './client';
5
+ import { Stigg } from './client';
6
+ export default Stigg;
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.LogLevel = void 0;
14
+ var loggerService_1 = require("./services/loggerService");
15
+ Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return loggerService_1.LogLevel; } });
16
+ __exportStar(require("./models"), exports);
17
+ const client_1 = require("./client");
18
+ exports.default = client_1.Stigg;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBLDBEQUFvRDtBQUEzQyx5R0FBQSxRQUFRLE9BQUE7QUFDakIsMkNBQXlCO0FBRXpCLHFDQUFpQztBQUNqQyxrQkFBZSxjQUFLLENBQUMifQ==
@@ -0,0 +1,107 @@
1
+ import { AccessDeniedReason, BillingPeriod } from './api/generated/types';
2
+ export { AccessDeniedReason } from './api/generated/types';
3
+ export { ErrorCode } from './api/generated/types';
4
+ export { BillingPeriod } from './api/generated/types';
5
+ export declare enum FeatureType {
6
+ Boolean = "BOOLEAN",
7
+ Number = "NUMBER"
8
+ }
9
+ export declare enum MeterType {
10
+ Fluctuating = "Fluctuating",
11
+ Incremental = "Incremental",
12
+ None = "None"
13
+ }
14
+ export declare type BaseEntitlement = {
15
+ isValid: boolean;
16
+ isGranted: boolean;
17
+ featureType?: FeatureType;
18
+ accessDeniedReason?: AccessDeniedReason | null;
19
+ featureId?: string | null;
20
+ };
21
+ export interface InvalidEntitlement extends BaseEntitlement {
22
+ isValid: false;
23
+ isGranted: false;
24
+ accessDeniedReason: AccessDeniedReason.FeatureNotFound | AccessDeniedReason.CustomerNotFound | AccessDeniedReason.Unknown;
25
+ }
26
+ export interface FallbackEntitlement extends BaseEntitlement {
27
+ isValid: false;
28
+ }
29
+ export interface ValidEntitlement extends BaseEntitlement {
30
+ isValid: true;
31
+ }
32
+ export interface BooleanEntitlement extends BaseEntitlement {
33
+ featureType: FeatureType.Boolean;
34
+ }
35
+ export interface NumberEntitlement extends BaseEntitlement {
36
+ featureType: FeatureType.Number;
37
+ usageLimit: number | null;
38
+ featureUnits?: string;
39
+ featureUnitsPlural?: string;
40
+ hasUnlimitedUsage: boolean;
41
+ }
42
+ export interface MeteredEntitlement extends NumberEntitlement {
43
+ featureType: FeatureType.Number;
44
+ meterType: MeterType.Fluctuating | MeterType.Incremental | MeterType.None;
45
+ currentUsage: number;
46
+ requestedUsage: number;
47
+ }
48
+ export declare type Entitlement = FallbackEntitlement | InvalidEntitlement | BooleanEntitlement | NumberEntitlement | MeteredEntitlement;
49
+ export declare const INVALID_ENTITLEMENT: InvalidEntitlement;
50
+ export declare type Customer = {
51
+ id: string;
52
+ };
53
+ export declare type Subscription = {
54
+ planId: string;
55
+ addonIds: string[];
56
+ customerId: string;
57
+ };
58
+ export declare type SubscriptionAddon = {
59
+ addonId: string;
60
+ quantity?: number;
61
+ billingPeriod: BillingPeriod;
62
+ };
63
+ export declare type CreateSubscription = {
64
+ customerId: string;
65
+ planId: string;
66
+ addons: SubscriptionAddon[];
67
+ startDate: Date;
68
+ endDate?: Date;
69
+ id?: string;
70
+ billingPeriod: BillingPeriod;
71
+ unitQuantity?: number;
72
+ isTrialSubscription?: boolean;
73
+ };
74
+ export declare type EntitlementOptions = {
75
+ requestedUsage?: number;
76
+ shouldTrack?: boolean;
77
+ fallbackGrantedValue?: boolean;
78
+ };
79
+ export declare type FetchEntitlement = {
80
+ customerId: string;
81
+ featureId: string;
82
+ options?: EntitlementOptions;
83
+ };
84
+ export declare type FetchEntitlements = {
85
+ customerId: string;
86
+ };
87
+ export declare type CreateUsageMeasurement = {
88
+ customerId: string;
89
+ featureId: string;
90
+ value: number;
91
+ };
92
+ export declare type CheckoutAddon = {
93
+ addonId: string;
94
+ quantity?: number;
95
+ };
96
+ export declare type InitiateCheckout = {
97
+ customerId: string;
98
+ planId: string;
99
+ addons: CheckoutAddon[];
100
+ successUrl: string;
101
+ cancelUrl: string;
102
+ billingPeriod: BillingPeriod;
103
+ };
104
+ export declare type Checkout = {
105
+ checkoutBillingId: string;
106
+ checkoutUrl: string;
107
+ };
package/dist/models.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INVALID_ENTITLEMENT = exports.MeterType = exports.FeatureType = exports.BillingPeriod = exports.ErrorCode = exports.AccessDeniedReason = void 0;
4
+ const types_1 = require("./api/generated/types");
5
+ var types_2 = require("./api/generated/types");
6
+ Object.defineProperty(exports, "AccessDeniedReason", { enumerable: true, get: function () { return types_2.AccessDeniedReason; } });
7
+ var types_3 = require("./api/generated/types");
8
+ Object.defineProperty(exports, "ErrorCode", { enumerable: true, get: function () { return types_3.ErrorCode; } });
9
+ var types_4 = require("./api/generated/types");
10
+ Object.defineProperty(exports, "BillingPeriod", { enumerable: true, get: function () { return types_4.BillingPeriod; } });
11
+ var FeatureType;
12
+ (function (FeatureType) {
13
+ FeatureType["Boolean"] = "BOOLEAN";
14
+ FeatureType["Number"] = "NUMBER";
15
+ })(FeatureType = exports.FeatureType || (exports.FeatureType = {}));
16
+ var MeterType;
17
+ (function (MeterType) {
18
+ MeterType["Fluctuating"] = "Fluctuating";
19
+ MeterType["Incremental"] = "Incremental";
20
+ MeterType["None"] = "None";
21
+ })(MeterType = exports.MeterType || (exports.MeterType = {}));
22
+ exports.INVALID_ENTITLEMENT = {
23
+ isValid: false,
24
+ isGranted: false,
25
+ accessDeniedReason: types_1.AccessDeniedReason.Unknown,
26
+ };
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBMEU7QUFFMUUsK0NBQTJEO0FBQWxELDJHQUFBLGtCQUFrQixPQUFBO0FBQzNCLCtDQUFrRDtBQUF6QyxrR0FBQSxTQUFTLE9BQUE7QUFDbEIsK0NBQXNEO0FBQTdDLHNHQUFBLGFBQWEsT0FBQTtBQUV0QixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsa0NBQW1CLENBQUE7SUFDbkIsZ0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhXLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBR3RCO0FBRUQsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ25CLHdDQUEyQixDQUFBO0lBQzNCLHdDQUEyQixDQUFBO0lBQzNCLDBCQUFhLENBQUE7QUFDZixDQUFDLEVBSlcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFJcEI7QUFvRFksUUFBQSxtQkFBbUIsR0FBdUI7SUFDckQsT0FBTyxFQUFFLEtBQUs7SUFDZCxTQUFTLEVBQUUsS0FBSztJQUNoQixrQkFBa0IsRUFBRSwwQkFBa0IsQ0FBQyxPQUFPO0NBQy9DLENBQUMifQ==
@@ -0,0 +1,9 @@
1
+ import CachedEntitlement from './cachedEntitlement';
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): void;
7
+ validateFeature(featureId: string): boolean;
8
+ setFeatures(features: string[]): void;
9
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2NhY2hlL2NhY2hlU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1,18 @@
1
+ import { FeatureType, MeterType } from '../../models';
2
+ export interface CalculatedEntitlement {
3
+ featureType: FeatureType;
4
+ usageLimit?: number | null;
5
+ featureUnits?: string;
6
+ featureUnitsPlural?: string;
7
+ hasUnlimitedUsage: boolean;
8
+ meterType: MeterType.Fluctuating | MeterType.Incremental | MeterType.None;
9
+ }
10
+ export interface FeatureUsage {
11
+ currentUsage: number;
12
+ nextResetDate: number;
13
+ }
14
+ export default class CachedEntitlement {
15
+ readonly calculatedEntitlement: CalculatedEntitlement;
16
+ readonly featureUsage: FeatureUsage;
17
+ constructor(calculatedEntitlement: CalculatedEntitlement, featureUsage: FeatureUsage);
18
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class CachedEntitlement {
4
+ constructor(calculatedEntitlement, featureUsage) {
5
+ this.calculatedEntitlement = calculatedEntitlement;
6
+ this.featureUsage = featureUsage;
7
+ }
8
+ }
9
+ exports.default = CachedEntitlement;
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVkRW50aXRsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY2FjaGUvY2FjaGVkRW50aXRsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsTUFBcUIsaUJBQWlCO0lBSXBDLFlBQVkscUJBQTRDLEVBQUUsWUFBMEI7UUFDbEYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO1FBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQVJELG9DQVFDIn0=
@@ -0,0 +1,13 @@
1
+ import { CacheService } from './cacheService';
2
+ import CachedEntitlement from './cachedEntitlement';
3
+ export declare class InMemoryCacheService implements CacheService {
4
+ private readonly entitlements;
5
+ private featureIds;
6
+ constructor();
7
+ validateFeature(featureId: string): boolean;
8
+ clearCache: () => void;
9
+ setFeatures: (featureIds: string[]) => Set<string>;
10
+ setCustomer(customerId: string, customerEntitlements: Map<string, CachedEntitlement>): void;
11
+ setEntitlement(customerId: string, featureId: string, entitlement: CachedEntitlement): void;
12
+ getCustomerEntitlements(customerId: string): Map<string, CachedEntitlement> | null;
13
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InMemoryCacheService = void 0;
4
+ class InMemoryCacheService {
5
+ constructor() {
6
+ this.clearCache = () => {
7
+ this.entitlements.clear();
8
+ this.featureIds.clear();
9
+ };
10
+ this.setFeatures = (featureIds) => (this.featureIds = new Set(featureIds));
11
+ this.entitlements = new Map();
12
+ this.featureIds = new Set();
13
+ }
14
+ validateFeature(featureId) {
15
+ return this.featureIds.has(featureId);
16
+ }
17
+ setCustomer(customerId, customerEntitlements) {
18
+ this.entitlements.set(customerId, customerEntitlements);
19
+ }
20
+ setEntitlement(customerId, featureId, entitlement) {
21
+ const customerEntitlements = this.entitlements.get(customerId);
22
+ if (!customerEntitlements) {
23
+ this.entitlements.set(customerId, new Map([[featureId, entitlement]]));
24
+ return;
25
+ }
26
+ customerEntitlements.set(featureId, entitlement);
27
+ }
28
+ getCustomerEntitlements(customerId) {
29
+ return this.entitlements.get(customerId) || null;
30
+ }
31
+ }
32
+ exports.InMemoryCacheService = InMemoryCacheService;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5NZW1vcnlDYWNoZVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY2FjaGUvaW5NZW1vcnlDYWNoZVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsTUFBYSxvQkFBb0I7SUFHL0I7UUFTQSxlQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUM7UUFFRixnQkFBVyxHQUFHLENBQUMsVUFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRyxDQUFTLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFidEYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBMEMsQ0FBQztRQUN0RSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDdEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUFpQjtRQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFTRCxXQUFXLENBQUMsVUFBa0IsRUFBRSxvQkFBb0Q7UUFDbEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFrQixFQUFFLFNBQWlCLEVBQUUsV0FBOEI7UUFDbEYsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksR0FBRyxDQUE0QixDQUFDLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xHLE9BQU87U0FDUjtRQUVELG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELHVCQUF1QixDQUFDLFVBQWtCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ25ELENBQUM7Q0FDRjtBQXJDRCxvREFxQ0MifQ==
@@ -0,0 +1,9 @@
1
+ import CachedEntitlement from './cache/cachedEntitlement';
2
+ import { AccessDeniedReason } from '../api/generated/types';
3
+ export declare class EntitlementDecisionService {
4
+ static decideEntitlementPolicy(customerExists: boolean, entitlement?: CachedEntitlement | null, requestUsage?: number): Decision;
5
+ }
6
+ export interface Decision {
7
+ readonly isGranted: boolean;
8
+ readonly accessDeniedReason?: AccessDeniedReason;
9
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntitlementDecisionService = void 0;
4
+ const types_1 = require("../api/generated/types");
5
+ const models_1 = require("../models");
6
+ // TODO: Extract to a common lib for other sdks
7
+ class EntitlementDecisionService {
8
+ static decideEntitlementPolicy(customerExists, entitlement, requestUsage) {
9
+ var _a;
10
+ if (!customerExists) {
11
+ return { accessDeniedReason: types_1.AccessDeniedReason.CustomerNotFound, isGranted: false };
12
+ }
13
+ if (!entitlement) {
14
+ return { isGranted: false, accessDeniedReason: types_1.AccessDeniedReason.NoFeatureEntitlementInSubscription };
15
+ }
16
+ const featureType = entitlement.calculatedEntitlement.featureType;
17
+ const meterType = entitlement.calculatedEntitlement.meterType;
18
+ switch (featureType) {
19
+ case models_1.FeatureType.Boolean:
20
+ return { isGranted: true };
21
+ case models_1.FeatureType.Number: {
22
+ if (entitlement.calculatedEntitlement.meterType === models_1.MeterType.None) {
23
+ return { isGranted: true };
24
+ }
25
+ if (entitlement.calculatedEntitlement.hasUnlimitedUsage) {
26
+ return { isGranted: true };
27
+ }
28
+ let currentUsage = entitlement.featureUsage.currentUsage;
29
+ if (meterType === models_1.MeterType.Incremental && entitlement.featureUsage.nextResetDate < new Date().getTime()) {
30
+ currentUsage = 0;
31
+ }
32
+ if (currentUsage + (requestUsage || 0) <= (((_a = entitlement.calculatedEntitlement) === null || _a === void 0 ? void 0 : _a.usageLimit) || 0)) {
33
+ return { isGranted: true };
34
+ }
35
+ else {
36
+ return { isGranted: false, accessDeniedReason: types_1.AccessDeniedReason.RequestedUsageExceedingLimit };
37
+ }
38
+ }
39
+ }
40
+ }
41
+ }
42
+ exports.EntitlementDecisionService = EntitlementDecisionService;
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRsZW1lbnREZWNpc2lvblNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvZW50aXRsZW1lbnREZWNpc2lvblNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0Esa0RBQTREO0FBQzVELHNDQUFtRDtBQUVuRCwrQ0FBK0M7QUFDL0MsTUFBYSwwQkFBMEI7SUFDOUIsTUFBTSxDQUFDLHVCQUF1QixDQUNuQyxjQUF1QixFQUN2QixXQUFzQyxFQUN0QyxZQUFxQjs7UUFFckIsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsMEJBQWtCLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQ3RGO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSwwQkFBa0IsQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1NBQ3hHO1FBRUQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQztRQUNsRSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDO1FBRTlELFFBQVEsV0FBVyxFQUFFO1lBQ25CLEtBQUssb0JBQVcsQ0FBQyxPQUFPO2dCQUN0QixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzdCLEtBQUssb0JBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxXQUFXLENBQUMscUJBQXFCLENBQUMsU0FBUyxLQUFLLGtCQUFTLENBQUMsSUFBSSxFQUFFO29CQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUM1QjtnQkFDRCxJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRTtvQkFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDNUI7Z0JBRUQsSUFBSSxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQ3pELElBQUksU0FBUyxLQUFLLGtCQUFTLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsYUFBYSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3hHLFlBQVksR0FBRyxDQUFDLENBQUM7aUJBQ2xCO2dCQUNELElBQUksWUFBWSxHQUFHLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQSxNQUFBLFdBQVcsQ0FBQyxxQkFBcUIsMENBQUUsVUFBVSxLQUFJLENBQUMsQ0FBQyxFQUFFO29CQUM5RixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUM1QjtxQkFBTTtvQkFDTCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSwwQkFBa0IsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO2lCQUNsRzthQUNGO1NBQ0Y7SUFDSCxDQUFDO0NBQ0Y7QUF2Q0QsZ0VBdUNDIn0=
@@ -0,0 +1,22 @@
1
+ import { CacheService } from './cache/cacheService';
2
+ import { ApolloClient, FetchResult, NormalizedCacheObject } from '@apollo/client/core';
3
+ import { CreateUsageMeasurement, Entitlement, InvalidEntitlement } from '../models';
4
+ import { Decision } from './entitlementDecisionService';
5
+ import CachedEntitlement from './cache/cachedEntitlement';
6
+ import { LoggerService } from './loggerService';
7
+ export declare class EntitlementsService {
8
+ private readonly cacheService;
9
+ private readonly loggerService;
10
+ private readonly entitlementsApi;
11
+ private readonly modelMapper;
12
+ constructor(cacheService: CacheService, client: ApolloClient<NormalizedCacheObject>, loggerService: LoggerService);
13
+ private onEntitlementsUpdated;
14
+ getEntitlement<T extends Entitlement>(featureRefId: string, customerRefId: string, requestedUsage?: number): Promise<T | InvalidEntitlement>;
15
+ private onUsageUpdated;
16
+ private tryGetCacheCustomerAndEntitlement;
17
+ createUsageMeasurement(input: CreateUsageMeasurement): Promise<FetchResult<import("../api/generated/types").CreateUsageMeasurementMutation, Record<string, any>, Record<string, any>>>;
18
+ }
19
+ export declare type GetEntitlementResult = {
20
+ entitlement: CachedEntitlement | null;
21
+ decision: Decision;
22
+ };