@xemahq/entitlement-client 0.2.0 → 0.2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xemahq/entitlement-client",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "NestJS enforcement point for Xema entitlement. Resolves the installation license offline via @xemahq/license-verifier, gates biome installation and the running edition against it, and projects it onto the platform Edition + feature-flag axis. Fails closed.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Neuralchowder Inc. <developer@xema.dev> (https://xema.dev)",
@@ -39,7 +39,7 @@
39
39
  }
40
40
  },
41
41
  "dependencies": {
42
- "@xemahq/platform-common": "^0.7.0"
42
+ "@xemahq/platform-common": "^0.8.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@nestjs/common": "11.1.13",
@@ -49,8 +49,8 @@
49
49
  "prettier": "3.6.2",
50
50
  "reflect-metadata": "0.2.2",
51
51
  "typescript": "5.9.3",
52
- "@xemahq/kernel-contracts": "^1.2.0",
53
- "@xemahq/license-verifier": "0.1.0"
52
+ "@xemahq/kernel-contracts": "^9.0.1",
53
+ "@xemahq/license-verifier": "0.1.3"
54
54
  },
55
55
  "exports": {
56
56
  ".": {
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=installation-license.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"installation-license.test.d.ts","sourceRoot":"","sources":["../../src/lib/installation-license.test.ts"],"names":[],"mappings":""}
@@ -1,389 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const strict_1 = __importDefault(require("node:assert/strict"));
7
- const node_test_1 = require("node:test");
8
- const entitlement_1 = require("@xemahq/kernel-contracts/entitlement");
9
- const license_verifier_1 = require("@xemahq/license-verifier");
10
- const installation_license_ts_1 = require("./installation-license.ts");
11
- const license_refused_exception_ts_1 = require("./license-refused.exception.ts");
12
- const license_warnings_ts_1 = require("./license-warnings.ts");
13
- const license_testkit_ts_1 = require("./license.testkit.ts");
14
- const authority = (0, license_testkit_ts_1.createTestAuthority)();
15
- const DISTRIBUTION_ID = 'core';
16
- const GRANTED_BIOME = 'knowledge-base';
17
- const UNGRANTED_BIOME = 'managed-llm-economy';
18
- const IN_FORCE = (0, license_testkit_ts_1.at)('2026-06-01T00:00:00.000Z');
19
- const EXPIRED_IN_GRACE = (0, license_testkit_ts_1.at)('2027-02-10T00:00:00.000Z');
20
- const EXPIRED_RESTRICTED = (0, license_testkit_ts_1.at)('2027-02-01T00:00:00.000Z') + license_verifier_1.LICENSE_GRACE_PERIOD_MS + 24 * 60 * 60 * 1000;
21
- async function installationFor(overrides = {}) {
22
- return new installation_license_ts_1.InstallationLicense({
23
- customerLicense: await (0, license_testkit_ts_1.mint)(authority, overrides),
24
- distributionId: DISTRIBUTION_ID,
25
- trustStore: authority.trustStore,
26
- });
27
- }
28
- function refusalOf(outcome) {
29
- strict_1.default.equal(outcome.granted, false, 'expected the gate to refuse');
30
- strict_1.default.ok(!outcome.granted);
31
- return outcome.refusal;
32
- }
33
- function install(installation, biomeId, now) {
34
- return installation.evaluate({
35
- kind: license_verifier_1.EntitlementKind.Biome,
36
- id: biomeId,
37
- action: license_verifier_1.EntitlementAction.Install,
38
- }, { now });
39
- }
40
- function runExisting(installation, biomeId, now) {
41
- return installation.evaluate({
42
- kind: license_verifier_1.EntitlementKind.Biome,
43
- id: biomeId,
44
- action: license_verifier_1.EntitlementAction.RunExisting,
45
- }, { now });
46
- }
47
- (0, node_test_1.test)('an UNPROVISIONED build verifies nothing and grants nothing', async () => {
48
- const installation = new installation_license_ts_1.InstallationLicense({
49
- customerLicense: undefined,
50
- distributionId: DISTRIBUTION_ID,
51
- });
52
- const posture = installation.posture({ now: IN_FORCE });
53
- strict_1.default.equal(posture.licensed, false);
54
- strict_1.default.ok(!posture.licensed);
55
- strict_1.default.equal(posture.code, license_verifier_1.LicenseVerificationFailureCode.TrustStoreEmpty);
56
- strict_1.default.equal(posture.source, license_verifier_1.LicenseSource.EmbeddedOpenSource);
57
- strict_1.default.equal(posture.entitlement.edition, entitlement_1.Edition.Community);
58
- strict_1.default.deepEqual(posture.entitlement.features, {});
59
- strict_1.default.equal(posture.distributionEntitled, false);
60
- strict_1.default.deepEqual(posture.warnings.map((w) => w.code), [license_warnings_ts_1.LicenseWarningCode.Unverifiable]);
61
- strict_1.default.match(posture.remediation, /never provisioned/);
62
- const refusal = refusalOf(install(installation, GRANTED_BIOME, IN_FORCE));
63
- strict_1.default.equal(refusal.kind, installation_license_ts_1.LicenseRefusalKind.Unverifiable);
64
- strict_1.default.equal((0, installation_license_ts_1.isUnprovisionedBuildRefusal)(refusal), true);
65
- });
66
- (0, node_test_1.test)('an unprovisioned build refuses even a CUSTOMER license — the build is the defect', async () => {
67
- const installation = new installation_license_ts_1.InstallationLicense({
68
- customerLicense: await (0, license_testkit_ts_1.mint)(authority),
69
- distributionId: DISTRIBUTION_ID,
70
- });
71
- const refusal = refusalOf(install(installation, GRANTED_BIOME, IN_FORCE));
72
- strict_1.default.equal(refusal.kind, installation_license_ts_1.LicenseRefusalKind.Unverifiable);
73
- strict_1.default.ok(refusal.kind === installation_license_ts_1.LicenseRefusalKind.Unverifiable);
74
- strict_1.default.equal(refusal.code, license_verifier_1.LicenseVerificationFailureCode.TrustStoreEmpty);
75
- });
76
- (0, node_test_1.test)('a license signed by an UNTRUSTED authority is refused', async () => {
77
- const other = (0, license_testkit_ts_1.createTestAuthority)();
78
- const installation = new installation_license_ts_1.InstallationLicense({
79
- customerLicense: await (0, license_testkit_ts_1.mint)(other),
80
- distributionId: DISTRIBUTION_ID,
81
- trustStore: authority.trustStore,
82
- });
83
- const refusal = refusalOf(install(installation, GRANTED_BIOME, IN_FORCE));
84
- strict_1.default.ok(refusal.kind === installation_license_ts_1.LicenseRefusalKind.Unverifiable);
85
- strict_1.default.equal(refusal.code, license_verifier_1.LicenseVerificationFailureCode.UnknownKeyId);
86
- strict_1.default.equal((0, installation_license_ts_1.isUnprovisionedBuildRefusal)(refusal), false);
87
- });
88
- (0, node_test_1.test)('a license in force grants its biome, its distribution and its edition', async () => {
89
- const installation = await installationFor();
90
- const outcome = install(installation, GRANTED_BIOME, IN_FORCE);
91
- strict_1.default.equal(outcome.granted, true);
92
- strict_1.default.ok(outcome.granted);
93
- strict_1.default.deepEqual(outcome.matched, {
94
- kind: license_verifier_1.EntitlementKind.Biome,
95
- id: GRANTED_BIOME,
96
- });
97
- strict_1.default.equal(installation.distributionEntitled({ now: IN_FORCE }), true);
98
- const posture = installation.posture({ now: IN_FORCE });
99
- strict_1.default.ok(posture.licensed);
100
- strict_1.default.equal(posture.source, license_verifier_1.LicenseSource.Customer);
101
- strict_1.default.equal(posture.customerId, 'acme');
102
- strict_1.default.equal(posture.state.status, license_verifier_1.LicenseStatus.Active);
103
- strict_1.default.equal(posture.state.stage, license_verifier_1.LicenseLifecycleStage.Valid);
104
- strict_1.default.equal(posture.entitlement.edition, entitlement_1.Edition.Enterprise);
105
- strict_1.default.equal(posture.entitlement.features[entitlement_1.EntitlementKey.SsoOidcFederation], true);
106
- strict_1.default.equal(posture.entitlement.features[entitlement_1.EntitlementKey.TeamsScim], undefined);
107
- strict_1.default.deepEqual(posture.warnings, []);
108
- strict_1.default.equal((0, installation_license_ts_1.worstWarningSeverity)(posture.warnings), undefined);
109
- });
110
- (0, node_test_1.test)('a license WITHOUT the enterprise-edition class is Community, whatever else it grants', async () => {
111
- const installation = await installationFor({
112
- entitlements: [
113
- { kind: license_verifier_1.EntitlementKind.Distribution, id: DISTRIBUTION_ID },
114
- { kind: license_verifier_1.EntitlementKind.Biome, id: GRANTED_BIOME },
115
- { kind: license_verifier_1.EntitlementKind.CapabilityClass, id: 'sso.oidc-federation' },
116
- ],
117
- });
118
- const posture = installation.posture({ now: IN_FORCE });
119
- strict_1.default.ok(posture.licensed);
120
- strict_1.default.equal(posture.entitlement.edition, entitlement_1.Edition.Community);
121
- strict_1.default.deepEqual(posture.entitlement.features, {});
122
- strict_1.default.equal(install(installation, GRANTED_BIOME, IN_FORCE).granted, true);
123
- });
124
- (0, node_test_1.test)('a capability-class WILDCARD grants the edition and every feature key', async () => {
125
- const installation = await installationFor({
126
- entitlements: [
127
- { kind: license_verifier_1.EntitlementKind.Distribution, id: DISTRIBUTION_ID },
128
- { kind: license_verifier_1.EntitlementKind.CapabilityClass, id: '*' },
129
- ],
130
- });
131
- const posture = installation.posture({ now: IN_FORCE });
132
- strict_1.default.ok(posture.licensed);
133
- strict_1.default.equal(posture.entitlement.edition, entitlement_1.Edition.Enterprise);
134
- for (const key of Object.values(entitlement_1.EntitlementKey)) {
135
- strict_1.default.equal(posture.entitlement.features[key], true, `expected ${key}`);
136
- }
137
- });
138
- (0, node_test_1.test)('a biome the license does not name is refused with a NAMED reason', async () => {
139
- const installation = await installationFor();
140
- const refusal = refusalOf(install(installation, UNGRANTED_BIOME, IN_FORCE));
141
- strict_1.default.ok(refusal.kind === installation_license_ts_1.LicenseRefusalKind.NotEntitled);
142
- strict_1.default.equal(refusal.reason, license_verifier_1.EntitlementDenialReason.NoMatchingEntitlement);
143
- strict_1.default.equal(refusal.state.status, license_verifier_1.LicenseStatus.Active);
144
- const exception = new license_refused_exception_ts_1.LicenseRefusedException(refusal, {
145
- kind: license_verifier_1.EntitlementKind.Biome,
146
- id: UNGRANTED_BIOME,
147
- action: license_verifier_1.EntitlementAction.Install,
148
- });
149
- const body = exception.getResponse();
150
- strict_1.default.equal(exception.getStatus(), 403);
151
- strict_1.default.equal(body['code'], license_refused_exception_ts_1.LicenseEnforcementErrorCode.LicenseNotEntitled);
152
- strict_1.default.match(String(body['message']), new RegExp(UNGRANTED_BIOME));
153
- strict_1.default.deepEqual(body['resource'], {
154
- kind: license_verifier_1.EntitlementKind.Biome,
155
- id: UNGRANTED_BIOME,
156
- action: license_verifier_1.EntitlementAction.Install,
157
- });
158
- });
159
- (0, node_test_1.test)('a wildcard biome grant covers a biome the license never names individually', async () => {
160
- const installation = await installationFor({
161
- entitlements: [
162
- { kind: license_verifier_1.EntitlementKind.Distribution, id: DISTRIBUTION_ID },
163
- { kind: license_verifier_1.EntitlementKind.Biome, id: '*' },
164
- ],
165
- });
166
- strict_1.default.equal(install(installation, UNGRANTED_BIOME, IN_FORCE).granted, true);
167
- });
168
- (0, node_test_1.test)('a grant never leaks across KINDS', async () => {
169
- const installation = await installationFor({
170
- entitlements: [{ kind: license_verifier_1.EntitlementKind.Biome, id: '*' }],
171
- });
172
- strict_1.default.equal(installation.distributionEntitled({ now: IN_FORCE }), false);
173
- });
174
- (0, node_test_1.test)('EXPIRED-IN-GRACE stays FULLY functional and warns', async () => {
175
- const installation = await installationFor();
176
- strict_1.default.equal(install(installation, GRANTED_BIOME, EXPIRED_IN_GRACE).granted, true);
177
- strict_1.default.equal(runExisting(installation, GRANTED_BIOME, EXPIRED_IN_GRACE).granted, true);
178
- const posture = installation.posture({ now: EXPIRED_IN_GRACE });
179
- strict_1.default.ok(posture.licensed);
180
- strict_1.default.equal(posture.state.status, license_verifier_1.LicenseStatus.Expired);
181
- strict_1.default.equal(posture.state.stage, license_verifier_1.LicenseLifecycleStage.Grace);
182
- strict_1.default.equal(posture.entitlement.edition, entitlement_1.Edition.Enterprise);
183
- strict_1.default.deepEqual(posture.warnings.map((w) => w.code), [license_warnings_ts_1.LicenseWarningCode.InGracePeriod]);
184
- });
185
- (0, node_test_1.test)('grace warnings ESCALATE as the window closes', async () => {
186
- const installation = await installationFor();
187
- const graceEnd = (0, license_testkit_ts_1.at)('2027-02-01T00:00:00.000Z') + license_verifier_1.LICENSE_GRACE_PERIOD_MS;
188
- const early = installation.posture({ now: EXPIRED_IN_GRACE }).warnings;
189
- const late = installation.posture({
190
- now: graceEnd - 2 * 24 * 60 * 60 * 1000,
191
- }).warnings;
192
- strict_1.default.equal(early[0]?.severity, license_warnings_ts_1.LicenseWarningSeverity.Warning);
193
- strict_1.default.equal(late[0]?.severity, license_warnings_ts_1.LicenseWarningSeverity.Critical);
194
- strict_1.default.equal((0, installation_license_ts_1.worstWarningSeverity)(late), license_warnings_ts_1.LicenseWarningSeverity.Critical);
195
- });
196
- (0, node_test_1.test)('EXPIRED-RESTRICTED refuses new installs, keeps existing workloads running', async () => {
197
- const installation = await installationFor();
198
- const refusal = refusalOf(install(installation, GRANTED_BIOME, EXPIRED_RESTRICTED));
199
- strict_1.default.ok(refusal.kind === installation_license_ts_1.LicenseRefusalKind.NotEntitled);
200
- strict_1.default.equal(refusal.reason, license_verifier_1.EntitlementDenialReason.LicenseRestricted);
201
- strict_1.default.equal(runExisting(installation, GRANTED_BIOME, EXPIRED_RESTRICTED).granted, true);
202
- strict_1.default.equal(installation.distributionEntitled({ now: EXPIRED_RESTRICTED }), true);
203
- const posture = installation.posture({ now: EXPIRED_RESTRICTED });
204
- strict_1.default.ok(posture.licensed);
205
- strict_1.default.equal(posture.state.stage, license_verifier_1.LicenseLifecycleStage.Restricted);
206
- strict_1.default.equal(posture.entitlement.edition, entitlement_1.Edition.Enterprise);
207
- strict_1.default.deepEqual(posture.warnings.map((w) => w.code), [license_warnings_ts_1.LicenseWarningCode.Restricted]);
208
- strict_1.default.match((0, license_refused_exception_ts_1.describeRefusal)(refusal, {
209
- kind: license_verifier_1.EntitlementKind.Biome,
210
- id: GRANTED_BIOME,
211
- action: license_verifier_1.EntitlementAction.Install,
212
- }), /Existing workloads keep running/);
213
- });
214
- (0, node_test_1.test)('UPGRADE is refused exactly where a new install is', async () => {
215
- const installation = await installationFor();
216
- const upgrade = (now) => installation.evaluate({
217
- kind: license_verifier_1.EntitlementKind.Biome,
218
- id: GRANTED_BIOME,
219
- action: license_verifier_1.EntitlementAction.Upgrade,
220
- }, { now });
221
- strict_1.default.equal(upgrade(EXPIRED_IN_GRACE).granted, true);
222
- strict_1.default.equal(upgrade(EXPIRED_RESTRICTED).granted, false);
223
- });
224
- (0, node_test_1.test)('REVOKED denies everything, including running what is already installed', async () => {
225
- const installation = await installationFor({
226
- status: license_verifier_1.LicenseStatus.Revoked,
227
- });
228
- for (const outcome of [
229
- install(installation, GRANTED_BIOME, IN_FORCE),
230
- runExisting(installation, GRANTED_BIOME, IN_FORCE),
231
- ]) {
232
- const refusal = refusalOf(outcome);
233
- strict_1.default.ok(refusal.kind === installation_license_ts_1.LicenseRefusalKind.NotEntitled);
234
- strict_1.default.equal(refusal.reason, license_verifier_1.EntitlementDenialReason.LicenseRevoked);
235
- }
236
- const posture = installation.posture({ now: IN_FORCE });
237
- strict_1.default.ok(posture.licensed);
238
- strict_1.default.equal(posture.entitlement.edition, entitlement_1.Edition.Community);
239
- strict_1.default.equal(posture.distributionEntitled, false);
240
- strict_1.default.deepEqual(posture.warnings.map((w) => w.code), [
241
- license_warnings_ts_1.LicenseWarningCode.Revoked,
242
- license_warnings_ts_1.LicenseWarningCode.DistributionNotEntitled,
243
- ]);
244
- });
245
- (0, node_test_1.test)('SUSPENDED refuses new work but never stops running work', async () => {
246
- const installation = await installationFor({
247
- status: license_verifier_1.LicenseStatus.Suspended,
248
- });
249
- const refusal = refusalOf(install(installation, GRANTED_BIOME, IN_FORCE));
250
- strict_1.default.ok(refusal.kind === installation_license_ts_1.LicenseRefusalKind.NotEntitled);
251
- strict_1.default.equal(refusal.reason, license_verifier_1.EntitlementDenialReason.LicenseSuspended);
252
- strict_1.default.equal(runExisting(installation, GRANTED_BIOME, IN_FORCE).granted, true);
253
- strict_1.default.equal(installation.posture({ now: IN_FORCE }).warnings[0]?.code, license_warnings_ts_1.LicenseWarningCode.Suspended);
254
- });
255
- (0, node_test_1.test)('a license dated in the FUTURE is not yet in force', async () => {
256
- const installation = await installationFor();
257
- const beforeIssue = (0, license_testkit_ts_1.at)('2025-12-01T00:00:00.000Z');
258
- const refusal = refusalOf(runExisting(installation, GRANTED_BIOME, beforeIssue));
259
- strict_1.default.ok(refusal.kind === installation_license_ts_1.LicenseRefusalKind.NotEntitled);
260
- strict_1.default.equal(refusal.reason, license_verifier_1.EntitlementDenialReason.LicenseNotYetValid);
261
- strict_1.default.deepEqual(installation.posture({ now: beforeIssue }).warnings.map((w) => w.code), [
262
- license_warnings_ts_1.LicenseWarningCode.NotYetValid,
263
- license_warnings_ts_1.LicenseWarningCode.DistributionNotEntitled,
264
- ]);
265
- });
266
- (0, node_test_1.test)('expiry is announced BEFORE it happens', async () => {
267
- const installation = await installationFor();
268
- const tenDaysOut = (0, license_testkit_ts_1.at)('2027-01-22T00:00:00.000Z');
269
- const posture = installation.posture({ now: tenDaysOut });
270
- strict_1.default.ok(posture.licensed);
271
- strict_1.default.equal(posture.state.stage, license_verifier_1.LicenseLifecycleStage.Valid);
272
- strict_1.default.deepEqual(posture.warnings.map((w) => w.code), [license_warnings_ts_1.LicenseWarningCode.ExpiringSoon]);
273
- strict_1.default.equal(install(installation, GRANTED_BIOME, tenDaysOut).granted, true);
274
- });
275
- (0, node_test_1.test)('a perpetual license never warns about expiry', async () => {
276
- const installation = await installationFor({ expiresAt: null });
277
- const farFuture = (0, license_testkit_ts_1.at)('2099-01-01T00:00:00.000Z');
278
- strict_1.default.deepEqual(installation.posture({ now: farFuture }).warnings, []);
279
- strict_1.default.equal(install(installation, GRANTED_BIOME, farFuture).granted, true);
280
- });
281
- (0, node_test_1.test)('a license for ANOTHER distribution does not entitle running this one', async () => {
282
- const installation = new installation_license_ts_1.InstallationLicense({
283
- customerLicense: await (0, license_testkit_ts_1.mint)(authority, {
284
- entitlements: [{ kind: license_verifier_1.EntitlementKind.Distribution, id: 'appliance-base' }],
285
- }),
286
- distributionId: DISTRIBUTION_ID,
287
- trustStore: authority.trustStore,
288
- });
289
- strict_1.default.equal(installation.distributionEntitled({ now: IN_FORCE }), false);
290
- const posture = installation.posture({ now: IN_FORCE });
291
- strict_1.default.ok(posture.licensed);
292
- strict_1.default.equal(posture.distributionEntitled, false);
293
- strict_1.default.ok(posture.warnings.some((w) => w.code === license_warnings_ts_1.LicenseWarningCode.DistributionNotEntitled));
294
- strict_1.default.match(posture.warnings.at(-1)?.message ?? '', /Mirroring the images does not confer the right to run them/);
295
- });
296
- (0, node_test_1.test)('the install gate is a CONJUNCTION — an unentitled edition blocks an entitled biome', async () => {
297
- const installation = new installation_license_ts_1.InstallationLicense({
298
- customerLicense: await (0, license_testkit_ts_1.mint)(authority, {
299
- entitlements: [
300
- { kind: license_verifier_1.EntitlementKind.Biome, id: '*' },
301
- { kind: license_verifier_1.EntitlementKind.Distribution, id: 'appliance-base' },
302
- ],
303
- }),
304
- distributionId: DISTRIBUTION_ID,
305
- trustStore: authority.trustStore,
306
- });
307
- strict_1.default.equal(install(installation, GRANTED_BIOME, IN_FORCE).granted, true);
308
- const refusal = refusalOf(installation.biomeInstallGate(GRANTED_BIOME, { now: IN_FORCE }));
309
- strict_1.default.ok(refusal.kind === installation_license_ts_1.LicenseRefusalKind.NotEntitled);
310
- strict_1.default.equal(refusal.reason, license_verifier_1.EntitlementDenialReason.NoMatchingEntitlement);
311
- });
312
- (0, node_test_1.test)('the install gate passes when BOTH the edition and the biome are entitled', async () => {
313
- const installation = await installationFor();
314
- strict_1.default.equal(installation.biomeInstallGate(GRANTED_BIOME, { now: IN_FORCE }).granted, true);
315
- strict_1.default.equal(installation.biomeInstallGate(UNGRANTED_BIOME, { now: IN_FORCE }).granted, false);
316
- });
317
- (0, node_test_1.test)('an UNDECLARED distribution refuses installs and says how to fix the DEPLOYMENT', async () => {
318
- const installation = new installation_license_ts_1.InstallationLicense({
319
- customerLicense: await (0, license_testkit_ts_1.mint)(authority),
320
- distributionId: null,
321
- trustStore: authority.trustStore,
322
- });
323
- strict_1.default.equal(installation.distributionEntitled({ now: IN_FORCE }), false);
324
- const refusal = refusalOf(installation.biomeInstallGate(GRANTED_BIOME, { now: IN_FORCE }));
325
- strict_1.default.equal(refusal.kind, installation_license_ts_1.LicenseRefusalKind.DistributionUndeclared);
326
- const body = new license_refused_exception_ts_1.LicenseRefusedException(refusal).getResponse();
327
- strict_1.default.equal(body['code'], license_refused_exception_ts_1.LicenseEnforcementErrorCode.DistributionUndeclared);
328
- strict_1.default.match(String(body['remediation']), /XEMA_DISTRIBUTION_LOCK_PATH/);
329
- const posture = installation.posture({ now: IN_FORCE });
330
- strict_1.default.ok(posture.licensed);
331
- strict_1.default.deepEqual(posture.warnings.map((w) => w.code), [license_warnings_ts_1.LicenseWarningCode.DistributionUndeclared]);
332
- });
333
- (0, node_test_1.test)('a clock rollback is REPORTED and changes no decision', async () => {
334
- const installation = await installationFor();
335
- installation.posture({ now: IN_FORCE + 10_000 });
336
- const posture = installation.posture({ now: IN_FORCE });
337
- strict_1.default.ok(posture.licensed);
338
- strict_1.default.equal(posture.state.clockRollbackDetected, true);
339
- strict_1.default.ok(posture.warnings.some((w) => w.code === license_warnings_ts_1.LicenseWarningCode.ClockRollback));
340
- strict_1.default.equal(install(installation, GRANTED_BIOME, IN_FORCE).granted, true);
341
- });
342
- (0, node_test_1.test)('a malformed resource id is refused rather than matched', async () => {
343
- const installation = await installationFor();
344
- const refusal = refusalOf(install(installation, 'not a valid id!', IN_FORCE));
345
- strict_1.default.ok(refusal.kind === installation_license_ts_1.LicenseRefusalKind.NotEntitled);
346
- strict_1.default.equal(refusal.reason, license_verifier_1.EntitlementDenialReason.MalformedQuery);
347
- });
348
- (0, node_test_1.test)('a wildcard cannot be QUERIED as if it were a resource', async () => {
349
- const installation = await installationFor({
350
- entitlements: [{ kind: license_verifier_1.EntitlementKind.Biome, id: '*' }],
351
- });
352
- const refusal = refusalOf(install(installation, '*', IN_FORCE));
353
- strict_1.default.ok(refusal.kind === installation_license_ts_1.LicenseRefusalKind.NotEntitled);
354
- strict_1.default.equal(refusal.reason, license_verifier_1.EntitlementDenialReason.MalformedQuery);
355
- });
356
- (0, node_test_1.test)('projectEntitlementSet grants NOTHING without the enterprise-edition class', () => {
357
- const set = (0, entitlement_1.projectEntitlementSet)((id) => id !== entitlement_1.ENTERPRISE_EDITION_CAPABILITY_CLASS);
358
- strict_1.default.equal(set.edition, entitlement_1.Edition.Community);
359
- strict_1.default.deepEqual(set.features, {});
360
- });
361
- (0, node_test_1.test)('projectEntitlementSet honours only the classes the probe grants', () => {
362
- const granted = new Set([
363
- entitlement_1.ENTERPRISE_EDITION_CAPABILITY_CLASS,
364
- entitlement_1.EntitlementKey.RolesCustom,
365
- ]);
366
- const set = (0, entitlement_1.projectEntitlementSet)((id) => granted.has(id));
367
- strict_1.default.equal(set.edition, entitlement_1.Edition.Enterprise);
368
- strict_1.default.deepEqual(set.features, { [entitlement_1.EntitlementKey.RolesCustom]: true });
369
- });
370
- (0, node_test_1.test)('an unverifiable refusal renders a remediation, not an opaque failure', async () => {
371
- const installation = new installation_license_ts_1.InstallationLicense({
372
- customerLicense: 'not-a-license',
373
- distributionId: DISTRIBUTION_ID,
374
- trustStore: authority.trustStore,
375
- });
376
- const refusal = refusalOf(install(installation, GRANTED_BIOME, IN_FORCE));
377
- strict_1.default.ok(refusal.kind === installation_license_ts_1.LicenseRefusalKind.Unverifiable);
378
- strict_1.default.equal(refusal.code, license_verifier_1.LicenseVerificationFailureCode.MalformedToken);
379
- const exception = new license_refused_exception_ts_1.LicenseRefusedException(refusal, {
380
- kind: license_verifier_1.EntitlementKind.Biome,
381
- id: GRANTED_BIOME,
382
- action: license_verifier_1.EntitlementAction.Install,
383
- });
384
- const body = exception.getResponse();
385
- strict_1.default.equal(body['code'], license_refused_exception_ts_1.LicenseEnforcementErrorCode.LicenseUnverifiable);
386
- strict_1.default.equal(body['verificationFailure'], license_verifier_1.LicenseVerificationFailureCode.MalformedToken);
387
- strict_1.default.match(String(body['remediation']), /XEMA_LICENSE/);
388
- });
389
- //# sourceMappingURL=installation-license.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"installation-license.test.js","sourceRoot":"","sources":["../../src/lib/installation-license.test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { type LicenseClaims, type LicenseTrustStore } from '@xemahq/license-verifier';
2
- import { LocalKeyLicenseSigner } from '@xemahq/license-verifier/signing';
3
- export interface TestAuthority {
4
- readonly signer: LocalKeyLicenseSigner;
5
- readonly trustStore: LicenseTrustStore;
6
- }
7
- export declare function createTestAuthority(): TestAuthority;
8
- export declare function buildClaims(overrides?: Partial<LicenseClaims>): LicenseClaims;
9
- export declare function mint(authority: TestAuthority, overrides?: Partial<LicenseClaims>): Promise<string>;
10
- export declare function at(instant: string): number;
11
- //# sourceMappingURL=license.testkit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"license.testkit.d.ts","sourceRoot":"","sources":["../../src/lib/license.testkit.ts"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,EAEtB,MAAM,kCAAkC,CAAC;AAW1C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;CACxC;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CASnD;AAMD,wBAAgB,WAAW,CACzB,SAAS,GAAE,OAAO,CAAC,aAAa,CAAM,GACrC,aAAa,CAsBf;AAED,wBAAgB,IAAI,CAClB,SAAS,EAAE,aAAa,EACxB,SAAS,GAAE,OAAO,CAAC,aAAa,CAAM,GACrC,OAAO,CAAC,MAAM,CAAC,CAEjB;AAGD,wBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1C"}
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createTestAuthority = createTestAuthority;
4
- exports.buildClaims = buildClaims;
5
- exports.mint = mint;
6
- exports.at = at;
7
- const node_crypto_1 = require("node:crypto");
8
- const license_verifier_1 = require("@xemahq/license-verifier");
9
- const signing_1 = require("@xemahq/license-verifier/signing");
10
- function createTestAuthority() {
11
- const { privateKey } = (0, node_crypto_1.generateKeyPairSync)('ed25519');
12
- const signer = signing_1.LocalKeyLicenseSigner.fromPrivateKeyPem(privateKey.export({ format: 'pem', type: 'pkcs8' }).toString());
13
- return {
14
- signer,
15
- trustStore: (0, license_verifier_1.createLicenseTrustStore)([signer.exportPublicKeyPem()]),
16
- };
17
- }
18
- function buildClaims(overrides = {}) {
19
- return {
20
- version: license_verifier_1.LicenseClaimsVersion.V1,
21
- licenseId: 'lic-l5-0001',
22
- issuer: license_verifier_1.XEMA_LICENSE_ISSUER,
23
- subject: { customerId: 'acme', customerName: 'ACME Corp' },
24
- tier: license_verifier_1.LicenseTier.SelfHostedCommercial,
25
- status: license_verifier_1.LicenseStatus.Active,
26
- entitlements: [
27
- { kind: license_verifier_1.EntitlementKind.Distribution, id: 'core' },
28
- { kind: license_verifier_1.EntitlementKind.Biome, id: 'knowledge-base' },
29
- { kind: license_verifier_1.EntitlementKind.CapabilityClass, id: 'enterprise-edition' },
30
- { kind: license_verifier_1.EntitlementKind.CapabilityClass, id: 'sso.oidc-federation' },
31
- ],
32
- limits: {
33
- [license_verifier_1.LicenseLimitKind.Nodes]: 8,
34
- [license_verifier_1.LicenseLimitKind.Seats]: null,
35
- },
36
- issuedAt: '2026-01-01T00:00:00.000Z',
37
- expiresAt: '2027-02-01T00:00:00.000Z',
38
- ...overrides,
39
- };
40
- }
41
- function mint(authority, overrides = {}) {
42
- return (0, signing_1.signLicense)(buildClaims(overrides), authority.signer);
43
- }
44
- function at(instant) {
45
- return Date.parse(instant);
46
- }
47
- //# sourceMappingURL=license.testkit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"license.testkit.js","sourceRoot":"","sources":["../../src/lib/license.testkit.ts"],"names":[],"mappings":";;AAgCA,kDASC;AAMD,kCAwBC;AAED,oBAKC;AAGD,gBAEC;AAnFD,6CAAkD;AAElD,+DAUkC;AAClC,8DAG0C;AAgB1C,SAAgB,mBAAmB;IACjC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,iCAAmB,EAAC,SAAS,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,+BAAqB,CAAC,iBAAiB,CACpD,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAC/D,CAAC;IACF,OAAO;QACL,MAAM;QACN,UAAU,EAAE,IAAA,0CAAuB,EAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;KACnE,CAAC;AACJ,CAAC;AAMD,SAAgB,WAAW,CACzB,YAAoC,EAAE;IAEtC,OAAO;QACL,OAAO,EAAE,uCAAoB,CAAC,EAAE;QAChC,SAAS,EAAE,aAAa;QACxB,MAAM,EAAE,sCAAmB;QAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE;QAC1D,IAAI,EAAE,8BAAW,CAAC,oBAAoB;QACtC,MAAM,EAAE,gCAAa,CAAC,MAAM;QAC5B,YAAY,EAAE;YACZ,EAAE,IAAI,EAAE,kCAAe,CAAC,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE;YAClD,EAAE,IAAI,EAAE,kCAAe,CAAC,KAAK,EAAE,EAAE,EAAE,gBAAgB,EAAE;YACrD,EAAE,IAAI,EAAE,kCAAe,CAAC,eAAe,EAAE,EAAE,EAAE,oBAAoB,EAAE;YACnE,EAAE,IAAI,EAAE,kCAAe,CAAC,eAAe,EAAE,EAAE,EAAE,qBAAqB,EAAE;SACrE;QACD,MAAM,EAAE;YACN,CAAC,mCAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,CAAC,mCAAgB,CAAC,KAAK,CAAC,EAAE,IAAI;SAC/B;QACD,QAAQ,EAAE,0BAA0B;QACpC,SAAS,EAAE,0BAA0B;QACrC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAgB,IAAI,CAClB,SAAwB,EACxB,YAAoC,EAAE;IAEtC,OAAO,IAAA,qBAAW,EAAC,WAAW,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC;AAGD,SAAgB,EAAE,CAAC,OAAe;IAChC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}