@agentplat/trust 0.3.0-alpha.4
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/LICENSE +202 -0
- package/README.md +14 -0
- package/dist/canonical.d.ts +20 -0
- package/dist/canonical.d.ts.map +1 -0
- package/dist/canonical.js +173 -0
- package/dist/canonical.js.map +1 -0
- package/dist/causal.d.ts +7 -0
- package/dist/causal.d.ts.map +1 -0
- package/dist/causal.js +155 -0
- package/dist/causal.js.map +1 -0
- package/dist/eligibility.d.ts +8 -0
- package/dist/eligibility.d.ts.map +1 -0
- package/dist/eligibility.js +325 -0
- package/dist/eligibility.js.map +1 -0
- package/dist/evidence.d.ts +20 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +424 -0
- package/dist/evidence.js.map +1 -0
- package/dist/fusion.d.ts +8 -0
- package/dist/fusion.d.ts.map +1 -0
- package/dist/fusion.js +1278 -0
- package/dist/fusion.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle.d.ts +41 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +1369 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/mesh-records.d.ts +36 -0
- package/dist/mesh-records.d.ts.map +1 -0
- package/dist/mesh-records.js +133 -0
- package/dist/mesh-records.js.map +1 -0
- package/dist/policy.d.ts +9 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +598 -0
- package/dist/policy.js.map +1 -0
- package/dist/profile.d.ts +21 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +253 -0
- package/dist/profile.js.map +1 -0
- package/dist/quarantine.d.ts +53 -0
- package/dist/quarantine.d.ts.map +1 -0
- package/dist/quarantine.js +742 -0
- package/dist/quarantine.js.map +1 -0
- package/dist/sha256.d.ts +2 -0
- package/dist/sha256.d.ts.map +1 -0
- package/dist/sha256.js +66 -0
- package/dist/sha256.js.map +1 -0
- package/dist/state.d.ts +18 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +1015 -0
- package/dist/state.js.map +1 -0
- package/dist/types.d.ts +862 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +60 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +18 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +223 -0
- package/dist/validation.js.map +1 -0
- package/package.json +43 -0
package/dist/policy.js
ADDED
|
@@ -0,0 +1,598 @@
|
|
|
1
|
+
import { deepFreeze, digestTrustJsonV1, TrustValidationError, } from "./canonical.js";
|
|
2
|
+
import { assertExactKeys, assertIdentifier, assertNullableTrustDigest, assertSafeInteger, assertToken, assertTrustDigest, } from "./validation.js";
|
|
3
|
+
const compareUnicode = (a, b) => a < b ? -1 : a > b ? 1 : 0;
|
|
4
|
+
const assertOrdered = (values, label) => {
|
|
5
|
+
if (values.some((value, index) => index > 0 && values[index - 1] >= value))
|
|
6
|
+
throw new TrustValidationError(`${label} must be canonically ordered and unique`);
|
|
7
|
+
};
|
|
8
|
+
const assertBasisPoints = (value, label, minimum = 0) => {
|
|
9
|
+
assertSafeInteger(value, label, minimum);
|
|
10
|
+
if (value > 10_000)
|
|
11
|
+
throw new TrustValidationError(`${label} must be at most 10000`);
|
|
12
|
+
};
|
|
13
|
+
const ceiling = {
|
|
14
|
+
maximumPolicies: 16,
|
|
15
|
+
maximumDimensionsPerPolicy: 16,
|
|
16
|
+
maximumCriteriaPerPolicy: 64,
|
|
17
|
+
maximumSourceBindingsPerPolicy: 256,
|
|
18
|
+
maximumDependencyGroupsPerPolicy: 64,
|
|
19
|
+
maximumClaims: 4096,
|
|
20
|
+
maximumAttestations: 16384,
|
|
21
|
+
maximumChallenges: 4096,
|
|
22
|
+
maximumChallengesPerSourceScope: 64,
|
|
23
|
+
maximumPendingChallengesPerSourceScope: 16,
|
|
24
|
+
maximumRetractions: 4096,
|
|
25
|
+
maximumContentResolutions: 4096,
|
|
26
|
+
maximumContentInvalidations: 4096,
|
|
27
|
+
maximumCausalAuthorizations: 4096,
|
|
28
|
+
maximumDependencyBindingVersions: 256,
|
|
29
|
+
maximumPendingRecords: 1024,
|
|
30
|
+
maximumPendingAgeMs: 86_400_000,
|
|
31
|
+
maximumBasisReferencesPerRecord: 32,
|
|
32
|
+
maximumRelationshipDepth: 16,
|
|
33
|
+
maximumConsideredRecordsPerFusion: 1024,
|
|
34
|
+
maximumRetainedFusionDecisions: 4096,
|
|
35
|
+
maximumProfileHeads: 2048,
|
|
36
|
+
maximumProfileRevisionsPerHead: 32,
|
|
37
|
+
maximumQuarantineHeads: 2048,
|
|
38
|
+
maximumQuarantineRevisionsPerHead: 32,
|
|
39
|
+
maximumRecoveryDecisions: 4096,
|
|
40
|
+
maximumDiagnostics: 1024,
|
|
41
|
+
maximumRecordCanonicalBytes: 65_536,
|
|
42
|
+
maximumContentReferenceBytes: 4096,
|
|
43
|
+
maximumInlineSummaryBytes: 4096,
|
|
44
|
+
maximumStateCanonicalBytes: 67_108_864,
|
|
45
|
+
maximumEvidenceAgeMs: 2_592_000_000,
|
|
46
|
+
maximumReviewIntervalMs: 604_800_000,
|
|
47
|
+
};
|
|
48
|
+
const limitKeys = Object.keys(ceiling);
|
|
49
|
+
function validateLimits(value, limits) {
|
|
50
|
+
assertExactKeys(value, limitKeys, "policy limits");
|
|
51
|
+
const candidate = value;
|
|
52
|
+
for (const key of limitKeys) {
|
|
53
|
+
assertSafeInteger(candidate[key], `limits.${key}`, 1);
|
|
54
|
+
if (candidate[key] > limits[key])
|
|
55
|
+
throw new TrustValidationError(`limits.${key} exceeds state limit`);
|
|
56
|
+
}
|
|
57
|
+
return structuredClone(candidate);
|
|
58
|
+
}
|
|
59
|
+
function validateBasisRules(value, label) {
|
|
60
|
+
if (!Array.isArray(value))
|
|
61
|
+
throw new TrustValidationError(`${label} must be an array`);
|
|
62
|
+
const rules = value.map((entry) => {
|
|
63
|
+
assertExactKeys(entry, ["kind", "referenceType", "minimumCount", "maximumCount"], label);
|
|
64
|
+
const rule = entry;
|
|
65
|
+
if (!["evidence", "mesh_record", "control_record", "external"].includes(rule.kind))
|
|
66
|
+
throw new TrustValidationError(`${label}.kind is invalid`);
|
|
67
|
+
assertToken(rule.referenceType, `${label}.referenceType`);
|
|
68
|
+
assertSafeInteger(rule.minimumCount, `${label}.minimumCount`);
|
|
69
|
+
assertSafeInteger(rule.maximumCount, `${label}.maximumCount`, 1);
|
|
70
|
+
if (rule.minimumCount > rule.maximumCount)
|
|
71
|
+
throw new TrustValidationError(`${label} count range is invalid`);
|
|
72
|
+
return structuredClone(rule);
|
|
73
|
+
});
|
|
74
|
+
assertOrdered(rules.map((rule) => `${rule.kind}\u0000${rule.referenceType}`), label);
|
|
75
|
+
return rules;
|
|
76
|
+
}
|
|
77
|
+
function validateClaimAuthority(value) {
|
|
78
|
+
assertExactKeys(value, ["allowedSourceRelations", "allowedBasisReferences"], "claimAuthority");
|
|
79
|
+
const rule = value;
|
|
80
|
+
if (!Array.isArray(rule.allowedSourceRelations))
|
|
81
|
+
throw new TrustValidationError("claimAuthority.allowedSourceRelations is invalid");
|
|
82
|
+
const relations = rule.allowedSourceRelations.map((entry) => {
|
|
83
|
+
if (![
|
|
84
|
+
"subject_self",
|
|
85
|
+
"work_assignee",
|
|
86
|
+
"work_owner",
|
|
87
|
+
"objective_observer",
|
|
88
|
+
"recovery_witness",
|
|
89
|
+
"local_system",
|
|
90
|
+
].includes(entry))
|
|
91
|
+
throw new TrustValidationError("claimAuthority relation is invalid");
|
|
92
|
+
return entry;
|
|
93
|
+
});
|
|
94
|
+
assertOrdered(relations, "claimAuthority.allowedSourceRelations");
|
|
95
|
+
return {
|
|
96
|
+
allowedSourceRelations: relations,
|
|
97
|
+
allowedBasisReferences: validateBasisRules(rule.allowedBasisReferences, "claimAuthority.allowedBasisReferences"),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function validateChallengeAuthority(value) {
|
|
101
|
+
assertExactKeys(value, [
|
|
102
|
+
"allowedSourceRelations",
|
|
103
|
+
"allowedBasisReferences",
|
|
104
|
+
"requireResolvedBasis",
|
|
105
|
+
], "challengeAuthority");
|
|
106
|
+
const rule = value;
|
|
107
|
+
if (rule.requireResolvedBasis !== true ||
|
|
108
|
+
!Array.isArray(rule.allowedSourceRelations))
|
|
109
|
+
throw new TrustValidationError("challengeAuthority is invalid");
|
|
110
|
+
const relations = rule.allowedSourceRelations.map((entry) => {
|
|
111
|
+
if (![
|
|
112
|
+
"target_author",
|
|
113
|
+
"subject_self",
|
|
114
|
+
"work_assignee",
|
|
115
|
+
"work_owner",
|
|
116
|
+
"objective_observer",
|
|
117
|
+
"recovery_witness",
|
|
118
|
+
"local_system",
|
|
119
|
+
].includes(entry))
|
|
120
|
+
throw new TrustValidationError("challengeAuthority relation is invalid");
|
|
121
|
+
return entry;
|
|
122
|
+
});
|
|
123
|
+
assertOrdered(relations, "challengeAuthority.allowedSourceRelations");
|
|
124
|
+
return {
|
|
125
|
+
allowedSourceRelations: relations,
|
|
126
|
+
allowedBasisReferences: validateBasisRules(rule.allowedBasisReferences, "challengeAuthority.allowedBasisReferences"),
|
|
127
|
+
requireResolvedBasis: true,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function validateDimension(value, limits) {
|
|
131
|
+
const keys = [
|
|
132
|
+
"dimensionId",
|
|
133
|
+
"priorScoreBasisPoints",
|
|
134
|
+
"priorWeightBasisPoints",
|
|
135
|
+
"minimumUncertaintyBasisPoints",
|
|
136
|
+
"coverageTargetBasisPoints",
|
|
137
|
+
"decayIntervalMs",
|
|
138
|
+
"decayBasisPointsPerInterval",
|
|
139
|
+
"uncertaintyGrowthBasisPointsPerInterval",
|
|
140
|
+
"minimumRetainedWeightBasisPoints",
|
|
141
|
+
"contradictionUncertaintyBasisPointsPerClaim",
|
|
142
|
+
"maximumContradictionUncertaintyBasisPoints",
|
|
143
|
+
"degradedScoreAtOrBelowBasisPoints",
|
|
144
|
+
"degradedUncertaintyAtOrAboveBasisPoints",
|
|
145
|
+
];
|
|
146
|
+
assertExactKeys(value, keys, "dimension");
|
|
147
|
+
const v = value;
|
|
148
|
+
assertToken(v.dimensionId, "dimensionId");
|
|
149
|
+
for (const key of keys
|
|
150
|
+
.slice(1)
|
|
151
|
+
.filter((candidate) => candidate !== "decayIntervalMs"))
|
|
152
|
+
assertBasisPoints(v[key], `dimension.${key}`);
|
|
153
|
+
assertBasisPoints(v.priorWeightBasisPoints, "dimension.priorWeightBasisPoints", 1);
|
|
154
|
+
assertBasisPoints(v.coverageTargetBasisPoints, "dimension.coverageTargetBasisPoints", 1);
|
|
155
|
+
assertSafeInteger(v.decayIntervalMs, "dimension.decayIntervalMs", 1);
|
|
156
|
+
if (v.decayIntervalMs > limits.maximumEvidenceAgeMs)
|
|
157
|
+
throw new TrustValidationError("dimension decay interval exceeds limit");
|
|
158
|
+
assertBasisPoints(v.contradictionUncertaintyBasisPointsPerClaim, "dimension.contradictionUncertaintyBasisPointsPerClaim", 1);
|
|
159
|
+
if (v.minimumRetainedWeightBasisPoints >
|
|
160
|
+
v.priorWeightBasisPoints ||
|
|
161
|
+
v.contradictionUncertaintyBasisPointsPerClaim >
|
|
162
|
+
v.maximumContradictionUncertaintyBasisPoints)
|
|
163
|
+
throw new TrustValidationError("dimension bounds are invalid");
|
|
164
|
+
return structuredClone(v);
|
|
165
|
+
}
|
|
166
|
+
function validateCriterion(value, dimensions, limits) {
|
|
167
|
+
const keys = [
|
|
168
|
+
"criterionId",
|
|
169
|
+
"dimensionId",
|
|
170
|
+
"satisfiedValueBasisPoints",
|
|
171
|
+
"violatedValueBasisPoints",
|
|
172
|
+
"inconclusiveValueBasisPoints",
|
|
173
|
+
"baseWeightBasisPoints",
|
|
174
|
+
"maximumClaimWeightBasisPoints",
|
|
175
|
+
"maximumSourceGroupContributionWeightBasisPoints",
|
|
176
|
+
"minimumSupportGroups",
|
|
177
|
+
"minimumSupportWeightBasisPoints",
|
|
178
|
+
"minimumContradictionGroups",
|
|
179
|
+
"minimumContradictionWeightBasisPoints",
|
|
180
|
+
"allowClaimSourceAttestation",
|
|
181
|
+
"contentRequired",
|
|
182
|
+
"quarantineEligible",
|
|
183
|
+
"recoveryEligible",
|
|
184
|
+
"maximumAgeMs",
|
|
185
|
+
"claimAuthority",
|
|
186
|
+
"challengeAuthority",
|
|
187
|
+
"challengeResolution",
|
|
188
|
+
];
|
|
189
|
+
assertExactKeys(value, keys, "criterion");
|
|
190
|
+
const v = value;
|
|
191
|
+
assertToken(v.criterionId, "criterionId");
|
|
192
|
+
assertToken(v.dimensionId, "dimensionId");
|
|
193
|
+
if (!dimensions.has(v.dimensionId))
|
|
194
|
+
throw new TrustValidationError("criterion dimension is undeclared");
|
|
195
|
+
for (const key of [
|
|
196
|
+
"satisfiedValueBasisPoints",
|
|
197
|
+
"violatedValueBasisPoints",
|
|
198
|
+
"baseWeightBasisPoints",
|
|
199
|
+
"maximumClaimWeightBasisPoints",
|
|
200
|
+
"maximumSourceGroupContributionWeightBasisPoints",
|
|
201
|
+
"minimumSupportWeightBasisPoints",
|
|
202
|
+
"minimumContradictionWeightBasisPoints",
|
|
203
|
+
])
|
|
204
|
+
assertBasisPoints(v[key], `criterion.${key}`);
|
|
205
|
+
for (const key of [
|
|
206
|
+
"minimumSupportWeightBasisPoints",
|
|
207
|
+
"minimumContradictionWeightBasisPoints",
|
|
208
|
+
])
|
|
209
|
+
assertBasisPoints(v[key], `criterion.${key}`, 1);
|
|
210
|
+
if (v.inconclusiveValueBasisPoints !== null)
|
|
211
|
+
assertBasisPoints(v.inconclusiveValueBasisPoints, "criterion.inconclusiveValueBasisPoints");
|
|
212
|
+
for (const key of ["minimumSupportGroups", "minimumContradictionGroups"])
|
|
213
|
+
assertSafeInteger(v[key], `criterion.${key}`, 1);
|
|
214
|
+
if (v.baseWeightBasisPoints >
|
|
215
|
+
v.maximumClaimWeightBasisPoints ||
|
|
216
|
+
v.maximumSourceGroupContributionWeightBasisPoints >
|
|
217
|
+
v.maximumClaimWeightBasisPoints)
|
|
218
|
+
throw new TrustValidationError("criterion weight bounds are invalid");
|
|
219
|
+
for (const key of [
|
|
220
|
+
"allowClaimSourceAttestation",
|
|
221
|
+
"contentRequired",
|
|
222
|
+
"quarantineEligible",
|
|
223
|
+
"recoveryEligible",
|
|
224
|
+
])
|
|
225
|
+
if (typeof v[key] !== "boolean")
|
|
226
|
+
throw new TrustValidationError(`criterion.${key} is invalid`);
|
|
227
|
+
assertSafeInteger(v.maximumAgeMs, "criterion.maximumAgeMs", 1);
|
|
228
|
+
if (v.maximumAgeMs > limits.maximumEvidenceAgeMs)
|
|
229
|
+
throw new TrustValidationError("criterion maximum age exceeds limit");
|
|
230
|
+
const challenge = v.challengeResolution;
|
|
231
|
+
assertExactKeys(challenge, [
|
|
232
|
+
"minimumCorroboratingGroups",
|
|
233
|
+
"minimumCorroboratingWeightBasisPoints",
|
|
234
|
+
"minimumOpposingGroups",
|
|
235
|
+
"minimumOpposingWeightBasisPoints",
|
|
236
|
+
], "challengeResolution");
|
|
237
|
+
const c = challenge;
|
|
238
|
+
for (const key of ["minimumCorroboratingGroups", "minimumOpposingGroups"])
|
|
239
|
+
assertSafeInteger(c[key], `challengeResolution.${key}`, 1);
|
|
240
|
+
for (const key of [
|
|
241
|
+
"minimumCorroboratingWeightBasisPoints",
|
|
242
|
+
"minimumOpposingWeightBasisPoints",
|
|
243
|
+
])
|
|
244
|
+
assertBasisPoints(c[key], `challengeResolution.${key}`, 1);
|
|
245
|
+
return {
|
|
246
|
+
...structuredClone(v),
|
|
247
|
+
claimAuthority: validateClaimAuthority(v.claimAuthority),
|
|
248
|
+
challengeAuthority: validateChallengeAuthority(v.challengeAuthority),
|
|
249
|
+
challengeResolution: structuredClone(c),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
function validateSourceBindings(value, groups) {
|
|
253
|
+
if (!Array.isArray(value))
|
|
254
|
+
throw new TrustValidationError("sourceBindings must be an array");
|
|
255
|
+
const bindings = value.map((entry) => {
|
|
256
|
+
assertExactKeys(entry, [
|
|
257
|
+
"sourceId",
|
|
258
|
+
"sourceKind",
|
|
259
|
+
"dependencyGroupId",
|
|
260
|
+
"roles",
|
|
261
|
+
"maximumWeightBasisPoints",
|
|
262
|
+
"validFromLogicalMs",
|
|
263
|
+
"validUntilLogicalMs",
|
|
264
|
+
], "source binding");
|
|
265
|
+
const v = entry;
|
|
266
|
+
assertIdentifier(v.sourceId, "sourceId");
|
|
267
|
+
if (v.sourceKind !== "local" && v.sourceKind !== "peer")
|
|
268
|
+
throw new TrustValidationError("sourceKind is invalid");
|
|
269
|
+
assertToken(v.dependencyGroupId, "dependencyGroupId");
|
|
270
|
+
if (!groups.has(v.dependencyGroupId))
|
|
271
|
+
throw new TrustValidationError("source binding group is undeclared");
|
|
272
|
+
if (!Array.isArray(v.roles))
|
|
273
|
+
throw new TrustValidationError("source binding roles are invalid");
|
|
274
|
+
const roles = v.roles.map((role) => {
|
|
275
|
+
if (!["claim", "attest", "challenge", "observe"].includes(role))
|
|
276
|
+
throw new TrustValidationError("source binding role is invalid");
|
|
277
|
+
return role;
|
|
278
|
+
});
|
|
279
|
+
assertOrdered(roles, "source binding roles");
|
|
280
|
+
if (roles.length === 0)
|
|
281
|
+
throw new TrustValidationError("source binding roles are empty");
|
|
282
|
+
assertBasisPoints(v.maximumWeightBasisPoints, "source binding maximumWeightBasisPoints");
|
|
283
|
+
assertSafeInteger(v.validFromLogicalMs, "source binding validFromLogicalMs");
|
|
284
|
+
assertSafeInteger(v.validUntilLogicalMs, "source binding validUntilLogicalMs", 1);
|
|
285
|
+
if (v.validUntilLogicalMs <= v.validFromLogicalMs)
|
|
286
|
+
throw new TrustValidationError("source binding validity is invalid");
|
|
287
|
+
return {
|
|
288
|
+
...structuredClone(v),
|
|
289
|
+
roles,
|
|
290
|
+
};
|
|
291
|
+
});
|
|
292
|
+
assertOrdered(bindings.map((b) => `${b.sourceKind}\u0000${b.sourceId}`), "sourceBindings");
|
|
293
|
+
return bindings;
|
|
294
|
+
}
|
|
295
|
+
function validateEligibility(value, dimensions, limits) {
|
|
296
|
+
if (!Array.isArray(value))
|
|
297
|
+
throw new TrustValidationError("eligibilityRules must be an array");
|
|
298
|
+
const rules = value.map((entry) => {
|
|
299
|
+
assertExactKeys(entry, ["ruleId", "maximumProfileAgeMs", "requirements"], "eligibility rule");
|
|
300
|
+
const v = entry;
|
|
301
|
+
assertToken(v.ruleId, "ruleId");
|
|
302
|
+
assertSafeInteger(v.maximumProfileAgeMs, "maximumProfileAgeMs", 1);
|
|
303
|
+
if (v.maximumProfileAgeMs > limits.maximumEvidenceAgeMs)
|
|
304
|
+
throw new TrustValidationError("maximumProfileAgeMs exceeds limit");
|
|
305
|
+
if (!Array.isArray(v.requirements) || v.requirements.length === 0)
|
|
306
|
+
throw new TrustValidationError("eligibility requirements are invalid");
|
|
307
|
+
const requirements = v.requirements.map((item) => {
|
|
308
|
+
assertExactKeys(item, [
|
|
309
|
+
"dimensionId",
|
|
310
|
+
"minimumScoreBasisPoints",
|
|
311
|
+
"maximumUncertaintyBasisPoints",
|
|
312
|
+
], "eligibility requirement");
|
|
313
|
+
const q = item;
|
|
314
|
+
assertToken(q.dimensionId, "dimensionId");
|
|
315
|
+
if (!dimensions.has(q.dimensionId))
|
|
316
|
+
throw new TrustValidationError("eligibility dimension is undeclared");
|
|
317
|
+
assertBasisPoints(q.minimumScoreBasisPoints, "minimumScoreBasisPoints");
|
|
318
|
+
assertBasisPoints(q.maximumUncertaintyBasisPoints, "maximumUncertaintyBasisPoints");
|
|
319
|
+
return structuredClone(q);
|
|
320
|
+
});
|
|
321
|
+
assertOrdered(requirements.map((q) => q.dimensionId), "eligibility requirements");
|
|
322
|
+
return {
|
|
323
|
+
ruleId: v.ruleId,
|
|
324
|
+
maximumProfileAgeMs: v.maximumProfileAgeMs,
|
|
325
|
+
requirements,
|
|
326
|
+
};
|
|
327
|
+
});
|
|
328
|
+
assertOrdered(rules.map((rule) => rule.ruleId), "eligibilityRules");
|
|
329
|
+
return rules;
|
|
330
|
+
}
|
|
331
|
+
function validateQuarantine(value, dimensions, limits) {
|
|
332
|
+
assertExactKeys(value, ["enabled", "rules", "maximumActiveRecords"], "quarantinePolicy");
|
|
333
|
+
const v = value;
|
|
334
|
+
if (typeof v.enabled !== "boolean" || !Array.isArray(v.rules))
|
|
335
|
+
throw new TrustValidationError("quarantinePolicy is invalid");
|
|
336
|
+
assertSafeInteger(v.maximumActiveRecords, "maximumActiveRecords", 1);
|
|
337
|
+
if (v.maximumActiveRecords > limits.maximumQuarantineHeads)
|
|
338
|
+
throw new TrustValidationError("maximumActiveRecords exceeds limit");
|
|
339
|
+
const rules = v.rules.map((item) => {
|
|
340
|
+
assertExactKeys(item, [
|
|
341
|
+
"dimensionId",
|
|
342
|
+
"activationScoreAtOrBelowBasisPoints",
|
|
343
|
+
"minimumNegativeClaimSourceGroups",
|
|
344
|
+
"minimumNegativeWeightBasisPoints",
|
|
345
|
+
"reviewIntervalMs",
|
|
346
|
+
], "quarantine rule");
|
|
347
|
+
const q = item;
|
|
348
|
+
assertToken(q.dimensionId, "dimensionId");
|
|
349
|
+
if (!dimensions.has(q.dimensionId))
|
|
350
|
+
throw new TrustValidationError("quarantine dimension is undeclared");
|
|
351
|
+
assertBasisPoints(q.activationScoreAtOrBelowBasisPoints, "activationScoreAtOrBelowBasisPoints");
|
|
352
|
+
assertSafeInteger(q.minimumNegativeClaimSourceGroups, "minimumNegativeClaimSourceGroups", 1);
|
|
353
|
+
assertBasisPoints(q.minimumNegativeWeightBasisPoints, "minimumNegativeWeightBasisPoints", 1);
|
|
354
|
+
assertSafeInteger(q.reviewIntervalMs, "reviewIntervalMs", 1);
|
|
355
|
+
if (q.reviewIntervalMs > limits.maximumReviewIntervalMs)
|
|
356
|
+
throw new TrustValidationError("review interval exceeds limit");
|
|
357
|
+
return structuredClone(q);
|
|
358
|
+
});
|
|
359
|
+
assertOrdered(rules.map((rule) => rule.dimensionId), "quarantine rules");
|
|
360
|
+
return {
|
|
361
|
+
enabled: v.enabled,
|
|
362
|
+
rules,
|
|
363
|
+
maximumActiveRecords: v.maximumActiveRecords,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
function validateRecovery(value, dimensions, limits) {
|
|
367
|
+
assertExactKeys(value, ["rules"], "recoveryPolicy");
|
|
368
|
+
const v = value;
|
|
369
|
+
if (!Array.isArray(v.rules))
|
|
370
|
+
throw new TrustValidationError("recoveryPolicy rules are invalid");
|
|
371
|
+
const rules = v.rules.map((item) => {
|
|
372
|
+
assertExactKeys(item, [
|
|
373
|
+
"dimensionId",
|
|
374
|
+
"recoveryScoreAtOrAboveBasisPoints",
|
|
375
|
+
"maximumRecoveryUncertaintyBasisPoints",
|
|
376
|
+
"minimumRecoveryClaimSourceGroups",
|
|
377
|
+
"minimumRecoveryWeightBasisPoints",
|
|
378
|
+
"maximumRecoveryEvidenceAgeMs",
|
|
379
|
+
], "recovery rule");
|
|
380
|
+
const q = item;
|
|
381
|
+
assertToken(q.dimensionId, "dimensionId");
|
|
382
|
+
if (!dimensions.has(q.dimensionId))
|
|
383
|
+
throw new TrustValidationError("recovery dimension is undeclared");
|
|
384
|
+
assertBasisPoints(q.recoveryScoreAtOrAboveBasisPoints, "recoveryScoreAtOrAboveBasisPoints");
|
|
385
|
+
assertBasisPoints(q.maximumRecoveryUncertaintyBasisPoints, "maximumRecoveryUncertaintyBasisPoints");
|
|
386
|
+
assertSafeInteger(q.minimumRecoveryClaimSourceGroups, "minimumRecoveryClaimSourceGroups", 1);
|
|
387
|
+
assertBasisPoints(q.minimumRecoveryWeightBasisPoints, "minimumRecoveryWeightBasisPoints", 1);
|
|
388
|
+
assertSafeInteger(q.maximumRecoveryEvidenceAgeMs, "maximumRecoveryEvidenceAgeMs", 1);
|
|
389
|
+
if (q.maximumRecoveryEvidenceAgeMs > limits.maximumEvidenceAgeMs)
|
|
390
|
+
throw new TrustValidationError("maximumRecoveryEvidenceAgeMs exceeds limit");
|
|
391
|
+
return structuredClone(q);
|
|
392
|
+
});
|
|
393
|
+
assertOrdered(rules.map((rule) => rule.dimensionId), "recovery rules");
|
|
394
|
+
return { rules };
|
|
395
|
+
}
|
|
396
|
+
export function validateEvidenceFusionPolicyV1(value, stateLimits = ceiling) {
|
|
397
|
+
const keys = [
|
|
398
|
+
"schemaVersion",
|
|
399
|
+
"policyId",
|
|
400
|
+
"policyVersion",
|
|
401
|
+
"parentPolicyDigest",
|
|
402
|
+
"mode",
|
|
403
|
+
"dimensions",
|
|
404
|
+
"criteria",
|
|
405
|
+
"sourceBindings",
|
|
406
|
+
"dependencyGroups",
|
|
407
|
+
"eligibilityRules",
|
|
408
|
+
"quarantinePolicy",
|
|
409
|
+
"recoveryPolicy",
|
|
410
|
+
"limits",
|
|
411
|
+
"diagnosticsPolicyId",
|
|
412
|
+
"redactionPolicyId",
|
|
413
|
+
];
|
|
414
|
+
assertExactKeys(value, keys, "fusion policy");
|
|
415
|
+
const v = value;
|
|
416
|
+
if (v.schemaVersion !== 1 || (v.mode !== "observe" && v.mode !== "restrict"))
|
|
417
|
+
throw new TrustValidationError("fusion policy is invalid");
|
|
418
|
+
assertIdentifier(v.policyId, "policyId");
|
|
419
|
+
assertSafeInteger(v.policyVersion, "policyVersion", 1);
|
|
420
|
+
assertNullableTrustDigest(v.parentPolicyDigest, "parentPolicyDigest");
|
|
421
|
+
assertIdentifier(v.diagnosticsPolicyId, "diagnosticsPolicyId");
|
|
422
|
+
assertIdentifier(v.redactionPolicyId, "redactionPolicyId");
|
|
423
|
+
const limits = validateLimits(v.limits, stateLimits);
|
|
424
|
+
if (!Array.isArray(v.dimensions) ||
|
|
425
|
+
v.dimensions.length === 0 ||
|
|
426
|
+
v.dimensions.length > limits.maximumDimensionsPerPolicy)
|
|
427
|
+
throw new TrustValidationError("policy dimensions exceed limit");
|
|
428
|
+
const dimensions = v.dimensions.map((dimension) => validateDimension(dimension, limits));
|
|
429
|
+
assertOrdered(dimensions.map((d) => d.dimensionId), "dimensions");
|
|
430
|
+
const dimensionIds = new Set(dimensions.map((d) => d.dimensionId));
|
|
431
|
+
if (!Array.isArray(v.criteria) ||
|
|
432
|
+
v.criteria.length === 0 ||
|
|
433
|
+
v.criteria.length > limits.maximumCriteriaPerPolicy)
|
|
434
|
+
throw new TrustValidationError("policy criteria exceed limit");
|
|
435
|
+
const criteria = v.criteria.map((q) => validateCriterion(q, dimensionIds, limits));
|
|
436
|
+
assertOrdered(criteria.map((q) => q.criterionId), "criteria");
|
|
437
|
+
if (!Array.isArray(v.dependencyGroups) ||
|
|
438
|
+
v.dependencyGroups.length === 0 ||
|
|
439
|
+
v.dependencyGroups.length > limits.maximumDependencyGroupsPerPolicy)
|
|
440
|
+
throw new TrustValidationError("policy dependency groups exceed limit");
|
|
441
|
+
const groups = v.dependencyGroups.map((entry) => {
|
|
442
|
+
assertExactKeys(entry, [
|
|
443
|
+
"dependencyGroupId",
|
|
444
|
+
"maximumAttestationWeightPerClaimBasisPoints",
|
|
445
|
+
"maximumProfileWeightPerDimensionCriterionBasisPoints",
|
|
446
|
+
], "dependency group");
|
|
447
|
+
const group = entry;
|
|
448
|
+
assertToken(group.dependencyGroupId, "dependencyGroupId");
|
|
449
|
+
assertBasisPoints(group.maximumAttestationWeightPerClaimBasisPoints, "maximumAttestationWeightPerClaimBasisPoints");
|
|
450
|
+
assertBasisPoints(group.maximumProfileWeightPerDimensionCriterionBasisPoints, "maximumProfileWeightPerDimensionCriterionBasisPoints");
|
|
451
|
+
return structuredClone(group);
|
|
452
|
+
});
|
|
453
|
+
assertOrdered(groups.map((g) => g.dependencyGroupId), "dependencyGroups");
|
|
454
|
+
if (!Array.isArray(v.sourceBindings) ||
|
|
455
|
+
v.sourceBindings.length > limits.maximumSourceBindingsPerPolicy)
|
|
456
|
+
throw new TrustValidationError("policy source bindings exceed limit");
|
|
457
|
+
const sourceBindings = validateSourceBindings(v.sourceBindings, new Set(groups.map((g) => g.dependencyGroupId)));
|
|
458
|
+
return deepFreeze({
|
|
459
|
+
schemaVersion: 1,
|
|
460
|
+
policyId: v.policyId,
|
|
461
|
+
policyVersion: v.policyVersion,
|
|
462
|
+
parentPolicyDigest: v.parentPolicyDigest,
|
|
463
|
+
mode: v.mode,
|
|
464
|
+
dimensions,
|
|
465
|
+
criteria,
|
|
466
|
+
sourceBindings,
|
|
467
|
+
dependencyGroups: groups,
|
|
468
|
+
eligibilityRules: validateEligibility(v.eligibilityRules, dimensionIds, limits),
|
|
469
|
+
quarantinePolicy: validateQuarantine(v.quarantinePolicy, dimensionIds, limits),
|
|
470
|
+
recoveryPolicy: validateRecovery(v.recoveryPolicy, dimensionIds, limits),
|
|
471
|
+
limits,
|
|
472
|
+
diagnosticsPolicyId: v.diagnosticsPolicyId,
|
|
473
|
+
redactionPolicyId: v.redactionPolicyId,
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
export const createEvidenceFusionPolicyV1 = validateEvidenceFusionPolicyV1;
|
|
477
|
+
export function digestEvidenceFusionPolicyV1(value) {
|
|
478
|
+
return digestTrustJsonV1("policy", validateEvidenceFusionPolicyV1(value));
|
|
479
|
+
}
|
|
480
|
+
const policyRequired = new Set([
|
|
481
|
+
"content_resolver",
|
|
482
|
+
"causal_authority",
|
|
483
|
+
"mesh_ingress",
|
|
484
|
+
"mesh_eligibility",
|
|
485
|
+
"profile_resolver",
|
|
486
|
+
"model_boundary",
|
|
487
|
+
"action_dispatcher",
|
|
488
|
+
"message_dispatcher",
|
|
489
|
+
]);
|
|
490
|
+
const upstreamRequired = new Set([
|
|
491
|
+
"causal_authority",
|
|
492
|
+
"mesh_ingress",
|
|
493
|
+
"mesh_eligibility",
|
|
494
|
+
"verified_mesh_origin_verifier",
|
|
495
|
+
"model_boundary",
|
|
496
|
+
"action_dispatcher",
|
|
497
|
+
"message_dispatcher",
|
|
498
|
+
]);
|
|
499
|
+
const bindingKeys = [
|
|
500
|
+
"schemaVersion",
|
|
501
|
+
"bindingName",
|
|
502
|
+
"bindingVersion",
|
|
503
|
+
"parentBindingDigest",
|
|
504
|
+
"bindingKind",
|
|
505
|
+
"implementationId",
|
|
506
|
+
"implementationDigest",
|
|
507
|
+
"configurationDigest",
|
|
508
|
+
"policyDigest",
|
|
509
|
+
"subjectMappingDigest",
|
|
510
|
+
"upstreamBindingDigest",
|
|
511
|
+
"registeredAtLogicalMs",
|
|
512
|
+
"validFromLogicalMs",
|
|
513
|
+
"validUntilLogicalMs",
|
|
514
|
+
"bindingDigest",
|
|
515
|
+
];
|
|
516
|
+
function validateBinding(value, verifyDigest) {
|
|
517
|
+
assertExactKeys(value, bindingKeys, "dependency binding");
|
|
518
|
+
const v = value;
|
|
519
|
+
if (v.schemaVersion !== 1 ||
|
|
520
|
+
![
|
|
521
|
+
"content_resolver",
|
|
522
|
+
"causal_authority",
|
|
523
|
+
"mesh_ingress",
|
|
524
|
+
"mesh_eligibility",
|
|
525
|
+
"profile_resolver",
|
|
526
|
+
"snapshot_protector",
|
|
527
|
+
"verified_mesh_origin_verifier",
|
|
528
|
+
"model_boundary",
|
|
529
|
+
"action_dispatcher",
|
|
530
|
+
"message_dispatcher",
|
|
531
|
+
].includes(v.bindingKind))
|
|
532
|
+
throw new TrustValidationError("dependency binding kind is invalid");
|
|
533
|
+
assertIdentifier(v.bindingName, "bindingName");
|
|
534
|
+
assertSafeInteger(v.bindingVersion, "bindingVersion", 1);
|
|
535
|
+
assertNullableTrustDigest(v.parentBindingDigest, "parentBindingDigest");
|
|
536
|
+
assertIdentifier(v.implementationId, "implementationId");
|
|
537
|
+
assertTrustDigest(v.implementationDigest, "implementationDigest");
|
|
538
|
+
assertTrustDigest(v.configurationDigest, "configurationDigest");
|
|
539
|
+
assertNullableTrustDigest(v.policyDigest, "policyDigest");
|
|
540
|
+
assertNullableTrustDigest(v.subjectMappingDigest, "subjectMappingDigest");
|
|
541
|
+
assertNullableTrustDigest(v.upstreamBindingDigest, "upstreamBindingDigest");
|
|
542
|
+
assertSafeInteger(v.registeredAtLogicalMs, "registeredAtLogicalMs");
|
|
543
|
+
assertSafeInteger(v.validFromLogicalMs, "validFromLogicalMs");
|
|
544
|
+
if (v.validFromLogicalMs < v.registeredAtLogicalMs)
|
|
545
|
+
throw new TrustValidationError("binding validity predates registration");
|
|
546
|
+
if (v.validUntilLogicalMs !== null) {
|
|
547
|
+
assertSafeInteger(v.validUntilLogicalMs, "validUntilLogicalMs", 1);
|
|
548
|
+
if (v.validUntilLogicalMs <= v.validFromLogicalMs)
|
|
549
|
+
throw new TrustValidationError("binding validity is invalid");
|
|
550
|
+
}
|
|
551
|
+
const kind = v.bindingKind;
|
|
552
|
+
if (policyRequired.has(kind) !== (v.policyDigest !== null))
|
|
553
|
+
throw new TrustValidationError("binding policy nullability is invalid");
|
|
554
|
+
if (upstreamRequired.has(kind) && v.upstreamBindingDigest === null)
|
|
555
|
+
throw new TrustValidationError("binding upstream is required");
|
|
556
|
+
const binding = structuredClone(v);
|
|
557
|
+
if (verifyDigest) {
|
|
558
|
+
assertTrustDigest(binding.bindingDigest, "bindingDigest");
|
|
559
|
+
if (binding.bindingDigest !==
|
|
560
|
+
digestTrustJsonV1("dependency-binding", (() => {
|
|
561
|
+
const { bindingDigest: _digest, ...body } = binding;
|
|
562
|
+
return body;
|
|
563
|
+
})()))
|
|
564
|
+
throw new TrustValidationError("binding digest is invalid");
|
|
565
|
+
}
|
|
566
|
+
return deepFreeze(binding);
|
|
567
|
+
}
|
|
568
|
+
export function validateEvidenceTrustDependencyBindingV1(value) {
|
|
569
|
+
return validateBinding(value, true);
|
|
570
|
+
}
|
|
571
|
+
export function createEvidenceTrustDependencyBindingV1(input) {
|
|
572
|
+
const body = structuredClone(input);
|
|
573
|
+
const bindingDigest = digestTrustJsonV1("dependency-binding", body);
|
|
574
|
+
return validateBinding({ ...body, bindingDigest }, true);
|
|
575
|
+
}
|
|
576
|
+
export function resolveEvidenceTrustDependencyBindingV1(bindings, bindingDigest, logicalTimeMs) {
|
|
577
|
+
assertTrustDigest(bindingDigest, "bindingDigest");
|
|
578
|
+
if (logicalTimeMs !== undefined)
|
|
579
|
+
assertSafeInteger(logicalTimeMs, "logicalTimeMs");
|
|
580
|
+
const binding = bindings.find((candidate) => candidate.bindingDigest === bindingDigest) ??
|
|
581
|
+
null;
|
|
582
|
+
if (!binding ||
|
|
583
|
+
(logicalTimeMs !== undefined &&
|
|
584
|
+
(binding.validFromLogicalMs > logicalTimeMs ||
|
|
585
|
+
(binding.validUntilLogicalMs !== null &&
|
|
586
|
+
logicalTimeMs >= binding.validUntilLogicalMs))))
|
|
587
|
+
return null;
|
|
588
|
+
return binding;
|
|
589
|
+
}
|
|
590
|
+
export function dependencyBindingHeadV1(binding) {
|
|
591
|
+
return {
|
|
592
|
+
bindingKind: binding.bindingKind,
|
|
593
|
+
bindingName: binding.bindingName,
|
|
594
|
+
bindingVersion: binding.bindingVersion,
|
|
595
|
+
bindingDigest: binding.bindingDigest,
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { EvidenceFusionDecisionV1, EvidenceFusionPolicyV1, TrustDimensionStateV1, TrustProfileHeadV1, TrustProfileStatusV1, TrustProfileV1 } from "./types.js";
|
|
2
|
+
export declare function digestTrustProfileKeyV1(value: {
|
|
3
|
+
readonly tenantId: string;
|
|
4
|
+
readonly scopeDigest: string;
|
|
5
|
+
readonly subjectDigest: string;
|
|
6
|
+
readonly policyDigest: string;
|
|
7
|
+
}): string;
|
|
8
|
+
export declare function digestTrustProfileV1(value: TrustProfileV1): string;
|
|
9
|
+
export declare function deriveTrustProfileStatusV1(dimensions: readonly TrustDimensionStateV1[], policy: EvidenceFusionPolicyV1): TrustProfileStatusV1;
|
|
10
|
+
export declare function validateTrustProfileV1(value: unknown): TrustProfileV1;
|
|
11
|
+
export declare function createTrustProfileV1(input: {
|
|
12
|
+
readonly fusionDecision: EvidenceFusionDecisionV1;
|
|
13
|
+
readonly policy: EvidenceFusionPolicyV1;
|
|
14
|
+
readonly revision: number;
|
|
15
|
+
readonly previousProfileId: string | null;
|
|
16
|
+
readonly previousProfileDigest: string | null;
|
|
17
|
+
readonly updatedAtLogicalMs: number;
|
|
18
|
+
}): TrustProfileV1;
|
|
19
|
+
export declare function trustProfileHeadV1(profile: TrustProfileV1): TrustProfileHeadV1;
|
|
20
|
+
export declare function validateTrustProfileHeadV1(value: unknown): TrustProfileHeadV1;
|
|
21
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACf,MAAM,YAAY,CAAC;AAiIpB,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GAAG,MAAM,CAWT;AACD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAKlE;AACD,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,SAAS,qBAAqB,EAAE,EAC5C,MAAM,EAAE,sBAAsB,GAC7B,oBAAoB,CA4BtB;AACD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAoErE;AACD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,cAAc,EAAE,wBAAwB,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC,GAAG,cAAc,CAkFjB;AACD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,GACtB,kBAAkB,CAapB;AACD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAU7E"}
|