@corelicense/node 0.2.0 → 0.5.0

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 (153) hide show
  1. package/README.md +71 -4
  2. package/dist/client/license-api-client.d.ts +3 -2
  3. package/dist/client/license-api-client.d.ts.map +1 -1
  4. package/dist/client/license-api-client.js +44 -4
  5. package/dist/client/license-api-client.js.map +1 -1
  6. package/dist/client/map-client-error.d.ts +5 -0
  7. package/dist/client/map-client-error.d.ts.map +1 -0
  8. package/dist/client/map-client-error.js +63 -0
  9. package/dist/client/map-client-error.js.map +1 -0
  10. package/dist/client/public-keys-client.d.ts.map +1 -1
  11. package/dist/client/public-keys-client.js +20 -2
  12. package/dist/client/public-keys-client.js.map +1 -1
  13. package/dist/core-license.d.ts +19 -1
  14. package/dist/core-license.d.ts.map +1 -1
  15. package/dist/core-license.js +195 -51
  16. package/dist/core-license.js.map +1 -1
  17. package/dist/crypto/verify-policy-token.d.ts.map +1 -1
  18. package/dist/crypto/verify-policy-token.js +75 -5
  19. package/dist/crypto/verify-policy-token.js.map +1 -1
  20. package/dist/env/load-options-from-env.d.ts.map +1 -1
  21. package/dist/env/load-options-from-env.js +2 -1
  22. package/dist/env/load-options-from-env.js.map +1 -1
  23. package/dist/env/resolve-api-url.js +1 -1
  24. package/dist/env/resolve-api-url.js.map +1 -1
  25. package/dist/errors/api-error.d.ts +17 -0
  26. package/dist/errors/api-error.d.ts.map +1 -0
  27. package/dist/errors/api-error.js +43 -0
  28. package/dist/errors/api-error.js.map +1 -0
  29. package/dist/errors/codes.d.ts +40 -0
  30. package/dist/errors/codes.d.ts.map +1 -0
  31. package/dist/errors/codes.js +39 -0
  32. package/dist/errors/codes.js.map +1 -0
  33. package/dist/errors/config-error.d.ts +7 -0
  34. package/dist/errors/config-error.d.ts.map +1 -0
  35. package/dist/errors/config-error.js +21 -0
  36. package/dist/errors/config-error.js.map +1 -0
  37. package/dist/errors/feature-error.d.ts +2 -1
  38. package/dist/errors/feature-error.d.ts.map +1 -1
  39. package/dist/errors/feature-error.js +13 -2
  40. package/dist/errors/feature-error.js.map +1 -1
  41. package/dist/errors/index.d.ts +6 -0
  42. package/dist/errors/index.d.ts.map +1 -1
  43. package/dist/errors/index.js +6 -0
  44. package/dist/errors/index.js.map +1 -1
  45. package/dist/errors/license-error.d.ts +48 -7
  46. package/dist/errors/license-error.d.ts.map +1 -1
  47. package/dist/errors/license-error.js +104 -14
  48. package/dist/errors/license-error.js.map +1 -1
  49. package/dist/errors/module-error.d.ts +7 -0
  50. package/dist/errors/module-error.d.ts.map +1 -0
  51. package/dist/errors/module-error.js +20 -0
  52. package/dist/errors/module-error.js.map +1 -0
  53. package/dist/errors/policy-error.d.ts +10 -1
  54. package/dist/errors/policy-error.d.ts.map +1 -1
  55. package/dist/errors/policy-error.js +16 -2
  56. package/dist/errors/policy-error.js.map +1 -1
  57. package/dist/errors/quota-error.d.ts +2 -1
  58. package/dist/errors/quota-error.d.ts.map +1 -1
  59. package/dist/errors/quota-error.js +15 -2
  60. package/dist/errors/quota-error.js.map +1 -1
  61. package/dist/errors/runtime-error.d.ts +12 -0
  62. package/dist/errors/runtime-error.d.ts.map +1 -0
  63. package/dist/errors/runtime-error.js +37 -0
  64. package/dist/errors/runtime-error.js.map +1 -0
  65. package/dist/errors/throw-for-status.d.ts +3 -0
  66. package/dist/errors/throw-for-status.d.ts.map +1 -0
  67. package/dist/errors/throw-for-status.js +21 -0
  68. package/dist/errors/throw-for-status.js.map +1 -0
  69. package/dist/guards/cli-guard.d.ts.map +1 -1
  70. package/dist/guards/cli-guard.js +12 -6
  71. package/dist/guards/cli-guard.js.map +1 -1
  72. package/dist/guards/express-middleware.d.ts.map +1 -1
  73. package/dist/guards/express-middleware.js +1 -5
  74. package/dist/guards/express-middleware.js.map +1 -1
  75. package/dist/guards/express-routes.d.ts +9 -0
  76. package/dist/guards/express-routes.d.ts.map +1 -0
  77. package/dist/guards/express-routes.js +12 -0
  78. package/dist/guards/express-routes.js.map +1 -0
  79. package/dist/guards/fastify-plugin.d.ts.map +1 -1
  80. package/dist/guards/fastify-plugin.js +1 -5
  81. package/dist/guards/fastify-plugin.js.map +1 -1
  82. package/dist/guards/feature-guard.d.ts +1 -0
  83. package/dist/guards/feature-guard.d.ts.map +1 -1
  84. package/dist/guards/feature-guard.js +14 -0
  85. package/dist/guards/feature-guard.js.map +1 -1
  86. package/dist/guards/nest-exception-filter.d.ts +6 -0
  87. package/dist/guards/nest-exception-filter.d.ts.map +1 -0
  88. package/dist/guards/nest-exception-filter.js +60 -0
  89. package/dist/guards/nest-exception-filter.js.map +1 -0
  90. package/dist/guards/nest-feature-guard.d.ts +10 -0
  91. package/dist/guards/nest-feature-guard.d.ts.map +1 -0
  92. package/dist/guards/nest-feature-guard.js +72 -0
  93. package/dist/guards/nest-feature-guard.js.map +1 -0
  94. package/dist/guards/nest-module.d.ts +3 -0
  95. package/dist/guards/nest-module.d.ts.map +1 -1
  96. package/dist/guards/nest-module.js +13 -2
  97. package/dist/guards/nest-module.js.map +1 -1
  98. package/dist/guards/nestjs.d.ts +6 -0
  99. package/dist/guards/nestjs.d.ts.map +1 -0
  100. package/dist/guards/nestjs.js +6 -0
  101. package/dist/guards/nestjs.js.map +1 -0
  102. package/dist/guards/quota-guard.d.ts.map +1 -1
  103. package/dist/guards/quota-guard.js +6 -1
  104. package/dist/guards/quota-guard.js.map +1 -1
  105. package/dist/guards/require-feature.decorator.d.ts +3 -0
  106. package/dist/guards/require-feature.decorator.d.ts.map +1 -0
  107. package/dist/guards/require-feature.decorator.js +4 -0
  108. package/dist/guards/require-feature.decorator.js.map +1 -0
  109. package/dist/guards/worker-guard.d.ts.map +1 -1
  110. package/dist/guards/worker-guard.js +8 -6
  111. package/dist/guards/worker-guard.js.map +1 -1
  112. package/dist/index.d.ts +6 -0
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +5 -0
  115. package/dist/index.js.map +1 -1
  116. package/dist/instance/domain-hash.d.ts +3 -0
  117. package/dist/instance/domain-hash.d.ts.map +1 -0
  118. package/dist/instance/domain-hash.js +11 -0
  119. package/dist/instance/domain-hash.js.map +1 -0
  120. package/dist/instance/instance-id.d.ts.map +1 -1
  121. package/dist/instance/instance-id.js +1 -6
  122. package/dist/instance/instance-id.js.map +1 -1
  123. package/dist/runtime/licensed-module-registry.d.ts +22 -0
  124. package/dist/runtime/licensed-module-registry.d.ts.map +1 -0
  125. package/dist/runtime/licensed-module-registry.js +80 -0
  126. package/dist/runtime/licensed-module-registry.js.map +1 -0
  127. package/dist/runtime/licensed-service-container.d.ts +23 -0
  128. package/dist/runtime/licensed-service-container.d.ts.map +1 -0
  129. package/dist/runtime/licensed-service-container.js +89 -0
  130. package/dist/runtime/licensed-service-container.js.map +1 -0
  131. package/dist/runtime/licensed-service.d.ts +7 -0
  132. package/dist/runtime/licensed-service.d.ts.map +1 -0
  133. package/dist/runtime/licensed-service.js +10 -0
  134. package/dist/runtime/licensed-service.js.map +1 -0
  135. package/dist/runtime/module-registry.d.ts.map +1 -1
  136. package/dist/runtime/module-registry.js +2 -1
  137. package/dist/runtime/module-registry.js.map +1 -1
  138. package/dist/runtime/service-container.d.ts.map +1 -1
  139. package/dist/runtime/service-container.js +2 -1
  140. package/dist/runtime/service-container.js.map +1 -1
  141. package/dist/types/bootstrap.d.ts +32 -0
  142. package/dist/types/bootstrap.d.ts.map +1 -0
  143. package/dist/types/bootstrap.js +2 -0
  144. package/dist/types/bootstrap.js.map +1 -0
  145. package/dist/types/index.d.ts +1 -0
  146. package/dist/types/index.d.ts.map +1 -1
  147. package/dist/types/index.js +1 -0
  148. package/dist/types/index.js.map +1 -1
  149. package/dist/types/options.d.ts +14 -3
  150. package/dist/types/options.d.ts.map +1 -1
  151. package/dist/types/policy.d.ts +2 -0
  152. package/dist/types/policy.d.ts.map +1 -1
  153. package/package.json +20 -5
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  CoreLicense Node.js SDK — runtime license và policy layer cho ứng dụng Node.js.
4
4
 
5
- > **Trạng thái:** v0.2auto-fetch public key, offline grace, key rotation retry.
5
+ > **Trạng thái:** v0.4tích hợp sâu (module registry & DI), production default URL, revoke handling.
6
6
 
7
7
  ## Triết lý
8
8
 
@@ -24,7 +24,9 @@ npm install @nestjs/common # NestJS module/guard
24
24
 
25
25
  ## Quick start
26
26
 
27
- Chỉ cần **2 biến môi trường** license key mới (CL1.*) đã nhúng domain license server:
27
+ Chỉ cần **2 biến môi trường**. SDK mặc định kết nối `https://api.corelicense.net` không cần cấu hình thêm cho production.
28
+
29
+ License key mới (CL1.*) vẫn ưu tiên URL nhúng trong key nếu server generate với `SDK_PUBLIC_URL` khác.
28
30
 
29
31
  ```env
30
32
  CORELICENSE_KEY=CL1.xxxxx.CL-AAAAA-BBBBB-...
@@ -32,7 +34,13 @@ CORELICENSE_PRODUCT_ID=demo
32
34
  ```
33
35
 
34
36
  `CORELICENSE_PUBLIC_KEY` **optional** — pin public key (enterprise / air-gapped).
35
- `CORELICENSE_API_URL` **optional** — override thủ công (legacy key hoặc dev).
37
+ `CORELICENSE_API_URL` **optional** — override thủ công (dev local hoặc legacy key).
38
+
39
+ Dev local với server Go chạy localhost:
40
+
41
+ ```env
42
+ CORELICENSE_API_URL=http://localhost:8080
43
+ ```
36
44
 
37
45
  ```ts
38
46
  import express from 'express';
@@ -92,6 +100,60 @@ Khi pin, SDK không fetch keys từ server. Nếu verify fail sau key rotation,
92
100
  | `fastifyPlugin(options?)` | Fastify plugin |
93
101
  | `guardWorker(name)` | Guard worker |
94
102
  | `guardCommand(name)` | Guard CLI/cron command |
103
+ | `createLicensedRegistry()` | Module registry gắn license |
104
+ | `createLicensedContainer()` | DI container gắn license |
105
+ | `bootstrap(options?)` | Bootstrap modules + services theo policy |
106
+
107
+ ## Tích hợp sâu (v0.4)
108
+
109
+ ```ts
110
+ await license.boot();
111
+
112
+ const { modules, services, skipped } = await license.bootstrap({
113
+ modules: [
114
+ { name: 'automation', feature: 'automation', factory: ({ license }) => new AutomationModule(license) },
115
+ ],
116
+ services: [
117
+ { name: 'ExportService', feature: 'export', factory: ({ license }) => new ExportService(license) },
118
+ ],
119
+ });
120
+
121
+ const automation = await modules.get<AutomationModule>('automation');
122
+ const exportService = await services.resolve<ExportService>('ExportService');
123
+
124
+ import { registerLicensedRoutes } from '@corelicense/node';
125
+ registerLicensedRoutes(app, modules, [
126
+ { path: '/automation', module: 'automation', router: automationRouter },
127
+ ]);
128
+ ```
129
+
130
+ `get()` và `resolve()` gọi `requireFeature` mỗi lần truy cập — revoke/suspend chặn ngay. Đổi feature trong policy vẫn cần **restart** để bind/unbind module mới.
131
+
132
+ Xem [Tích hợp sâu](https://corelicense.net/docs/nodejs-sdk/deep-integration) trên docs site.
133
+
134
+ ## Xử lý lỗi
135
+
136
+ Mọi lỗi SDK đều có `code` (mã định vị) và `source` (module SDK phát sinh):
137
+
138
+ ```ts
139
+ import { isLicenseError, formatLicenseError, LicenseErrorCode } from '@corelicense/node';
140
+
141
+ try {
142
+ await license.boot();
143
+ } catch (error) {
144
+ if (isLicenseError(error)) {
145
+ console.error(error.code, error.source); // e.g. CONFIG_MISSING_ENV, load-options-from-env
146
+ }
147
+ }
148
+ ```
149
+
150
+ Dùng `error.toJSON()` hoặc `formatLicenseError(error)` khi trả lỗi qua HTTP API.
151
+
152
+ ## Production deploy
153
+
154
+ **SDK:** `cd SDK/corelicense-node && npm test && npm run build && npm publish --access public`
155
+
156
+ **API (Go):** deploy backend với `SDK_PUBLIC_URL=https://api.corelicense.net`, policy signer configured, và `APP_ENV=production`. Production validate yêu cầu HTTPS URL (không localhost) và secrets không dùng `change-me`.
95
157
 
96
158
  ## Cấu trúc module
97
159
 
@@ -118,7 +180,12 @@ Xem [CoreLicense Node.js SDK — Tài liệu thiết kế & tích hợp sâu](..
118
180
 
119
181
  - **v0.1** — Types, errors, boot, express middleware, file cache, local audit
120
182
  - **v0.2** — Auto-fetch public keys, key rotation retry, worker/CLI guard, offline grace
121
- - **v0.3** — Fastify, NestJS, module registry helper, quota usage
183
+ - **v0.3** — Production default URL, activate flow, revoke handling, server contract sync
184
+ - **v0.4** — Licensed module registry, DI container, Express routes, NestJS `@RequireFeature`
185
+ - **v0.4.1** — Runtime re-check license trên `get()` / `resolve()`, fix `ModuleNotLicensedError` status
186
+ - **v0.4.2** — Mã lỗi (`code`) + `source` trên mọi `LicenseError`, `LicenseErrorCode`, `formatLicenseError()`
187
+ - **v0.4.3** — Re-check registry/DI không ghi audit; middleware 403 trả `source` qua `toClientPayload()`
188
+ - **v0.5.0** — Fail-closed offline boot, quota/limit gates, apiUrl pin, Nest 403 filter, sync mutex
122
189
  - **v1.0** — Stable API, production-ready, security review
123
190
 
124
191
  ## License
@@ -1,4 +1,4 @@
1
- import type { LicenseCheckRequest, LicenseCheckResponse } from '../types/options.js';
1
+ import type { LicenseActivateRequest, LicenseCheckRequest, LicenseCheckResponse } from '../types/options.js';
2
2
  export interface LicenseApiClientOptions {
3
3
  apiUrl: string;
4
4
  requestTimeoutMs?: number;
@@ -6,9 +6,10 @@ export interface LicenseApiClientOptions {
6
6
  export declare class LicenseApiClient {
7
7
  private readonly options;
8
8
  constructor(options: LicenseApiClientOptions);
9
- activate(request: LicenseCheckRequest): Promise<LicenseCheckResponse>;
9
+ activate(request: LicenseActivateRequest): Promise<LicenseCheckResponse>;
10
10
  check(request: LicenseCheckRequest): Promise<LicenseCheckResponse>;
11
11
  refresh(request: LicenseCheckRequest): Promise<LicenseCheckResponse>;
12
+ private postWithRetry;
12
13
  private post;
13
14
  }
14
15
  //# sourceMappingURL=license-api-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"license-api-client.d.ts","sourceRoot":"","sources":["../../src/client/license-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAErF,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,uBAAuB;IAEvD,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIrE,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIlE,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAI5D,IAAI;CA4BnB"}
1
+ {"version":3,"file":"license-api-client.d.ts","sourceRoot":"","sources":["../../src/client/license-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAK7B,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,uBAAuB;IAEvD,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIxE,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIlE,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAI5D,aAAa;YAuBb,IAAI;CA+CnB"}
@@ -1,16 +1,36 @@
1
+ import { LicenseApiError } from '../errors/api-error.js';
2
+ import { LicenseErrorCode } from '../errors/codes.js';
3
+ import { LicenseRateLimitError } from '../errors/license-error.js';
4
+ const RETRY_DELAYS_MS = [1000, 3000];
1
5
  export class LicenseApiClient {
2
6
  options;
3
7
  constructor(options) {
4
8
  this.options = options;
5
9
  }
6
10
  async activate(request) {
7
- return this.post('/v1/client/activate', request);
11
+ return this.postWithRetry('/v1/client/activate', request);
8
12
  }
9
13
  async check(request) {
10
- return this.post('/v1/client/check', request);
14
+ return this.postWithRetry('/v1/client/check', request);
11
15
  }
12
16
  async refresh(request) {
13
- return this.post('/v1/client/refresh', request);
17
+ return this.postWithRetry('/v1/client/refresh', request);
18
+ }
19
+ async postWithRetry(path, body) {
20
+ let lastError;
21
+ for (let attempt = 0; attempt <= RETRY_DELAYS_MS.length; attempt++) {
22
+ try {
23
+ return await this.post(path, body);
24
+ }
25
+ catch (error) {
26
+ lastError = error;
27
+ if (!(error instanceof LicenseRateLimitError) || attempt >= RETRY_DELAYS_MS.length) {
28
+ throw error;
29
+ }
30
+ await sleep(RETRY_DELAYS_MS[attempt] ?? 3000);
31
+ }
32
+ }
33
+ throw lastError;
14
34
  }
15
35
  async post(path, body) {
16
36
  const url = new URL(path, this.options.apiUrl);
@@ -23,14 +43,34 @@ export class LicenseApiClient {
23
43
  body: JSON.stringify(body),
24
44
  signal: controller.signal,
25
45
  });
46
+ if (response.status === 429) {
47
+ throw new LicenseRateLimitError();
48
+ }
26
49
  if (!response.ok) {
27
- throw new Error(`License API error: ${response.status} ${response.statusText}`);
50
+ throw new LicenseApiError(`License API error: ${response.status} ${response.statusText}`, {
51
+ httpStatus: response.status,
52
+ });
28
53
  }
29
54
  return (await response.json());
30
55
  }
56
+ catch (error) {
57
+ if (error instanceof LicenseRateLimitError || error instanceof LicenseApiError) {
58
+ throw error;
59
+ }
60
+ if (error instanceof Error && error.name === 'AbortError') {
61
+ throw new LicenseApiError('License API request timed out', {
62
+ code: LicenseErrorCode.LICENSE_API_TIMEOUT,
63
+ cause: error,
64
+ });
65
+ }
66
+ throw new LicenseApiError('License API request failed', { cause: error });
67
+ }
31
68
  finally {
32
69
  clearTimeout(timeout);
33
70
  }
34
71
  }
35
72
  }
73
+ function sleep(ms) {
74
+ return new Promise((resolve) => setTimeout(resolve, ms));
75
+ }
36
76
  //# sourceMappingURL=license-api-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"license-api-client.js","sourceRoot":"","sources":["../../src/client/license-api-client.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;IAAG,CAAC;IAEjE,KAAK,CAAC,QAAQ,CAAC,OAA4B;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAA4B;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA4B;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAEO,KAAK,CAAC,IAAI,CAChB,IAAY,EACZ,IAAyB;QAEzB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,CACtC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAClF,CAAC;YAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;QACzD,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"license-api-client.js","sourceRoot":"","sources":["../../src/client/license-api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { LicenseCheckResponse } from '../types/options.js';
2
+ import { LicenseError } from '../errors/license-error.js';
3
+ export declare function isTerminalClientResponse(response: LicenseCheckResponse): boolean;
4
+ export declare function mapClientError(response: LicenseCheckResponse): LicenseError;
5
+ //# sourceMappingURL=map-client-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-client-error.d.ts","sourceRoot":"","sources":["../../src/client/map-client-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAEL,YAAY,EAMb,MAAM,4BAA4B,CAAC;AAyBpC,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAUhF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,oBAAoB,GAAG,YAAY,CAgC3E"}
@@ -0,0 +1,63 @@
1
+ import { InstanceBlockedError, LicenseExpiredError, LicenseInvalidError, LicenseRevokedError, LicenseSuspendedError, MaxInstancesError, } from '../errors/license-error.js';
2
+ import { PolicySignatureError } from '../errors/policy-error.js';
3
+ const TERMINAL_STATUSES = new Set([
4
+ 'revoked',
5
+ 'suspended',
6
+ 'expired',
7
+ 'invalid',
8
+ 'blocked',
9
+ 'grace_expired',
10
+ ]);
11
+ const TERMINAL_CODES = new Set([
12
+ 'LICENSE_REVOKED',
13
+ 'LICENSE_SUSPENDED',
14
+ 'LICENSE_EXPIRED',
15
+ 'LICENSE_INVALID',
16
+ 'INVALID_LICENSE',
17
+ 'INVALID_PRODUCT',
18
+ 'INSTANCE_BLOCKED',
19
+ 'MAX_INSTANCES',
20
+ 'POLICY_SIGN_FAILED',
21
+ 'LICENSE_NOT_STARTED',
22
+ ]);
23
+ export function isTerminalClientResponse(response) {
24
+ if (response.ok) {
25
+ return false;
26
+ }
27
+ if (response.code && TERMINAL_CODES.has(response.code)) {
28
+ return true;
29
+ }
30
+ return TERMINAL_STATUSES.has(response.status);
31
+ }
32
+ export function mapClientError(response) {
33
+ const message = response.message ?? 'License check failed';
34
+ switch (response.code) {
35
+ case 'LICENSE_REVOKED':
36
+ return new LicenseRevokedError(message);
37
+ case 'LICENSE_SUSPENDED':
38
+ return new LicenseSuspendedError(message);
39
+ case 'LICENSE_EXPIRED':
40
+ return new LicenseExpiredError(message);
41
+ case 'INSTANCE_BLOCKED':
42
+ return new InstanceBlockedError(message);
43
+ case 'MAX_INSTANCES':
44
+ return new MaxInstancesError(message);
45
+ case 'POLICY_SIGN_FAILED':
46
+ return new PolicySignatureError(message, {
47
+ source: 'map-client-error',
48
+ });
49
+ default:
50
+ break;
51
+ }
52
+ switch (response.status) {
53
+ case 'revoked':
54
+ return new LicenseRevokedError(message);
55
+ case 'suspended':
56
+ return new LicenseSuspendedError(message);
57
+ case 'expired':
58
+ return new LicenseExpiredError(message);
59
+ default:
60
+ return new LicenseInvalidError(message);
61
+ }
62
+ }
63
+ //# sourceMappingURL=map-client-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-client-error.js","sourceRoot":"","sources":["../../src/client/map-client-error.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EAEpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,SAAS;IACT,WAAW;IACX,SAAS;IACT,SAAS;IACT,SAAS;IACT,eAAe;CAChB,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,oBAAoB;IACpB,qBAAqB;CACtB,CAAC,CAAC;AAEH,MAAM,UAAU,wBAAwB,CAAC,QAA8B;IACrE,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAA8B;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,sBAAsB,CAAC;IAE3D,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,iBAAiB;YACpB,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,mBAAmB;YACtB,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC5C,KAAK,iBAAiB;YACpB,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,kBAAkB;YACrB,OAAO,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC3C,KAAK,eAAe;YAClB,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,oBAAoB;YACvB,OAAO,IAAI,oBAAoB,CAAC,OAAO,EAAE;gBACvC,MAAM,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACL;YACE,MAAM;IACV,CAAC;IAED,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxB,KAAK,SAAS;YACZ,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,WAAW;YACd,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC5C,KAAK,SAAS;YACZ,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C;YACE,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"public-keys-client.d.ts","sourceRoot":"","sources":["../../src/client/public-keys-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,uBAAuB;IAEvD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA8BxE"}
1
+ {"version":3,"file":"public-keys-client.d.ts","sourceRoot":"","sources":["../../src/client/public-keys-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAInE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,uBAAuB;IAEvD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA+CxE"}
@@ -1,3 +1,5 @@
1
+ import { PublicKeysError } from '../errors/api-error.js';
2
+ import { LicenseErrorCode } from '../errors/codes.js';
1
3
  export class PublicKeysClient {
2
4
  options;
3
5
  constructor(options) {
@@ -15,14 +17,30 @@ export class PublicKeysClient {
15
17
  signal: controller.signal,
16
18
  });
17
19
  if (!response.ok) {
18
- throw new Error(`Public keys API error: ${response.status} ${response.statusText}`);
20
+ throw new PublicKeysError(`Public keys API error: ${response.status} ${response.statusText}`, {
21
+ httpStatus: response.status,
22
+ });
19
23
  }
20
24
  const data = (await response.json());
21
25
  if (!data.keys?.length) {
22
- throw new Error('Public keys API returned no keys');
26
+ throw new PublicKeysError('Public keys API returned no keys', {
27
+ code: LicenseErrorCode.PUBLIC_KEYS_EMPTY,
28
+ });
23
29
  }
24
30
  return data;
25
31
  }
32
+ catch (error) {
33
+ if (error instanceof PublicKeysError) {
34
+ throw error;
35
+ }
36
+ if (error instanceof Error && error.name === 'AbortError') {
37
+ throw new PublicKeysError('Public keys API request timed out', {
38
+ code: LicenseErrorCode.LICENSE_API_TIMEOUT,
39
+ cause: error,
40
+ });
41
+ }
42
+ throw new PublicKeysError('Public keys API request failed', { cause: error });
43
+ }
26
44
  finally {
27
45
  clearTimeout(timeout);
28
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"public-keys-client.js","sourceRoot":"","sources":["../../src/client/public-keys-client.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;IAAG,CAAC;IAEjE,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QACtC,MAAM,IAAI,GAAG,uBAAuB,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC;QACzE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,CACtC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;gBACvC,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACtF,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"public-keys-client.js","sourceRoot":"","sources":["../../src/client/public-keys-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAOtD,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;IAAG,CAAC;IAEjE,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QACtC,MAAM,IAAI,GAAG,uBAAuB,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC;QACzE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,CACtC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;gBACvC,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,eAAe,CAAC,0BAA0B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE;oBAC5F,UAAU,EAAE,QAAQ,CAAC,MAAM;iBAC5B,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBACvB,MAAM,IAAI,eAAe,CAAC,kCAAkC,EAAE;oBAC5D,IAAI,EAAE,gBAAgB,CAAC,iBAAiB;iBACzC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACrC,MAAM,KAAK,CAAC;YACd,CAAC;YAED,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1D,MAAM,IAAI,eAAe,CAAC,mCAAmC,EAAE;oBAC7D,IAAI,EAAE,gBAAgB,CAAC,mBAAmB;oBAC1C,KAAK,EAAE,KAAK;iBACb,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAI,eAAe,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
@@ -1,9 +1,12 @@
1
1
  import type { RequestHandler } from 'express';
2
2
  import type { FastifyPluginAsync } from 'fastify';
3
+ import { LicensedModuleRegistry } from './runtime/licensed-module-registry.js';
4
+ import { LicensedServiceContainer } from './runtime/licensed-service-container.js';
3
5
  import type { CoreLicenseEvent, CoreLicenseEventHandler, CoreLicenseOptions, ExpressGuardOptions, FastifyGuardOptions } from './types/options.js';
4
6
  import type { Policy } from './types/policy.js';
5
7
  import type { RuntimeConfig } from './types/runtime.js';
6
8
  import type { LicenseStatus } from './types/status.js';
9
+ import type { BootstrapResult, ModuleDefinition, ServiceDefinition } from './types/bootstrap.js';
7
10
  export declare class CoreLicense {
8
11
  private options;
9
12
  private readonly cache;
@@ -18,16 +21,25 @@ export declare class CoreLicense {
18
21
  private runtimeConfig;
19
22
  private backgroundTimer;
20
23
  private booted;
24
+ private syncChain;
25
+ private readonly trustedApiUrl;
21
26
  constructor(options: CoreLicenseOptions);
22
27
  boot(): Promise<void>;
23
28
  refresh(): Promise<LicenseStatus>;
24
29
  requireActive(): Promise<void>;
25
30
  requireFeature(feature: string): Promise<void>;
31
+ private ensureFeature;
26
32
  checkLimit(limitName: string, currentValue: number): Promise<void>;
27
33
  consumeQuota(quotaName: string, amount?: number): Promise<void>;
28
34
  getStatus(): Promise<LicenseStatus>;
29
35
  getPolicy(): Promise<Policy>;
30
36
  getRuntimeConfig(): Promise<RuntimeConfig>;
37
+ createLicensedRegistry(): LicensedModuleRegistry;
38
+ createLicensedContainer(): LicensedServiceContainer;
39
+ bootstrap(options?: {
40
+ modules?: ModuleDefinition[];
41
+ services?: ServiceDefinition[];
42
+ }): Promise<BootstrapResult>;
31
43
  express(options?: ExpressGuardOptions): RequestHandler;
32
44
  fastifyPlugin(options?: FastifyGuardOptions): FastifyPluginAsync;
33
45
  guardWorker(name: string): Promise<void>;
@@ -38,13 +50,19 @@ export declare class CoreLicense {
38
50
  private ensureBooted;
39
51
  private resolveStatus;
40
52
  private shouldRefreshToken;
41
- private refreshFromServer;
53
+ private syncFromServer;
54
+ private performSyncFromServer;
55
+ private callClientEndpoint;
56
+ private handleClientResponse;
57
+ private invalidatePolicy;
58
+ private updateCheckInterval;
42
59
  private handleOfflineFallback;
43
60
  private applyPolicyToken;
44
61
  private verifyTokenWithResolver;
45
62
  private verifyWithResolvedKeys;
46
63
  private validatePolicyBinding;
47
64
  private buildCheckRequest;
65
+ private buildActivateRequest;
48
66
  private getUsage;
49
67
  private runBackgroundRefresh;
50
68
  private createApiClient;
@@ -1 +1 @@
1
- {"version":3,"file":"core-license.d.ts","sourceRoot":"","sources":["../src/core-license.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AA+BlD,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAsB,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvD,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAG2B;IAE1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IAEpD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,kBAAkB;IAwBjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA8CrB,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAKjC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB9B,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9C,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB1D,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;IAKnC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAU5B,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;IAUhD,OAAO,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,cAAc;IAItD,aAAa,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,kBAAkB;IAI1D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,oBAAoB,IAAI,IAAI;IAc5B,mBAAmB,IAAI,IAAI;IAO3B,EAAE,CAAC,CAAC,SAAS,gBAAgB,EAC3B,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,uBAAuB,GAC/B,IAAI;IAIP,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;IAiCrB,OAAO,CAAC,kBAAkB;YAUZ,iBAAiB;YAuBjB,qBAAqB;YAgBrB,gBAAgB;YA0ChB,uBAAuB;YAmBvB,sBAAsB;IASpC,OAAO,CAAC,qBAAqB;YAcf,iBAAiB;YAmBjB,QAAQ;YAaR,oBAAoB;IAWlC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,uBAAuB;YAajB,iBAAiB;YASjB,yBAAyB;IAavC,OAAO,CAAC,SAAS;CAKlB"}
1
+ {"version":3,"file":"core-license.d.ts","sourceRoot":"","sources":["../src/core-license.ts"],"names":[],"mappings":"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"}