@emilia-protocol/gate 0.13.0 → 0.15.0

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +89 -0
  3. package/aeb-consumption-store.js +3 -0
  4. package/dist/aeb-consumption-store.d.ts +80 -0
  5. package/dist/aeb-consumption-store.d.ts.map +1 -0
  6. package/dist/aeb-consumption-store.js +430 -0
  7. package/dist/aeb-consumption-store.js.map +1 -0
  8. package/dist/capability-receipt.d.ts +8 -0
  9. package/dist/capability-receipt.d.ts.map +1 -1
  10. package/dist/capability-receipt.js +17 -0
  11. package/dist/capability-receipt.js.map +1 -1
  12. package/dist/index.d.ts +13 -3
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +17 -4
  15. package/dist/index.js.map +1 -1
  16. package/dist/proposal-to-effect-postgres.d.ts +129 -0
  17. package/dist/proposal-to-effect-postgres.d.ts.map +1 -0
  18. package/dist/proposal-to-effect-postgres.js +1511 -0
  19. package/dist/proposal-to-effect-postgres.js.map +1 -0
  20. package/dist/proposal-to-effect-status.d.ts +55 -0
  21. package/dist/proposal-to-effect-status.d.ts.map +1 -0
  22. package/dist/proposal-to-effect-status.js +280 -0
  23. package/dist/proposal-to-effect-status.js.map +1 -0
  24. package/dist/proposal-to-effect.d.ts +294 -0
  25. package/dist/proposal-to-effect.d.ts.map +1 -0
  26. package/dist/proposal-to-effect.js +970 -0
  27. package/dist/proposal-to-effect.js.map +1 -0
  28. package/dist/remedy-case-set-postgres.d.ts +73 -0
  29. package/dist/remedy-case-set-postgres.d.ts.map +1 -0
  30. package/dist/remedy-case-set-postgres.js +846 -0
  31. package/dist/remedy-case-set-postgres.js.map +1 -0
  32. package/dist/remedy-case-set.d.ts +53 -0
  33. package/dist/remedy-case-set.d.ts.map +1 -0
  34. package/dist/remedy-case-set.js +571 -0
  35. package/dist/remedy-case-set.js.map +1 -0
  36. package/dist/remedy-program-adapters.d.ts +137 -0
  37. package/dist/remedy-program-adapters.d.ts.map +1 -0
  38. package/dist/remedy-program-adapters.js +590 -0
  39. package/dist/remedy-program-adapters.js.map +1 -0
  40. package/dist/trust-program-revocation.js.map +1 -1
  41. package/package.json +280 -63
  42. package/proposal-to-effect-postgres.js +3 -0
  43. package/proposal-to-effect-status.js +2 -0
  44. package/proposal-to-effect.js +4 -0
  45. package/remedy-case-set-postgres.js +3 -0
  46. package/remedy-case-set.js +3 -0
  47. package/remedy-program-adapters.js +3 -0
  48. package/src/aeb-consumption-store.ts +521 -0
  49. package/src/capability-receipt.ts +17 -0
  50. package/src/index.ts +57 -3
  51. package/src/proposal-to-effect-postgres.ts +1740 -0
  52. package/src/proposal-to-effect-status.ts +357 -0
  53. package/src/proposal-to-effect.ts +1276 -0
  54. package/src/remedy-case-set-postgres.ts +1008 -0
  55. package/src/remedy-case-set.ts +603 -0
  56. package/src/remedy-program-adapters.ts +657 -0
  57. package/src/trust-program-revocation.ts +1 -1
@@ -0,0 +1,590 @@
1
+ // @ts-nocheck
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Constructor-pinned production adapters for the Remedy Program kernel.
5
+ *
6
+ * The kernel deliberately stores evidence references for every post-create
7
+ * transition. These adapters resolve those references from a relying-party
8
+ * evidence source and perform the concrete cryptographic verification here.
9
+ * Presenters cannot supply verifier functions, tenants, or trust keys.
10
+ */
11
+ import crypto from 'node:crypto';
12
+ import { verifyRevocation } from '@emilia-protocol/verify';
13
+ import { canonicalize } from '../execution-binding.js';
14
+ import { verifyActionEscrowStateStatement } from './action-escrow-state.js';
15
+ export const REMEDY_PROGRAM_EVIDENCE_VERSION = 'EP-GATE-REMEDY-EVIDENCE-v1';
16
+ export const REMEDY_PROGRAM_EVIDENCE_DOMAIN = `${REMEDY_PROGRAM_EVIDENCE_VERSION}\0`;
17
+ const DIGEST = /^sha256:[0-9a-f]{64}$/;
18
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:/#@+-]{0,255}$/;
19
+ const CAID = /^caid:1:[a-z][a-z0-9.-]*\.[1-9][0-9]*:jcs-sha256:[A-Za-z0-9_-]{43}$/;
20
+ const BASE64URL = /^[A-Za-z0-9_-]+$/;
21
+ const ORIGINAL_KEYS = new Set([
22
+ 'caid', 'action_digest', 'operation_id', 'consequence_mode',
23
+ 'consequence_digest', 'terminal_evidence_digest', 'outcome', 'occurred_at',
24
+ ]);
25
+ const STORED_ORIGINAL_KEYS = new Set([...ORIGINAL_KEYS, 'evidence_digest']);
26
+ const SIGNED_EVIDENCE_KEYS = new Set([
27
+ 'version', 'kind', 'issuer', 'payload', 'content_digest', 'signature',
28
+ ]);
29
+ const SIGNING_BODY_KEYS = new Set([
30
+ 'version', 'kind', 'issuer', 'payload', 'content_digest',
31
+ ]);
32
+ const ISSUER_KEYS = new Set(['authority_id', 'key_id']);
33
+ const SIGNATURE_KEYS = new Set(['algorithm', 'value']);
34
+ const AUTHORITY_KEYS = new Set(['authorityId', 'trustedKeys']);
35
+ const ORIGINAL_BINDING_KEYS = new Set([
36
+ 'agreementId', 'caid', 'bindingDigest', 'profileDigest', 'amendmentDigests',
37
+ ]);
38
+ const DISPUTE_PAYLOAD_KEYS = new Set([
39
+ 'evidence_id', 'tenant_id', 'instance_id', 'dispute_id', 'challenger_id',
40
+ 'requested_units', 'opened_at', 'original_operation_id', 'original_action_digest',
41
+ ]);
42
+ const AUTHORIZATION_PAYLOAD_KEYS = new Set([
43
+ 'evidence_id', 'tenant_id', 'instance_id', 'dispute_id',
44
+ 'original_operation_id', 'original_action_digest', 'remedy_operation_id',
45
+ 'remedy_caid', 'remedy_action_digest', 'destination_binding_digest',
46
+ 'consequence_mode', 'capability_template_digest', 'escrow_profile_digest',
47
+ 'units', 'unit', 'authorized_at',
48
+ ]);
49
+ const OUTCOME_PAYLOAD_KEYS = new Set([
50
+ 'evidence_id', 'tenant_id', 'instance_id', 'remedy_operation_id',
51
+ 'remedy_action_digest', 'destination_binding_digest', 'units', 'unit',
52
+ 'outcome', 'observed_at', 'reconciliation',
53
+ ]);
54
+ const ORIGINAL_OUTCOME_PAYLOAD_KEYS = new Set([
55
+ 'evidence_id', 'tenant_id', 'instance_id', 'original_operation_id',
56
+ 'original_action_digest', 'terminal_evidence_digest', 'outcome',
57
+ 'observed_at',
58
+ ]);
59
+ function isRecord(value) {
60
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
61
+ return false;
62
+ const prototype = Object.getPrototypeOf(value);
63
+ return prototype === Object.prototype || prototype === null;
64
+ }
65
+ function isDataRecord(value) {
66
+ if (!isRecord(value))
67
+ return false;
68
+ return Reflect.ownKeys(value).every((key) => {
69
+ if (typeof key !== 'string')
70
+ return false;
71
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
72
+ return descriptor?.enumerable === true && Object.hasOwn(descriptor, 'value');
73
+ });
74
+ }
75
+ function exactKeys(value, keys) {
76
+ return isDataRecord(value)
77
+ && Object.keys(value).length === keys.size
78
+ && Object.keys(value).every((key) => keys.has(key));
79
+ }
80
+ function validContext(value) {
81
+ return typeof value === 'string' && value.length > 0
82
+ && Buffer.byteLength(value, 'utf8') <= 512
83
+ && !/[\u0000-\u001f\u007f]/.test(value);
84
+ }
85
+ function validId(value) {
86
+ return typeof value === 'string' && ID.test(value);
87
+ }
88
+ function instant(value) {
89
+ if (typeof value !== 'string')
90
+ return NaN;
91
+ const parsed = Date.parse(value);
92
+ return Number.isFinite(parsed) ? parsed : NaN;
93
+ }
94
+ function canonicalCopy(value) {
95
+ return JSON.parse(canonicalize(value));
96
+ }
97
+ function deepFreeze(value) {
98
+ if (value === null || typeof value !== 'object' || Object.isFrozen(value))
99
+ return value;
100
+ Object.freeze(value);
101
+ for (const child of Object.values(value))
102
+ deepFreeze(child);
103
+ return value;
104
+ }
105
+ function canonicalDigest(value) {
106
+ return `sha256:${crypto.createHash('sha256').update(canonicalize(value)).digest('hex')}`;
107
+ }
108
+ /** Digest an exact evidence artifact for use as the kernel's evidence reference. */
109
+ export function remedyProgramEvidenceDigest(value) {
110
+ return canonicalDigest(value);
111
+ }
112
+ function signingBody(value) {
113
+ return {
114
+ version: value.version,
115
+ kind: value.kind,
116
+ issuer: value.issuer,
117
+ payload: value.payload,
118
+ content_digest: value.content_digest,
119
+ };
120
+ }
121
+ /** Domain-separated canonical bytes for the closed signed evidence envelope. */
122
+ export function remedyProgramEvidenceSigningBytes(value) {
123
+ if (!isDataRecord(value))
124
+ throw new TypeError('remedy evidence signing body invalid');
125
+ const body = signingBody(value);
126
+ if (!exactKeys(body, SIGNING_BODY_KEYS)) {
127
+ throw new TypeError('remedy evidence signing body invalid');
128
+ }
129
+ return Buffer.from(REMEDY_PROGRAM_EVIDENCE_DOMAIN + canonicalize(body), 'utf8');
130
+ }
131
+ function strictBase64url(value, length) {
132
+ if (typeof value !== 'string' || !BASE64URL.test(value) || value.length % 4 === 1)
133
+ return null;
134
+ const bytes = Buffer.from(value, 'base64url');
135
+ return bytes.toString('base64url') === value
136
+ && (length === undefined || bytes.length === length) ? bytes : null;
137
+ }
138
+ function ed25519PublicKey(value) {
139
+ try {
140
+ const bytes = strictBase64url(value);
141
+ if (!bytes)
142
+ return null;
143
+ const key = crypto.createPublicKey({ key: bytes, format: 'der', type: 'spki' });
144
+ return key.asymmetricKeyType === 'ed25519' ? key : null;
145
+ }
146
+ catch {
147
+ return null;
148
+ }
149
+ }
150
+ function validTrustedKeys(value) {
151
+ return isDataRecord(value) && Object.keys(value).length > 0
152
+ && Object.entries(value).every(([keyId, key]) => validId(keyId) && ed25519PublicKey(key) !== null);
153
+ }
154
+ function validAuthority(value) {
155
+ return exactKeys(value, AUTHORITY_KEYS)
156
+ && validContext(value.authorityId)
157
+ && validTrustedKeys(value.trustedKeys);
158
+ }
159
+ function validOriginal(value, stored = false) {
160
+ return exactKeys(value, stored ? STORED_ORIGINAL_KEYS : ORIGINAL_KEYS)
161
+ && typeof value.caid === 'string' && CAID.test(value.caid)
162
+ && typeof value.action_digest === 'string' && DIGEST.test(value.action_digest)
163
+ && validId(value.operation_id)
164
+ && value.consequence_mode === 'action-escrow'
165
+ && typeof value.consequence_digest === 'string' && DIGEST.test(value.consequence_digest)
166
+ && typeof value.terminal_evidence_digest === 'string' && DIGEST.test(value.terminal_evidence_digest)
167
+ && ['executed', 'indeterminate'].includes(value.outcome)
168
+ && Number.isFinite(instant(value.occurred_at))
169
+ && (!stored || (typeof value.evidence_digest === 'string' && DIGEST.test(value.evidence_digest)));
170
+ }
171
+ function snapshotData(value) {
172
+ return deepFreeze(canonicalCopy(value));
173
+ }
174
+ function failure() {
175
+ return Object.freeze({ ok: false });
176
+ }
177
+ function contextMatches(expected, options) {
178
+ return isDataRecord(expected)
179
+ && expected.tenant_id === options.tenantId
180
+ && expected.environment === options.environment
181
+ && expected.audience === options.audience
182
+ && validId(expected.instance_id);
183
+ }
184
+ function payloadMatches(value, expected, fields) {
185
+ return fields.every((field) => value[field] === expected[field]);
186
+ }
187
+ function verifiedSignedEvidence(value, kind, authority) {
188
+ try {
189
+ const evidence = canonicalCopy(value);
190
+ if (!exactKeys(evidence, SIGNED_EVIDENCE_KEYS)
191
+ || evidence.version !== REMEDY_PROGRAM_EVIDENCE_VERSION
192
+ || evidence.kind !== kind
193
+ || !exactKeys(evidence.issuer, ISSUER_KEYS)
194
+ || evidence.issuer.authority_id !== authority.authorityId
195
+ || !validId(evidence.issuer.key_id)
196
+ || !isDataRecord(evidence.payload)
197
+ || typeof evidence.content_digest !== 'string'
198
+ || !DIGEST.test(evidence.content_digest)
199
+ || !exactKeys(evidence.signature, SIGNATURE_KEYS)
200
+ || evidence.signature.algorithm !== 'Ed25519')
201
+ return null;
202
+ const unsigned = {
203
+ version: evidence.version,
204
+ kind: evidence.kind,
205
+ issuer: evidence.issuer,
206
+ payload: evidence.payload,
207
+ };
208
+ if (canonicalDigest(unsigned) !== evidence.content_digest)
209
+ return null;
210
+ const keyValue = authority.trustedKeys[evidence.issuer.key_id];
211
+ const key = ed25519PublicKey(keyValue);
212
+ const signature = strictBase64url(evidence.signature.value, 64);
213
+ if (!key || !signature
214
+ || !crypto.verify(null, remedyProgramEvidenceSigningBytes(evidence), key, signature))
215
+ return null;
216
+ return evidence;
217
+ }
218
+ catch {
219
+ return null;
220
+ }
221
+ }
222
+ /**
223
+ * Build all required Remedy Program callbacks using only pinned configuration
224
+ * and concrete repository verifiers. There are intentionally no verifier
225
+ * override hooks.
226
+ */
227
+ export function createRemedyProgramAdapters(options) {
228
+ if (!isDataRecord(options)
229
+ || !validContext(options.tenantId)
230
+ || !validContext(options.environment)
231
+ || !validContext(options.audience)
232
+ || !options.evidenceSource
233
+ || typeof options.evidenceSource.get !== 'function'
234
+ || !isDataRecord(options.actionEscrow)
235
+ || !isDataRecord(options.actionEscrow.trustedKeys)
236
+ || Object.keys(options.actionEscrow.trustedKeys).length === 0
237
+ || !isDataRecord(options.actionEscrow.originalEffects)
238
+ || Object.keys(options.actionEscrow.originalEffects).length === 0
239
+ || !isDataRecord(options.revokerKeys)
240
+ || !validAuthority(options.disputeAuthority)
241
+ || !validAuthority(options.remedyAuthority)
242
+ || !validAuthority(options.providerAuthority)
243
+ || (options.now !== undefined && typeof options.now !== 'function')) {
244
+ throw new TypeError('remedy program adapter configuration invalid');
245
+ }
246
+ for (const [keyId, pin] of Object.entries(options.actionEscrow.trustedKeys)) {
247
+ if (!validId(keyId) || !exactKeys(pin, new Set(['operator_id', 'public_key']))
248
+ || !validContext(pin.operator_id) || ed25519PublicKey(pin.public_key) === null) {
249
+ throw new TypeError('Action Escrow state key configuration invalid');
250
+ }
251
+ }
252
+ for (const [operationId, binding] of Object.entries(options.actionEscrow.originalEffects)) {
253
+ if (!validId(operationId) || !exactKeys(binding, ORIGINAL_BINDING_KEYS)
254
+ || !validContext(binding.agreementId)
255
+ || typeof binding.caid !== 'string' || !CAID.test(binding.caid)
256
+ || typeof binding.bindingDigest !== 'string' || !DIGEST.test(binding.bindingDigest)
257
+ || typeof binding.profileDigest !== 'string' || !DIGEST.test(binding.profileDigest)
258
+ || !Array.isArray(binding.amendmentDigests)
259
+ || binding.amendmentDigests.some((entry) => typeof entry !== 'string' || !DIGEST.test(entry))
260
+ || new Set(binding.amendmentDigests).size !== binding.amendmentDigests.length) {
261
+ throw new TypeError('Action Escrow original-effect binding invalid');
262
+ }
263
+ }
264
+ const pinned = snapshotData({
265
+ tenantId: options.tenantId,
266
+ environment: options.environment,
267
+ audience: options.audience,
268
+ actionEscrow: options.actionEscrow,
269
+ revokerKeys: options.revokerKeys,
270
+ disputeAuthority: options.disputeAuthority,
271
+ remedyAuthority: options.remedyAuthority,
272
+ providerAuthority: options.providerAuthority,
273
+ });
274
+ const getEvidence = options.evidenceSource.get.bind(options.evidenceSource);
275
+ const now = options.now ?? Date.now;
276
+ const resolvedNow = () => {
277
+ try {
278
+ const value = now();
279
+ if (value instanceof Date)
280
+ return Number.isFinite(value.getTime()) ? new Date(value) : null;
281
+ if (typeof value === 'number')
282
+ return Number.isFinite(value) ? value : null;
283
+ return Number.isFinite(instant(value)) ? value : null;
284
+ }
285
+ catch {
286
+ return null;
287
+ }
288
+ };
289
+ const resolveEvidence = async (evidenceId, evidenceDigest) => {
290
+ try {
291
+ const value = await getEvidence(Object.freeze({
292
+ tenantId: pinned.tenantId,
293
+ evidenceId,
294
+ evidenceDigest,
295
+ }));
296
+ const copy = canonicalCopy(value);
297
+ return canonicalDigest(copy) === evidenceDigest ? deepFreeze(copy) : null;
298
+ }
299
+ catch {
300
+ return null;
301
+ }
302
+ };
303
+ const resolveSigned = async (evidenceId, evidenceDigest, kind, authority) => {
304
+ const value = await resolveEvidence(evidenceId, evidenceDigest);
305
+ return verifiedSignedEvidence(value, kind, authority);
306
+ };
307
+ async function verifyOriginalEffect(input) {
308
+ try {
309
+ if (!exactKeys(input, new Set(['original', 'evidence', 'expected']))
310
+ || !validOriginal(input.original)
311
+ || !contextMatches(input.expected, pinned)
312
+ || !exactKeys(input.evidence, new Set(['snapshot', 'statement'])))
313
+ return failure();
314
+ const original = input.original;
315
+ const expected = input.expected;
316
+ const binding = pinned.actionEscrow.originalEffects[original.operation_id];
317
+ if (!binding || original.caid !== binding.caid
318
+ || original.consequence_digest !== binding.bindingDigest)
319
+ return failure();
320
+ const snapshot = input.evidence.snapshot;
321
+ const statement = input.evidence.statement;
322
+ const stage = original.outcome === 'executed' ? 'released' : 'release_indeterminate';
323
+ if (!isDataRecord(snapshot) || !isDataRecord(statement)
324
+ || snapshot['@version'] !== 'EP-ACTION-ESCROW-STATE-v1'
325
+ || snapshot.state !== stage
326
+ || !Number.isSafeInteger(snapshot.revision) || snapshot.revision < 0
327
+ || snapshot.release_action_digest !== original.action_digest
328
+ || snapshot.document_action_binding_digest !== binding.bindingDigest
329
+ || snapshot.profile_digest !== binding.profileDigest
330
+ || !isDataRecord(snapshot.release)
331
+ || snapshot.release.operation_idempotency_key !== original.operation_id
332
+ || statement.statement_digest !== original.terminal_evidence_digest
333
+ || statement.payload?.occurred_at !== original.occurred_at)
334
+ return failure();
335
+ const evaluation = resolvedNow();
336
+ if (evaluation === null)
337
+ return failure();
338
+ const verified = verifyActionEscrowStateStatement(statement, {
339
+ trustedKeys: pinned.actionEscrow.trustedKeys,
340
+ stateRecord: snapshot,
341
+ expectedAgreementId: binding.agreementId,
342
+ expectedBindingDigest: binding.bindingDigest,
343
+ expectedActionDigest: original.action_digest,
344
+ expectedProfileDigest: binding.profileDigest,
345
+ expectedState: stage,
346
+ expectedRevision: snapshot.revision,
347
+ expectedAmendmentDigests: binding.amendmentDigests,
348
+ expectedPreviousStatementDigest: statement.payload.previous_statement_digest,
349
+ now: evaluation,
350
+ });
351
+ if (verified.valid !== true || verified.statement_digest !== original.terminal_evidence_digest) {
352
+ return failure();
353
+ }
354
+ return Object.freeze({
355
+ ok: true,
356
+ ...canonicalCopy(original),
357
+ evidence_digest: original.terminal_evidence_digest,
358
+ });
359
+ }
360
+ catch {
361
+ return failure();
362
+ }
363
+ }
364
+ async function verifyRevocationEvidence(input) {
365
+ try {
366
+ if (!exactKeys(input, new Set(['evidence', 'expected']))
367
+ || !contextMatches(input.expected, pinned)
368
+ || !validOriginal(input.expected.original, true)
369
+ || !exactKeys(input.evidence, new Set(['id', 'digest']))
370
+ || !validId(input.evidence.id)
371
+ || typeof input.evidence.digest !== 'string' || !DIGEST.test(input.evidence.digest)) {
372
+ return failure();
373
+ }
374
+ const statement = await resolveEvidence(input.evidence.id, input.evidence.digest);
375
+ const evaluation = resolvedNow();
376
+ if (!isDataRecord(statement) || evaluation === null)
377
+ return failure();
378
+ const target = {
379
+ target_type: 'commit',
380
+ target_id: input.expected.original.operation_id,
381
+ action_hash: input.expected.original.action_digest,
382
+ };
383
+ const verified = verifyRevocation(target, statement, {
384
+ revokerKeys: pinned.revokerKeys,
385
+ now: evaluation,
386
+ });
387
+ if (verified.valid !== true)
388
+ return failure();
389
+ return Object.freeze({
390
+ ok: true,
391
+ evidence_id: input.evidence.id,
392
+ evidence_digest: input.evidence.digest,
393
+ target_operation_id: target.target_id,
394
+ action_digest: target.action_hash,
395
+ authority_id: statement.revoker_id,
396
+ revoked_at: statement.revoked_at,
397
+ });
398
+ }
399
+ catch {
400
+ return failure();
401
+ }
402
+ }
403
+ async function verifyDispute(input) {
404
+ try {
405
+ if (!exactKeys(input, new Set(['dispute', 'expected']))
406
+ || !contextMatches(input.expected, pinned)
407
+ || !validOriginal(input.expected.original, true)
408
+ || !isDataRecord(input.dispute)
409
+ || !validId(input.dispute.evidence_id)
410
+ || typeof input.dispute.evidence_digest !== 'string'
411
+ || !DIGEST.test(input.dispute.evidence_digest))
412
+ return failure();
413
+ const artifact = await resolveSigned(input.dispute.evidence_id, input.dispute.evidence_digest, 'dispute', pinned.disputeAuthority);
414
+ if (!artifact || !exactKeys(artifact.payload, DISPUTE_PAYLOAD_KEYS))
415
+ return failure();
416
+ const payload = artifact.payload;
417
+ if (payload.tenant_id !== pinned.tenantId
418
+ || payload.instance_id !== input.expected.instance_id
419
+ || payload.original_operation_id !== input.expected.original.operation_id
420
+ || payload.original_action_digest !== input.expected.original.action_digest
421
+ || !payloadMatches(payload, input.dispute, [
422
+ 'evidence_id', 'dispute_id', 'challenger_id', 'requested_units', 'opened_at',
423
+ ]))
424
+ return failure();
425
+ return Object.freeze({
426
+ ok: true,
427
+ dispute_id: payload.dispute_id,
428
+ evidence_id: payload.evidence_id,
429
+ evidence_digest: input.dispute.evidence_digest,
430
+ challenger_id: payload.challenger_id,
431
+ requested_units: payload.requested_units,
432
+ opened_at: payload.opened_at,
433
+ original_operation_id: payload.original_operation_id,
434
+ original_action_digest: payload.original_action_digest,
435
+ });
436
+ }
437
+ catch {
438
+ return failure();
439
+ }
440
+ }
441
+ async function verifyRemedyAuthorization(input) {
442
+ try {
443
+ if (!exactKeys(input, new Set(['authorization', 'expected']))
444
+ || !contextMatches(input.expected, pinned)
445
+ || !validOriginal(input.expected.original, true)
446
+ || !isDataRecord(input.expected.dispute)
447
+ || !isDataRecord(input.authorization)
448
+ || !validId(input.authorization.evidence_id)
449
+ || typeof input.authorization.evidence_digest !== 'string'
450
+ || !DIGEST.test(input.authorization.evidence_digest))
451
+ return failure();
452
+ const artifact = await resolveSigned(input.authorization.evidence_id, input.authorization.evidence_digest, 'remedy_authorization', pinned.remedyAuthority);
453
+ if (!artifact || !exactKeys(artifact.payload, AUTHORIZATION_PAYLOAD_KEYS))
454
+ return failure();
455
+ const payload = artifact.payload;
456
+ const authorizationFields = [
457
+ 'evidence_id', 'remedy_operation_id', 'remedy_caid', 'remedy_action_digest',
458
+ 'consequence_mode', 'capability_template_digest', 'escrow_profile_digest',
459
+ 'units', 'authorized_at',
460
+ ];
461
+ if (payload.tenant_id !== pinned.tenantId
462
+ || payload.instance_id !== input.expected.instance_id
463
+ || payload.dispute_id !== input.expected.dispute.dispute_id
464
+ || payload.original_operation_id !== input.expected.original.operation_id
465
+ || payload.original_action_digest !== input.expected.original.action_digest
466
+ || payload.destination_binding_digest !== input.expected.destination_binding_digest
467
+ || payload.unit !== input.expected.unit
468
+ || !payloadMatches(payload, input.authorization, authorizationFields))
469
+ return failure();
470
+ return Object.freeze({
471
+ ok: true,
472
+ evidence_id: payload.evidence_id,
473
+ evidence_digest: input.authorization.evidence_digest,
474
+ remedy_operation_id: payload.remedy_operation_id,
475
+ remedy_caid: payload.remedy_caid,
476
+ remedy_action_digest: payload.remedy_action_digest,
477
+ consequence_mode: payload.consequence_mode,
478
+ capability_template_digest: payload.capability_template_digest,
479
+ escrow_profile_digest: payload.escrow_profile_digest,
480
+ units: payload.units,
481
+ authorized_at: payload.authorized_at,
482
+ dispute_id: payload.dispute_id,
483
+ original_operation_id: payload.original_operation_id,
484
+ destination_binding_digest: payload.destination_binding_digest,
485
+ unit: payload.unit,
486
+ });
487
+ }
488
+ catch {
489
+ return failure();
490
+ }
491
+ }
492
+ async function verifyRemedyOutcome(input) {
493
+ try {
494
+ if (!exactKeys(input, new Set(['evidence', 'outcome', 'expected', 'reconciliation']))
495
+ || !contextMatches(input.expected, pinned)
496
+ || !validOriginal(input.expected.original, true)
497
+ || typeof input.reconciliation !== 'boolean'
498
+ || !isDataRecord(input.evidence)
499
+ || !validId(input.evidence.evidence_id)
500
+ || typeof input.evidence.evidence_digest !== 'string'
501
+ || !DIGEST.test(input.evidence.evidence_digest))
502
+ return failure();
503
+ const artifact = await resolveSigned(input.evidence.evidence_id, input.evidence.evidence_digest, 'provider_outcome', pinned.providerAuthority);
504
+ if (!artifact || !exactKeys(artifact.payload, OUTCOME_PAYLOAD_KEYS))
505
+ return failure();
506
+ const payload = artifact.payload;
507
+ if (payload.tenant_id !== pinned.tenantId
508
+ || payload.instance_id !== input.expected.instance_id
509
+ || payload.reconciliation !== input.reconciliation
510
+ || payload.outcome !== input.outcome
511
+ || payload.evidence_id !== input.evidence.evidence_id
512
+ || payload.observed_at !== input.evidence.observed_at
513
+ || !payloadMatches(payload, input.expected, [
514
+ 'remedy_operation_id', 'remedy_action_digest', 'destination_binding_digest',
515
+ 'units', 'unit',
516
+ ]))
517
+ return failure();
518
+ return Object.freeze({
519
+ ok: true,
520
+ evidence_id: payload.evidence_id,
521
+ evidence_digest: input.evidence.evidence_digest,
522
+ remedy_operation_id: payload.remedy_operation_id,
523
+ remedy_action_digest: payload.remedy_action_digest,
524
+ destination_binding_digest: payload.destination_binding_digest,
525
+ units: payload.units,
526
+ unit: payload.unit,
527
+ outcome: payload.outcome,
528
+ observed_at: payload.observed_at,
529
+ });
530
+ }
531
+ catch {
532
+ return failure();
533
+ }
534
+ }
535
+ async function verifyOriginalReconciliation(input) {
536
+ try {
537
+ if (!exactKeys(input, new Set(['evidence', 'outcome', 'expected']))
538
+ || !contextMatches(input.expected, pinned)
539
+ || !validOriginal(input.expected.original, true)
540
+ || !isDataRecord(input.evidence)
541
+ || !validId(input.evidence.evidence_id)
542
+ || typeof input.evidence.evidence_digest !== 'string'
543
+ || !DIGEST.test(input.evidence.evidence_digest))
544
+ return failure();
545
+ const artifact = await resolveSigned(input.evidence.evidence_id, input.evidence.evidence_digest, 'original_outcome', pinned.providerAuthority);
546
+ if (!artifact || !exactKeys(artifact.payload, ORIGINAL_OUTCOME_PAYLOAD_KEYS))
547
+ return failure();
548
+ const payload = artifact.payload;
549
+ if (payload.tenant_id !== pinned.tenantId
550
+ || payload.instance_id !== input.expected.instance_id
551
+ || payload.evidence_id !== input.evidence.evidence_id
552
+ || payload.observed_at !== input.evidence.observed_at
553
+ || payload.outcome !== input.outcome
554
+ || payload.original_operation_id !== input.expected.original.operation_id
555
+ || payload.original_action_digest !== input.expected.original.action_digest
556
+ || payload.terminal_evidence_digest !== input.expected.original.terminal_evidence_digest) {
557
+ return failure();
558
+ }
559
+ return Object.freeze({
560
+ ok: true,
561
+ evidence_id: payload.evidence_id,
562
+ evidence_digest: input.evidence.evidence_digest,
563
+ original_operation_id: payload.original_operation_id,
564
+ original_action_digest: payload.original_action_digest,
565
+ terminal_evidence_digest: payload.terminal_evidence_digest,
566
+ outcome: payload.outcome,
567
+ observed_at: payload.observed_at,
568
+ });
569
+ }
570
+ catch {
571
+ return failure();
572
+ }
573
+ }
574
+ return Object.freeze({
575
+ verifyOriginalEffect,
576
+ verifyRevocation: verifyRevocationEvidence,
577
+ verifyDispute,
578
+ verifyRemedyAuthorization,
579
+ verifyRemedyOutcome,
580
+ verifyOriginalReconciliation,
581
+ });
582
+ }
583
+ export default Object.freeze({
584
+ REMEDY_PROGRAM_EVIDENCE_VERSION,
585
+ REMEDY_PROGRAM_EVIDENCE_DOMAIN,
586
+ remedyProgramEvidenceDigest,
587
+ remedyProgramEvidenceSigningBytes,
588
+ createRemedyProgramAdapters,
589
+ });
590
+ //# sourceMappingURL=remedy-program-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remedy-program-adapters.js","sourceRoot":"","sources":["../src/remedy-program-adapters.ts"],"names":[],"mappings":"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"}