@emilia-protocol/gate 0.14.0 → 0.15.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/CHANGELOG.md +60 -1
- package/README.md +32 -1
- package/aeb-consumption-store.js +3 -0
- package/dist/aeb-consumption-store.d.ts +88 -0
- package/dist/aeb-consumption-store.d.ts.map +1 -0
- package/dist/aeb-consumption-store.js +471 -0
- package/dist/aeb-consumption-store.js.map +1 -0
- package/dist/capability-receipt.d.ts +8 -0
- package/dist/capability-receipt.d.ts.map +1 -1
- package/dist/capability-receipt.js +17 -0
- package/dist/capability-receipt.js.map +1 -1
- package/dist/index.d.ts +13 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/dist/proposal-to-effect-postgres.d.ts +144 -0
- package/dist/proposal-to-effect-postgres.d.ts.map +1 -0
- package/dist/proposal-to-effect-postgres.js +1578 -0
- package/dist/proposal-to-effect-postgres.js.map +1 -0
- package/dist/proposal-to-effect-status-head-store.d.ts +72 -0
- package/dist/proposal-to-effect-status-head-store.d.ts.map +1 -0
- package/dist/proposal-to-effect-status-head-store.js +355 -0
- package/dist/proposal-to-effect-status-head-store.js.map +1 -0
- package/dist/proposal-to-effect-status.d.ts +55 -0
- package/dist/proposal-to-effect-status.d.ts.map +1 -0
- package/dist/proposal-to-effect-status.js +294 -0
- package/dist/proposal-to-effect-status.js.map +1 -0
- package/dist/proposal-to-effect.d.ts +151 -3
- package/dist/proposal-to-effect.d.ts.map +1 -1
- package/dist/proposal-to-effect.js +589 -46
- package/dist/proposal-to-effect.js.map +1 -1
- package/dist/remedy-case-set-postgres.d.ts +73 -0
- package/dist/remedy-case-set-postgres.d.ts.map +1 -0
- package/dist/remedy-case-set-postgres.js +846 -0
- package/dist/remedy-case-set-postgres.js.map +1 -0
- package/dist/remedy-case-set.d.ts +53 -0
- package/dist/remedy-case-set.d.ts.map +1 -0
- package/dist/remedy-case-set.js +571 -0
- package/dist/remedy-case-set.js.map +1 -0
- package/dist/remedy-program-adapters.d.ts +137 -0
- package/dist/remedy-program-adapters.d.ts.map +1 -0
- package/dist/remedy-program-adapters.js +590 -0
- package/dist/remedy-program-adapters.js.map +1 -0
- package/dist/trust-program-revocation.js.map +1 -1
- package/package.json +283 -63
- package/proposal-to-effect-postgres.js +3 -0
- package/proposal-to-effect-status-head-store.js +2 -0
- package/proposal-to-effect-status.js +2 -0
- package/remedy-case-set-postgres.js +3 -0
- package/remedy-case-set.js +3 -0
- package/remedy-program-adapters.js +3 -0
- package/src/aeb-consumption-store.ts +568 -0
- package/src/capability-receipt.ts +17 -0
- package/src/index.ts +66 -3
- package/src/proposal-to-effect-postgres.ts +1833 -0
- package/src/proposal-to-effect-status-head-store.ts +449 -0
- package/src/proposal-to-effect-status.ts +388 -0
- package/src/proposal-to-effect.ts +755 -50
- package/src/remedy-case-set-postgres.ts +1008 -0
- package/src/remedy-case-set.ts +603 -0
- package/src/remedy-program-adapters.ts +657 -0
- package/src/trust-program-revocation.ts +1 -1
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* Server-pinned EP-STATUS-v1 verification for Proposal-to-Effect AEB legs.
|
|
5
|
+
*
|
|
6
|
+
* Signed non-revocation status and relying-party consumption state answer
|
|
7
|
+
* different questions. This helper authenticates the former with
|
|
8
|
+
* verifyStatusArtifact and requires an authenticated local answer for the
|
|
9
|
+
* latter. The later atomic AEB reserve remains the race-closing operation.
|
|
10
|
+
*/
|
|
11
|
+
import { verifyStatusArtifact, } from '@emilia-protocol/verify/status';
|
|
12
|
+
export { PROPOSAL_TO_EFFECT_STATUS_HEAD_STORE_VERSION, PROPOSAL_TO_EFFECT_STATUS_HEAD_TABLE, PROPOSAL_TO_EFFECT_STATUS_HEAD_SQL, createPostgresProposalToEffectStatusHeadStore, } from './proposal-to-effect-status-head-store.js';
|
|
13
|
+
const DIGEST_PATTERN = /^sha256:[0-9a-f]{64}$/;
|
|
14
|
+
const CAID_PATTERN = /^caid:1:[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*\.[1-9][0-9]*:[a-z0-9]+(?:-[a-z0-9]+)*:[A-Za-z0-9_-]{43}$/;
|
|
15
|
+
const EXPECTED_KEYS = [
|
|
16
|
+
'tenant_id',
|
|
17
|
+
'executor_id',
|
|
18
|
+
'operation_id',
|
|
19
|
+
'caid',
|
|
20
|
+
'artifact_ref',
|
|
21
|
+
'evidence_digest',
|
|
22
|
+
'replay_unit',
|
|
23
|
+
];
|
|
24
|
+
const TARGET_KEYS = ['type', 'id', 'digest', 'usage'];
|
|
25
|
+
const AUTHORITY_PIN_KEYS = [
|
|
26
|
+
'authority_domain',
|
|
27
|
+
'authority_id',
|
|
28
|
+
'key_id',
|
|
29
|
+
'public_key',
|
|
30
|
+
];
|
|
31
|
+
function dataRecord(value) {
|
|
32
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
33
|
+
return false;
|
|
34
|
+
const prototype = Object.getPrototypeOf(value);
|
|
35
|
+
if (prototype !== Object.prototype && prototype !== null)
|
|
36
|
+
return false;
|
|
37
|
+
return Reflect.ownKeys(value).every((key) => {
|
|
38
|
+
if (typeof key !== 'string')
|
|
39
|
+
return false;
|
|
40
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
41
|
+
return Boolean(descriptor?.enumerable && Object.hasOwn(descriptor, 'value'));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function exactDataRecord(value, keys) {
|
|
45
|
+
if (!dataRecord(value))
|
|
46
|
+
return false;
|
|
47
|
+
const actual = Reflect.ownKeys(value);
|
|
48
|
+
return actual.length === keys.length && keys.every((key) => Object.hasOwn(value, key));
|
|
49
|
+
}
|
|
50
|
+
function boundedString(value, maximum = 512) {
|
|
51
|
+
return typeof value === 'string' && value.length > 0 && value.length <= maximum;
|
|
52
|
+
}
|
|
53
|
+
function digest(value) {
|
|
54
|
+
return typeof value === 'string' && DIGEST_PATTERN.test(value);
|
|
55
|
+
}
|
|
56
|
+
function snapshotAuthorityPin(value) {
|
|
57
|
+
if (!exactDataRecord(value, AUTHORITY_PIN_KEYS)
|
|
58
|
+
|| !boundedString(value.authority_domain, 253)
|
|
59
|
+
|| !boundedString(value.authority_id)
|
|
60
|
+
|| !boundedString(value.key_id)
|
|
61
|
+
|| !boundedString(value.public_key, 4096))
|
|
62
|
+
return null;
|
|
63
|
+
return Object.freeze({
|
|
64
|
+
authority_domain: value.authority_domain,
|
|
65
|
+
authority_id: value.authority_id,
|
|
66
|
+
key_id: value.key_id,
|
|
67
|
+
public_key: value.public_key,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function snapshotExpected(value) {
|
|
71
|
+
if (!exactDataRecord(value, EXPECTED_KEYS)
|
|
72
|
+
|| !boundedString(value.tenant_id)
|
|
73
|
+
|| !boundedString(value.executor_id)
|
|
74
|
+
|| !boundedString(value.operation_id)
|
|
75
|
+
|| typeof value.caid !== 'string'
|
|
76
|
+
|| !CAID_PATTERN.test(value.caid)
|
|
77
|
+
|| !boundedString(value.artifact_ref)
|
|
78
|
+
|| !digest(value.evidence_digest)
|
|
79
|
+
|| !digest(value.replay_unit))
|
|
80
|
+
return null;
|
|
81
|
+
return Object.freeze({
|
|
82
|
+
tenant_id: value.tenant_id,
|
|
83
|
+
executor_id: value.executor_id,
|
|
84
|
+
operation_id: value.operation_id,
|
|
85
|
+
caid: value.caid,
|
|
86
|
+
artifact_ref: value.artifact_ref,
|
|
87
|
+
evidence_digest: value.evidence_digest,
|
|
88
|
+
replay_unit: value.replay_unit,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
function snapshotTarget(value) {
|
|
92
|
+
if (!exactDataRecord(value, TARGET_KEYS)
|
|
93
|
+
|| !['receipt', 'commit', 'delegation'].includes(value.type)
|
|
94
|
+
|| !boundedString(value.id)
|
|
95
|
+
|| !digest(value.digest)
|
|
96
|
+
|| !['authorization', 'execution', 'delegation'].includes(value.usage)) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
return Object.freeze({
|
|
100
|
+
type: value.type,
|
|
101
|
+
id: value.id,
|
|
102
|
+
digest: value.digest,
|
|
103
|
+
usage: value.usage,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function denseDataArray(value) {
|
|
107
|
+
if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype)
|
|
108
|
+
return false;
|
|
109
|
+
const keys = Reflect.ownKeys(value);
|
|
110
|
+
if (keys.length !== value.length + 1 || !keys.includes('length'))
|
|
111
|
+
return false;
|
|
112
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
113
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
114
|
+
if (!descriptor?.enumerable || !Object.hasOwn(descriptor, 'value'))
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
function snapshotJson(value, seen = new WeakSet()) {
|
|
120
|
+
if (value === null || typeof value === 'string' || typeof value === 'boolean')
|
|
121
|
+
return value;
|
|
122
|
+
if (typeof value === 'number') {
|
|
123
|
+
if (Number.isFinite(value))
|
|
124
|
+
return value;
|
|
125
|
+
throw new TypeError('non-finite JSON number');
|
|
126
|
+
}
|
|
127
|
+
if (typeof value !== 'object' || seen.has(value)) {
|
|
128
|
+
throw new TypeError('value is outside the JSON data model');
|
|
129
|
+
}
|
|
130
|
+
seen.add(value);
|
|
131
|
+
if (denseDataArray(value)) {
|
|
132
|
+
return value.map((member) => snapshotJson(member, seen));
|
|
133
|
+
}
|
|
134
|
+
if (!dataRecord(value))
|
|
135
|
+
throw new TypeError('value is not a plain data object');
|
|
136
|
+
const snapshot = {};
|
|
137
|
+
for (const key of Object.keys(value)) {
|
|
138
|
+
snapshot[key] = snapshotJson(value[key], seen);
|
|
139
|
+
}
|
|
140
|
+
return snapshot;
|
|
141
|
+
}
|
|
142
|
+
function normalizedInstant(value) {
|
|
143
|
+
if (typeof value !== 'string')
|
|
144
|
+
return null;
|
|
145
|
+
const milliseconds = Date.parse(value);
|
|
146
|
+
if (!Number.isFinite(milliseconds))
|
|
147
|
+
return null;
|
|
148
|
+
return new Date(milliseconds).toISOString();
|
|
149
|
+
}
|
|
150
|
+
function refusal(outcome, reason) {
|
|
151
|
+
return {
|
|
152
|
+
valid: false,
|
|
153
|
+
outcome,
|
|
154
|
+
status: null,
|
|
155
|
+
reason,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function verifierConfiguration(options) {
|
|
159
|
+
const authorityPin = snapshotAuthorityPin(options?.authorityPin);
|
|
160
|
+
if (!authorityPin
|
|
161
|
+
|| typeof options.targetMapper !== 'function'
|
|
162
|
+
|| typeof options.certificateResolver !== 'function'
|
|
163
|
+
|| !dataRecord(options.statusHeadStore)
|
|
164
|
+
|| options.statusHeadStore.durable !== true
|
|
165
|
+
|| !boundedString(options.statusHeadStore.tenantId)
|
|
166
|
+
|| !boundedString(options.statusHeadStore.relyingPartyId)
|
|
167
|
+
|| typeof options.statusHeadStore.accept !== 'function'
|
|
168
|
+
|| typeof options.consumptionStateResolver !== 'function') {
|
|
169
|
+
throw new TypeError('proposal_to_effect_status_configuration_invalid');
|
|
170
|
+
}
|
|
171
|
+
return authorityPin;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Build the server-side verifier expected by
|
|
175
|
+
* `ProposalToEffectOptions.aeb.statusVerifier`.
|
|
176
|
+
*/
|
|
177
|
+
export function createProposalToEffectStatusVerifier(options) {
|
|
178
|
+
const authorityPin = verifierConfiguration(options);
|
|
179
|
+
const targetMapper = options.targetMapper;
|
|
180
|
+
const certificateResolver = options.certificateResolver;
|
|
181
|
+
const statusHeadStore = options.statusHeadStore;
|
|
182
|
+
const consumptionStateResolver = options.consumptionStateResolver;
|
|
183
|
+
return async (input) => {
|
|
184
|
+
const expected = snapshotExpected(input?.expected);
|
|
185
|
+
const checkedAt = normalizedInstant(input?.now);
|
|
186
|
+
if (!expected || !checkedAt) {
|
|
187
|
+
return refusal('indeterminate', 'status_expected_binding_invalid');
|
|
188
|
+
}
|
|
189
|
+
let statusArtifact;
|
|
190
|
+
let target;
|
|
191
|
+
try {
|
|
192
|
+
statusArtifact = snapshotJson(input.status_artifact);
|
|
193
|
+
const mapped = await targetMapper({ expected });
|
|
194
|
+
const snapshot = snapshotTarget(mapped);
|
|
195
|
+
if (!snapshot)
|
|
196
|
+
return refusal('indeterminate', 'status_target_resolution_failed');
|
|
197
|
+
target = snapshot;
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return refusal('indeterminate', 'status_target_resolution_failed');
|
|
201
|
+
}
|
|
202
|
+
const context = Object.freeze({ expected, target });
|
|
203
|
+
let certificate;
|
|
204
|
+
try {
|
|
205
|
+
const resolvedCertificate = await certificateResolver(context);
|
|
206
|
+
if (resolvedCertificate === undefined || resolvedCertificate === null) {
|
|
207
|
+
return refusal('indeterminate', 'status_certificate_unavailable');
|
|
208
|
+
}
|
|
209
|
+
certificate = snapshotJson(resolvedCertificate);
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return refusal('indeterminate', 'status_certificate_unavailable');
|
|
213
|
+
}
|
|
214
|
+
if (statusHeadStore.tenantId !== expected.tenant_id) {
|
|
215
|
+
return refusal('indeterminate', 'status_head_scope_mismatch');
|
|
216
|
+
}
|
|
217
|
+
let acceptance;
|
|
218
|
+
try {
|
|
219
|
+
acceptance = await statusHeadStore.accept({
|
|
220
|
+
target,
|
|
221
|
+
status: statusArtifact,
|
|
222
|
+
verify: (previousStatus) => verifyStatusArtifact(target, statusArtifact, {
|
|
223
|
+
authorityPin,
|
|
224
|
+
certificate,
|
|
225
|
+
previousStatus,
|
|
226
|
+
now: input.now,
|
|
227
|
+
}),
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
return refusal('indeterminate', 'status_head_store_unavailable');
|
|
232
|
+
}
|
|
233
|
+
if (!dataRecord(acceptance)
|
|
234
|
+
|| typeof acceptance.accepted !== 'boolean'
|
|
235
|
+
|| !Object.hasOwn(acceptance, 'verification')
|
|
236
|
+
|| !dataRecord(acceptance.verification)) {
|
|
237
|
+
return refusal('indeterminate', 'status_head_store_invalid');
|
|
238
|
+
}
|
|
239
|
+
if (!acceptance.accepted) {
|
|
240
|
+
return refusal('indeterminate', boundedString(acceptance.reason)
|
|
241
|
+
? acceptance.reason : 'status_head_store_refused');
|
|
242
|
+
}
|
|
243
|
+
const verification = acceptance.verification;
|
|
244
|
+
if (!verification.valid || verification.outcome === 'indeterminate') {
|
|
245
|
+
return refusal('indeterminate', verification.reasons[0] ?? 'status_verification_failed');
|
|
246
|
+
}
|
|
247
|
+
if (verification.outcome === 'revoked') {
|
|
248
|
+
return refusal('revoked', 'status_revoked');
|
|
249
|
+
}
|
|
250
|
+
if (!digest(verification.status_digest)
|
|
251
|
+
|| !Number.isSafeInteger(verification.sequence)
|
|
252
|
+
|| verification.sequence === null) {
|
|
253
|
+
return refusal('indeterminate', 'status_verification_incomplete');
|
|
254
|
+
}
|
|
255
|
+
let consumption;
|
|
256
|
+
try {
|
|
257
|
+
consumption = await consumptionStateResolver(Object.freeze({
|
|
258
|
+
...context,
|
|
259
|
+
status_digest: verification.status_digest,
|
|
260
|
+
sequence: verification.sequence,
|
|
261
|
+
}));
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
return refusal('indeterminate', 'status_consumption_state_unavailable');
|
|
265
|
+
}
|
|
266
|
+
if (!dataRecord(consumption)
|
|
267
|
+
|| consumption.authenticated !== true
|
|
268
|
+
|| typeof consumption.consumed !== 'boolean') {
|
|
269
|
+
return refusal('indeterminate', 'status_consumption_state_unknown');
|
|
270
|
+
}
|
|
271
|
+
if (consumption.consumed) {
|
|
272
|
+
return refusal('indeterminate', 'status_consumed');
|
|
273
|
+
}
|
|
274
|
+
const expiresAt = normalizedInstant(verification.next_update);
|
|
275
|
+
if (!expiresAt || Date.parse(checkedAt) >= Date.parse(expiresAt)) {
|
|
276
|
+
return refusal('indeterminate', 'status_expiry_invalid');
|
|
277
|
+
}
|
|
278
|
+
// This local answer is an authenticated pre-reservation observation. It
|
|
279
|
+
// does not claim race freedom; Proposal-to-Effect's atomic AEB reserve does.
|
|
280
|
+
const status = {
|
|
281
|
+
checked_at: checkedAt,
|
|
282
|
+
expires_at: expiresAt,
|
|
283
|
+
revocation_checked: true,
|
|
284
|
+
revoked: false,
|
|
285
|
+
consumed: false,
|
|
286
|
+
};
|
|
287
|
+
return {
|
|
288
|
+
valid: true,
|
|
289
|
+
outcome: 'current_not_revoked',
|
|
290
|
+
status,
|
|
291
|
+
};
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=proposal-to-effect-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposal-to-effect-status.js","sourceRoot":"","sources":["../src/proposal-to-effect-status.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;;;;;GAOG;AAGH,OAAO,EACL,oBAAoB,GAIrB,MAAM,gCAAgC,CAAC;AAUxC,OAAO,EACL,4CAA4C,EAC5C,oCAAoC,EACpC,kCAAkC,EAClC,6CAA6C,GAC9C,MAAM,2CAA2C,CAAC;AA0DnD,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAC/C,MAAM,YAAY,GAAG,wGAAwG,CAAC;AAC9H,MAAM,aAAa,GAAG;IACpB,WAAW;IACX,aAAa;IACb,cAAc;IACd,MAAM;IACN,cAAc;IACd,iBAAiB;IACjB,aAAa;CACL,CAAC;AACX,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAC/D,MAAM,kBAAkB,GAAG;IACzB,kBAAkB;IAClB,cAAc;IACd,QAAQ;IACR,YAAY;CACJ,CAAC;AAEX,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACvE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/D,OAAO,OAAO,CAAC,UAAU,EAAE,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CACtB,KAAc,EACd,IAAuB;IAEvB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,OAAO,GAAG,GAAG;IAClD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC;AAClF,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,kBAAkB,CAAC;WACxC,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC;WAC3C,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;WAClC,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;WAC5B,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC;WACnC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;WAC/B,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC;WACjC,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;WAClC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;WAC9B,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;WAC9B,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;WAClC,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;WAC9B,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC;WACjC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAc,CAAC;WACnE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;WACxB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;WACrB,CAAC,CAAC,eAAe,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAe,CAAC,EAAE,CAAC;QACrF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,CAAC,IAA4B;QACxC,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAA8B;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5F,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/E,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;IACnF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,OAAO,IAAI,OAAO,EAAU;IAChE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5F,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACzC,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChB,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;IAChF,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,OAAO,CACd,OAAoC,EACpC,MAAc;IAEd,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,OAAO;QACP,MAAM,EAAE,IAAI;QACZ,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAA8C;IAE9C,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjE,IAAI,CAAC,YAAY;WACV,OAAO,OAAO,CAAC,YAAY,KAAK,UAAU;WAC1C,OAAO,OAAO,CAAC,mBAAmB,KAAK,UAAU;WACjD,CAAC,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC;WACpC,OAAO,CAAC,eAAe,CAAC,OAAO,KAAK,IAAI;WACxC,CAAC,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC;WAChD,CAAC,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC;WACtD,OAAO,OAAO,CAAC,eAAe,CAAC,MAAM,KAAK,UAAU;WACpD,OAAO,OAAO,CAAC,wBAAwB,KAAK,UAAU,EAAE,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oCAAoC,CAClD,OAA8C;IAE9C,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1C,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IACxD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAChD,MAAM,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAElE,OAAO,KAAK,EAAE,KAAK,EAAsD,EAAE;QACzE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC,eAAe,EAAE,iCAAiC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,cAAuB,CAAC;QAC5B,IAAI,MAA8B,CAAC;QACnC,IAAI,CAAC;YACH,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,CAAC,QAAQ;gBAAE,OAAO,OAAO,CAAC,eAAe,EAAE,iCAAiC,CAAC,CAAC;YAClF,MAAM,GAAG,QAAQ,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO,CAAC,eAAe,EAAE,iCAAiC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,WAAoB,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,mBAAmB,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC/D,IAAI,mBAAmB,KAAK,SAAS,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;gBACtE,OAAO,OAAO,CAAC,eAAe,EAAE,gCAAgC,CAAC,CAAC;YACpE,CAAC;YACD,WAAW,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO,CAAC,eAAe,EAAE,gCAAgC,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,eAAe,CAAC,QAAQ,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC;YACpD,OAAO,OAAO,CAAC,eAAe,EAAE,4BAA4B,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,UAAU,CAAC;QACf,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC;gBACxC,MAAM;gBACN,MAAM,EAAE,cAAc;gBACtB,MAAM,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE;oBACvE,YAAY;oBACZ,WAAW;oBACX,cAAc;oBACd,GAAG,EAAE,KAAK,CAAC,GAAG;iBACf,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO,CAAC,eAAe,EAAE,+BAA+B,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;eACpB,OAAO,UAAU,CAAC,QAAQ,KAAK,SAAS;eACxC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC;eAC1C,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,OAAO,OAAO,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO,OAAO,CACZ,eAAe,EACf,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC9B,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,2BAA2B,CACpD,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,UAAU,CAAC,YAA6C,CAAC;QAC9E,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;YACpE,OAAO,OAAO,CACZ,eAAe,EACf,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,4BAA4B,CACxD,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC;eAChC,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC;eAC5C,YAAY,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC,eAAe,EAAE,gCAAgC,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,WAA6C,CAAC;QAClD,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACzD,GAAG,OAAO;gBACV,aAAa,EAAE,YAAY,CAAC,aAAa;gBACzC,QAAQ,EAAE,YAAY,CAAC,QAAQ;aAChC,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO,CAAC,eAAe,EAAE,sCAAsC,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;eACrB,WAAW,CAAC,aAAa,KAAK,IAAI;eAClC,OAAO,WAAW,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjD,OAAO,OAAO,CAAC,eAAe,EAAE,kCAAkC,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACjE,OAAO,OAAO,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;QAC3D,CAAC;QAED,wEAAwE;QACxE,6EAA6E;QAC7E,MAAM,MAAM,GAAmB;YAC7B,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;YACrB,kBAAkB,EAAE,IAAI;YACxB,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,OAAO;YACL,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,qBAAqB;YAC9B,MAAM;SACP,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -5,10 +5,73 @@
|
|
|
5
5
|
* requirement; consequence custody remains in Gate and its durable stores.
|
|
6
6
|
*/
|
|
7
7
|
import { EP_APPROVAL_FLOW } from '@emilia-protocol/require-receipt/acquisition';
|
|
8
|
-
import { type AebAdapter, type AebDigest, type AebDurableConsumptionStore, type AebEvaluationRecord, type AebPinnedConfig } from '@emilia-protocol/verify/aeb-adapter-contract';
|
|
8
|
+
import { type AebAdapter, type AebDigest, type AebDurableConsumptionStore, type AebEvaluationRecord, type AebPinnedConfig, type AebStatusInput } from '@emilia-protocol/verify/aeb-adapter-contract';
|
|
9
9
|
export declare const PROPOSAL_TO_EFFECT_VERSION = "EMILIA-PROPOSAL-TO-EFFECT-v1";
|
|
10
10
|
type JsonObject = Record<string, any>;
|
|
11
11
|
type FetchLike = typeof fetch;
|
|
12
|
+
declare const CONSEQUENCE_ATTEMPT_OWNER: unique symbol;
|
|
13
|
+
export type ConsequenceAttemptOwnerHandle = string & {
|
|
14
|
+
readonly [CONSEQUENCE_ATTEMPT_OWNER]: true;
|
|
15
|
+
};
|
|
16
|
+
export type ConsequenceAttemptState = 'RESERVED' | 'INVOKING' | 'INDETERMINATE' | 'COMMITTED' | 'RELEASED' | 'ESCALATED';
|
|
17
|
+
export type ProposalToEffectProviderOutcome = 'COMMITTED' | 'NOT_COMMITTED' | 'ESCALATED';
|
|
18
|
+
export interface ConsequenceAttemptBinding {
|
|
19
|
+
tenant_id: string;
|
|
20
|
+
provider_id: string;
|
|
21
|
+
provider_account_id: string;
|
|
22
|
+
environment: string;
|
|
23
|
+
attempt_id: string;
|
|
24
|
+
request_digest: AebDigest;
|
|
25
|
+
}
|
|
26
|
+
export interface ConsequenceAttemptReference {
|
|
27
|
+
tenant_id: string;
|
|
28
|
+
attempt_id: string;
|
|
29
|
+
owner: ConsequenceAttemptOwnerHandle;
|
|
30
|
+
}
|
|
31
|
+
export interface AuthenticatedProviderEvidenceBinding extends ConsequenceAttemptBinding {
|
|
32
|
+
operation_id: string;
|
|
33
|
+
caid: string;
|
|
34
|
+
action_digest: AebDigest;
|
|
35
|
+
evidence_id: string;
|
|
36
|
+
observed_at: string;
|
|
37
|
+
outcome: ProposalToEffectProviderOutcome;
|
|
38
|
+
evidence_digest: AebDigest;
|
|
39
|
+
}
|
|
40
|
+
export type ConsequenceAttemptTransition = {
|
|
41
|
+
expected_state: 'RESERVED';
|
|
42
|
+
next_state: 'INVOKING';
|
|
43
|
+
} | {
|
|
44
|
+
expected_state: 'INVOKING';
|
|
45
|
+
next_state: 'INDETERMINATE';
|
|
46
|
+
} | {
|
|
47
|
+
expected_state: 'INDETERMINATE';
|
|
48
|
+
next_state: 'COMMITTED' | 'RELEASED' | 'ESCALATED';
|
|
49
|
+
};
|
|
50
|
+
/** Owner-fenced durable CAS custody for one provider invocation attempt. */
|
|
51
|
+
export interface ProposalToEffectConsequenceAttemptStore {
|
|
52
|
+
durable: true;
|
|
53
|
+
ownershipFenced: true;
|
|
54
|
+
compareAndSwap: true;
|
|
55
|
+
atomicEvidenceBinding: true;
|
|
56
|
+
reserve(binding: ConsequenceAttemptBinding): Promise<{
|
|
57
|
+
reserved: true;
|
|
58
|
+
owner: ConsequenceAttemptOwnerHandle;
|
|
59
|
+
} | {
|
|
60
|
+
reserved: false;
|
|
61
|
+
reason: string;
|
|
62
|
+
}>;
|
|
63
|
+
transition(input: ConsequenceAttemptReference & ConsequenceAttemptTransition): Promise<boolean>;
|
|
64
|
+
reconcile(input: ConsequenceAttemptReference & {
|
|
65
|
+
expected_state: 'INDETERMINATE';
|
|
66
|
+
next_state: 'COMMITTED' | 'RELEASED' | 'ESCALATED';
|
|
67
|
+
evidence: AuthenticatedProviderEvidenceBinding;
|
|
68
|
+
}): Promise<boolean>;
|
|
69
|
+
/** Read terminal custody without exposing owner material, for saga repair. */
|
|
70
|
+
read?(binding: ConsequenceAttemptBinding): Promise<{
|
|
71
|
+
state: ConsequenceAttemptState;
|
|
72
|
+
evidence_digest?: AebDigest | null;
|
|
73
|
+
} | null>;
|
|
74
|
+
}
|
|
12
75
|
export interface ProposalToEffectProfile {
|
|
13
76
|
id: string;
|
|
14
77
|
action_type: string;
|
|
@@ -56,11 +119,23 @@ export interface ProposalToEffectProposal {
|
|
|
56
119
|
authorization_endpoint: string;
|
|
57
120
|
flow: typeof EP_APPROVAL_FLOW;
|
|
58
121
|
};
|
|
122
|
+
consequence: {
|
|
123
|
+
tenant_id: string;
|
|
124
|
+
provider_id: string;
|
|
125
|
+
provider_account_id: string;
|
|
126
|
+
environment: string;
|
|
127
|
+
executor_id: string;
|
|
128
|
+
request_digest: AebDigest;
|
|
129
|
+
};
|
|
59
130
|
aeb: {
|
|
60
131
|
requirement_ref: string;
|
|
61
132
|
pinned_config_digest: AebDigest;
|
|
62
133
|
consumption_nonce: AebDigest;
|
|
63
134
|
};
|
|
135
|
+
integrity: {
|
|
136
|
+
alg: 'HMAC-SHA256';
|
|
137
|
+
value: string;
|
|
138
|
+
};
|
|
64
139
|
}
|
|
65
140
|
export interface ProposalToEffectGate {
|
|
66
141
|
check(input: JsonObject): Promise<JsonObject>;
|
|
@@ -68,12 +143,47 @@ export interface ProposalToEffectGate {
|
|
|
68
143
|
}
|
|
69
144
|
export interface ProposalToEffectProviderVerification {
|
|
70
145
|
valid: boolean;
|
|
71
|
-
outcome?:
|
|
72
|
-
|
|
146
|
+
outcome?: ProposalToEffectProviderOutcome;
|
|
147
|
+
evidence_id?: string;
|
|
148
|
+
observed_at?: string;
|
|
149
|
+
tenant_id?: string;
|
|
150
|
+
request_digest?: AebDigest;
|
|
151
|
+
provider_id?: string;
|
|
152
|
+
provider_account_id?: string;
|
|
153
|
+
environment?: string;
|
|
154
|
+
attempt_id?: string;
|
|
155
|
+
operation_id?: string;
|
|
156
|
+
caid?: string;
|
|
157
|
+
action_digest?: AebDigest;
|
|
158
|
+
evidence_digest?: AebDigest;
|
|
159
|
+
reason?: string;
|
|
160
|
+
}
|
|
161
|
+
export interface ProposalToEffectCurrentStatusVerification {
|
|
162
|
+
valid: boolean;
|
|
163
|
+
outcome: 'current_not_revoked' | 'revoked' | 'indeterminate';
|
|
164
|
+
/** Authenticated normalized AEB status; never raw presenter data. */
|
|
165
|
+
status?: AebStatusInput | null;
|
|
73
166
|
reason?: string;
|
|
74
167
|
}
|
|
75
168
|
export interface ProposalToEffectOptions {
|
|
76
169
|
gate: ProposalToEffectGate;
|
|
170
|
+
proposal_integrity: {
|
|
171
|
+
/** Server-held key copied at controller construction; minimum 256 bits. */
|
|
172
|
+
hmac_sha256_key: Uint8Array;
|
|
173
|
+
};
|
|
174
|
+
consequence: {
|
|
175
|
+
tenant_id: string;
|
|
176
|
+
provider_id: string;
|
|
177
|
+
provider_account_id: string;
|
|
178
|
+
environment: string;
|
|
179
|
+
executor_id: string;
|
|
180
|
+
store: ProposalToEffectConsequenceAttemptStore;
|
|
181
|
+
/** Server-side allocator. Presented execute input never selects attempt_id. */
|
|
182
|
+
create_attempt_id?: (input: {
|
|
183
|
+
tenant_id: string;
|
|
184
|
+
request_digest: AebDigest;
|
|
185
|
+
}) => Promise<string> | string;
|
|
186
|
+
};
|
|
77
187
|
profiles: Record<string, ProposalToEffectProfile>;
|
|
78
188
|
aeb: {
|
|
79
189
|
config: AebPinnedConfig;
|
|
@@ -83,12 +193,37 @@ export interface ProposalToEffectOptions {
|
|
|
83
193
|
proposal: ProposalToEffectProposal;
|
|
84
194
|
evaluation: AebEvaluationRecord;
|
|
85
195
|
}): Promise<Record<string, unknown>> | Record<string, unknown>;
|
|
196
|
+
currentStatusResolver(input: {
|
|
197
|
+
proposal: ProposalToEffectProposal;
|
|
198
|
+
evaluation: AebEvaluationRecord;
|
|
199
|
+
leg: AebEvaluationRecord['legs'][number];
|
|
200
|
+
}): Promise<unknown> | unknown;
|
|
201
|
+
/** Configure this around EP-STATUS-v1 verifyStatusArtifact and server pins. */
|
|
202
|
+
statusVerifier(input: {
|
|
203
|
+
status_artifact: unknown;
|
|
204
|
+
expected: {
|
|
205
|
+
tenant_id: string;
|
|
206
|
+
executor_id: string;
|
|
207
|
+
operation_id: string;
|
|
208
|
+
caid: string;
|
|
209
|
+
artifact_ref: string;
|
|
210
|
+
evidence_digest: AebDigest;
|
|
211
|
+
replay_unit: AebDigest;
|
|
212
|
+
};
|
|
213
|
+
now: string;
|
|
214
|
+
}): Promise<ProposalToEffectCurrentStatusVerification> | ProposalToEffectCurrentStatusVerification;
|
|
86
215
|
verify_provider_evidence(input: {
|
|
87
216
|
evidence: unknown;
|
|
88
217
|
expected: {
|
|
89
218
|
operation_id: string;
|
|
90
219
|
caid: string;
|
|
91
220
|
action_digest: AebDigest;
|
|
221
|
+
tenant_id: string;
|
|
222
|
+
request_digest: AebDigest;
|
|
223
|
+
provider_id: string;
|
|
224
|
+
provider_account_id: string;
|
|
225
|
+
environment: string;
|
|
226
|
+
attempt_id: string;
|
|
92
227
|
};
|
|
93
228
|
}): Promise<ProposalToEffectProviderVerification> | ProposalToEffectProviderVerification;
|
|
94
229
|
};
|
|
@@ -130,12 +265,25 @@ export declare function createProposalToEffect(options: ProposalToEffectOptions)
|
|
|
130
265
|
action: JsonObject;
|
|
131
266
|
proposal: ProposalToEffectProposal;
|
|
132
267
|
authorization: JsonObject;
|
|
268
|
+
/** Provider request binding; the opaque store owner never crosses the effect boundary. */
|
|
269
|
+
attempt: ConsequenceAttemptBinding;
|
|
133
270
|
}) => unknown | Promise<unknown>) => Promise<JsonObject>;
|
|
134
271
|
reconcile: (input: {
|
|
135
272
|
proposal: unknown;
|
|
136
273
|
evaluation: unknown;
|
|
274
|
+
attempt: ConsequenceAttemptReference | (ConsequenceAttemptBinding & {
|
|
275
|
+
owner: ConsequenceAttemptOwnerHandle;
|
|
276
|
+
});
|
|
137
277
|
provider_evidence: unknown;
|
|
278
|
+
aeb_recovery_authorization?: unknown;
|
|
279
|
+
}) => Promise<JsonObject>;
|
|
280
|
+
repairAeb: (input: {
|
|
281
|
+
proposal: unknown;
|
|
282
|
+
evaluation: unknown;
|
|
283
|
+
attempt: unknown;
|
|
284
|
+
aeb_recovery_authorization?: unknown;
|
|
138
285
|
}) => Promise<JsonObject>;
|
|
286
|
+
getReconciliationHandle: (target: object) => ConsequenceAttemptReference | null;
|
|
139
287
|
}>;
|
|
140
288
|
declare const _default: {
|
|
141
289
|
PROPOSAL_TO_EFFECT_VERSION: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal-to-effect.d.ts","sourceRoot":"","sources":["../src/proposal-to-effect.ts"],"names":[],"mappings":"AACA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"proposal-to-effect.d.ts","sourceRoot":"","sources":["../src/proposal-to-effect.ts"],"names":[],"mappings":"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"}
|