@corelicense/node 0.2.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.
- package/README.md +126 -0
- package/dist/audit/local-audit.d.ts +22 -0
- package/dist/audit/local-audit.d.ts.map +1 -0
- package/dist/audit/local-audit.js +21 -0
- package/dist/audit/local-audit.js.map +1 -0
- package/dist/cache/cache-store.d.ts +8 -0
- package/dist/cache/cache-store.d.ts.map +1 -0
- package/dist/cache/cache-store.js +2 -0
- package/dist/cache/cache-store.js.map +1 -0
- package/dist/cache/file-cache-store.d.ts +12 -0
- package/dist/cache/file-cache-store.d.ts.map +1 -0
- package/dist/cache/file-cache-store.js +64 -0
- package/dist/cache/file-cache-store.js.map +1 -0
- package/dist/cache/memory-cache-store.d.ts +9 -0
- package/dist/cache/memory-cache-store.d.ts.map +1 -0
- package/dist/cache/memory-cache-store.js +17 -0
- package/dist/cache/memory-cache-store.js.map +1 -0
- package/dist/client/license-api-client.d.ts +14 -0
- package/dist/client/license-api-client.d.ts.map +1 -0
- package/dist/client/license-api-client.js +36 -0
- package/dist/client/license-api-client.js.map +1 -0
- package/dist/client/public-keys-client.d.ts +11 -0
- package/dist/client/public-keys-client.d.ts.map +1 -0
- package/dist/client/public-keys-client.js +31 -0
- package/dist/client/public-keys-client.js.map +1 -0
- package/dist/core-license.d.ts +56 -0
- package/dist/core-license.d.ts.map +1 -0
- package/dist/core-license.js +411 -0
- package/dist/core-license.js.map +1 -0
- package/dist/crypto/key-loader.d.ts +4 -0
- package/dist/crypto/key-loader.d.ts.map +1 -0
- package/dist/crypto/key-loader.js +19 -0
- package/dist/crypto/key-loader.js.map +1 -0
- package/dist/crypto/public-key-resolver.d.ts +16 -0
- package/dist/crypto/public-key-resolver.d.ts.map +1 -0
- package/dist/crypto/public-key-resolver.js +61 -0
- package/dist/crypto/public-key-resolver.js.map +1 -0
- package/dist/crypto/verify-policy-token.d.ts +7 -0
- package/dist/crypto/verify-policy-token.d.ts.map +1 -0
- package/dist/crypto/verify-policy-token.js +47 -0
- package/dist/crypto/verify-policy-token.js.map +1 -0
- package/dist/env/load-options-from-env.d.ts +7 -0
- package/dist/env/load-options-from-env.d.ts.map +1 -0
- package/dist/env/load-options-from-env.js +34 -0
- package/dist/env/load-options-from-env.js.map +1 -0
- package/dist/env/resolve-api-url.d.ts +12 -0
- package/dist/env/resolve-api-url.d.ts.map +1 -0
- package/dist/env/resolve-api-url.js +44 -0
- package/dist/env/resolve-api-url.js.map +1 -0
- package/dist/errors/feature-error.d.ts +6 -0
- package/dist/errors/feature-error.d.ts.map +1 -0
- package/dist/errors/feature-error.js +10 -0
- package/dist/errors/feature-error.js.map +1 -0
- package/dist/errors/index.d.ts +5 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +5 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/license-error.d.ts +22 -0
- package/dist/errors/license-error.d.ts.map +1 -0
- package/dist/errors/license-error.js +41 -0
- package/dist/errors/license-error.js.map +1 -0
- package/dist/errors/policy-error.d.ts +5 -0
- package/dist/errors/policy-error.d.ts.map +1 -0
- package/dist/errors/policy-error.js +8 -0
- package/dist/errors/policy-error.js.map +1 -0
- package/dist/errors/quota-error.d.ts +8 -0
- package/dist/errors/quota-error.d.ts.map +1 -0
- package/dist/errors/quota-error.js +14 -0
- package/dist/errors/quota-error.js.map +1 -0
- package/dist/events/event-bus.d.ts +17 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +21 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/guards/cli-guard.d.ts +3 -0
- package/dist/guards/cli-guard.d.ts.map +1 -0
- package/dist/guards/cli-guard.js +22 -0
- package/dist/guards/cli-guard.js.map +1 -0
- package/dist/guards/express-middleware.d.ts +5 -0
- package/dist/guards/express-middleware.d.ts.map +1 -0
- package/dist/guards/express-middleware.js +27 -0
- package/dist/guards/express-middleware.js.map +1 -0
- package/dist/guards/fastify-plugin.d.ts +9 -0
- package/dist/guards/fastify-plugin.d.ts.map +1 -0
- package/dist/guards/fastify-plugin.js +32 -0
- package/dist/guards/fastify-plugin.js.map +1 -0
- package/dist/guards/feature-guard.d.ts +3 -0
- package/dist/guards/feature-guard.d.ts.map +1 -0
- package/dist/guards/feature-guard.js +18 -0
- package/dist/guards/feature-guard.js.map +1 -0
- package/dist/guards/nest-guard.d.ts +8 -0
- package/dist/guards/nest-guard.d.ts.map +1 -0
- package/dist/guards/nest-guard.js +11 -0
- package/dist/guards/nest-guard.js.map +1 -0
- package/dist/guards/nest-module.d.ts +6 -0
- package/dist/guards/nest-module.d.ts.map +1 -0
- package/dist/guards/nest-module.js +21 -0
- package/dist/guards/nest-module.js.map +1 -0
- package/dist/guards/quota-guard.d.ts +7 -0
- package/dist/guards/quota-guard.d.ts.map +1 -0
- package/dist/guards/quota-guard.js +24 -0
- package/dist/guards/quota-guard.js.map +1 -0
- package/dist/guards/worker-guard.d.ts +3 -0
- package/dist/guards/worker-guard.d.ts.map +1 -0
- package/dist/guards/worker-guard.js +23 -0
- package/dist/guards/worker-guard.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/instance/install-id.d.ts +9 -0
- package/dist/instance/install-id.d.ts.map +1 -0
- package/dist/instance/install-id.js +27 -0
- package/dist/instance/install-id.js.map +1 -0
- package/dist/instance/instance-id.d.ts +9 -0
- package/dist/instance/instance-id.d.ts.map +1 -0
- package/dist/instance/instance-id.js +21 -0
- package/dist/instance/instance-id.js.map +1 -0
- package/dist/runtime/module-registry.d.ts +8 -0
- package/dist/runtime/module-registry.d.ts.map +1 -0
- package/dist/runtime/module-registry.js +19 -0
- package/dist/runtime/module-registry.js.map +1 -0
- package/dist/runtime/runtime-config.d.ts +4 -0
- package/dist/runtime/runtime-config.d.ts.map +1 -0
- package/dist/runtime/runtime-config.js +41 -0
- package/dist/runtime/runtime-config.js.map +1 -0
- package/dist/runtime/service-container.d.ts +9 -0
- package/dist/runtime/service-container.d.ts.map +1 -0
- package/dist/runtime/service-container.js +17 -0
- package/dist/runtime/service-container.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/limits.d.ts +11 -0
- package/dist/types/limits.d.ts.map +1 -0
- package/dist/types/limits.js +2 -0
- package/dist/types/limits.js.map +1 -0
- package/dist/types/options.d.ts +62 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/options.js +2 -0
- package/dist/types/options.js.map +1 -0
- package/dist/types/policy.d.ts +41 -0
- package/dist/types/policy.d.ts.map +1 -0
- package/dist/types/policy.js +2 -0
- package/dist/types/policy.js.map +1 -0
- package/dist/types/public-keys.d.ts +19 -0
- package/dist/types/public-keys.d.ts.map +1 -0
- package/dist/types/public-keys.js +2 -0
- package/dist/types/public-keys.js.map +1 -0
- package/dist/types/runtime.d.ts +11 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/runtime.js +2 -0
- package/dist/types/runtime.js.map +1 -0
- package/dist/types/status.d.ts +14 -0
- package/dist/types/status.d.ts.map +1 -0
- package/dist/types/status.js +2 -0
- package/dist/types/status.js.map +1 -0
- package/package.json +74 -0
package/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# @corelicense/node
|
|
2
|
+
|
|
3
|
+
CoreLicense Node.js SDK — runtime license và policy layer cho ứng dụng Node.js.
|
|
4
|
+
|
|
5
|
+
> **Trạng thái:** v0.2 — auto-fetch public key, offline grace, key rotation retry.
|
|
6
|
+
|
|
7
|
+
## Triết lý
|
|
8
|
+
|
|
9
|
+
CoreLicense không chỉ là middleware. SDK được thiết kế như một **Runtime Layer** nằm sâu trong bootstrap, runtime config, module registry, service guard, worker/CLI guard và quota enforcement.
|
|
10
|
+
|
|
11
|
+
## Cài đặt
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @corelicense/node
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Peer dependencies tùy chọn (chỉ cài khi dùng integration tương ứng):
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install express # Express middleware
|
|
21
|
+
npm install fastify # Fastify plugin
|
|
22
|
+
npm install @nestjs/common # NestJS module/guard
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Quick start
|
|
26
|
+
|
|
27
|
+
Chỉ cần **2 biến môi trường** — license key mới (CL1.*) đã nhúng domain license server:
|
|
28
|
+
|
|
29
|
+
```env
|
|
30
|
+
CORELICENSE_KEY=CL1.xxxxx.CL-AAAAA-BBBBB-...
|
|
31
|
+
CORELICENSE_PRODUCT_ID=demo
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`CORELICENSE_PUBLIC_KEY` **optional** — pin public key (enterprise / air-gapped).
|
|
35
|
+
`CORELICENSE_API_URL` **optional** — override thủ công (legacy key hoặc dev).
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import express from 'express';
|
|
39
|
+
import { CoreLicense, loadOptionsFromEnv } from '@corelicense/node';
|
|
40
|
+
|
|
41
|
+
const app = express();
|
|
42
|
+
|
|
43
|
+
const license = new CoreLicense(loadOptionsFromEnv({
|
|
44
|
+
cachePath: './storage/corelicense',
|
|
45
|
+
instance: {
|
|
46
|
+
strategy: 'install-id-domain-hash',
|
|
47
|
+
domain: process.env.APP_DOMAIN,
|
|
48
|
+
},
|
|
49
|
+
}));
|
|
50
|
+
|
|
51
|
+
async function main() {
|
|
52
|
+
await license.boot();
|
|
53
|
+
|
|
54
|
+
app.use(license.express({
|
|
55
|
+
allowPaths: ['/health', '/license/status'],
|
|
56
|
+
}));
|
|
57
|
+
|
|
58
|
+
app.get('/license/status', async (_req, res) => {
|
|
59
|
+
res.json(await license.getStatus());
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
app.listen(3000);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
main().catch(console.error);
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Pin public key (optional)
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
const license = new CoreLicense(loadOptionsFromEnv({
|
|
72
|
+
publicKey: process.env.CORELICENSE_PUBLIC_KEY, // pinned mode
|
|
73
|
+
}));
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Khi pin, SDK không fetch keys từ server. Nếu verify fail sau key rotation, cập nhật `CORELICENSE_PUBLIC_KEY` thủ công.
|
|
77
|
+
|
|
78
|
+
## Public API
|
|
79
|
+
|
|
80
|
+
| Method | Mô tả |
|
|
81
|
+
|--------|-------|
|
|
82
|
+
| `boot()` | Khởi tạo SDK, fetch/cache public keys, load cache, verify token |
|
|
83
|
+
| `refresh()` | Refresh policy token từ server |
|
|
84
|
+
| `requireActive()` | Yêu cầu license active |
|
|
85
|
+
| `requireFeature(name)` | Kiểm tra feature flag |
|
|
86
|
+
| `checkLimit(name, value)` | Kiểm tra limit |
|
|
87
|
+
| `consumeQuota(name, amount?)` | Tiêu thụ quota local |
|
|
88
|
+
| `getStatus()` | Trạng thái license hiện tại |
|
|
89
|
+
| `getPolicy()` | Policy đang active |
|
|
90
|
+
| `getRuntimeConfig()` | Runtime config cho app bootstrap |
|
|
91
|
+
| `express(options?)` | Express middleware |
|
|
92
|
+
| `fastifyPlugin(options?)` | Fastify plugin |
|
|
93
|
+
| `guardWorker(name)` | Guard worker |
|
|
94
|
+
| `guardCommand(name)` | Guard CLI/cron command |
|
|
95
|
+
|
|
96
|
+
## Cấu trúc module
|
|
97
|
+
|
|
98
|
+
```txt
|
|
99
|
+
src/
|
|
100
|
+
core-license.ts # Class chính
|
|
101
|
+
types/ # TypeScript interfaces
|
|
102
|
+
errors/ # Error hierarchy
|
|
103
|
+
crypto/ # Policy token verification + public key resolver
|
|
104
|
+
client/ # License API + public keys client
|
|
105
|
+
cache/ # File/memory cache
|
|
106
|
+
instance/ # Instance ID resolution
|
|
107
|
+
guards/ # Express, Fastify, NestJS, worker, CLI
|
|
108
|
+
runtime/ # Runtime config, module registry, DI container
|
|
109
|
+
audit/ # Local audit log
|
|
110
|
+
events/ # Event bus
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Tài liệu thiết kế
|
|
114
|
+
|
|
115
|
+
Xem [CoreLicense Node.js SDK — Tài liệu thiết kế & tích hợp sâu](../../docs/CoreLicense_NodeJS_SDK_Deep_Integration.md).
|
|
116
|
+
|
|
117
|
+
## Roadmap
|
|
118
|
+
|
|
119
|
+
- **v0.1** — Types, errors, boot, express middleware, file cache, local audit
|
|
120
|
+
- **v0.2** — Auto-fetch public keys, key rotation retry, worker/CLI guard, offline grace
|
|
121
|
+
- **v0.3** — Fastify, NestJS, module registry helper, quota usage
|
|
122
|
+
- **v1.0** — Stable API, production-ready, security review
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
|
|
126
|
+
MIT
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface AuditEntry {
|
|
2
|
+
time: string;
|
|
3
|
+
event: string;
|
|
4
|
+
status?: string;
|
|
5
|
+
policyVersion?: string;
|
|
6
|
+
feature?: string;
|
|
7
|
+
quotaName?: string;
|
|
8
|
+
amount?: number;
|
|
9
|
+
total?: number;
|
|
10
|
+
offline?: boolean;
|
|
11
|
+
message?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface LocalAuditOptions {
|
|
14
|
+
enabled?: boolean;
|
|
15
|
+
path?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class LocalAudit {
|
|
18
|
+
private readonly options;
|
|
19
|
+
constructor(options: LocalAuditOptions);
|
|
20
|
+
log(entry: Pick<AuditEntry, 'event'> & Partial<Omit<AuditEntry, 'time' | 'event'>>): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=local-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-audit.d.ts","sourceRoot":"","sources":["../../src/audit/local-audit.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,iBAAiB;IAEjD,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAczG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { appendFile, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
export class LocalAudit {
|
|
4
|
+
options;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.options = options;
|
|
7
|
+
}
|
|
8
|
+
async log(entry) {
|
|
9
|
+
if (this.options.enabled === false) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const path = this.options.path ?? './storage/logs/corelicense.log';
|
|
13
|
+
const record = {
|
|
14
|
+
time: new Date().toISOString(),
|
|
15
|
+
...entry,
|
|
16
|
+
};
|
|
17
|
+
await mkdir(dirname(path), { recursive: true });
|
|
18
|
+
await appendFile(path, `${JSON.stringify(record)}\n`, 'utf8');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=local-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-audit.js","sourceRoot":"","sources":["../../src/audit/local-audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,MAAM,OAAO,UAAU;IACQ;IAA7B,YAA6B,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;IAE3D,KAAK,CAAC,GAAG,CAAC,KAA8E;QACtF,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,gCAAgC,CAAC;QACnE,MAAM,MAAM,GAAe;YACzB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC9B,GAAG,KAAK;SACT,CAAC;QAEF,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type CacheKey = 'policy.token' | 'instance.json' | 'runtime.json' | 'usage.json' | 'public.keys.json' | 'sdk.endpoint.json';
|
|
2
|
+
export interface CacheStore {
|
|
3
|
+
get<T>(key: CacheKey): Promise<T | null>;
|
|
4
|
+
set<T>(key: CacheKey, value: T): Promise<void>;
|
|
5
|
+
delete(key: CacheKey): Promise<void>;
|
|
6
|
+
has(key: CacheKey): Promise<boolean>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=cache-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-store.d.ts","sourceRoot":"","sources":["../../src/cache/cache-store.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,eAAe,GACf,cAAc,GACd,YAAY,GACZ,kBAAkB,GAClB,mBAAmB,CAAC;AAExB,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-store.js","sourceRoot":"","sources":["../../src/cache/cache-store.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CacheKey, CacheStore } from './cache-store.js';
|
|
2
|
+
export declare class FileCacheStore implements CacheStore {
|
|
3
|
+
private readonly basePath;
|
|
4
|
+
constructor(basePath: string);
|
|
5
|
+
private resolvePath;
|
|
6
|
+
private ensureDir;
|
|
7
|
+
get<T>(key: CacheKey): Promise<T | null>;
|
|
8
|
+
set<T>(key: CacheKey, value: T): Promise<void>;
|
|
9
|
+
delete(key: CacheKey): Promise<void>;
|
|
10
|
+
has(key: CacheKey): Promise<boolean>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=file-cache-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-cache-store.d.ts","sourceRoot":"","sources":["../../src/cache/file-cache-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAW7D,qBAAa,cAAe,YAAW,UAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAE7C,OAAO,CAAC,WAAW;YAIL,SAAS;IAIjB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAgBxC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAY9C,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAU3C"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile, unlink, access } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const KEY_TO_FILENAME = {
|
|
4
|
+
'policy.token': 'policy.token',
|
|
5
|
+
'instance.json': 'instance.json',
|
|
6
|
+
'runtime.json': 'runtime.json',
|
|
7
|
+
'usage.json': 'usage.json',
|
|
8
|
+
'public.keys.json': 'public.keys.json',
|
|
9
|
+
'sdk.endpoint.json': 'sdk.endpoint.json',
|
|
10
|
+
};
|
|
11
|
+
export class FileCacheStore {
|
|
12
|
+
basePath;
|
|
13
|
+
constructor(basePath) {
|
|
14
|
+
this.basePath = basePath;
|
|
15
|
+
}
|
|
16
|
+
resolvePath(key) {
|
|
17
|
+
return join(this.basePath, KEY_TO_FILENAME[key]);
|
|
18
|
+
}
|
|
19
|
+
async ensureDir() {
|
|
20
|
+
await mkdir(this.basePath, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
async get(key) {
|
|
23
|
+
const filePath = this.resolvePath(key);
|
|
24
|
+
try {
|
|
25
|
+
const raw = await readFile(filePath, 'utf8');
|
|
26
|
+
if (key === 'policy.token') {
|
|
27
|
+
return raw;
|
|
28
|
+
}
|
|
29
|
+
return JSON.parse(raw);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async set(key, value) {
|
|
36
|
+
await this.ensureDir();
|
|
37
|
+
const filePath = this.resolvePath(key);
|
|
38
|
+
if (key === 'policy.token') {
|
|
39
|
+
await writeFile(filePath, String(value), 'utf8');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
await writeFile(filePath, JSON.stringify(value, null, 2), 'utf8');
|
|
43
|
+
}
|
|
44
|
+
async delete(key) {
|
|
45
|
+
const filePath = this.resolvePath(key);
|
|
46
|
+
try {
|
|
47
|
+
await unlink(filePath);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// ignore missing file
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async has(key) {
|
|
54
|
+
const filePath = this.resolvePath(key);
|
|
55
|
+
try {
|
|
56
|
+
await access(filePath);
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=file-cache-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-cache-store.js","sourceRoot":"","sources":["../../src/cache/file-cache-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,eAAe,GAA6B;IAChD,cAAc,EAAE,cAAc;IAC9B,eAAe,EAAE,eAAe;IAChC,cAAc,EAAE,cAAc;IAC9B,YAAY,EAAE,YAAY;IAC1B,kBAAkB,EAAE,kBAAkB;IACtC,mBAAmB,EAAE,mBAAmB;CACzC,CAAC;AAEF,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEzC,WAAW,CAAC,GAAa;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAa;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE7C,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;gBAC3B,OAAO,GAAQ,CAAC;YAClB,CAAC;YAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAa,EAAE,KAAQ;QAClC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;YAC3B,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAa;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAa;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CacheKey, CacheStore } from './cache-store.js';
|
|
2
|
+
export declare class MemoryCacheStore implements CacheStore {
|
|
3
|
+
private readonly store;
|
|
4
|
+
get<T>(key: CacheKey): Promise<T | null>;
|
|
5
|
+
set<T>(key: CacheKey, value: T): Promise<void>;
|
|
6
|
+
delete(key: CacheKey): Promise<void>;
|
|
7
|
+
has(key: CacheKey): Promise<boolean>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=memory-cache-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-cache-store.d.ts","sourceRoot":"","sources":["../../src/cache/memory-cache-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE7D,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IAEhD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAKxC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAG3C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class MemoryCacheStore {
|
|
2
|
+
store = new Map();
|
|
3
|
+
async get(key) {
|
|
4
|
+
const value = this.store.get(key);
|
|
5
|
+
return value !== undefined ? value : null;
|
|
6
|
+
}
|
|
7
|
+
async set(key, value) {
|
|
8
|
+
this.store.set(key, value);
|
|
9
|
+
}
|
|
10
|
+
async delete(key) {
|
|
11
|
+
this.store.delete(key);
|
|
12
|
+
}
|
|
13
|
+
async has(key) {
|
|
14
|
+
return this.store.has(key);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=memory-cache-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-cache-store.js","sourceRoot":"","sources":["../../src/cache/memory-cache-store.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;IACV,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAEtD,KAAK,CAAC,GAAG,CAAI,GAAa;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAE,KAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAa,EAAE,KAAQ;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAa;QACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAa;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { LicenseCheckRequest, LicenseCheckResponse } from '../types/options.js';
|
|
2
|
+
export interface LicenseApiClientOptions {
|
|
3
|
+
apiUrl: string;
|
|
4
|
+
requestTimeoutMs?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare class LicenseApiClient {
|
|
7
|
+
private readonly options;
|
|
8
|
+
constructor(options: LicenseApiClientOptions);
|
|
9
|
+
activate(request: LicenseCheckRequest): Promise<LicenseCheckResponse>;
|
|
10
|
+
check(request: LicenseCheckRequest): Promise<LicenseCheckResponse>;
|
|
11
|
+
refresh(request: LicenseCheckRequest): Promise<LicenseCheckResponse>;
|
|
12
|
+
private post;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=license-api-client.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export class LicenseApiClient {
|
|
2
|
+
options;
|
|
3
|
+
constructor(options) {
|
|
4
|
+
this.options = options;
|
|
5
|
+
}
|
|
6
|
+
async activate(request) {
|
|
7
|
+
return this.post('/v1/client/activate', request);
|
|
8
|
+
}
|
|
9
|
+
async check(request) {
|
|
10
|
+
return this.post('/v1/client/check', request);
|
|
11
|
+
}
|
|
12
|
+
async refresh(request) {
|
|
13
|
+
return this.post('/v1/client/refresh', request);
|
|
14
|
+
}
|
|
15
|
+
async post(path, body) {
|
|
16
|
+
const url = new URL(path, this.options.apiUrl);
|
|
17
|
+
const controller = new AbortController();
|
|
18
|
+
const timeout = setTimeout(() => controller.abort(), this.options.requestTimeoutMs ?? 5000);
|
|
19
|
+
try {
|
|
20
|
+
const response = await fetch(url, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
headers: { 'Content-Type': 'application/json' },
|
|
23
|
+
body: JSON.stringify(body),
|
|
24
|
+
signal: controller.signal,
|
|
25
|
+
});
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
throw new Error(`License API error: ${response.status} ${response.statusText}`);
|
|
28
|
+
}
|
|
29
|
+
return (await response.json());
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
clearTimeout(timeout);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=license-api-client.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ProductKeysResponse } from '../types/public-keys.js';
|
|
2
|
+
export interface PublicKeysClientOptions {
|
|
3
|
+
apiUrl: string;
|
|
4
|
+
requestTimeoutMs?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare class PublicKeysClient {
|
|
7
|
+
private readonly options;
|
|
8
|
+
constructor(options: PublicKeysClientOptions);
|
|
9
|
+
fetchProductKeys(productId: string): Promise<ProductKeysResponse>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=public-keys-client.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export class PublicKeysClient {
|
|
2
|
+
options;
|
|
3
|
+
constructor(options) {
|
|
4
|
+
this.options = options;
|
|
5
|
+
}
|
|
6
|
+
async fetchProductKeys(productId) {
|
|
7
|
+
const path = `/v1/public/products/${encodeURIComponent(productId)}/keys`;
|
|
8
|
+
const url = new URL(path, this.options.apiUrl);
|
|
9
|
+
const controller = new AbortController();
|
|
10
|
+
const timeout = setTimeout(() => controller.abort(), this.options.requestTimeoutMs ?? 5000);
|
|
11
|
+
try {
|
|
12
|
+
const response = await fetch(url, {
|
|
13
|
+
method: 'GET',
|
|
14
|
+
headers: { Accept: 'application/json' },
|
|
15
|
+
signal: controller.signal,
|
|
16
|
+
});
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
throw new Error(`Public keys API error: ${response.status} ${response.statusText}`);
|
|
19
|
+
}
|
|
20
|
+
const data = (await response.json());
|
|
21
|
+
if (!data.keys?.length) {
|
|
22
|
+
throw new Error('Public keys API returned no keys');
|
|
23
|
+
}
|
|
24
|
+
return data;
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
clearTimeout(timeout);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=public-keys-client.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { RequestHandler } from 'express';
|
|
2
|
+
import type { FastifyPluginAsync } from 'fastify';
|
|
3
|
+
import type { CoreLicenseEvent, CoreLicenseEventHandler, CoreLicenseOptions, ExpressGuardOptions, FastifyGuardOptions } from './types/options.js';
|
|
4
|
+
import type { Policy } from './types/policy.js';
|
|
5
|
+
import type { RuntimeConfig } from './types/runtime.js';
|
|
6
|
+
import type { LicenseStatus } from './types/status.js';
|
|
7
|
+
export declare class CoreLicense {
|
|
8
|
+
private options;
|
|
9
|
+
private readonly cache;
|
|
10
|
+
private apiClient;
|
|
11
|
+
private publicKeyResolver;
|
|
12
|
+
private readonly audit;
|
|
13
|
+
private readonly events;
|
|
14
|
+
private readonly installIdStore;
|
|
15
|
+
private instanceId;
|
|
16
|
+
private resolvedProductId;
|
|
17
|
+
private policy;
|
|
18
|
+
private runtimeConfig;
|
|
19
|
+
private backgroundTimer;
|
|
20
|
+
private booted;
|
|
21
|
+
constructor(options: CoreLicenseOptions);
|
|
22
|
+
boot(): Promise<void>;
|
|
23
|
+
refresh(): Promise<LicenseStatus>;
|
|
24
|
+
requireActive(): Promise<void>;
|
|
25
|
+
requireFeature(feature: string): Promise<void>;
|
|
26
|
+
checkLimit(limitName: string, currentValue: number): Promise<void>;
|
|
27
|
+
consumeQuota(quotaName: string, amount?: number): Promise<void>;
|
|
28
|
+
getStatus(): Promise<LicenseStatus>;
|
|
29
|
+
getPolicy(): Promise<Policy>;
|
|
30
|
+
getRuntimeConfig(): Promise<RuntimeConfig>;
|
|
31
|
+
express(options?: ExpressGuardOptions): RequestHandler;
|
|
32
|
+
fastifyPlugin(options?: FastifyGuardOptions): FastifyPluginAsync;
|
|
33
|
+
guardWorker(name: string): Promise<void>;
|
|
34
|
+
guardCommand(name: string): Promise<void>;
|
|
35
|
+
startBackgroundCheck(): void;
|
|
36
|
+
stopBackgroundCheck(): void;
|
|
37
|
+
on<E extends CoreLicenseEvent>(event: E, handler: CoreLicenseEventHandler): void;
|
|
38
|
+
private ensureBooted;
|
|
39
|
+
private resolveStatus;
|
|
40
|
+
private shouldRefreshToken;
|
|
41
|
+
private refreshFromServer;
|
|
42
|
+
private handleOfflineFallback;
|
|
43
|
+
private applyPolicyToken;
|
|
44
|
+
private verifyTokenWithResolver;
|
|
45
|
+
private verifyWithResolvedKeys;
|
|
46
|
+
private validatePolicyBinding;
|
|
47
|
+
private buildCheckRequest;
|
|
48
|
+
private getUsage;
|
|
49
|
+
private runBackgroundRefresh;
|
|
50
|
+
private createApiClient;
|
|
51
|
+
private createPublicKeyResolver;
|
|
52
|
+
private ensureApiEndpoint;
|
|
53
|
+
private persistApiUrlFromResponse;
|
|
54
|
+
private setApiUrl;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=core-license.d.ts.map
|
|
@@ -0,0 +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"}
|