@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/profile.js
ADDED
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { deepFreeze, digestTrustJsonV1, TrustValidationError, } from "./canonical.js";
|
|
2
|
+
import { digestScopeV1, digestSubjectV1 } from "./evidence.js";
|
|
3
|
+
import { digestEvidenceFusionPolicyV1, validateEvidenceFusionPolicyV1, } from "./policy.js";
|
|
4
|
+
import { validateEvidenceFusionDecisionV1 } from "./fusion.js";
|
|
5
|
+
import { assertExactKeys, assertIdentifier, assertSafeInteger, assertTrustDigest, validateEvidenceScopeV1, validateTrustSubjectV1, } from "./validation.js";
|
|
6
|
+
const compare = (left, right) => left < right ? -1 : left > right ? 1 : 0;
|
|
7
|
+
const profileKeys = [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"profileId",
|
|
10
|
+
"profileDigest",
|
|
11
|
+
"revision",
|
|
12
|
+
"previousProfileId",
|
|
13
|
+
"previousProfileDigest",
|
|
14
|
+
"tenantId",
|
|
15
|
+
"subject",
|
|
16
|
+
"subjectDigest",
|
|
17
|
+
"scope",
|
|
18
|
+
"scopeDigest",
|
|
19
|
+
"policyId",
|
|
20
|
+
"policyVersion",
|
|
21
|
+
"policyDigest",
|
|
22
|
+
"dimensions",
|
|
23
|
+
"fusionDecisionId",
|
|
24
|
+
"fusionDecisionDigest",
|
|
25
|
+
"inputSetDigest",
|
|
26
|
+
"updatedAtLogicalMs",
|
|
27
|
+
"status",
|
|
28
|
+
];
|
|
29
|
+
const headKeys = [
|
|
30
|
+
"profileKey",
|
|
31
|
+
"profileId",
|
|
32
|
+
"profileDigest",
|
|
33
|
+
"revision",
|
|
34
|
+
];
|
|
35
|
+
function assertDimensions(value) {
|
|
36
|
+
if (!Array.isArray(value))
|
|
37
|
+
throw new TrustValidationError("profile dimensions are invalid");
|
|
38
|
+
const dimensions = value;
|
|
39
|
+
for (const dimension of dimensions) {
|
|
40
|
+
assertExactKeys(dimension, [
|
|
41
|
+
"dimensionId",
|
|
42
|
+
"scoreBasisPoints",
|
|
43
|
+
"uncertaintyBasisPoints",
|
|
44
|
+
"effectiveWeightBasisPoints",
|
|
45
|
+
"coverageBasisPoints",
|
|
46
|
+
"ageUncertaintyBasisPoints",
|
|
47
|
+
"contradictionPressureBasisPoints",
|
|
48
|
+
"includedClaimIds",
|
|
49
|
+
"excludedClaimIds",
|
|
50
|
+
"claimSourceDependencyGroupIds",
|
|
51
|
+
"latestQualifyingEffectiveAtLogicalMs",
|
|
52
|
+
], "profile dimension");
|
|
53
|
+
assertIdentifier(dimension.dimensionId, "dimensionId");
|
|
54
|
+
for (const key of [
|
|
55
|
+
"scoreBasisPoints",
|
|
56
|
+
"uncertaintyBasisPoints",
|
|
57
|
+
"coverageBasisPoints",
|
|
58
|
+
"ageUncertaintyBasisPoints",
|
|
59
|
+
"contradictionPressureBasisPoints",
|
|
60
|
+
]) {
|
|
61
|
+
assertSafeInteger(dimension[key], `dimension.${key}`);
|
|
62
|
+
if (dimension[key] > 10_000)
|
|
63
|
+
throw new TrustValidationError(`dimension.${key} is outside basis-point range`);
|
|
64
|
+
}
|
|
65
|
+
assertSafeInteger(dimension.effectiveWeightBasisPoints, "dimension.effectiveWeightBasisPoints");
|
|
66
|
+
if (dimension.latestQualifyingEffectiveAtLogicalMs !== null)
|
|
67
|
+
assertSafeInteger(dimension.latestQualifyingEffectiveAtLogicalMs, "latestQualifyingEffectiveAtLogicalMs");
|
|
68
|
+
for (const key of [
|
|
69
|
+
"includedClaimIds",
|
|
70
|
+
"excludedClaimIds",
|
|
71
|
+
"claimSourceDependencyGroupIds",
|
|
72
|
+
]) {
|
|
73
|
+
if (!Array.isArray(dimension[key]) ||
|
|
74
|
+
dimension[key].some((item) => {
|
|
75
|
+
try {
|
|
76
|
+
assertIdentifier(item, `dimension.${key}`);
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
}) ||
|
|
83
|
+
dimension[key].some((item, index) => index > 0 && compare(dimension[key][index - 1], item) >= 0))
|
|
84
|
+
throw new TrustValidationError(`dimension.${key} must be canonically ordered and unique`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (dimensions.some((item, index) => index > 0 &&
|
|
88
|
+
compare(dimensions[index - 1].dimensionId, item.dimensionId) >= 0))
|
|
89
|
+
throw new TrustValidationError("profile dimensions must be canonically ordered and unique");
|
|
90
|
+
return dimensions;
|
|
91
|
+
}
|
|
92
|
+
function profileBody(profile) {
|
|
93
|
+
const { profileId: _id, profileDigest: _digest, ...body } = profile;
|
|
94
|
+
return body;
|
|
95
|
+
}
|
|
96
|
+
export function digestTrustProfileKeyV1(value) {
|
|
97
|
+
assertExactKeys(value, ["tenantId", "scopeDigest", "subjectDigest", "policyDigest"], "profile key");
|
|
98
|
+
assertIdentifier(value.tenantId, "tenantId");
|
|
99
|
+
assertTrustDigest(value.scopeDigest, "scopeDigest");
|
|
100
|
+
assertTrustDigest(value.subjectDigest, "subjectDigest");
|
|
101
|
+
assertTrustDigest(value.policyDigest, "policyDigest");
|
|
102
|
+
return digestTrustJsonV1("profile-key", value);
|
|
103
|
+
}
|
|
104
|
+
export function digestTrustProfileV1(value) {
|
|
105
|
+
return digestTrustJsonV1("profile", profileBody(value));
|
|
106
|
+
}
|
|
107
|
+
export function deriveTrustProfileStatusV1(dimensions, policy) {
|
|
108
|
+
if (dimensions.some((dimension) => dimension.contradictionPressureBasisPoints > 0))
|
|
109
|
+
return "contested";
|
|
110
|
+
if (dimensions.every((dimension) => dimension.effectiveWeightBasisPoints === 0))
|
|
111
|
+
return "unknown";
|
|
112
|
+
const byId = new Map(policy.dimensions.map((dimension) => [dimension.dimensionId, dimension]));
|
|
113
|
+
if (dimensions.some((dimension) => {
|
|
114
|
+
const configured = byId.get(dimension.dimensionId);
|
|
115
|
+
return (!configured ||
|
|
116
|
+
dimension.scoreBasisPoints <=
|
|
117
|
+
configured.degradedScoreAtOrBelowBasisPoints ||
|
|
118
|
+
dimension.uncertaintyBasisPoints >=
|
|
119
|
+
configured.degradedUncertaintyAtOrAboveBasisPoints);
|
|
120
|
+
}))
|
|
121
|
+
return "degraded";
|
|
122
|
+
return "supported";
|
|
123
|
+
}
|
|
124
|
+
export function validateTrustProfileV1(value) {
|
|
125
|
+
assertExactKeys(value, profileKeys, "trust profile");
|
|
126
|
+
const profile = value;
|
|
127
|
+
if (profile.schemaVersion !== 1)
|
|
128
|
+
throw new TrustValidationError("profile schema is invalid");
|
|
129
|
+
assertIdentifier(profile.profileId, "profileId");
|
|
130
|
+
assertTrustDigest(profile.profileDigest, "profileDigest");
|
|
131
|
+
assertSafeInteger(profile.revision, "revision", 1);
|
|
132
|
+
if ((profile.previousProfileId === null) !==
|
|
133
|
+
(profile.previousProfileDigest === null))
|
|
134
|
+
throw new TrustValidationError("profile predecessor is inconsistent");
|
|
135
|
+
if (profile.previousProfileId !== null) {
|
|
136
|
+
assertIdentifier(profile.previousProfileId, "previousProfileId");
|
|
137
|
+
assertTrustDigest(profile.previousProfileDigest, "previousProfileDigest");
|
|
138
|
+
if (profile.previousProfileId !== `profile:${profile.previousProfileDigest}`)
|
|
139
|
+
throw new TrustValidationError("profile predecessor digest is invalid");
|
|
140
|
+
}
|
|
141
|
+
assertIdentifier(profile.tenantId, "tenantId");
|
|
142
|
+
const subject = validateTrustSubjectV1(profile.subject), scope = validateEvidenceScopeV1(profile.scope);
|
|
143
|
+
if (scope.tenantId !== profile.tenantId ||
|
|
144
|
+
profile.subjectDigest !== digestSubjectV1(subject) ||
|
|
145
|
+
profile.scopeDigest !== digestScopeV1(scope))
|
|
146
|
+
throw new TrustValidationError("profile subject or scope binding is invalid");
|
|
147
|
+
assertTrustDigest(profile.subjectDigest, "subjectDigest");
|
|
148
|
+
assertTrustDigest(profile.scopeDigest, "scopeDigest");
|
|
149
|
+
assertIdentifier(profile.policyId, "policyId");
|
|
150
|
+
assertSafeInteger(profile.policyVersion, "policyVersion", 1);
|
|
151
|
+
assertTrustDigest(profile.policyDigest, "policyDigest");
|
|
152
|
+
assertDimensions(profile.dimensions);
|
|
153
|
+
for (const key of ["fusionDecisionId"])
|
|
154
|
+
assertIdentifier(profile[key], key);
|
|
155
|
+
for (const key of ["fusionDecisionDigest", "inputSetDigest"])
|
|
156
|
+
assertTrustDigest(profile[key], key);
|
|
157
|
+
assertSafeInteger(profile.updatedAtLogicalMs, "updatedAtLogicalMs");
|
|
158
|
+
if (profile.dimensions.some((dimension) => dimension.latestQualifyingEffectiveAtLogicalMs !== null &&
|
|
159
|
+
dimension.latestQualifyingEffectiveAtLogicalMs >
|
|
160
|
+
profile.updatedAtLogicalMs))
|
|
161
|
+
throw new TrustValidationError("profile qualifying evidence comes from the future");
|
|
162
|
+
if (!["unknown", "supported", "contested", "degraded"].includes(profile.status))
|
|
163
|
+
throw new TrustValidationError("profile status is invalid");
|
|
164
|
+
if (profile.profileId !== `profile:${profile.profileDigest}` ||
|
|
165
|
+
profile.profileDigest !== digestTrustProfileV1(profile))
|
|
166
|
+
throw new TrustValidationError("profile digest is invalid");
|
|
167
|
+
return deepFreeze(structuredClone({ ...profile, subject, scope }));
|
|
168
|
+
}
|
|
169
|
+
export function createTrustProfileV1(input) {
|
|
170
|
+
assertExactKeys(input, [
|
|
171
|
+
"fusionDecision",
|
|
172
|
+
"policy",
|
|
173
|
+
"revision",
|
|
174
|
+
"previousProfileId",
|
|
175
|
+
"previousProfileDigest",
|
|
176
|
+
"updatedAtLogicalMs",
|
|
177
|
+
], "profile creation input");
|
|
178
|
+
const decision = validateEvidenceFusionDecisionV1(input.fusionDecision);
|
|
179
|
+
const policy = validateEvidenceFusionPolicyV1(input.policy);
|
|
180
|
+
const policyDigest = digestEvidenceFusionPolicyV1(policy);
|
|
181
|
+
if (decision.policyId !== policy.policyId ||
|
|
182
|
+
decision.policyVersion !== policy.policyVersion ||
|
|
183
|
+
decision.policyDigest !== policyDigest)
|
|
184
|
+
throw new TrustValidationError("profile policy does not bind fusion decision");
|
|
185
|
+
if (input.updatedAtLogicalMs !== decision.evaluatedAtLogicalMs)
|
|
186
|
+
throw new TrustValidationError("profile clock does not match fusion decision");
|
|
187
|
+
if (decision.previousProfileDigest !== input.previousProfileDigest)
|
|
188
|
+
throw new TrustValidationError("profile predecessor does not match fusion decision");
|
|
189
|
+
assertSafeInteger(input.revision, "revision", 1);
|
|
190
|
+
assertSafeInteger(input.updatedAtLogicalMs, "updatedAtLogicalMs");
|
|
191
|
+
if ((input.revision === 1) !==
|
|
192
|
+
(input.previousProfileId === null && input.previousProfileDigest === null))
|
|
193
|
+
throw new TrustValidationError("profile revision lineage is invalid");
|
|
194
|
+
if (input.revision > 1 &&
|
|
195
|
+
(input.previousProfileId === null || input.previousProfileDigest === null))
|
|
196
|
+
throw new TrustValidationError("profile revision lineage is invalid");
|
|
197
|
+
const dimensions = assertDimensions(decision.dimensions);
|
|
198
|
+
if (dimensions.length !== policy.dimensions.length ||
|
|
199
|
+
dimensions.some((dimension, index) => dimension.dimensionId !== policy.dimensions[index]?.dimensionId))
|
|
200
|
+
throw new TrustValidationError("profile dimensions do not match policy");
|
|
201
|
+
const bare = {
|
|
202
|
+
schemaVersion: 1,
|
|
203
|
+
revision: input.revision,
|
|
204
|
+
previousProfileId: input.previousProfileId,
|
|
205
|
+
previousProfileDigest: input.previousProfileDigest,
|
|
206
|
+
tenantId: decision.tenantId,
|
|
207
|
+
subject: decision.subject,
|
|
208
|
+
subjectDigest: decision.subjectDigest,
|
|
209
|
+
scope: decision.scope,
|
|
210
|
+
scopeDigest: decision.scopeDigest,
|
|
211
|
+
policyId: decision.policyId,
|
|
212
|
+
policyVersion: decision.policyVersion,
|
|
213
|
+
policyDigest: decision.policyDigest,
|
|
214
|
+
dimensions,
|
|
215
|
+
fusionDecisionId: decision.fusionDecisionId,
|
|
216
|
+
fusionDecisionDigest: decision.fusionDecisionDigest,
|
|
217
|
+
inputSetDigest: decision.inputSetDigest,
|
|
218
|
+
updatedAtLogicalMs: input.updatedAtLogicalMs,
|
|
219
|
+
status: deriveTrustProfileStatusV1(dimensions, policy),
|
|
220
|
+
};
|
|
221
|
+
const profileDigest = digestTrustJsonV1("profile", bare);
|
|
222
|
+
return validateTrustProfileV1({
|
|
223
|
+
...bare,
|
|
224
|
+
profileDigest,
|
|
225
|
+
profileId: `profile:${profileDigest}`,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
export function trustProfileHeadV1(profile) {
|
|
229
|
+
const value = validateTrustProfileV1(profile);
|
|
230
|
+
return deepFreeze({
|
|
231
|
+
profileKey: digestTrustProfileKeyV1({
|
|
232
|
+
tenantId: value.tenantId,
|
|
233
|
+
scopeDigest: value.scopeDigest,
|
|
234
|
+
subjectDigest: value.subjectDigest,
|
|
235
|
+
policyDigest: value.policyDigest,
|
|
236
|
+
}),
|
|
237
|
+
profileId: value.profileId,
|
|
238
|
+
profileDigest: value.profileDigest,
|
|
239
|
+
revision: value.revision,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
export function validateTrustProfileHeadV1(value) {
|
|
243
|
+
assertExactKeys(value, headKeys, "profile head");
|
|
244
|
+
const head = value;
|
|
245
|
+
assertTrustDigest(head.profileKey, "profileKey");
|
|
246
|
+
assertIdentifier(head.profileId, "profileId");
|
|
247
|
+
assertTrustDigest(head.profileDigest, "profileDigest");
|
|
248
|
+
assertSafeInteger(head.revision, "revision", 1);
|
|
249
|
+
if (head.profileId !== `profile:${head.profileDigest}`)
|
|
250
|
+
throw new TrustValidationError("profile head digest is invalid");
|
|
251
|
+
return deepFreeze(structuredClone(head));
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAS/D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CACtD,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,MAAM,WAAW,GAAG;IAClB,eAAe;IACf,WAAW;IACX,eAAe;IACf,UAAU;IACV,mBAAmB;IACnB,uBAAuB;IACvB,UAAU;IACV,SAAS;IACT,eAAe;IACf,OAAO;IACP,aAAa;IACb,UAAU;IACV,eAAe;IACf,cAAc;IACd,YAAY;IACZ,kBAAkB;IAClB,sBAAsB;IACtB,gBAAgB;IAChB,oBAAoB;IACpB,QAAQ;CACA,CAAC;AACX,MAAM,QAAQ,GAAG;IACf,YAAY;IACZ,WAAW;IACX,eAAe;IACf,UAAU;CACF,CAAC;AAEX,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACvB,MAAM,IAAI,oBAAoB,CAAC,gCAAgC,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,KAAgC,CAAC;IACpD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,eAAe,CACb,SAAS,EACT;YACE,aAAa;YACb,kBAAkB;YAClB,wBAAwB;YACxB,4BAA4B;YAC5B,qBAAqB;YACrB,2BAA2B;YAC3B,kCAAkC;YAClC,kBAAkB;YAClB,kBAAkB;YAClB,+BAA+B;YAC/B,sCAAsC;SACvC,EACD,mBAAmB,CACpB,CAAC;QACF,gBAAgB,CAAC,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI;YAChB,kBAAkB;YAClB,wBAAwB;YACxB,qBAAqB;YACrB,2BAA2B;YAC3B,kCAAkC;SAC1B,EAAE,CAAC;YACX,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,aAAa,GAAG,EAAE,CAAC,CAAC;YACtD,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM;gBACzB,MAAM,IAAI,oBAAoB,CAC5B,aAAa,GAAG,+BAA+B,CAChD,CAAC;QACN,CAAC;QACD,iBAAiB,CACf,SAAS,CAAC,0BAA0B,EACpC,sCAAsC,CACvC,CAAC;QACF,IAAI,SAAS,CAAC,oCAAoC,KAAK,IAAI;YACzD,iBAAiB,CACf,SAAS,CAAC,oCAAoC,EAC9C,sCAAsC,CACvC,CAAC;QACJ,KAAK,MAAM,GAAG,IAAI;YAChB,kBAAkB;YAClB,kBAAkB;YAClB,+BAA+B;SACvB,EAAE,CAAC;YACX,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC9B,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC3B,IAAI,CAAC;wBACH,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,EAAE,CAAC,CAAC;wBAC3C,OAAO,KAAK,CAAC;oBACf,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC,CAAC;gBACF,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CACjB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAC7D;gBAED,MAAM,IAAI,oBAAoB,CAC5B,aAAa,GAAG,yCAAyC,CAC1D,CAAC;QACN,CAAC;IACH,CAAC;IACD,IACE,UAAU,CAAC,IAAI,CACb,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,KAAK,GAAG,CAAC;QACT,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CACpE;QAED,MAAM,IAAI,oBAAoB,CAC5B,2DAA2D,CAC5D,CAAC;IACJ,OAAO,UAAU,CAAC;AACpB,CAAC;AACD,SAAS,WAAW,CAClB,OAAuB;IAEvB,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC;AACD,MAAM,UAAU,uBAAuB,CAAC,KAKvC;IACC,eAAe,CACb,KAAK,EACL,CAAC,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,CAAC,EAC5D,aAAa,CACd,CAAC;IACF,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC7C,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACpD,iBAAiB,CAAC,KAAK,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IACxD,iBAAiB,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACtD,OAAO,iBAAiB,CAAC,aAAa,EAAE,KAAkB,CAAC,CAAC;AAC9D,CAAC;AACD,MAAM,UAAU,oBAAoB,CAAC,KAAqB;IACxD,OAAO,iBAAiB,CACtB,SAAS,EACT,WAAW,CAAC,KAAK,CAAyB,CAC3C,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,0BAA0B,CACxC,UAA4C,EAC5C,MAA8B;IAE9B,IACE,UAAU,CAAC,IAAI,CACb,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,gCAAgC,GAAG,CAAC,CAC9D;QAED,OAAO,WAAW,CAAC;IACrB,IACE,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,0BAA0B,KAAK,CAAC,CAAC;QAE3E,OAAO,SAAS,CAAC;IACnB,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CACzE,CAAC;IACF,IACE,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACnD,OAAO,CACL,CAAC,UAAU;YACX,SAAS,CAAC,gBAAgB;gBACxB,UAAU,CAAC,iCAAiC;YAC9C,SAAS,CAAC,sBAAsB;gBAC9B,UAAU,CAAC,uCAAuC,CACrD,CAAC;IACJ,CAAC,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,OAAO,WAAW,CAAC;AACrB,CAAC;AACD,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,KAAkC,CAAC;IACnD,IAAI,OAAO,CAAC,aAAa,KAAK,CAAC;QAC7B,MAAM,IAAI,oBAAoB,CAAC,2BAA2B,CAAC,CAAC;IAC9D,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACjD,iBAAiB,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC1D,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IACnD,IACE,CAAC,OAAO,CAAC,iBAAiB,KAAK,IAAI,CAAC;QACpC,CAAC,OAAO,CAAC,qBAAqB,KAAK,IAAI,CAAC;QAExC,MAAM,IAAI,oBAAoB,CAAC,qCAAqC,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QACvC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;QACjE,iBAAiB,CAAC,OAAO,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;QAC1E,IACE,OAAO,CAAC,iBAAiB,KAAK,WAAW,OAAO,CAAC,qBAAqB,EAAE;YAExE,MAAM,IAAI,oBAAoB,CAAC,uCAAuC,CAAC,CAAC;IAC5E,CAAC;IACD,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,EACrD,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjD,IACE,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;QACnC,OAAO,CAAC,aAAa,KAAK,eAAe,CAAC,OAAO,CAAC;QAClD,OAAO,CAAC,WAAW,KAAK,aAAa,CAAC,KAAK,CAAC;QAE5C,MAAM,IAAI,oBAAoB,CAC5B,6CAA6C,CAC9C,CAAC;IACJ,iBAAiB,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC1D,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACtD,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC/C,iBAAiB,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;IAC7D,iBAAiB,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACxD,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAU;QAC7C,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,gBAAgB,CAAU;QACnE,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACvC,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;IACpE,IACE,OAAO,CAAC,UAAU,CAAC,IAAI,CACrB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,oCAAoC,KAAK,IAAI;QACvD,SAAS,CAAC,oCAAoC;YAC5C,OAAO,CAAC,kBAAkB,CAC/B;QAED,MAAM,IAAI,oBAAoB,CAC5B,mDAAmD,CACpD,CAAC;IACJ,IACE,CAAE,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAc,CAAC,QAAQ,CACvE,OAAO,CAAC,MAAM,CACf;QAED,MAAM,IAAI,oBAAoB,CAAC,2BAA2B,CAAC,CAAC;IAC9D,IACE,OAAO,CAAC,SAAS,KAAK,WAAW,OAAO,CAAC,aAAa,EAAE;QACxD,OAAO,CAAC,aAAa,KAAK,oBAAoB,CAAC,OAAO,CAAC;QAEvD,MAAM,IAAI,oBAAoB,CAAC,2BAA2B,CAAC,CAAC;IAC9D,OAAO,UAAU,CACf,eAAe,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAmB,CAClE,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,oBAAoB,CAAC,KAOpC;IACC,eAAe,CACb,KAAK,EACL;QACE,gBAAgB;QAChB,QAAQ;QACR,UAAU;QACV,mBAAmB;QACnB,uBAAuB;QACvB,oBAAoB;KACrB,EACD,wBAAwB,CACzB,CAAC;IACF,MAAM,QAAQ,GAAG,gCAAgC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAC1D,IACE,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;QACrC,QAAQ,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa;QAC/C,QAAQ,CAAC,YAAY,KAAK,YAAY;QAEtC,MAAM,IAAI,oBAAoB,CAC5B,8CAA8C,CAC/C,CAAC;IACJ,IAAI,KAAK,CAAC,kBAAkB,KAAK,QAAQ,CAAC,oBAAoB;QAC5D,MAAM,IAAI,oBAAoB,CAC5B,8CAA8C,CAC/C,CAAC;IACJ,IAAI,QAAQ,CAAC,qBAAqB,KAAK,KAAK,CAAC,qBAAqB;QAChE,MAAM,IAAI,oBAAoB,CAC5B,oDAAoD,CACrD,CAAC;IACJ,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IACjD,iBAAiB,CAAC,KAAK,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;IAClE,IACE,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC;QACtB,CAAC,KAAK,CAAC,iBAAiB,KAAK,IAAI,IAAI,KAAK,CAAC,qBAAqB,KAAK,IAAI,CAAC;QAE1E,MAAM,IAAI,oBAAoB,CAAC,qCAAqC,CAAC,CAAC;IACxE,IACE,KAAK,CAAC,QAAQ,GAAG,CAAC;QAClB,CAAC,KAAK,CAAC,iBAAiB,KAAK,IAAI,IAAI,KAAK,CAAC,qBAAqB,KAAK,IAAI,CAAC;QAE1E,MAAM,IAAI,oBAAoB,CAAC,qCAAqC,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACzD,IACE,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM;QAC9C,UAAU,CAAC,IAAI,CACb,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CACnB,SAAS,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,WAAW,CAClE;QAED,MAAM,IAAI,oBAAoB,CAAC,wCAAwC,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG;QACX,aAAa,EAAE,CAAU;QACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;QAClD,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,UAAU;QACV,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;QAC3C,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;QACnD,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,MAAM,EAAE,0BAA0B,CAAC,UAAU,EAAE,MAAM,CAAC;KACvD,CAAC;IACF,MAAM,aAAa,GAAG,iBAAiB,CACrC,SAAS,EACT,IAA4B,CAC7B,CAAC;IACF,OAAO,sBAAsB,CAAC;QAC5B,GAAG,IAAI;QACP,aAAa;QACb,SAAS,EAAE,WAAW,aAAa,EAAE;KACtC,CAAC,CAAC;AACL,CAAC;AACD,MAAM,UAAU,kBAAkB,CAChC,OAAuB;IAEvB,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,UAAU,CAAC;QAChB,UAAU,EAAE,uBAAuB,CAAC;YAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACH,CAAC,CAAC;AAC3B,CAAC;AACD,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,KAAsC,CAAC;IACpD,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACjD,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9C,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IACvD,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAChD,IAAI,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,aAAa,EAAE;QACpD,MAAM,IAAI,oBAAoB,CAAC,gCAAgC,CAAC,CAAC;IACnE,OAAO,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { EvidenceFusionDecisionV1, EvidenceFusionPolicyV1, EvidenceTrustStateV1, QuarantineHeadV1, QuarantineRecordV1, QuarantineRecoveryDecisionV1, TrustProfileV1 } from "./types.js";
|
|
2
|
+
export interface QuarantineEvidenceTupleV1 {
|
|
3
|
+
readonly kind: "claim" | "attestation" | "content_resolution";
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly digest: string;
|
|
6
|
+
}
|
|
7
|
+
export interface QuarantineActivationProjectionV1 {
|
|
8
|
+
readonly dimensionId: string;
|
|
9
|
+
readonly activationEvidence: readonly QuarantineEvidenceTupleV1[];
|
|
10
|
+
readonly activationDependencyGroupIds: readonly string[];
|
|
11
|
+
readonly effectiveNegativeWeightBasisPoints: number;
|
|
12
|
+
readonly reviewIntervalMs: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function validateQuarantineEvidenceTuplesV1(value: unknown, options?: {
|
|
15
|
+
readonly nonEmpty?: boolean;
|
|
16
|
+
}): readonly QuarantineEvidenceTupleV1[];
|
|
17
|
+
export declare function digestTrustQuarantineKeyV1(value: {
|
|
18
|
+
readonly tenantId: string;
|
|
19
|
+
readonly subjectDigest: string;
|
|
20
|
+
readonly scopeDigest: string;
|
|
21
|
+
readonly dimensionId: string;
|
|
22
|
+
readonly policyDigest: string;
|
|
23
|
+
}): string;
|
|
24
|
+
export declare function digestQuarantineEvidenceSetV1(value: readonly QuarantineEvidenceTupleV1[], domain?: "quarantine-evidence-set" | "recovery-evidence-set"): string;
|
|
25
|
+
export declare const digestTrustQuarantineEvidenceSetV1: (value: readonly QuarantineEvidenceTupleV1[]) => string;
|
|
26
|
+
export declare const digestTrustRecoveryEvidenceSetV1: (value: readonly QuarantineEvidenceTupleV1[]) => string;
|
|
27
|
+
export declare function digestQuarantineRecordV1(value: QuarantineRecordV1): string;
|
|
28
|
+
export declare function validateQuarantineRecordV1(value: unknown): QuarantineRecordV1;
|
|
29
|
+
export declare function createQuarantineRecordV1(input: Omit<QuarantineRecordV1, "quarantineId">): QuarantineRecordV1;
|
|
30
|
+
export declare function createActiveQuarantineRecordV1(input: {
|
|
31
|
+
readonly revision: number;
|
|
32
|
+
readonly previousRecordId: string | null;
|
|
33
|
+
readonly tenantId: string;
|
|
34
|
+
readonly subjectDigest: string;
|
|
35
|
+
readonly scopeDigest: string;
|
|
36
|
+
readonly dimensionId: string;
|
|
37
|
+
readonly policyDigest: string;
|
|
38
|
+
readonly fusionDecisionId: string;
|
|
39
|
+
readonly activationEvidence: readonly QuarantineEvidenceTupleV1[];
|
|
40
|
+
readonly activationDependencyGroupIds: readonly string[];
|
|
41
|
+
readonly activatedAtLogicalMs: number;
|
|
42
|
+
readonly reviewIntervalMs: number;
|
|
43
|
+
}): QuarantineRecordV1;
|
|
44
|
+
export declare function deriveQuarantineActivationsV1(state: EvidenceTrustStateV1, profileValue: TrustProfileV1, decisionValue: EvidenceFusionDecisionV1, policyValue: EvidenceFusionPolicyV1, acceptedAfterLogicalMs?: number | null): readonly QuarantineActivationProjectionV1[];
|
|
45
|
+
export declare function evaluateQuarantineRecoveryV1(state: EvidenceTrustStateV1, quarantineValue: QuarantineRecordV1, profileValue: TrustProfileV1, decisionValue: EvidenceFusionDecisionV1, policyValue: EvidenceFusionPolicyV1, logicalTimeMs: number): QuarantineRecoveryDecisionV1;
|
|
46
|
+
export declare function createReviewRequiredQuarantineRecordV1(value: QuarantineRecordV1, reviewedAtLogicalMs: number): QuarantineRecordV1;
|
|
47
|
+
export declare function digestQuarantineRecoveryDecisionV1(value: QuarantineRecoveryDecisionV1): string;
|
|
48
|
+
export declare function validateQuarantineRecoveryDecisionV1(value: unknown): QuarantineRecoveryDecisionV1;
|
|
49
|
+
export declare function createQuarantineRecoveryDecisionV1(input: Omit<QuarantineRecoveryDecisionV1, "recoveryDecisionId" | "recoveryDecisionDigest">): QuarantineRecoveryDecisionV1;
|
|
50
|
+
export declare function createRecoveredQuarantineRecordV1(value: QuarantineRecordV1, decisionValue: QuarantineRecoveryDecisionV1): QuarantineRecordV1;
|
|
51
|
+
export declare function quarantineHeadV1(value: QuarantineRecordV1): QuarantineHeadV1;
|
|
52
|
+
export declare function validateQuarantineHeadV1(value: unknown): QuarantineHeadV1;
|
|
53
|
+
//# sourceMappingURL=quarantine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quarantine.d.ts","sourceRoot":"","sources":["../src/quarantine.ts"],"names":[],"mappings":"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"}
|