@corelicense/node 0.5.1 → 0.5.8

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 (63) hide show
  1. package/README.md +9 -2
  2. package/dist/client/http-error-utils.d.ts +10 -0
  3. package/dist/client/http-error-utils.d.ts.map +1 -0
  4. package/dist/client/http-error-utils.js +38 -0
  5. package/dist/client/http-error-utils.js.map +1 -0
  6. package/dist/client/license-api-client.d.ts.map +1 -1
  7. package/dist/client/license-api-client.js +26 -6
  8. package/dist/client/license-api-client.js.map +1 -1
  9. package/dist/client/map-client-error.d.ts.map +1 -1
  10. package/dist/client/map-client-error.js +38 -12
  11. package/dist/client/map-client-error.js.map +1 -1
  12. package/dist/client/public-keys-client.d.ts.map +1 -1
  13. package/dist/client/public-keys-client.js +48 -4
  14. package/dist/client/public-keys-client.js.map +1 -1
  15. package/dist/core-license.d.ts +2 -0
  16. package/dist/core-license.d.ts.map +1 -1
  17. package/dist/core-license.js +30 -24
  18. package/dist/core-license.js.map +1 -1
  19. package/dist/crypto/key-loader.d.ts +1 -1
  20. package/dist/crypto/key-loader.d.ts.map +1 -1
  21. package/dist/crypto/key-loader.js +34 -9
  22. package/dist/crypto/key-loader.js.map +1 -1
  23. package/dist/env/apply-default-options.d.ts +20 -0
  24. package/dist/env/apply-default-options.d.ts.map +1 -0
  25. package/dist/env/apply-default-options.js +80 -0
  26. package/dist/env/apply-default-options.js.map +1 -0
  27. package/dist/env/load-options-from-env.d.ts +4 -2
  28. package/dist/env/load-options-from-env.d.ts.map +1 -1
  29. package/dist/env/load-options-from-env.js +5 -8
  30. package/dist/env/load-options-from-env.js.map +1 -1
  31. package/dist/errors/api-error.d.ts +1 -0
  32. package/dist/errors/api-error.d.ts.map +1 -1
  33. package/dist/errors/api-error.js +2 -2
  34. package/dist/errors/api-error.js.map +1 -1
  35. package/dist/errors/codes.d.ts +5 -0
  36. package/dist/errors/codes.d.ts.map +1 -1
  37. package/dist/errors/codes.js +5 -0
  38. package/dist/errors/codes.js.map +1 -1
  39. package/dist/errors/license-error.d.ts +2 -0
  40. package/dist/errors/license-error.d.ts.map +1 -1
  41. package/dist/errors/license-error.js +13 -2
  42. package/dist/errors/license-error.js.map +1 -1
  43. package/dist/errors/throw-for-status.d.ts.map +1 -1
  44. package/dist/errors/throw-for-status.js +3 -1
  45. package/dist/errors/throw-for-status.js.map +1 -1
  46. package/dist/index.d.ts +0 -2
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +0 -2
  49. package/dist/index.js.map +1 -1
  50. package/dist/instance/instance-id.d.ts.map +1 -1
  51. package/dist/instance/instance-id.js +3 -0
  52. package/dist/instance/instance-id.js.map +1 -1
  53. package/dist/instance/persisted-instance.d.ts +9 -0
  54. package/dist/instance/persisted-instance.d.ts.map +1 -0
  55. package/dist/instance/persisted-instance.js +17 -0
  56. package/dist/instance/persisted-instance.js.map +1 -0
  57. package/dist/types/options.d.ts +3 -1
  58. package/dist/types/options.d.ts.map +1 -1
  59. package/dist/types/status.d.ts +1 -1
  60. package/dist/types/status.d.ts.map +1 -1
  61. package/docs/api-reference.md +51 -0
  62. package/docs/installation.md +14 -17
  63. package/package.json +2 -2
@@ -180,6 +180,8 @@ Mọi `LicenseError` có `code`, `source`, `message`, `toClientPayload()`, `toJS
180
180
  | `LICENSE_SUSPENDED` | 403 |
181
181
  | `LICENSE_EXPIRED` | 403 |
182
182
  | `LICENSE_INVALID` | 403 |
183
+ | `LICENSE_NOT_FOUND` | 403 |
184
+ | `LICENSE_NOT_STARTED` | 403 |
183
185
  | `OFFLINE_GRACE_EXPIRED` | 403 |
184
186
  | `FEATURE_DISABLED` | 403 |
185
187
  | `MODULE_NOT_LICENSED` | 403 |
@@ -187,6 +189,11 @@ Mọi `LicenseError` có `code`, `source`, `message`, `toClientPayload()`, `toJS
187
189
  | `MAX_INSTANCES` | 403 |
188
190
  | `INSTANCE_BLOCKED` | 403 |
189
191
  | `CONFIG_MISSING_ENV` | — (boot fail) |
192
+ | `PRODUCT_NOT_FOUND` | — (boot fail) |
193
+ | `PUBLIC_KEYS_NOT_PUBLISHED` | — (boot fail) |
194
+ | `PUBLIC_KEYS_FETCH_FAILED` | — (boot fail) |
195
+ | `LICENSE_API_UNREACHABLE` | — (boot fail) |
196
+ | `LICENSE_API_TIMEOUT` | — (boot fail) |
190
197
  | `POLICY_SIGNATURE_ERROR` | — (boot fail) |
191
198
  | `BOOT_NOT_CALLED` | — |
192
199
  | `WORKER_NOT_ALLOWED` | — |
@@ -194,6 +201,50 @@ Mọi `LicenseError` có `code`, `source`, `message`, `toClientPayload()`, `toJS
194
201
 
195
202
  Danh sách đầy đủ trong source: `src/errors/codes.ts`
196
203
 
204
+ `formatLicenseError(error)` trả thêm `retryable` và `httpStatus` (khi có) cho lỗi transport/API.
205
+
206
+ ### Ánh xạ response License Server → SDK
207
+
208
+ **Client API** (`POST /v1/client/*`) — HTTP 200, body `ok: false`:
209
+
210
+ | Server `code` | SDK `code` | Retry? |
211
+ |---------------|------------|--------|
212
+ | `LICENSE_REVOKED` | `LICENSE_REVOKED` | No |
213
+ | `LICENSE_SUSPENDED` | `LICENSE_SUSPENDED` | No |
214
+ | `LICENSE_EXPIRED` | `LICENSE_EXPIRED` | No |
215
+ | `LICENSE_NOT_STARTED` | `LICENSE_NOT_STARTED` | No |
216
+ | `INVALID_PRODUCT` | `PRODUCT_NOT_FOUND` | No |
217
+ | `PRODUCT_NOT_FOUND` | `PRODUCT_NOT_FOUND` | No |
218
+ | `INVALID_LICENSE` | `LICENSE_INVALID` | No |
219
+ | `LICENSE_NOT_FOUND` | `LICENSE_NOT_FOUND` | No |
220
+ | `LICENSE_INVALID` | `LICENSE_INVALID` | No |
221
+ | `INSTANCE_BLOCKED` | `INSTANCE_BLOCKED` | No |
222
+ | `MAX_INSTANCES` | `MAX_INSTANCES` | No |
223
+ | `POLICY_SIGN_FAILED` | `POLICY_SIGNATURE_ERROR` | No |
224
+
225
+ **Public keys** (`GET /v1/public/products/{id}/keys`) — HTTP lỗi, body `{ code, message }`:
226
+
227
+ | Server `code` / HTTP | SDK `code` | Retry? |
228
+ |----------------------|------------|--------|
229
+ | `PRODUCT_NOT_FOUND` / 404 | `PRODUCT_NOT_FOUND` | No |
230
+ | `PUBLIC_KEYS_NOT_PUBLISHED` / 404 | `PUBLIC_KEYS_NOT_PUBLISHED` | No |
231
+ | `NOT_FOUND` / 404 (legacy) | `PUBLIC_KEYS_NOT_PUBLISHED` | No |
232
+ | `RATE_LIMITED` / 429 | `RATE_LIMITED` | Yes |
233
+ | 5xx / 408 | `PUBLIC_KEYS_FETCH_FAILED` | Yes |
234
+ | 4xx khác | `PUBLIC_KEYS_FETCH_FAILED` | No |
235
+ | Network / DNS / refused | `LICENSE_API_UNREACHABLE` | Yes |
236
+ | Timeout | `LICENSE_API_TIMEOUT` | Yes |
237
+
238
+ **License API HTTP lỗi** (400, 502, …) — không phải body `ok: false`:
239
+
240
+ | Trường hợp | SDK `code` | Retry? |
241
+ |------------|------------|--------|
242
+ | 429 | `RATE_LIMITED` | Yes |
243
+ | 5xx / 408 | `LICENSE_API_ERROR` | Yes |
244
+ | 4xx khác | `LICENSE_API_ERROR` | No |
245
+ | Network / DNS / refused | `LICENSE_API_UNREACHABLE` | Yes |
246
+ | Timeout | `LICENSE_API_TIMEOUT` | Yes |
247
+
197
248
  ---
198
249
 
199
250
  ## Client API (License Server)
@@ -33,12 +33,14 @@ SDK không bắt buộc peer deps — tree-shake an toàn nếu chỉ dùng `Cor
33
33
  | `CORELICENSE_KEY` | License key do admin cấp (`CL-...` hoặc `CL1.<base64url-api>.CL-...`) |
34
34
  | `CORELICENSE_PRODUCT_ID` | Product ID trên License Server |
35
35
 
36
- ### Tùy chọn
36
+ ### Tùy chọn (SDK tự xử lý nếu không set)
37
37
 
38
38
  | Biến | Mô tả | Mặc định |
39
39
  |------|--------|----------|
40
- | `CORELICENSE_API_URL` | Override URL License API | `https://api.corelicense.net` |
41
- | `CORELICENSE_PUBLIC_KEY` | Pin public key (SPKI PEM) bỏ qua fetch keys | auto-fetch |
40
+ | `CORELICENSE_API_URL` | Override URL License API | Từ key `CL1.*` hoặc `api.corelicense.net` |
41
+ | `CORELICENSE_PUBLIC_KEY` | Pin public key (SPKI PEM) | Auto-fetch từ server |
42
+ | `CORELICENSE_CACHE_PATH` | Thư mục cache | `~/.cache/corelicense/<scope>` |
43
+ | `APP_DOMAIN` | Domain deploy (instance ID) | `os.hostname()` hoặc URL từ PaaS env |
42
44
 
43
45
  **Thứ tự resolve API URL** (không cần set thủ công trên production):
44
46
 
@@ -72,23 +74,18 @@ Server Go production cần `SDK_PUBLIC_URL=https://api.corelicense.net` khi gene
72
74
  ```ts
73
75
  import { CoreLicense, loadOptionsFromEnv } from '@corelicense/node';
74
76
 
75
- const license = new CoreLicense(
76
- loadOptionsFromEnv({
77
- cachePath: './storage/corelicense',
78
- instance: {
79
- strategy: 'install-id-domain-hash',
80
- domain: process.env.APP_DOMAIN, // ví dụ: app.example.com
81
- },
82
- audit: {
83
- enabled: true,
84
- path: './storage/logs/corelicense.log',
85
- },
86
- }),
87
- );
88
-
77
+ const license = new CoreLicense(loadOptionsFromEnv());
89
78
  await license.boot();
90
79
  ```
91
80
 
81
+ Chỉ cần `CORELICENSE_KEY` + `CORELICENSE_PRODUCT_ID` trong `.env`. SDK tự quyết định:
82
+
83
+ - API URL (từ license key)
84
+ - Public keys (fetch + cache)
85
+ - Cache path ổn định (`~/.cache/corelicense/...`)
86
+ - Instance ID (lưu `install.id` + `instance.json` sau boot thành công)
87
+ - Domain/instance fingerprint (`hostname` hoặc `APP_DOMAIN` nếu có)
88
+
92
89
  `loadOptionsFromEnv()` throw `ConfigError` (`CONFIG_MISSING_ENV`) nếu thiếu biến bắt buộc.
93
90
 
94
91
  ---
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@corelicense/node",
3
- "version": "0.5.1",
3
+ "version": "0.5.8",
4
4
  "description": "CoreLicense Node.js SDK — runtime license and policy layer",
5
5
  "type": "module",
6
- "homepage": "https://corelicense.net/docs/nodejs-sdk/intro",
6
+ "homepage": "https://corelicense.net",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "https://github.com/trailanglc/corelicense.git",