@xemahq/entitlement-client 0.2.0 → 0.2.1
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 +4 -4
- package/dist/lib/installation-license.test.d.ts +0 -2
- package/dist/lib/installation-license.test.d.ts.map +0 -1
- package/dist/lib/installation-license.test.js +0 -389
- package/dist/lib/installation-license.test.js.map +0 -1
- package/dist/lib/license.testkit.d.ts +0 -11
- package/dist/lib/license.testkit.d.ts.map +0 -1
- package/dist/lib/license.testkit.js +0 -47
- package/dist/lib/license.testkit.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xemahq/entitlement-client",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
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.
|
|
42
|
+
"@xemahq/platform-common": "^0.7.4"
|
|
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/
|
|
53
|
-
"@xemahq/
|
|
52
|
+
"@xemahq/license-verifier": "0.1.3",
|
|
53
|
+
"@xemahq/kernel-contracts": "^8.0.1"
|
|
54
54
|
},
|
|
55
55
|
"exports": {
|
|
56
56
|
".": {
|
|
@@ -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"}
|