@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
@@ -0,0 +1,80 @@
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.EntitlementsService = void 0;
7
+ const entitlementsApi_1 = __importDefault(require("../api/entitlements/entitlementsApi"));
8
+ const ModelMapper_1 = require("../utils/ModelMapper");
9
+ const models_1 = require("../models");
10
+ const entitlementDecisionService_1 = require("./entitlementDecisionService");
11
+ const lodash_1 = require("lodash");
12
+ class EntitlementsService {
13
+ constructor(cacheService, client, loggerService) {
14
+ this.cacheService = cacheService;
15
+ this.loggerService = loggerService;
16
+ this.onEntitlementsUpdated = (value) => {
17
+ if (value.errors || !value.data) {
18
+ this.loggerService.error(`Failed to handle entitlements updated with error ${value.errors}`, {
19
+ error: JSON.stringify(value.errors),
20
+ });
21
+ return;
22
+ }
23
+ const entitlementsUpdated = value.data.entitlementsUpdated;
24
+ const entitlements = this.modelMapper.mapCachedEntitlements(entitlementsUpdated.entitlements);
25
+ this.cacheService.setCustomer(entitlementsUpdated.customerId, entitlements);
26
+ };
27
+ this.onUsageUpdated = (data) => {
28
+ if (data.errors || !data.data) {
29
+ this.loggerService.error(`Failed to handle usage updated with error ${data.errors}`, {
30
+ error: JSON.stringify(data.errors),
31
+ });
32
+ return;
33
+ }
34
+ const { usage: { customerId, featureId, currentUsage, nextResetDate }, entitlement, } = data.data.usageUpdated;
35
+ this.cacheService.setEntitlement(customerId, featureId, this.modelMapper.mapCachedEntitlement(entitlement, currentUsage, nextResetDate));
36
+ };
37
+ this.entitlementsApi = new entitlementsApi_1.default(client);
38
+ this.modelMapper = new ModelMapper_1.ModelMapper();
39
+ this.entitlementsApi.subscribeEntitlementsChanges(this.onEntitlementsUpdated, this.onUsageUpdated);
40
+ }
41
+ async getEntitlement(featureRefId, customerRefId, requestedUsage) {
42
+ // TODO: Validate feature exists after implementing features subscriptions
43
+ // const validFeature = this.cacheService.validateFeature(featureRefId);
44
+ let { entitlement, customerExists } = this.tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId);
45
+ if (!entitlement) {
46
+ this.loggerService.log(`Customer with id: ${customerRefId} not found in cache`, { customerRefId });
47
+ const entitlements = await this.entitlementsApi.getEntitlements({
48
+ customerId: customerRefId,
49
+ });
50
+ if (entitlements) {
51
+ const cachedEntitlements = this.modelMapper.mapCachedEntitlements(entitlements);
52
+ this.cacheService.setCustomer(customerRefId, cachedEntitlements);
53
+ entitlement = cachedEntitlements.get(featureRefId) || null;
54
+ customerExists = true;
55
+ }
56
+ }
57
+ const decision = entitlementDecisionService_1.EntitlementDecisionService.decideEntitlementPolicy(customerExists, entitlement, requestedUsage);
58
+ if (!entitlement) {
59
+ this.loggerService.log(`Customer with id: ${customerRefId} not found in api`, { customerRefId });
60
+ if ((0, lodash_1.includes)([models_1.AccessDeniedReason.CustomerNotFound, models_1.AccessDeniedReason.Unknown], decision.accessDeniedReason)) {
61
+ return Object.assign({ isValid: false }, decision);
62
+ }
63
+ return Object.assign({ isValid: true }, decision);
64
+ }
65
+ return this.modelMapper.mapEntitlementByDecision(decision, featureRefId, entitlement, requestedUsage);
66
+ }
67
+ tryGetCacheCustomerAndEntitlement(featureRefId, customerRefId) {
68
+ const customer = this.cacheService.getCustomerEntitlements(customerRefId);
69
+ if (!customer) {
70
+ return { customerExists: false, entitlement: null };
71
+ }
72
+ const entitlement = customer.get(featureRefId) || null;
73
+ return { customerExists: true, entitlement };
74
+ }
75
+ async createUsageMeasurement(input) {
76
+ return await this.entitlementsApi.createUsageMeasurement(input);
77
+ }
78
+ }
79
+ exports.EntitlementsService = EntitlementsService;
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRsZW1lbnRzU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGxlbWVudHNTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLDBGQUFrRTtBQUNsRSxzREFBbUQ7QUFDbkQsc0NBQXdHO0FBQ3hHLDZFQUFvRjtBQUdwRixtQ0FBa0M7QUFHbEMsTUFBYSxtQkFBbUI7SUFJOUIsWUFDbUIsWUFBMEIsRUFDM0MsTUFBMkMsRUFDMUIsYUFBNEI7UUFGNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFFMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFRdkMsMEJBQXFCLEdBQUcsQ0FBQyxLQUFtRCxFQUFFLEVBQUU7WUFDdEYsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsb0RBQW9ELEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDM0YsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztpQkFDcEMsQ0FBQyxDQUFDO2dCQUNILE9BQU87YUFDUjtZQUVELE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUMzRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTlGLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUM7UUEwQ00sbUJBQWMsR0FBRyxDQUFDLElBQTJDLEVBQUUsRUFBRTtZQUN2RSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUM3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
@@ -0,0 +1,14 @@
1
+ import { Logger } from '../configuration';
2
+ export declare enum LogLevel {
3
+ ALL = "ALL",
4
+ NONE = "NONE",
5
+ LOG = "LOG",
6
+ ERROR = "ERROR"
7
+ }
8
+ export declare class LoggerService implements Logger {
9
+ private readonly logger;
10
+ private readonly logLevel;
11
+ constructor(logger: Logger, logLevel: LogLevel);
12
+ error(message: string, error?: Record<string, string>): void;
13
+ log(message: string, object?: Record<string, string>): void;
14
+ }
@@ -0,0 +1,32 @@
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.LoggerService = exports.LogLevel = void 0;
7
+ const includes_1 = __importDefault(require("lodash/includes"));
8
+ var LogLevel;
9
+ (function (LogLevel) {
10
+ LogLevel["ALL"] = "ALL";
11
+ LogLevel["NONE"] = "NONE";
12
+ LogLevel["LOG"] = "LOG";
13
+ LogLevel["ERROR"] = "ERROR";
14
+ })(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
15
+ class LoggerService {
16
+ constructor(logger, logLevel) {
17
+ this.logger = logger;
18
+ this.logLevel = logLevel;
19
+ }
20
+ error(message, error) {
21
+ if (this.logLevel !== LogLevel.NONE) {
22
+ this.logger.error(message, error || {});
23
+ }
24
+ }
25
+ log(message, object) {
26
+ if (!(0, includes_1.default)([LogLevel.ERROR, LogLevel.NONE], this.logLevel)) {
27
+ this.logger.log(message, object || {});
28
+ }
29
+ }
30
+ }
31
+ exports.LoggerService = LoggerService;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9sb2dnZXJTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLCtEQUF1QztBQUV2QyxJQUFZLFFBS1g7QUFMRCxXQUFZLFFBQVE7SUFDbEIsdUJBQVcsQ0FBQTtJQUNYLHlCQUFhLENBQUE7SUFDYix1QkFBVyxDQUFBO0lBQ1gsMkJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBTFcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFLbkI7QUFFRCxNQUFhLGFBQWE7SUFDeEIsWUFBNkIsTUFBYyxFQUFtQixRQUFrQjtRQUFuRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQW1CLGFBQVEsR0FBUixRQUFRLENBQVU7SUFBRyxDQUFDO0lBQ3BGLEtBQUssQ0FBQyxPQUFlLEVBQUUsS0FBOEI7UUFDbkQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRCxHQUFHLENBQUMsT0FBZSxFQUFFLE1BQStCO1FBQ2xELElBQUksQ0FBQyxJQUFBLGtCQUFRLEVBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN4QztJQUNILENBQUM7Q0FDRjtBQWJELHNDQWFDIn0=
@@ -0,0 +1,13 @@
1
+ import { CreateCustomerMutation, CreateSubscriptionMutation, EntitlementFragment, InitiateCheckoutMutation } from '../api/generated/types';
2
+ import { Checkout, Customer, Entitlement, Subscription } from '../models';
3
+ import { Decision } from '../services/entitlementDecisionService';
4
+ import CachedEntitlement from '../services/cache/cachedEntitlement';
5
+ declare class ModelMapper {
6
+ mapEntitlementByDecision: (decision: Decision, featureId: string, entitlement: CachedEntitlement, requestedUsage?: number | undefined) => Entitlement;
7
+ mapCachedEntitlement: (entitlement: EntitlementFragment, currentUsage?: number | undefined, nextResetDate?: number | null | undefined) => CachedEntitlement;
8
+ mapCachedEntitlements: (updatedEntitlements: EntitlementFragment[]) => Map<string, CachedEntitlement>;
9
+ mapCustomer: (graphCustomer: CreateCustomerMutation) => Customer;
10
+ mapSubscription: (graphSubscription: CreateSubscriptionMutation) => Subscription;
11
+ mapCheckout: (checkout: InitiateCheckoutMutation['initiateCheckout']) => Checkout;
12
+ }
13
+ export { ModelMapper };
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelMapper = void 0;
4
+ const models_1 = require("../models");
5
+ class ModelMapper {
6
+ constructor() {
7
+ this.mapEntitlementByDecision = (decision, featureId, entitlement, requestedUsage) => {
8
+ if (entitlement.calculatedEntitlement.meterType != models_1.MeterType.None && !requestedUsage) {
9
+ return models_1.INVALID_ENTITLEMENT;
10
+ }
11
+ const featureType = entitlement.calculatedEntitlement.featureType;
12
+ const meterType = entitlement.calculatedEntitlement.meterType;
13
+ if (!featureType) {
14
+ throw new Error(`No feature type provided with unknown reason`);
15
+ }
16
+ switch (featureType) {
17
+ case models_1.FeatureType.Boolean:
18
+ return {
19
+ isValid: true,
20
+ featureType: featureType,
21
+ isGranted: decision.isGranted,
22
+ accessDeniedReason: decision.accessDeniedReason,
23
+ featureId,
24
+ };
25
+ case models_1.FeatureType.Number: {
26
+ if (meterType === models_1.MeterType.Fluctuating || meterType === models_1.MeterType.Incremental) {
27
+ return {
28
+ isValid: true,
29
+ featureType: models_1.FeatureType.Number,
30
+ isGranted: decision.isGranted,
31
+ usageLimit: entitlement.calculatedEntitlement.usageLimit || null,
32
+ featureUnits: entitlement.calculatedEntitlement.featureUnits || '',
33
+ featureUnitsPlural: entitlement.calculatedEntitlement.featureUnitsPlural || '',
34
+ accessDeniedReason: decision.accessDeniedReason,
35
+ hasUnlimitedUsage: entitlement.calculatedEntitlement.hasUnlimitedUsage,
36
+ meterType: meterType,
37
+ currentUsage: entitlement.featureUsage.currentUsage || 0,
38
+ requestedUsage: requestedUsage || 0,
39
+ featureId,
40
+ };
41
+ }
42
+ else {
43
+ return {
44
+ isValid: true,
45
+ featureType: models_1.FeatureType.Number,
46
+ meterType: meterType,
47
+ isGranted: decision.isGranted,
48
+ usageLimit: entitlement.calculatedEntitlement.usageLimit || null,
49
+ featureUnits: entitlement.calculatedEntitlement.featureUnits || '',
50
+ featureUnitsPlural: entitlement.calculatedEntitlement.featureUnitsPlural || '',
51
+ accessDeniedReason: decision.accessDeniedReason,
52
+ hasUnlimitedUsage: entitlement.calculatedEntitlement.hasUnlimitedUsage,
53
+ featureId,
54
+ };
55
+ }
56
+ }
57
+ default:
58
+ throw new Error(`Feature type ${featureType} is not supported in this version of the sdk`);
59
+ }
60
+ };
61
+ this.mapCachedEntitlement = (entitlement, currentUsage, nextResetDate) => {
62
+ var _a, _b, _c, _d;
63
+ return {
64
+ calculatedEntitlement: {
65
+ featureType: (_a = entitlement.feature) === null || _a === void 0 ? void 0 : _a.featureType,
66
+ meterType: (_b = entitlement.feature) === null || _b === void 0 ? void 0 : _b.meterType,
67
+ usageLimit: entitlement.usageLimit,
68
+ hasUnlimitedUsage: entitlement.hasUnlimitedUsage,
69
+ featureUnits: (_c = entitlement.feature) === null || _c === void 0 ? void 0 : _c.featureUnits,
70
+ featureUnitsPlural: (_d = entitlement.feature) === null || _d === void 0 ? void 0 : _d.featureUnitsPlural,
71
+ },
72
+ featureUsage: {
73
+ currentUsage: currentUsage || entitlement.currentUsage,
74
+ nextResetDate: nextResetDate || entitlement.nextResetDate,
75
+ },
76
+ };
77
+ };
78
+ this.mapCachedEntitlements = (updatedEntitlements) => {
79
+ return new Map(updatedEntitlements.map((entitlement) => {
80
+ var _a;
81
+ return [
82
+ ((_a = entitlement.feature) === null || _a === void 0 ? void 0 : _a.refId) || '',
83
+ this.mapCachedEntitlement(entitlement),
84
+ ];
85
+ }));
86
+ };
87
+ this.mapCustomer = (graphCustomer) => {
88
+ return {
89
+ id: graphCustomer.createOneCustomer.refId,
90
+ };
91
+ };
92
+ this.mapSubscription = (graphSubscription) => {
93
+ var _a;
94
+ return {
95
+ planId: graphSubscription.createSubscription.plan.refId,
96
+ addonIds: ((_a = graphSubscription.createSubscription.addons) === null || _a === void 0 ? void 0 : _a.map(({ addon }) => addon.refId)) || [],
97
+ customerId: graphSubscription.createSubscription.customer.refId,
98
+ };
99
+ };
100
+ this.mapCheckout = (checkout) => {
101
+ return {
102
+ checkoutUrl: checkout.checkoutUrl,
103
+ checkoutBillingId: checkout.checkoutBillingId,
104
+ };
105
+ };
106
+ }
107
+ }
108
+ exports.ModelMapper = ModelMapper;
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxNYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvTW9kZWxNYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsc0NBQXVIO0FBSXZILE1BQU0sV0FBVztJQUFqQjtRQUNFLDZCQUF3QixHQUFHLENBQ3pCLFFBQWtCLEVBQ2xCLFNBQWlCLEVBQ2pCLFdBQThCLEVBQzlCLGNBQW1DLEVBQ3RCLEVBQUU7WUFDZixJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLElBQUksa0JBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3BGLE9BQU8sNEJBQW1CLENBQUM7YUFDNUI7WUFFRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDO1lBQ2xFLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7WUFDOUQsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO2FBQ2xFO1lBRUQsUUFBUSxXQUFXLEVBQUU7Z0JBQ25CLEtBQUssb0JBQVcsQ0FBQyxPQUFPO29CQUN0QixPQUFPO3dCQUNMLE9BQU8sRUFBRSxJQUFJO3dCQUNiLFdBQVcsRUFBRSxXQUFXO3dCQUN4QixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7d0JBQzdCLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7d0JBQy9DLFNBQVM7cUJBQ1YsQ0FBQztnQkFDSixLQUFLLG9CQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3ZCLElBQUksU0FBUyxLQUFLLGtCQUFTLENBQUMsV0FBVyxJQUFJLFNBQVMsS0FBSyxrQkFBUyxDQUFDLFdBQVcsRUFBRTt3QkFDOUUsT0FBTzs0QkFDTCxPQUFPLEVBQUUsSUFBSTs0QkFDYixXQUFXLEVBQUUsb0JBQVcsQ0FBQyxNQUFNOzRCQUMvQixT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
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@stigg/node-server-sdk",
3
+ "version": "0.18.1",
4
+ "description": "Stigg server-side node SDK",
5
+ "main": "dist/index.js",
6
+ "typings": "dist/index.d.ts",
7
+ "repository": "https://github.com/stiggio/node-server-sdk",
8
+ "license": "MIT",
9
+ "keywords": [],
10
+ "scripts": {
11
+ "build": "tsc -p tsconfig.build.json",
12
+ "build:watch": "tsc -p tsconfig.build.json --watch",
13
+ "fix": "run-s fix:*",
14
+ "fix:prettier": "prettier \"src/**/*.ts\" --write",
15
+ "fix:lint": "eslint src --ext .ts --fix",
16
+ "test": "jest --forceExit",
17
+ "test:watch": "jest --watch",
18
+ "generate": "graphql-codegen && yarn run lint",
19
+ "test:cov": "jest --coverage",
20
+ "reset-hard": "git clean -dfx && git reset --hard && yarn",
21
+ "prepare-release": "run-s reset-hard test doc:html",
22
+ "prepare": "husky install",
23
+ "run": "ts-node examples/runSdk.ts",
24
+ "lint": "eslint \"{src,examples,test}/**/*.ts\" --fix"
25
+ },
26
+ "files": [
27
+ "dist/**/*"
28
+ ],
29
+ "engines": {
30
+ "node": ">=10"
31
+ },
32
+ "dependencies": {
33
+ "@apollo/client": "^3.4.16",
34
+ "@bitauth/libauth": "^1.17.1",
35
+ "@graphql-codegen/fragment-matcher": "^3.2.1",
36
+ "@types/ws": "^8.2.3",
37
+ "cross-fetch": "^3.1.4",
38
+ "graphql": "^15.6.1",
39
+ "graphql-ws": "^5.6.0",
40
+ "husky": "^7.0.2",
41
+ "isomorphic-ws": "^4.0.1",
42
+ "lint-staged": "^11.2.3",
43
+ "lodash": "^4.17.21",
44
+ "ws": "^8.5.0"
45
+ },
46
+ "devDependencies": {
47
+ "@commitlint/cli": "^13.2.1",
48
+ "@commitlint/config-conventional": "^13.2.0",
49
+ "@graphql-codegen/cli": "^2.2.1",
50
+ "@graphql-codegen/schema-ast": "^2.2.0",
51
+ "@graphql-codegen/typescript": "^2.2.4",
52
+ "@graphql-codegen/typescript-operations": "^2.1.8",
53
+ "@types/jest": "^27.0.2",
54
+ "@types/lodash": "^4.14.175",
55
+ "@types/node": "^16.11.1",
56
+ "@typescript-eslint/eslint-plugin": "^4.0.1",
57
+ "@typescript-eslint/parser": "^4.0.1",
58
+ "eslint": "^7.8.0",
59
+ "eslint-config-prettier": "^6.11.0",
60
+ "eslint-plugin-eslint-comments": "^3.2.0",
61
+ "eslint-plugin-functional": "^3.0.2",
62
+ "eslint-plugin-import": "^2.22.0",
63
+ "eslint-plugin-prettier": "^4.0.0",
64
+ "jest": "^27.2.5",
65
+ "moment": "^2.29.1",
66
+ "msw": "^0.35.0",
67
+ "npm-run-all": "^4.1.5",
68
+ "prettier": "^2.1.1",
69
+ "standard-version": "^9.0.0",
70
+ "ts-jest": "^27.0.7",
71
+ "ts-node": "^9.0.0",
72
+ "typescript": "^4.0.2"
73
+ },
74
+ "lint-staged": {
75
+ "*.{js,jsx,ts,tsx}": [
76
+ "prettier --check",
77
+ "eslint --cache"
78
+ ]
79
+ }
80
+ }