@licensespring/node-sdk 1.0.7 → 1.0.10
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/README.md +56 -4
- package/dist/src/abstract-manager.d.ts +2 -0
- package/dist/src/abstract-manager.js +43 -2
- package/dist/src/abstract-manager.js.map +1 -1
- package/dist/src/api.d.ts +62 -60
- package/dist/src/api.js +79 -3
- package/dist/src/api.js.map +1 -1
- package/dist/src/floating.d.ts +2 -0
- package/dist/src/floating.js +43 -2
- package/dist/src/floating.js.map +1 -1
- package/dist/src/license-file.js +37 -1
- package/dist/src/license-file.js.map +1 -1
- package/dist/src/service.d.ts +4 -1
- package/dist/src/service.js +24 -2
- package/dist/src/service.js.map +1 -1
- package/dist/src/types.d.ts +18 -6
- package/dist/src/types.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -798,6 +798,35 @@ const licenseAPI = new LicenseAPI({
|
|
|
798
798
|
});
|
|
799
799
|
```
|
|
800
800
|
|
|
801
|
+
## Proxy
|
|
802
|
+
|
|
803
|
+
All calls to the server can be proxied by providing a proxy definition in either of the following two ways:
|
|
804
|
+
|
|
805
|
+
A. By providing a proxy definition in the initialization config argument for `LicenseAPI`, `LicenseManager` and `FloatingAPI`, e.g.:
|
|
806
|
+
|
|
807
|
+
```javascript
|
|
808
|
+
const licenseAPI = new LicenseAPI({
|
|
809
|
+
apiKey: '12345678-4bfe-4e3a-8737-757004d6294c',
|
|
810
|
+
sharedKey: 'eYuHrlajvIVTiSFIXpxpKhw78f4Ewy-00-12345678',
|
|
811
|
+
appName: 'js-sdk-test-1',
|
|
812
|
+
appVersion: '0.0.1',
|
|
813
|
+
proxy: {
|
|
814
|
+
host: '127.0.0.1',
|
|
815
|
+
port: 9000,
|
|
816
|
+
},
|
|
817
|
+
});
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
B. or by calling the `setProxy` method on an initialized `LicenseAPI`, `LicenseManager` or `FloatingAPI` object, e.g.:
|
|
821
|
+
|
|
822
|
+
```javascript
|
|
823
|
+
licenseAPI.setProxy({
|
|
824
|
+
host: '127.0.0.1',
|
|
825
|
+
port: 9000,
|
|
826
|
+
});
|
|
827
|
+
```
|
|
828
|
+
|
|
829
|
+
For the type declaration of the proxy definition object, see `AxiosProxyConfig` in the following Types section.
|
|
801
830
|
|
|
802
831
|
## Types
|
|
803
832
|
|
|
@@ -844,8 +873,19 @@ export type LicensespringConfig = {
|
|
|
844
873
|
isGuardFileEnabled: boolean,
|
|
845
874
|
hardwareIDMethod: number,
|
|
846
875
|
sdkVersion: string,
|
|
876
|
+
proxy?: AxiosProxyConfig,
|
|
847
877
|
};
|
|
848
878
|
|
|
879
|
+
interface AxiosProxyConfig {
|
|
880
|
+
host: string,
|
|
881
|
+
port: number,
|
|
882
|
+
protocol?: string,
|
|
883
|
+
auth?: {
|
|
884
|
+
username: string,
|
|
885
|
+
password: string,
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
|
|
849
889
|
export type LicensespringAPIConfig = Omit<LicensespringConfig, 'productCode'>;
|
|
850
890
|
|
|
851
891
|
export type LicensespringConfigDef = Omit<LicensespringConfig, 'apiPath'|'publicKey'|'filename'|'filePath'|'gracePeriod'|'fileKey'|'isGuardFileEnabled'|'hardwareIDMethod'|'sdkVersion'> & {
|
|
@@ -857,6 +897,7 @@ export type LicensespringConfigDef = Omit<LicensespringConfig, 'apiPath'|'public
|
|
|
857
897
|
fileKey?: string,
|
|
858
898
|
isGuardFileEnabled?: boolean,
|
|
859
899
|
hardwareIDMethod?: number,
|
|
900
|
+
proxy?: AxiosProxyConfig,
|
|
860
901
|
};
|
|
861
902
|
|
|
862
903
|
export type LicensespringAPIConfigDef = Omit<LicensespringAPIConfig, 'apiPath'|'publicKey'|'filename'|'filePath'|'gracePeriod'|'fileKey'|'isGuardFileEnabled'|'hardwareIDMethod'|'sdkVersion'> & {
|
|
@@ -868,6 +909,7 @@ export type LicensespringAPIConfigDef = Omit<LicensespringAPIConfig, 'apiPath'|'
|
|
|
868
909
|
fileKey?: string,
|
|
869
910
|
isGuardFileEnabled?: boolean,
|
|
870
911
|
hardwareIDMethod?: number,
|
|
912
|
+
proxy?: AxiosProxyConfig,
|
|
871
913
|
};
|
|
872
914
|
|
|
873
915
|
export type LicensespringFloatingConfig = {
|
|
@@ -875,6 +917,7 @@ export type LicensespringFloatingConfig = {
|
|
|
875
917
|
appVersion: string,
|
|
876
918
|
hardwareIDMethod: number,
|
|
877
919
|
sdkVersion: string,
|
|
920
|
+
proxy?: AxiosProxyConfig,
|
|
878
921
|
};
|
|
879
922
|
|
|
880
923
|
export type LicensespringFloatingConfigDef = Omit<LicensespringFloatingConfig, 'hardwareIDMethod'|'sdkVersion'> & {
|
|
@@ -1356,11 +1399,20 @@ export type LicenseConsumptionsResponse = {
|
|
|
1356
1399
|
};
|
|
1357
1400
|
|
|
1358
1401
|
export type LicenseFeatureConsumptionResponse = {
|
|
1359
|
-
|
|
1360
|
-
|
|
1402
|
+
allow_negative_consumptions: boolean,
|
|
1403
|
+
allow_overages: boolean,
|
|
1404
|
+
allow_unlimited_consumptions: boolean,
|
|
1405
|
+
consumption_period: 'daily' | 'weekly' | 'monthly' | 'annually' | null,
|
|
1361
1406
|
is_floating_cloud: boolean,
|
|
1362
|
-
|
|
1363
|
-
|
|
1407
|
+
is_floating: boolean,
|
|
1408
|
+
max_consumptions: number,
|
|
1409
|
+
max_overages: number,
|
|
1410
|
+
reset_consumption: boolean,
|
|
1411
|
+
total_consumptions: number,
|
|
1412
|
+
|
|
1413
|
+
// the following properties are only present on floating and floating cloud features:
|
|
1414
|
+
floating_timeout?: number | null,
|
|
1415
|
+
floating_users?: number,
|
|
1364
1416
|
};
|
|
1365
1417
|
|
|
1366
1418
|
export type ProductDetailsResponse = ProductDetails & {
|
|
@@ -4,6 +4,7 @@ import LicenseFile from './license-file';
|
|
|
4
4
|
import License from './license';
|
|
5
5
|
import FloatingAPI from './floating';
|
|
6
6
|
import { Watchdog } from './watchdog';
|
|
7
|
+
import { AxiosProxyConfig } from 'axios';
|
|
7
8
|
export default class AbstractManager {
|
|
8
9
|
protected config: LicensespringConfigDef;
|
|
9
10
|
protected hardwareIDMethod: number;
|
|
@@ -12,6 +13,7 @@ export default class AbstractManager {
|
|
|
12
13
|
protected licenseFile: LicenseFile;
|
|
13
14
|
watchdog: Watchdog;
|
|
14
15
|
constructor(config: LicensespringConfigDef, hardwareIDMethod?: number);
|
|
16
|
+
setProxy(proxy: AxiosProxyConfig | null): void;
|
|
15
17
|
getHardwareID(algorithm?: HardwareIdAlgorithm): string;
|
|
16
18
|
loadLicense(): License;
|
|
17
19
|
isLicenseFileCorrupted(): boolean;
|
|
@@ -45,8 +45,8 @@ class AbstractManager {
|
|
|
45
45
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
46
46
|
this.config = config;
|
|
47
47
|
this.hardwareIDMethod = hardwareIDMethod;
|
|
48
|
-
const _config = Object.assign(Object.assign({}, config), { apiPath: (_a = config.apiPath) !== null && _a !== void 0 ? _a : process.env.API_PATH, publicKey: (_b = config.publicKey) !== null && _b !== void 0 ? _b : process.env.PUBLIC_KEY, filename: (_c = config.filename) !== null && _c !== void 0 ? _c : process.env.FILENAME, filePath: (_d = config.filePath) !== null && _d !== void 0 ? _d : process.env.FILE_PATH, gracePeriod: (_e = config.gracePeriod) !== null && _e !== void 0 ? _e : 24, fileKey: (_f = config.fileKey) !== null && _f !== void 0 ? _f : process.env.LICENSE_FILE_KEY, isGuardFileEnabled: (_h = (_g = config.isGuardFileEnabled) !== null && _g !== void 0 ? _g : !!process.env.GUARD_FILE_ENABLED) !== null && _h !== void 0 ? _h : false, hardwareIDMethod: (_j = hardwareIDMethod !== null && hardwareIDMethod !== void 0 ? hardwareIDMethod : config.hardwareIDMethod) !== null && _j !== void 0 ? _j : 0, sdkVersion: version_1.default });
|
|
49
|
-
(() => { const $guard = typia_1.default.assert.guard; const $io0 = input => "string" === typeof input.apiKey && "string" === typeof input.sharedKey && "string" === typeof input.apiPath && "string" === typeof input.publicKey && "string" === typeof input.productCode && "string" === typeof input.appName && "string" === typeof input.appVersion && "string" === typeof input.filePath && "string" === typeof input.filename && "number" === typeof input.gracePeriod && "string" === typeof input.fileKey && (undefined === input.airGapKey || "string" === typeof input.airGapKey) && "boolean" === typeof input.isGuardFileEnabled && "number" === typeof input.hardwareIDMethod && "string" === typeof input.sdkVersion; const $ao0 = (input, _path, _exceptionable = true) => ("string" === typeof input.apiKey || $guard(_exceptionable, {
|
|
48
|
+
const _config = Object.assign(Object.assign({}, config), { apiPath: (_a = config.apiPath) !== null && _a !== void 0 ? _a : process.env.API_PATH, publicKey: (_b = config.publicKey) !== null && _b !== void 0 ? _b : process.env.PUBLIC_KEY, filename: (_c = config.filename) !== null && _c !== void 0 ? _c : process.env.FILENAME, filePath: (_d = config.filePath) !== null && _d !== void 0 ? _d : process.env.FILE_PATH, gracePeriod: (_e = config.gracePeriod) !== null && _e !== void 0 ? _e : 24, fileKey: (_f = config.fileKey) !== null && _f !== void 0 ? _f : process.env.LICENSE_FILE_KEY, isGuardFileEnabled: (_h = (_g = config.isGuardFileEnabled) !== null && _g !== void 0 ? _g : !!process.env.GUARD_FILE_ENABLED) !== null && _h !== void 0 ? _h : false, hardwareIDMethod: (_j = hardwareIDMethod !== null && hardwareIDMethod !== void 0 ? hardwareIDMethod : config.hardwareIDMethod) !== null && _j !== void 0 ? _j : 0, sdkVersion: version_1.default, proxy: config.proxy });
|
|
49
|
+
(() => { const $guard = typia_1.default.assert.guard; const $io0 = input => "string" === typeof input.apiKey && "string" === typeof input.sharedKey && "string" === typeof input.apiPath && "string" === typeof input.publicKey && "string" === typeof input.productCode && "string" === typeof input.appName && "string" === typeof input.appVersion && "string" === typeof input.filePath && "string" === typeof input.filename && "number" === typeof input.gracePeriod && "string" === typeof input.fileKey && (undefined === input.airGapKey || "string" === typeof input.airGapKey) && "boolean" === typeof input.isGuardFileEnabled && "number" === typeof input.hardwareIDMethod && "string" === typeof input.sdkVersion && (undefined === input.proxy || "object" === typeof input.proxy && null !== input.proxy && $io1(input.proxy)); const $io1 = input => "string" === typeof input.host && "number" === typeof input.port && (undefined === input.auth || "object" === typeof input.auth && null !== input.auth && $io2(input.auth)) && (undefined === input.protocol || "string" === typeof input.protocol); const $io2 = input => "string" === typeof input.username && "string" === typeof input.password; const $ao0 = (input, _path, _exceptionable = true) => ("string" === typeof input.apiKey || $guard(_exceptionable, {
|
|
50
50
|
path: _path + ".apiKey",
|
|
51
51
|
expected: "string",
|
|
52
52
|
value: input.apiKey
|
|
@@ -106,6 +106,42 @@ class AbstractManager {
|
|
|
106
106
|
path: _path + ".sdkVersion",
|
|
107
107
|
expected: "string",
|
|
108
108
|
value: input.sdkVersion
|
|
109
|
+
}, _errorFactory)) && (undefined === input.proxy || ("object" === typeof input.proxy && null !== input.proxy || $guard(_exceptionable, {
|
|
110
|
+
path: _path + ".proxy",
|
|
111
|
+
expected: "(AxiosProxyConfig | undefined)",
|
|
112
|
+
value: input.proxy
|
|
113
|
+
}, _errorFactory)) && $ao1(input.proxy, _path + ".proxy", true && _exceptionable) || $guard(_exceptionable, {
|
|
114
|
+
path: _path + ".proxy",
|
|
115
|
+
expected: "(AxiosProxyConfig | undefined)",
|
|
116
|
+
value: input.proxy
|
|
117
|
+
}, _errorFactory)); const $ao1 = (input, _path, _exceptionable = true) => ("string" === typeof input.host || $guard(_exceptionable, {
|
|
118
|
+
path: _path + ".host",
|
|
119
|
+
expected: "string",
|
|
120
|
+
value: input.host
|
|
121
|
+
}, _errorFactory)) && ("number" === typeof input.port || $guard(_exceptionable, {
|
|
122
|
+
path: _path + ".port",
|
|
123
|
+
expected: "number",
|
|
124
|
+
value: input.port
|
|
125
|
+
}, _errorFactory)) && (undefined === input.auth || ("object" === typeof input.auth && null !== input.auth || $guard(_exceptionable, {
|
|
126
|
+
path: _path + ".auth",
|
|
127
|
+
expected: "(AxiosBasicCredentials | undefined)",
|
|
128
|
+
value: input.auth
|
|
129
|
+
}, _errorFactory)) && $ao2(input.auth, _path + ".auth", true && _exceptionable) || $guard(_exceptionable, {
|
|
130
|
+
path: _path + ".auth",
|
|
131
|
+
expected: "(AxiosBasicCredentials | undefined)",
|
|
132
|
+
value: input.auth
|
|
133
|
+
}, _errorFactory)) && (undefined === input.protocol || "string" === typeof input.protocol || $guard(_exceptionable, {
|
|
134
|
+
path: _path + ".protocol",
|
|
135
|
+
expected: "(string | undefined)",
|
|
136
|
+
value: input.protocol
|
|
137
|
+
}, _errorFactory)); const $ao2 = (input, _path, _exceptionable = true) => ("string" === typeof input.username || $guard(_exceptionable, {
|
|
138
|
+
path: _path + ".username",
|
|
139
|
+
expected: "string",
|
|
140
|
+
value: input.username
|
|
141
|
+
}, _errorFactory)) && ("string" === typeof input.password || $guard(_exceptionable, {
|
|
142
|
+
path: _path + ".password",
|
|
143
|
+
expected: "string",
|
|
144
|
+
value: input.password
|
|
109
145
|
}, _errorFactory)); const __is = input => "object" === typeof input && null !== input && $io0(input); let _errorFactory; return (input, errorFactory) => {
|
|
110
146
|
if (false === __is(input)) {
|
|
111
147
|
_errorFactory = errorFactory;
|
|
@@ -138,6 +174,11 @@ class AbstractManager {
|
|
|
138
174
|
this.watchdog = new watchdog_1.Watchdog(new license_1.default(this.config.productCode, this.licenseAPI, this.licenseFile, this.floatingAPI));
|
|
139
175
|
this.config = _config;
|
|
140
176
|
}
|
|
177
|
+
setProxy(proxy) {
|
|
178
|
+
this.config.proxy = proxy !== null && proxy !== void 0 ? proxy : undefined;
|
|
179
|
+
this.licenseAPI.setProxy(proxy);
|
|
180
|
+
this.floatingAPI.setProxy(proxy);
|
|
181
|
+
}
|
|
141
182
|
getHardwareID(algorithm) {
|
|
142
183
|
var _a;
|
|
143
184
|
if (algorithm === void 0) { algorithm = (_a = this.config.hardwareIDMethod) !== null && _a !== void 0 ? _a : 0; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-manager.js","sourceRoot":"","sources":["../../src/abstract-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA+B;AAE/B,kDAA0B;AAE1B,+CAAiC;AACjC,IAAI,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAE/F,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;AACvE,CAAC;AACD,kEAAyC;AACzC,wDAAgC;AAChC,wDAAoC;AACpC,0DAAqC;AACrC,yCAAsC;
|
|
1
|
+
{"version":3,"file":"abstract-manager.js","sourceRoot":"","sources":["../../src/abstract-manager.ts"],"names":[],"mappings":"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"}
|