@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.
- package/CHANGELOG.md +53 -0
- package/README.md +3 -0
- package/dist/api/configurationApi.d.ts +8 -0
- package/dist/api/configurationApi.js +19 -0
- package/dist/api/entitlements/entitlementsApi.d.ts +16 -0
- package/dist/api/entitlements/entitlementsApi.js +70 -0
- package/dist/api/entitlements/entitlementsGql.d.ts +4 -0
- package/dist/api/entitlements/entitlementsGql.js +57 -0
- package/dist/api/generated/types.d.ts +2413 -0
- package/dist/api/generated/types.js +379 -0
- package/dist/api/initApolloClient.d.ts +12 -0
- package/dist/api/initApolloClient.js +75 -0
- package/dist/api/managementApi.d.ts +12 -0
- package/dist/api/managementApi.js +80 -0
- package/dist/client.d.ts +61 -0
- package/dist/client.js +166 -0
- package/dist/configuration.d.ts +18 -0
- package/dist/configuration.js +47 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +19 -0
- package/dist/models.d.ts +107 -0
- package/dist/models.js +27 -0
- package/dist/services/cache/cacheService.d.ts +9 -0
- package/dist/services/cache/cacheService.js +3 -0
- package/dist/services/cache/cachedEntitlement.d.ts +18 -0
- package/dist/services/cache/cachedEntitlement.js +10 -0
- package/dist/services/cache/inMemoryCacheService.d.ts +13 -0
- package/dist/services/cache/inMemoryCacheService.js +33 -0
- package/dist/services/entitlementDecisionService.d.ts +9 -0
- package/dist/services/entitlementDecisionService.js +43 -0
- package/dist/services/entitlementsService.d.ts +22 -0
- package/dist/services/entitlementsService.js +80 -0
- package/dist/services/loggerService.d.ts +14 -0
- package/dist/services/loggerService.js +32 -0
- package/dist/utils/ModelMapper.d.ts +13 -0
- package/dist/utils/ModelMapper.js +109 -0
- 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
|
+
}
|