@crela/license 1.0.0 → 1.0.2
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/index.d.ts +33 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -37
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Crela License SDK
|
|
2
|
+
* Crela License SDK - Node.js / Electron
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Required integration for tools on the Crela marketplace (paid and free).
|
|
5
|
+
* The SDK reads a JWT signed by the Crela launcher, either from the
|
|
6
|
+
* environment variable `CRELA_LICENSE_JWT` or from a shared cache file, and
|
|
7
|
+
* verifies it offline against a compiled-in Ed25519 public key. No network
|
|
8
|
+
* call happens.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* Typical use in an Electron `main.ts`:
|
|
11
11
|
*
|
|
12
12
|
* import { verifyOrExit, CRELA_SDK_MARKER } from '@crela/license'
|
|
13
|
-
* verifyOrExit('
|
|
13
|
+
* verifyOrExit('my-tool', CRELA_SDK_MARKER)
|
|
14
14
|
*
|
|
15
|
-
* Marker
|
|
16
|
-
*
|
|
15
|
+
* Marker and public key are usually injected through a bundler define at
|
|
16
|
+
* build time, or read from a file generated during the build.
|
|
17
17
|
*/
|
|
18
|
-
/** Prefix
|
|
18
|
+
/** Prefix of the v2 marker; the full token comes from the creator dashboard. */
|
|
19
19
|
export declare const CRELA_SDK_MARKER_PREFIX: "CRELA_SDKv2_";
|
|
20
20
|
export declare const CRELA_SDK_MARKER_CONST: string | undefined;
|
|
21
21
|
export declare class LicenseError extends Error {
|
|
@@ -24,40 +24,41 @@ export declare class LicenseError extends Error {
|
|
|
24
24
|
}
|
|
25
25
|
export type LicenseErrorCode = 'NOT_LAUNCHED_FROM_CRELA' | 'INVALID_JWT_FORMAT' | 'INVALID_SIGNATURE' | 'EXPIRED' | 'WRONG_TOOL' | 'WRONG_DEVICE' | 'MISSING_CLAIM' | 'INVALID_PUBKEY' | 'INVALID_MARKER';
|
|
26
26
|
export interface LicenseClaims {
|
|
27
|
-
/**
|
|
27
|
+
/** Licence id (UUID) */
|
|
28
28
|
sub: string;
|
|
29
29
|
/** Tool-Slug */
|
|
30
30
|
tool: string;
|
|
31
31
|
/** Device-Fingerprint */
|
|
32
32
|
fp: string;
|
|
33
|
-
/** Unix
|
|
33
|
+
/** Unix timestamp, issued at */
|
|
34
34
|
iat: number;
|
|
35
|
-
/** Unix
|
|
35
|
+
/** Unix timestamp, expires at */
|
|
36
36
|
exp: number;
|
|
37
|
-
/** Grace
|
|
37
|
+
/** Grace period in seconds */
|
|
38
38
|
grace: number;
|
|
39
|
-
/** True
|
|
39
|
+
/** True when CRELA_DEV_MODE=1 (verification skipped) */
|
|
40
40
|
isDev: boolean;
|
|
41
41
|
}
|
|
42
42
|
export interface VerifierOptions {
|
|
43
|
-
/** Tool
|
|
43
|
+
/** Tool slug; must match the `tool` claim in the licence */
|
|
44
44
|
toolSlug: string;
|
|
45
|
-
/** Marker
|
|
45
|
+
/** Marker token from the creator dashboard. Must start with CRELA_SDKv2_. */
|
|
46
46
|
markerToken: string;
|
|
47
|
-
/** Ed25519
|
|
47
|
+
/** Ed25519 public key (32 bytes hex). Defaults to the BUILD_TIME_PUBKEY_HEX constant. */
|
|
48
48
|
pubkeyHex?: string;
|
|
49
|
-
/**
|
|
49
|
+
/** Override the cache path (default: <DATA_LOCAL>/crela/licenses/<slug>.jwt). */
|
|
50
50
|
cachePath?: string;
|
|
51
51
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
52
|
+
* Allow dev mode (`CRELA_DEV_MODE=1`). Defaults to FALSE and has to be
|
|
53
|
+
* enabled explicitly for local development. Shipped tools leave it off, so
|
|
54
|
+
* that end users cannot bypass the licence check with an environment
|
|
55
|
+
* variable.
|
|
55
56
|
*/
|
|
56
57
|
allowDevMode?: boolean;
|
|
57
58
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
59
|
+
* Override the local device fingerprint (tests only). Production uses the
|
|
60
|
+
* machine id (node-machine-id, original) - the same source the launcher
|
|
61
|
+
* uses.
|
|
61
62
|
*/
|
|
62
63
|
deviceFp?: string;
|
|
63
64
|
}
|
|
@@ -69,14 +70,14 @@ export declare class LicenseVerifier {
|
|
|
69
70
|
private readonly deviceFp;
|
|
70
71
|
constructor(opts: VerifierOptions);
|
|
71
72
|
/**
|
|
72
|
-
*
|
|
73
|
-
* MachineGuid/IOPlatformUUID/machine-id,
|
|
74
|
-
* (machine-uid 0.5)
|
|
75
|
-
* (
|
|
73
|
+
* Local device fingerprint. The source is node-machine-id (original) - the
|
|
74
|
+
* MachineGuid / IOPlatformUUID / machine-id, exactly what the launcher
|
|
75
|
+
* (machine-uid 0.5) writes into the licence. An override wins if set
|
|
76
|
+
* (tests). Returns null when the id cannot be determined.
|
|
76
77
|
*/
|
|
77
78
|
private resolveDeviceFp;
|
|
78
79
|
verify(): LicenseClaims;
|
|
79
|
-
/**
|
|
80
|
+
/** On failure: message on stderr + process.exit(0xC1). */
|
|
80
81
|
verifyOrExit(): LicenseClaims;
|
|
81
82
|
private resolveToken;
|
|
82
83
|
private resolveCachePath;
|
|
@@ -86,6 +87,6 @@ export declare class LicenseVerifier {
|
|
|
86
87
|
}
|
|
87
88
|
/** Convenience: verifiziert und exitet bei Fehler. */
|
|
88
89
|
export declare function verifyOrExit(toolSlug: string, markerToken: string, pubkeyHex?: string): LicenseClaims;
|
|
89
|
-
/** Fingerprint
|
|
90
|
+
/** Fingerprint helper, public for apps that want to log it. */
|
|
90
91
|
export declare function deviceFingerprint(): string;
|
|
91
92
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,EAAG,cAAuB,CAAA;AAY9D,eAAO,MAAM,sBAAsB,EAAE,MAAM,GAAG,SAC0B,CAAA;AAIxE,qBAAa,YAAa,SAAQ,KAAK;IAClB,IAAI,EAAE,gBAAgB;gBAAtB,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM;CAI3D;AAED,MAAM,MAAM,gBAAgB,GACxB,yBAAyB,GACzB,oBAAoB,GACpB,mBAAmB,GACnB,SAAS,GACT,YAAY,GACZ,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,gBAAgB,CAAA;AAEpB,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,wDAAwD;IACxD,KAAK,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAA;IACnB,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAiBD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;gBAEjC,IAAI,EAAE,eAAe;IAYjC;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAavB,MAAM,IAAI,aAAa;IAoCvB,0DAA0D;IAC1D,YAAY,IAAI,aAAa;IAW7B,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;CAgDlB;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAErG;AAED,+DAA+D;AAC/D,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C"}
|
package/dist/index.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Crela License SDK
|
|
2
|
+
* Crela License SDK - Node.js / Electron
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Required integration for tools on the Crela marketplace (paid and free).
|
|
5
|
+
* The SDK reads a JWT signed by the Crela launcher, either from the
|
|
6
|
+
* environment variable `CRELA_LICENSE_JWT` or from a shared cache file, and
|
|
7
|
+
* verifies it offline against a compiled-in Ed25519 public key. No network
|
|
8
|
+
* call happens.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* Typical use in an Electron `main.ts`:
|
|
11
11
|
*
|
|
12
12
|
* import { verifyOrExit, CRELA_SDK_MARKER } from '@crela/license'
|
|
13
|
-
* verifyOrExit('
|
|
13
|
+
* verifyOrExit('my-tool', CRELA_SDK_MARKER)
|
|
14
14
|
*
|
|
15
|
-
* Marker
|
|
16
|
-
*
|
|
15
|
+
* Marker and public key are usually injected through a bundler define at
|
|
16
|
+
* build time, or read from a file generated during the build.
|
|
17
17
|
*/
|
|
18
18
|
import { readFileSync } from 'node:fs';
|
|
19
19
|
import { existsSync } from 'node:fs';
|
|
@@ -21,7 +21,7 @@ import { join } from 'node:path';
|
|
|
21
21
|
import { homedir, hostname, platform } from 'node:os';
|
|
22
22
|
import { createRequire } from 'node:module';
|
|
23
23
|
import { createHash, createPublicKey, verify as cryptoVerify } from 'node:crypto';
|
|
24
|
-
/** Prefix
|
|
24
|
+
/** Prefix of the v2 marker; the full token comes from the creator dashboard. */
|
|
25
25
|
export const CRELA_SDK_MARKER_PREFIX = 'CRELA_SDKv2_';
|
|
26
26
|
export const CRELA_SDK_MARKER_CONST = typeof CRELA_SDK_MARKER !== 'undefined' ? CRELA_SDK_MARKER : undefined;
|
|
27
27
|
const SKEW_SECONDS = 300; // 5 Minuten Clock-Skew-Toleranz
|
|
@@ -34,11 +34,11 @@ export class LicenseError extends Error {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
|
-
* Production
|
|
38
|
-
*
|
|
39
|
-
* base64url-decoded
|
|
40
|
-
*
|
|
41
|
-
*
|
|
37
|
+
* Production public key for Ed25519 JWT verification against crela.io.
|
|
38
|
+
* Taken from the `x` field of the production CRELA_LICENSE_SIGNING_JWK,
|
|
39
|
+
* base64url-decoded, as 32-byte hex. Used as the default and overridable
|
|
40
|
+
* through a bundler define (CRELA_LICENSE_PUBKEY_HEX), e.g. for self-hosted
|
|
41
|
+
* Crela instances.
|
|
42
42
|
*/
|
|
43
43
|
const PRODUCTION_PUBKEY_HEX = 'c6c37639c659cb9168d6af510d9696d141d980c5145212232f800b21a8210231';
|
|
44
44
|
const BUILD_TIME_PUBKEY_HEX = typeof CRELA_LICENSE_PUBKEY_HEX !== 'undefined' && CRELA_LICENSE_PUBKEY_HEX.length === 64
|
|
@@ -52,9 +52,9 @@ export class LicenseVerifier {
|
|
|
52
52
|
deviceFp;
|
|
53
53
|
constructor(opts) {
|
|
54
54
|
if (!opts.toolSlug)
|
|
55
|
-
throw new LicenseError('MISSING_CLAIM', 'toolSlug
|
|
55
|
+
throw new LicenseError('MISSING_CLAIM', 'toolSlug is required');
|
|
56
56
|
if (!opts.markerToken || !opts.markerToken.startsWith(CRELA_SDK_MARKER_PREFIX)) {
|
|
57
|
-
throw new LicenseError('INVALID_MARKER', `markerToken
|
|
57
|
+
throw new LicenseError('INVALID_MARKER', `markerToken must start with "${CRELA_SDK_MARKER_PREFIX}"`);
|
|
58
58
|
}
|
|
59
59
|
this.toolSlug = opts.toolSlug;
|
|
60
60
|
this.pubkeyHex = opts.pubkeyHex ?? BUILD_TIME_PUBKEY_HEX;
|
|
@@ -63,10 +63,10 @@ export class LicenseVerifier {
|
|
|
63
63
|
this.deviceFp = opts.deviceFp;
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
|
-
*
|
|
67
|
-
* MachineGuid/IOPlatformUUID/machine-id,
|
|
68
|
-
* (machine-uid 0.5)
|
|
69
|
-
* (
|
|
66
|
+
* Local device fingerprint. The source is node-machine-id (original) - the
|
|
67
|
+
* MachineGuid / IOPlatformUUID / machine-id, exactly what the launcher
|
|
68
|
+
* (machine-uid 0.5) writes into the licence. An override wins if set
|
|
69
|
+
* (tests). Returns null when the id cannot be determined.
|
|
70
70
|
*/
|
|
71
71
|
resolveDeviceFp() {
|
|
72
72
|
if (this.deviceFp !== undefined)
|
|
@@ -87,11 +87,11 @@ export class LicenseVerifier {
|
|
|
87
87
|
const token = this.resolveToken();
|
|
88
88
|
const claims = this.verifyJwt(token);
|
|
89
89
|
if (claims.tool !== this.toolSlug) {
|
|
90
|
-
throw new LicenseError('WRONG_TOOL', `
|
|
90
|
+
throw new LicenseError('WRONG_TOOL', `Licence was issued for "${claims.tool}", expected "${this.toolSlug}"`);
|
|
91
91
|
}
|
|
92
92
|
const now = nowSeconds();
|
|
93
93
|
if (claims.exp + SKEW_SECONDS < now) {
|
|
94
|
-
throw new LicenseError('EXPIRED', '
|
|
94
|
+
throw new LicenseError('EXPIRED', 'Licence has expired');
|
|
95
95
|
}
|
|
96
96
|
// Geraetebindung: der fp-Claim muss zur lokalen Maschine passen, sonst
|
|
97
97
|
// laesst sich ein gueltiges Token einfach auf beliebig viele Rechner
|
|
@@ -100,11 +100,11 @@ export class LicenseVerifier {
|
|
|
100
100
|
// ermittelbar ist (ein vom Launcher gestartetes Tool hat immer eine).
|
|
101
101
|
const localFp = this.resolveDeviceFp();
|
|
102
102
|
if (localFp === null || localFp.toLowerCase() !== claims.fp.toLowerCase()) {
|
|
103
|
-
throw new LicenseError('WRONG_DEVICE', '
|
|
103
|
+
throw new LicenseError('WRONG_DEVICE', 'Licence is bound to a different device (it was copied from another machine)');
|
|
104
104
|
}
|
|
105
105
|
return claims;
|
|
106
106
|
}
|
|
107
|
-
/**
|
|
107
|
+
/** On failure: message on stderr + process.exit(0xC1). */
|
|
108
108
|
verifyOrExit() {
|
|
109
109
|
try {
|
|
110
110
|
return this.verify();
|
|
@@ -112,7 +112,7 @@ export class LicenseVerifier {
|
|
|
112
112
|
catch (e) {
|
|
113
113
|
const msg = e instanceof Error ? e.message : String(e);
|
|
114
114
|
process.stderr.write(`crela-license: ${msg}\n`);
|
|
115
|
-
process.stderr.write('
|
|
115
|
+
process.stderr.write('Please start this app through the Crela launcher.\n');
|
|
116
116
|
process.exit(0xc1);
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -123,7 +123,7 @@ export class LicenseVerifier {
|
|
|
123
123
|
const cached = this.readCacheFile();
|
|
124
124
|
if (cached)
|
|
125
125
|
return cached;
|
|
126
|
-
throw new LicenseError('NOT_LAUNCHED_FROM_CRELA', '
|
|
126
|
+
throw new LicenseError('NOT_LAUNCHED_FROM_CRELA', 'No licence token found (neither env var nor cache file). Please start this app through the Crela launcher.');
|
|
127
127
|
}
|
|
128
128
|
resolveCachePath() {
|
|
129
129
|
if (this.cachePath)
|
|
@@ -156,11 +156,11 @@ export class LicenseVerifier {
|
|
|
156
156
|
}
|
|
157
157
|
verifyJwt(token) {
|
|
158
158
|
if (!this.pubkeyHex || this.pubkeyHex.length !== 64) {
|
|
159
|
-
throw new LicenseError('INVALID_PUBKEY', 'Ed25519
|
|
159
|
+
throw new LicenseError('INVALID_PUBKEY', 'Ed25519 public key is missing or malformed');
|
|
160
160
|
}
|
|
161
161
|
const parts = token.split('.');
|
|
162
162
|
if (parts.length !== 3) {
|
|
163
|
-
throw new LicenseError('INVALID_JWT_FORMAT', '
|
|
163
|
+
throw new LicenseError('INVALID_JWT_FORMAT', 'Malformed licence token');
|
|
164
164
|
}
|
|
165
165
|
let payloadBytes;
|
|
166
166
|
let sigBytes;
|
|
@@ -169,23 +169,23 @@ export class LicenseVerifier {
|
|
|
169
169
|
sigBytes = base64UrlDecode(parts[2]);
|
|
170
170
|
}
|
|
171
171
|
catch {
|
|
172
|
-
throw new LicenseError('INVALID_JWT_FORMAT', '
|
|
172
|
+
throw new LicenseError('INVALID_JWT_FORMAT', 'Licence token is not valid base64');
|
|
173
173
|
}
|
|
174
174
|
if (sigBytes.length !== 64) {
|
|
175
|
-
throw new LicenseError('INVALID_JWT_FORMAT', `
|
|
175
|
+
throw new LicenseError('INVALID_JWT_FORMAT', `Licence signature has wrong length: ${sigBytes.length}`);
|
|
176
176
|
}
|
|
177
177
|
const signingInput = Buffer.from(`${parts[0]}.${parts[1]}`);
|
|
178
178
|
const pubkey = ed25519PublicKey(this.pubkeyHex);
|
|
179
179
|
const ok = cryptoVerify(null, signingInput, pubkey, sigBytes);
|
|
180
180
|
if (!ok) {
|
|
181
|
-
throw new LicenseError('INVALID_SIGNATURE', '
|
|
181
|
+
throw new LicenseError('INVALID_SIGNATURE', 'Licence signature could not be verified');
|
|
182
182
|
}
|
|
183
183
|
let raw;
|
|
184
184
|
try {
|
|
185
185
|
raw = JSON.parse(payloadBytes.toString('utf-8'));
|
|
186
186
|
}
|
|
187
187
|
catch {
|
|
188
|
-
throw new LicenseError('INVALID_JWT_FORMAT', '
|
|
188
|
+
throw new LicenseError('INVALID_JWT_FORMAT', 'Licence payload is not valid JSON');
|
|
189
189
|
}
|
|
190
190
|
return {
|
|
191
191
|
sub: requireString(raw, 'sub'),
|
|
@@ -202,7 +202,7 @@ export class LicenseVerifier {
|
|
|
202
202
|
export function verifyOrExit(toolSlug, markerToken, pubkeyHex) {
|
|
203
203
|
return new LicenseVerifier({ toolSlug, markerToken, pubkeyHex }).verifyOrExit();
|
|
204
204
|
}
|
|
205
|
-
/** Fingerprint
|
|
205
|
+
/** Fingerprint helper, public for apps that want to log it. */
|
|
206
206
|
export function deviceFingerprint() {
|
|
207
207
|
const h = createHash('sha256');
|
|
208
208
|
try {
|
|
@@ -240,14 +240,14 @@ function nowSeconds() {
|
|
|
240
240
|
function requireString(o, key) {
|
|
241
241
|
const v = o[key];
|
|
242
242
|
if (typeof v !== 'string' || v.length === 0) {
|
|
243
|
-
throw new LicenseError('MISSING_CLAIM', `
|
|
243
|
+
throw new LicenseError('MISSING_CLAIM', `Licence claim "${key}" is missing or not a string`);
|
|
244
244
|
}
|
|
245
245
|
return v;
|
|
246
246
|
}
|
|
247
247
|
function requireNumber(o, key) {
|
|
248
248
|
const v = o[key];
|
|
249
249
|
if (typeof v !== 'number') {
|
|
250
|
-
throw new LicenseError('MISSING_CLAIM', `
|
|
250
|
+
throw new LicenseError('MISSING_CLAIM', `Licence claim "${key}" is missing or not a number`);
|
|
251
251
|
}
|
|
252
252
|
return v;
|
|
253
253
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAkB,YAAY,EAAE,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AAEjF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAkB,YAAY,EAAE,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AAEjF,gFAAgF;AAChF,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAuB,CAAA;AAY9D,MAAM,CAAC,MAAM,sBAAsB,GACjC,OAAO,gBAAgB,KAAK,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAA;AAExE,MAAM,YAAY,GAAG,GAAG,CAAA,CAAC,gCAAgC;AAEzD,MAAM,OAAO,YAAa,SAAQ,KAAK;IAClB;IAAnB,YAAmB,IAAsB,EAAE,OAAe;QACxD,KAAK,CAAC,OAAO,CAAC,CAAA;QADG,SAAI,GAAJ,IAAI,CAAkB;QAEvC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AAsDD;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,kEAAkE,CAAA;AAGhG,MAAM,qBAAqB,GACzB,OAAO,wBAAwB,KAAK,WAAW,IAAI,wBAAwB,CAAC,MAAM,KAAK,EAAE;IACvF,CAAC,CAAC,wBAAwB;IAC1B,CAAC,CAAC,qBAAqB,CAAA;AAE3B,MAAM,OAAO,eAAe;IACT,QAAQ,CAAQ;IAChB,SAAS,CAAQ;IACjB,SAAS,CAAoB;IAC7B,YAAY,CAAS;IACrB,QAAQ,CAAoB;IAE7C,YAAY,IAAqB;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAA;QACnF,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,gCAAgC,uBAAuB,GAAG,CAAC,CAAA;QACtG,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,qBAAqB,CAAA;QACxD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,KAAK,CAAA;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC/B,CAAC;IAED;;;;;OAKG;IACK,eAAe;QACrB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAA;QACrD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAE3D,CAAA;YACD,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YAClC,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,GAAG,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC,SAAS,EAAE,CAAA;QACzB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAEpC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,YAAY,CACpB,YAAY,EACZ,2BAA2B,MAAM,CAAC,IAAI,gBAAgB,IAAI,CAAC,QAAQ,GAAG,CACvE,CAAA;QACH,CAAC;QAED,MAAM,GAAG,GAAG,UAAU,EAAE,CAAA;QACxB,IAAI,MAAM,CAAC,GAAG,GAAG,YAAY,GAAG,GAAG,EAAE,CAAC;YACpC,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAA;QAC1D,CAAC;QAED,uEAAuE;QACvE,qEAAqE;QACrE,yEAAyE;QACzE,0EAA0E;QAC1E,sEAAsE;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACtC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1E,MAAM,IAAI,YAAY,CACpB,cAAc,EACd,6EAA6E,CAC9E,CAAA;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,0DAA0D;IAC1D,YAAY;QACV,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;QACtB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;YAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAA;YAC3E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAA;QAC9C,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAA;QAEpD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACnC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,MAAM,IAAI,YAAY,CACpB,yBAAyB,EACzB,4GAA4G,CAC7G,CAAA;IACH,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAA;QACzC,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,MAAM,CAAC,CAAA;IAC1E,CAAC;IAEO,aAAa;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;YAC9C,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAEO,SAAS;QACf,MAAM,GAAG,GAAG,UAAU,EAAE,CAAA;QACxB,OAAO;YACL,GAAG,EAAE,UAAU;YACf,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,EAAE,EAAE,iBAAiB;YACrB,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,GAAG,GAAG,MAAM;YACjB,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,IAAI;SACZ,CAAA;IACH,CAAC;IAEO,SAAS,CAAC,KAAa;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACpD,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,4CAA4C,CAAC,CAAA;QACxF,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,YAAY,CAAC,oBAAoB,EAAE,yBAAyB,CAAC,CAAA;QACzE,CAAC;QAED,IAAI,YAAoB,CAAA;QACxB,IAAI,QAAgB,CAAA;QACpB,IAAI,CAAC;YACH,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YACxC,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,YAAY,CAAC,oBAAoB,EAAE,mCAAmC,CAAC,CAAA;QACnF,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,YAAY,CAAC,oBAAoB,EAAE,uCAAuC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QACxG,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAE/C,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC7D,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,YAAY,CAAC,mBAAmB,EAAE,yCAAyC,CAAC,CAAA;QACxF,CAAC;QAED,IAAI,GAA4B,CAAA;QAChC,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA4B,CAAA;QAC7E,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,YAAY,CAAC,oBAAoB,EAAE,mCAAmC,CAAC,CAAA;QACnF,CAAC;QAED,OAAO;YACL,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;YAC9B,IAAI,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC;YAChC,EAAE,EAAE,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC;YAC5B,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9C,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;YAC9B,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpD,KAAK,EAAE,KAAK;SACb,CAAA;IACH,CAAC;CACF;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,WAAmB,EAAE,SAAkB;IACpF,OAAO,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE,CAAA;AACjF,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAC9B,IAAI,CAAC;QAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACnD,yEAAyE;IACzE,mCAAmC;IACnC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC;AAED,SAAS,eAAe,CAAC,CAAS;IAChC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;IACpE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,yEAAyE;IACzE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAA;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC9C,OAAO,eAAe,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AACpE,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAA;IACpB,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IACxE,CAAC;IACD,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAA;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;AACxE,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;AACtC,CAAC;AAED,SAAS,aAAa,CAAC,CAA0B,EAAE,GAAW;IAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IAChB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,kBAAkB,GAAG,8BAA8B,CAAC,CAAA;IAC9F,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,aAAa,CAAC,CAA0B,EAAE,GAAW;IAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IAChB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,kBAAkB,GAAG,8BAA8B,CAAC,CAAA;IAC9F,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crela/license",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "License verification SDK for Crela marketplace tools (Node.js / Electron). Reads JWT from launcher-injected env var or cache file, verifies offline via Ed25519.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"homepage": "https://crela.io/docs#sdk-marker",
|
|
40
40
|
"repository": {
|
|
41
41
|
"type": "git",
|
|
42
|
-
"url": "https://github.com/Boniihhh/Crela",
|
|
42
|
+
"url": "git+https://github.com/Boniihhh/Crela.git",
|
|
43
43
|
"directory": "packages/sdk-node"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|