@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.
- package/README.md +9 -2
- package/dist/client/http-error-utils.d.ts +10 -0
- package/dist/client/http-error-utils.d.ts.map +1 -0
- package/dist/client/http-error-utils.js +38 -0
- package/dist/client/http-error-utils.js.map +1 -0
- package/dist/client/license-api-client.d.ts.map +1 -1
- package/dist/client/license-api-client.js +26 -6
- package/dist/client/license-api-client.js.map +1 -1
- package/dist/client/map-client-error.d.ts.map +1 -1
- package/dist/client/map-client-error.js +38 -12
- package/dist/client/map-client-error.js.map +1 -1
- package/dist/client/public-keys-client.d.ts.map +1 -1
- package/dist/client/public-keys-client.js +48 -4
- package/dist/client/public-keys-client.js.map +1 -1
- package/dist/core-license.d.ts +2 -0
- package/dist/core-license.d.ts.map +1 -1
- package/dist/core-license.js +30 -24
- package/dist/core-license.js.map +1 -1
- package/dist/crypto/key-loader.d.ts +1 -1
- package/dist/crypto/key-loader.d.ts.map +1 -1
- package/dist/crypto/key-loader.js +34 -9
- package/dist/crypto/key-loader.js.map +1 -1
- package/dist/env/apply-default-options.d.ts +20 -0
- package/dist/env/apply-default-options.d.ts.map +1 -0
- package/dist/env/apply-default-options.js +80 -0
- package/dist/env/apply-default-options.js.map +1 -0
- package/dist/env/load-options-from-env.d.ts +4 -2
- package/dist/env/load-options-from-env.d.ts.map +1 -1
- package/dist/env/load-options-from-env.js +5 -8
- package/dist/env/load-options-from-env.js.map +1 -1
- package/dist/errors/api-error.d.ts +1 -0
- package/dist/errors/api-error.d.ts.map +1 -1
- package/dist/errors/api-error.js +2 -2
- package/dist/errors/api-error.js.map +1 -1
- package/dist/errors/codes.d.ts +5 -0
- package/dist/errors/codes.d.ts.map +1 -1
- package/dist/errors/codes.js +5 -0
- package/dist/errors/codes.js.map +1 -1
- package/dist/errors/license-error.d.ts +2 -0
- package/dist/errors/license-error.d.ts.map +1 -1
- package/dist/errors/license-error.js +13 -2
- package/dist/errors/license-error.js.map +1 -1
- package/dist/errors/throw-for-status.d.ts.map +1 -1
- package/dist/errors/throw-for-status.js +3 -1
- package/dist/errors/throw-for-status.js.map +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/instance/instance-id.d.ts.map +1 -1
- package/dist/instance/instance-id.js +3 -0
- package/dist/instance/instance-id.js.map +1 -1
- package/dist/instance/persisted-instance.d.ts +9 -0
- package/dist/instance/persisted-instance.d.ts.map +1 -0
- package/dist/instance/persisted-instance.js +17 -0
- package/dist/instance/persisted-instance.js.map +1 -0
- package/dist/types/options.d.ts +3 -1
- package/dist/types/options.d.ts.map +1 -1
- package/dist/types/status.d.ts +1 -1
- package/dist/types/status.d.ts.map +1 -1
- package/docs/api-reference.md +51 -0
- package/docs/installation.md +14 -17
- package/package.json +2 -2
package/docs/api-reference.md
CHANGED
|
@@ -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)
|
package/docs/installation.md
CHANGED
|
@@ -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 | `
|
|
41
|
-
| `CORELICENSE_PUBLIC_KEY` | Pin public key (SPKI PEM)
|
|
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.
|
|
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
|
|
6
|
+
"homepage": "https://corelicense.net",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
9
|
"url": "https://github.com/trailanglc/corelicense.git",
|