@emilia-protocol/gate 0.11.0 → 0.14.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 (425) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +310 -0
  3. package/action-control-manifest.js +3 -268
  4. package/action-escrow-custodian.js +3 -394
  5. package/action-escrow-evidence.js +3 -858
  6. package/action-escrow-package.js +3 -1668
  7. package/action-escrow-postgres.js +3 -337
  8. package/action-escrow-state.js +3 -396
  9. package/action-escrow-verifiers.js +3 -331
  10. package/action-escrow.js +3 -2447
  11. package/action-packs.js +3 -140
  12. package/adapters/_kit.js +3 -104
  13. package/adapters/aws.js +3 -108
  14. package/adapters/cloudflare.js +3 -54
  15. package/adapters/gcp.js +3 -70
  16. package/adapters/github.js +3 -109
  17. package/adapters/jira.js +3 -55
  18. package/adapters/k8s.js +3 -70
  19. package/adapters/linear.js +3 -55
  20. package/adapters/salesforce.js +3 -55
  21. package/adapters/stripe.js +3 -81
  22. package/adapters/supabase.js +3 -121
  23. package/adapters/terraform.js +3 -59
  24. package/adapters/vercel.js +3 -84
  25. package/aec-execution.js +3 -312
  26. package/breakglass.js +3 -582
  27. package/capability-receipt.js +4 -0
  28. package/cf1-conformance.js +3 -106
  29. package/challenge-store.js +3 -69
  30. package/control-plane.js +3 -340
  31. package/coverage.js +3 -721
  32. package/demo.mjs +1 -1
  33. package/deployment-attestation.js +3 -247
  34. package/dist/action-control-manifest.d.ts +82 -0
  35. package/dist/action-control-manifest.d.ts.map +1 -0
  36. package/dist/action-control-manifest.js +422 -0
  37. package/dist/action-control-manifest.js.map +1 -0
  38. package/dist/action-escrow-custodian.d.ts +74 -0
  39. package/dist/action-escrow-custodian.d.ts.map +1 -0
  40. package/dist/action-escrow-custodian.js +363 -0
  41. package/dist/action-escrow-custodian.js.map +1 -0
  42. package/dist/action-escrow-evidence.d.ts +130 -0
  43. package/dist/action-escrow-evidence.d.ts.map +1 -0
  44. package/dist/action-escrow-evidence.js +1012 -0
  45. package/dist/action-escrow-evidence.js.map +1 -0
  46. package/dist/action-escrow-package.d.ts +10 -0
  47. package/dist/action-escrow-package.d.ts.map +1 -0
  48. package/dist/action-escrow-package.js +1583 -0
  49. package/dist/action-escrow-package.js.map +1 -0
  50. package/dist/action-escrow-postgres.d.ts +62 -0
  51. package/dist/action-escrow-postgres.d.ts.map +1 -0
  52. package/dist/action-escrow-postgres.js +339 -0
  53. package/dist/action-escrow-postgres.js.map +1 -0
  54. package/dist/action-escrow-state.d.ts +141 -0
  55. package/dist/action-escrow-state.d.ts.map +1 -0
  56. package/dist/action-escrow-state.js +413 -0
  57. package/dist/action-escrow-state.js.map +1 -0
  58. package/dist/action-escrow-verifiers.d.ts +65 -0
  59. package/dist/action-escrow-verifiers.d.ts.map +1 -0
  60. package/dist/action-escrow-verifiers.js +421 -0
  61. package/dist/action-escrow-verifiers.js.map +1 -0
  62. package/dist/action-escrow.d.ts +112 -0
  63. package/dist/action-escrow.d.ts.map +1 -0
  64. package/dist/action-escrow.js +2661 -0
  65. package/dist/action-escrow.js.map +1 -0
  66. package/dist/action-packs.d.ts +54 -0
  67. package/dist/action-packs.d.ts.map +1 -0
  68. package/dist/action-packs.js +143 -0
  69. package/dist/action-packs.js.map +1 -0
  70. package/dist/adapters/_kit.d.ts +50 -0
  71. package/dist/adapters/_kit.d.ts.map +1 -0
  72. package/dist/adapters/_kit.js +98 -0
  73. package/dist/adapters/_kit.js.map +1 -0
  74. package/dist/adapters/aws.d.ts +158 -0
  75. package/dist/adapters/aws.d.ts.map +1 -0
  76. package/dist/adapters/aws.js +136 -0
  77. package/dist/adapters/aws.js.map +1 -0
  78. package/dist/adapters/cloudflare.d.ts +116 -0
  79. package/dist/adapters/cloudflare.d.ts.map +1 -0
  80. package/dist/adapters/cloudflare.js +75 -0
  81. package/dist/adapters/cloudflare.js.map +1 -0
  82. package/dist/adapters/gcp.d.ts +139 -0
  83. package/dist/adapters/gcp.d.ts.map +1 -0
  84. package/dist/adapters/gcp.js +69 -0
  85. package/dist/adapters/gcp.js.map +1 -0
  86. package/dist/adapters/github.d.ts +123 -0
  87. package/dist/adapters/github.d.ts.map +1 -0
  88. package/dist/adapters/github.js +105 -0
  89. package/dist/adapters/github.js.map +1 -0
  90. package/dist/adapters/jira.d.ts +109 -0
  91. package/dist/adapters/jira.d.ts.map +1 -0
  92. package/dist/adapters/jira.js +54 -0
  93. package/dist/adapters/jira.js.map +1 -0
  94. package/dist/adapters/k8s.d.ts +139 -0
  95. package/dist/adapters/k8s.d.ts.map +1 -0
  96. package/dist/adapters/k8s.js +69 -0
  97. package/dist/adapters/k8s.js.map +1 -0
  98. package/dist/adapters/linear.d.ts +109 -0
  99. package/dist/adapters/linear.d.ts.map +1 -0
  100. package/dist/adapters/linear.js +54 -0
  101. package/dist/adapters/linear.js.map +1 -0
  102. package/dist/adapters/salesforce.d.ts +109 -0
  103. package/dist/adapters/salesforce.d.ts.map +1 -0
  104. package/dist/adapters/salesforce.js +54 -0
  105. package/dist/adapters/salesforce.js.map +1 -0
  106. package/dist/adapters/stripe.d.ts +116 -0
  107. package/dist/adapters/stripe.d.ts.map +1 -0
  108. package/dist/adapters/stripe.js +77 -0
  109. package/dist/adapters/stripe.js.map +1 -0
  110. package/dist/adapters/supabase.d.ts +127 -0
  111. package/dist/adapters/supabase.d.ts.map +1 -0
  112. package/dist/adapters/supabase.js +112 -0
  113. package/dist/adapters/supabase.js.map +1 -0
  114. package/dist/adapters/terraform.d.ts +109 -0
  115. package/dist/adapters/terraform.d.ts.map +1 -0
  116. package/dist/adapters/terraform.js +58 -0
  117. package/dist/adapters/terraform.js.map +1 -0
  118. package/dist/adapters/vercel.d.ts +114 -0
  119. package/dist/adapters/vercel.d.ts.map +1 -0
  120. package/dist/adapters/vercel.js +81 -0
  121. package/dist/adapters/vercel.js.map +1 -0
  122. package/dist/aec-execution.d.ts +107 -0
  123. package/dist/aec-execution.d.ts.map +1 -0
  124. package/dist/aec-execution.js +334 -0
  125. package/dist/aec-execution.js.map +1 -0
  126. package/dist/breakglass.d.ts +205 -0
  127. package/dist/breakglass.d.ts.map +1 -0
  128. package/dist/breakglass.js +627 -0
  129. package/dist/breakglass.js.map +1 -0
  130. package/dist/capability-receipt.d.ts +601 -0
  131. package/dist/capability-receipt.d.ts.map +1 -0
  132. package/dist/capability-receipt.js +1177 -0
  133. package/dist/capability-receipt.js.map +1 -0
  134. package/dist/cf1-conformance.d.ts +83 -0
  135. package/dist/cf1-conformance.d.ts.map +1 -0
  136. package/dist/cf1-conformance.js +94 -0
  137. package/dist/cf1-conformance.js.map +1 -0
  138. package/dist/challenge-store.d.ts +20 -0
  139. package/dist/challenge-store.d.ts.map +1 -0
  140. package/dist/challenge-store.js +62 -0
  141. package/dist/challenge-store.js.map +1 -0
  142. package/dist/control-plane.d.ts +136 -0
  143. package/dist/control-plane.d.ts.map +1 -0
  144. package/dist/control-plane.js +349 -0
  145. package/dist/control-plane.js.map +1 -0
  146. package/dist/coverage.d.ts +156 -0
  147. package/dist/coverage.d.ts.map +1 -0
  148. package/dist/coverage.js +768 -0
  149. package/dist/coverage.js.map +1 -0
  150. package/dist/deployment-attestation.d.ts +93 -0
  151. package/dist/deployment-attestation.d.ts.map +1 -0
  152. package/dist/deployment-attestation.js +262 -0
  153. package/dist/deployment-attestation.js.map +1 -0
  154. package/dist/eg1-conformance.d.ts +286 -0
  155. package/dist/eg1-conformance.d.ts.map +1 -0
  156. package/dist/eg1-conformance.js +379 -0
  157. package/dist/eg1-conformance.js.map +1 -0
  158. package/dist/enterprise.d.ts +88 -0
  159. package/dist/enterprise.d.ts.map +1 -0
  160. package/dist/enterprise.js +194 -0
  161. package/dist/enterprise.js.map +1 -0
  162. package/dist/evidence-postgres.d.ts +123 -0
  163. package/dist/evidence-postgres.d.ts.map +1 -0
  164. package/dist/evidence-postgres.js +343 -0
  165. package/dist/evidence-postgres.js.map +1 -0
  166. package/dist/evidence.d.ts +113 -0
  167. package/dist/evidence.d.ts.map +1 -0
  168. package/dist/evidence.js +369 -0
  169. package/dist/evidence.js.map +1 -0
  170. package/dist/execution-binding.d.ts +49 -0
  171. package/dist/execution-binding.d.ts.map +1 -0
  172. package/dist/execution-binding.js +243 -0
  173. package/dist/execution-binding.js.map +1 -0
  174. package/dist/formal-runtime-map.d.ts +42 -0
  175. package/dist/formal-runtime-map.d.ts.map +1 -0
  176. package/dist/formal-runtime-map.js +23 -0
  177. package/dist/formal-runtime-map.js.map +1 -0
  178. package/dist/index.d.ts +1003 -0
  179. package/dist/index.d.ts.map +1 -0
  180. package/dist/index.js +1737 -0
  181. package/dist/index.js.map +1 -0
  182. package/dist/key-registry.d.ts +60 -0
  183. package/dist/key-registry.d.ts.map +1 -0
  184. package/dist/key-registry.js +144 -0
  185. package/dist/key-registry.js.map +1 -0
  186. package/dist/mcp.d.ts +53 -0
  187. package/dist/mcp.d.ts.map +1 -0
  188. package/dist/mcp.js +112 -0
  189. package/dist/mcp.js.map +1 -0
  190. package/dist/metering.d.ts +80 -0
  191. package/dist/metering.d.ts.map +1 -0
  192. package/dist/metering.js +227 -0
  193. package/dist/metering.js.map +1 -0
  194. package/dist/metrics.d.ts +68 -0
  195. package/dist/metrics.d.ts.map +1 -0
  196. package/dist/metrics.js +242 -0
  197. package/dist/metrics.js.map +1 -0
  198. package/dist/network-witness.d.ts +167 -0
  199. package/dist/network-witness.d.ts.map +1 -0
  200. package/dist/network-witness.js +520 -0
  201. package/dist/network-witness.js.map +1 -0
  202. package/dist/proposal-to-effect.d.ts +146 -0
  203. package/dist/proposal-to-effect.d.ts.map +1 -0
  204. package/dist/proposal-to-effect.js +427 -0
  205. package/dist/proposal-to-effect.js.map +1 -0
  206. package/dist/protocol-state.d.ts +141 -0
  207. package/dist/protocol-state.d.ts.map +1 -0
  208. package/dist/protocol-state.js +106 -0
  209. package/dist/protocol-state.js.map +1 -0
  210. package/dist/receipt-program.d.ts +59 -0
  211. package/dist/receipt-program.d.ts.map +1 -0
  212. package/dist/receipt-program.js +1053 -0
  213. package/dist/receipt-program.js.map +1 -0
  214. package/dist/reliance-kernel.d.ts +66 -0
  215. package/dist/reliance-kernel.d.ts.map +1 -0
  216. package/dist/reliance-kernel.js +103 -0
  217. package/dist/reliance-kernel.js.map +1 -0
  218. package/dist/reliance-packet.d.ts +67 -0
  219. package/dist/reliance-packet.d.ts.map +1 -0
  220. package/dist/reliance-packet.js +176 -0
  221. package/dist/reliance-packet.js.map +1 -0
  222. package/dist/remedy-program-postgres.d.ts +37 -0
  223. package/dist/remedy-program-postgres.d.ts.map +1 -0
  224. package/dist/remedy-program-postgres.js +291 -0
  225. package/dist/remedy-program-postgres.js.map +1 -0
  226. package/dist/remedy-program-receipt.d.ts +97 -0
  227. package/dist/remedy-program-receipt.d.ts.map +1 -0
  228. package/dist/remedy-program-receipt.js +817 -0
  229. package/dist/remedy-program-receipt.js.map +1 -0
  230. package/dist/remedy-program.d.ts +76 -0
  231. package/dist/remedy-program.d.ts.map +1 -0
  232. package/dist/remedy-program.js +1346 -0
  233. package/dist/remedy-program.js.map +1 -0
  234. package/dist/reports/art14.d.ts +101 -0
  235. package/dist/reports/art14.d.ts.map +1 -0
  236. package/dist/reports/art14.js +340 -0
  237. package/dist/reports/art14.js.map +1 -0
  238. package/dist/reports/assurance-package.d.ts +197 -0
  239. package/dist/reports/assurance-package.d.ts.map +1 -0
  240. package/dist/reports/assurance-package.js +313 -0
  241. package/dist/reports/assurance-package.js.map +1 -0
  242. package/dist/reports/auditor-workpaper.d.ts +194 -0
  243. package/dist/reports/auditor-workpaper.d.ts.map +1 -0
  244. package/dist/reports/auditor-workpaper.js +545 -0
  245. package/dist/reports/auditor-workpaper.js.map +1 -0
  246. package/dist/reports/external-verification.d.ts +76 -0
  247. package/dist/reports/external-verification.d.ts.map +1 -0
  248. package/dist/reports/external-verification.js +209 -0
  249. package/dist/reports/external-verification.js.map +1 -0
  250. package/dist/reports/reperform.d.ts +122 -0
  251. package/dist/reports/reperform.d.ts.map +1 -0
  252. package/dist/reports/reperform.js +432 -0
  253. package/dist/reports/reperform.js.map +1 -0
  254. package/dist/reports/underwriter.d.ts +127 -0
  255. package/dist/reports/underwriter.d.ts.map +1 -0
  256. package/dist/reports/underwriter.js +348 -0
  257. package/dist/reports/underwriter.js.map +1 -0
  258. package/dist/retention.d.ts +88 -0
  259. package/dist/retention.d.ts.map +1 -0
  260. package/dist/retention.js +90 -0
  261. package/dist/retention.js.map +1 -0
  262. package/dist/roster.d.ts +113 -0
  263. package/dist/roster.d.ts.map +1 -0
  264. package/dist/roster.js +261 -0
  265. package/dist/roster.js.map +1 -0
  266. package/dist/runtime-monitor.d.ts +132 -0
  267. package/dist/runtime-monitor.d.ts.map +1 -0
  268. package/dist/runtime-monitor.js +197 -0
  269. package/dist/runtime-monitor.js.map +1 -0
  270. package/dist/settlement.d.ts +68 -0
  271. package/dist/settlement.d.ts.map +1 -0
  272. package/dist/settlement.js +306 -0
  273. package/dist/settlement.js.map +1 -0
  274. package/dist/siem.d.ts +261 -0
  275. package/dist/siem.d.ts.map +1 -0
  276. package/dist/siem.js +247 -0
  277. package/dist/siem.js.map +1 -0
  278. package/dist/store-postgres.d.ts +107 -0
  279. package/dist/store-postgres.d.ts.map +1 -0
  280. package/dist/store-postgres.js +152 -0
  281. package/dist/store-postgres.js.map +1 -0
  282. package/dist/store.d.ts +95 -0
  283. package/dist/store.d.ts.map +1 -0
  284. package/dist/store.js +202 -0
  285. package/dist/store.js.map +1 -0
  286. package/dist/strict-json.d.ts +14 -0
  287. package/dist/strict-json.d.ts.map +1 -0
  288. package/dist/strict-json.js +132 -0
  289. package/dist/strict-json.js.map +1 -0
  290. package/dist/trust-program-adapters.d.ts +122 -0
  291. package/dist/trust-program-adapters.d.ts.map +1 -0
  292. package/dist/trust-program-adapters.js +802 -0
  293. package/dist/trust-program-adapters.js.map +1 -0
  294. package/dist/trust-program-postgres.d.ts +41 -0
  295. package/dist/trust-program-postgres.d.ts.map +1 -0
  296. package/dist/trust-program-postgres.js +346 -0
  297. package/dist/trust-program-postgres.js.map +1 -0
  298. package/dist/trust-program-revocation.d.ts +206 -0
  299. package/dist/trust-program-revocation.d.ts.map +1 -0
  300. package/dist/trust-program-revocation.js +600 -0
  301. package/dist/trust-program-revocation.js.map +1 -0
  302. package/dist/trust-program.d.ts +197 -0
  303. package/dist/trust-program.d.ts.map +1 -0
  304. package/dist/trust-program.js +1351 -0
  305. package/dist/trust-program.js.map +1 -0
  306. package/dist/witness-postgres.d.ts +43 -0
  307. package/dist/witness-postgres.d.ts.map +1 -0
  308. package/dist/witness-postgres.js +92 -0
  309. package/dist/witness-postgres.js.map +1 -0
  310. package/dist/zk-range-proof.d.ts +78 -0
  311. package/dist/zk-range-proof.d.ts.map +1 -0
  312. package/dist/zk-range-proof.js +228 -0
  313. package/dist/zk-range-proof.js.map +1 -0
  314. package/eg1-conformance.js +3 -404
  315. package/enterprise.js +3 -180
  316. package/ep-assure.mjs +1 -0
  317. package/evidence-postgres.js +3 -356
  318. package/evidence.js +4 -360
  319. package/execution-binding.js +3 -212
  320. package/formal-runtime-map.js +4 -0
  321. package/index.js +4 -1249
  322. package/key-registry.js +3 -134
  323. package/mcp.js +3 -109
  324. package/metering.js +3 -226
  325. package/metrics.js +3 -231
  326. package/network-witness.js +3 -499
  327. package/package.json +35 -4
  328. package/proposal-to-effect.js +4 -0
  329. package/receipt-program.js +4 -0
  330. package/reliance-kernel.js +3 -112
  331. package/reliance-packet.js +3 -175
  332. package/remedy-program-postgres.js +4 -0
  333. package/remedy-program-receipt.js +4 -0
  334. package/remedy-program.js +4 -0
  335. package/reports/art14.js +0 -0
  336. package/reports/assurance-package.js +2 -312
  337. package/reports/auditor-workpaper.js +3 -537
  338. package/reports/external-verification.js +3 -222
  339. package/reports/reperform.js +3 -424
  340. package/reports/underwriter.js +3 -339
  341. package/retention.js +3 -84
  342. package/roster.js +3 -264
  343. package/runtime-monitor.js +4 -0
  344. package/settlement.js +3 -299
  345. package/siem.js +3 -235
  346. package/src/action-control-manifest.ts +424 -0
  347. package/src/action-escrow-custodian.ts +427 -0
  348. package/src/action-escrow-evidence.ts +1178 -0
  349. package/src/action-escrow-package.ts +1821 -0
  350. package/src/action-escrow-postgres.ts +366 -0
  351. package/src/action-escrow-state.ts +498 -0
  352. package/src/action-escrow-verifiers.ts +484 -0
  353. package/src/action-escrow.ts +3039 -0
  354. package/src/action-packs.ts +170 -0
  355. package/src/adapters/_kit.ts +117 -0
  356. package/src/adapters/aws.ts +142 -0
  357. package/src/adapters/cloudflare.ts +78 -0
  358. package/src/adapters/gcp.ts +71 -0
  359. package/src/adapters/github.ts +110 -0
  360. package/src/adapters/jira.ts +56 -0
  361. package/src/adapters/k8s.ts +71 -0
  362. package/src/adapters/linear.ts +56 -0
  363. package/src/adapters/salesforce.ts +56 -0
  364. package/src/adapters/stripe.ts +82 -0
  365. package/src/adapters/supabase.ts +122 -0
  366. package/src/adapters/terraform.ts +60 -0
  367. package/src/adapters/vercel.ts +85 -0
  368. package/src/aec-execution.ts +354 -0
  369. package/src/breakglass.ts +647 -0
  370. package/src/capability-receipt.ts +1258 -0
  371. package/src/cf1-conformance.ts +120 -0
  372. package/src/challenge-store.ts +70 -0
  373. package/src/control-plane.ts +374 -0
  374. package/src/coverage.ts +832 -0
  375. package/src/deployment-attestation.ts +259 -0
  376. package/src/eg1-conformance.ts +471 -0
  377. package/src/enterprise.ts +195 -0
  378. package/src/evidence-postgres.ts +374 -0
  379. package/src/evidence.ts +367 -0
  380. package/src/execution-binding.ts +236 -0
  381. package/src/formal-runtime-map.ts +24 -0
  382. package/src/index.ts +2127 -0
  383. package/src/key-registry.ts +150 -0
  384. package/src/mcp.ts +120 -0
  385. package/src/metering.ts +237 -0
  386. package/src/metrics.ts +232 -0
  387. package/src/network-witness.ts +585 -0
  388. package/src/proposal-to-effect.ts +571 -0
  389. package/src/protocol-state.ts +143 -0
  390. package/src/protocol-state.typecheck.ts +94 -0
  391. package/src/receipt-program.ts +1105 -0
  392. package/src/reliance-kernel.ts +119 -0
  393. package/src/reliance-packet.ts +206 -0
  394. package/src/remedy-program-postgres.ts +367 -0
  395. package/src/remedy-program-receipt.ts +891 -0
  396. package/src/remedy-program.ts +1388 -0
  397. package/src/reports/art14.ts +361 -0
  398. package/src/reports/assurance-package.ts +330 -0
  399. package/src/reports/auditor-workpaper.ts +558 -0
  400. package/src/reports/external-verification.ts +232 -0
  401. package/src/reports/reperform.ts +441 -0
  402. package/src/reports/underwriter.ts +356 -0
  403. package/src/retention.ts +100 -0
  404. package/src/roster.ts +273 -0
  405. package/src/runtime-monitor.ts +217 -0
  406. package/src/settlement.ts +313 -0
  407. package/src/siem.ts +247 -0
  408. package/src/store-postgres.ts +167 -0
  409. package/src/store.ts +214 -0
  410. package/src/strict-json.ts +115 -0
  411. package/src/trust-program-adapters.ts +847 -0
  412. package/src/trust-program-postgres.ts +429 -0
  413. package/src/trust-program-revocation.ts +751 -0
  414. package/src/trust-program.ts +1460 -0
  415. package/src/witness-postgres.ts +106 -0
  416. package/src/zk-range-proof.ts +250 -0
  417. package/store-postgres.js +3 -161
  418. package/store.js +4 -198
  419. package/strict-json.js +3 -102
  420. package/trust-program-adapters.js +4 -0
  421. package/trust-program-postgres.js +4 -0
  422. package/trust-program-revocation.js +4 -0
  423. package/trust-program.js +4 -0
  424. package/witness-postgres.js +3 -96
  425. package/zk-range-proof.js +4 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * EP-ACTION-ESCROW-STATE-STATEMENT-v1
3
+ *
4
+ * A portable, operator-signed statement over one exact durable Action Escrow
5
+ * snapshot. The signature authenticates an operator statement; it does not
6
+ * prove the operator's database was complete or that a custodian moved money.
7
+ */
8
+ import crypto from 'node:crypto';
9
+ export declare const ACTION_ESCROW_STATE_STATEMENT_VERSION = "EP-ACTION-ESCROW-STATE-STATEMENT-v1";
10
+ export declare const ACTION_ESCROW_STATE_STATEMENT_DOMAIN = "EP-ACTION-ESCROW-STATE-STATEMENT-v1\0";
11
+ /**
12
+ * Sign one exact state snapshot. Issuance may throw on invalid local input;
13
+ * verification below never throws.
14
+ */
15
+ export declare function signActionEscrowStateStatement({ statementId, agreementId, bindingDigest, actionDigest, profileDigest, state, revision, amendmentDigests, stateRecord, previousStatementDigest, occurredAt, }?: {
16
+ statementId?: string;
17
+ agreementId?: string;
18
+ bindingDigest?: string;
19
+ actionDigest?: string;
20
+ profileDigest?: string;
21
+ state?: string;
22
+ revision?: number;
23
+ amendmentDigests?: string[];
24
+ stateRecord?: unknown;
25
+ previousStatementDigest?: string | null;
26
+ occurredAt?: string;
27
+ }, { operatorId, keyId, privateKey, }?: {
28
+ operatorId?: string;
29
+ keyId?: string;
30
+ privateKey?: crypto.KeyObject | Parameters<typeof crypto.createPrivateKey>[0];
31
+ }): any;
32
+ /**
33
+ * Verify one state statement against an exact snapshot and relying-party pins.
34
+ *
35
+ * @param {*} statement
36
+ */
37
+ export declare function verifyActionEscrowStateStatement(statement: any, { trustedKeys, stateRecord, expectedAgreementId, expectedBindingDigest, expectedActionDigest, expectedProfileDigest, expectedState, expectedRevision, expectedAmendmentDigests, expectedPreviousStatementDigest, now, }?: {
38
+ trustedKeys?: unknown;
39
+ stateRecord?: unknown;
40
+ expectedAgreementId?: string;
41
+ expectedBindingDigest?: string;
42
+ expectedActionDigest?: string;
43
+ expectedProfileDigest?: string;
44
+ expectedState?: string;
45
+ expectedRevision?: number;
46
+ expectedAmendmentDigests?: string[];
47
+ expectedPreviousStatementDigest?: string | null;
48
+ now?: Date | number | string;
49
+ }): {
50
+ valid: boolean;
51
+ reason: any;
52
+ checks: any;
53
+ statement_digest: null;
54
+ agreement_id: null;
55
+ binding_digest: null;
56
+ action_digest: null;
57
+ profile_digest: null;
58
+ state: null;
59
+ revision: null;
60
+ amendment_digests: never[];
61
+ } | {
62
+ valid: boolean;
63
+ reason: string;
64
+ checks: {
65
+ structure: boolean;
66
+ payload: boolean;
67
+ issuer_pin: boolean;
68
+ signature: boolean;
69
+ statement_digest: boolean;
70
+ state_record: boolean;
71
+ expected_bindings: boolean;
72
+ time: boolean;
73
+ };
74
+ statement_digest: string;
75
+ agreement_id: any;
76
+ binding_digest: any;
77
+ action_digest: any;
78
+ profile_digest: any;
79
+ state: any;
80
+ revision: any;
81
+ amendment_digests: any[];
82
+ };
83
+ /**
84
+ * Build the callback expected by verifyActionEscrowEvidencePackage. The
85
+ * package carries both the exact durable snapshot and the signed statement
86
+ * over it; trust keys and time remain verifier configuration.
87
+ */
88
+ export declare function createActionEscrowStatePackageVerifier({ trustedKeys, now, minimumRevision, }?: {
89
+ trustedKeys?: unknown;
90
+ now?: Date | number | string;
91
+ minimumRevision?: number;
92
+ }): (packaged: any, expected?: {
93
+ agreementId?: string;
94
+ bindingDigest?: string;
95
+ actionDigest?: string;
96
+ profileDigest?: string;
97
+ stage?: string;
98
+ amendmentDigests?: string[];
99
+ }) => Promise<{
100
+ valid: boolean;
101
+ reason: any;
102
+ checks: any;
103
+ statement_digest: null;
104
+ agreement_id: null;
105
+ binding_digest: null;
106
+ action_digest: null;
107
+ profile_digest: null;
108
+ state: null;
109
+ revision: null;
110
+ amendment_digests: never[];
111
+ } | {
112
+ valid: boolean;
113
+ reason: string;
114
+ checks: {
115
+ structure: boolean;
116
+ payload: boolean;
117
+ issuer_pin: boolean;
118
+ signature: boolean;
119
+ statement_digest: boolean;
120
+ state_record: boolean;
121
+ expected_bindings: boolean;
122
+ time: boolean;
123
+ };
124
+ statement_digest: string;
125
+ agreement_id: any;
126
+ binding_digest: any;
127
+ action_digest: any;
128
+ profile_digest: any;
129
+ state: any;
130
+ revision: any;
131
+ amendment_digests: any[];
132
+ }>;
133
+ declare const _default: {
134
+ ACTION_ESCROW_STATE_STATEMENT_VERSION: string;
135
+ ACTION_ESCROW_STATE_STATEMENT_DOMAIN: string;
136
+ signActionEscrowStateStatement: typeof signActionEscrowStateStatement;
137
+ verifyActionEscrowStateStatement: typeof verifyActionEscrowStateStatement;
138
+ createActionEscrowStatePackageVerifier: typeof createActionEscrowStatePackageVerifier;
139
+ };
140
+ export default _default;
141
+ //# sourceMappingURL=action-escrow-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-escrow-state.d.ts","sourceRoot":"","sources":["../src/action-escrow-state.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AACH,OAAO,MAAM,MAAM,aAAa,CAAC;AAIjC,eAAO,MAAM,qCAAqC,wCAAwC,CAAC;AAC3F,eAAO,MAAM,oCAAoC,0CAA+C,CAAC;AA4MjG;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,EAC7C,WAAW,EACX,WAAW,EACX,aAAa,EACb,YAAY,EACZ,aAAa,EACb,KAAK,EACL,QAAQ,EACR,gBAAqB,EACrB,WAAW,EACX,uBAA8B,EAC9B,UAAU,GACX,GAAE;IACD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,EACN,UAAU,EACV,KAAK,EACL,UAAU,GACX,GAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1E,OA6CL;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,SAAS,KAAA,EAAE,EAC1D,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACxB,+BAA+B,EAC/B,GAAG,GACJ,GAAE;IACD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,+BAA+B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;CACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkGL;AAED;;;;GAIG;AACH,wBAAgB,sCAAsC,CAAC,EACrD,WAAW,EACX,GAAG,EACH,eAAmB,GACpB,GAAE;IACD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CACrB,IAQsC,aAAQ,EAAE,WAAU;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCP;;;;;;;;AAED,wBAME"}
@@ -0,0 +1,413 @@
1
+ // @ts-nocheck
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * EP-ACTION-ESCROW-STATE-STATEMENT-v1
5
+ *
6
+ * A portable, operator-signed statement over one exact durable Action Escrow
7
+ * snapshot. The signature authenticates an operator statement; it does not
8
+ * prove the operator's database was complete or that a custodian moved money.
9
+ */
10
+ import crypto from 'node:crypto';
11
+ import { canonicalize, hashCanonical } from './execution-binding.js';
12
+ import { ACTION_ESCROW_EVIDENCE_STAGES } from './action-escrow-evidence.js';
13
+ export const ACTION_ESCROW_STATE_STATEMENT_VERSION = 'EP-ACTION-ESCROW-STATE-STATEMENT-v1';
14
+ export const ACTION_ESCROW_STATE_STATEMENT_DOMAIN = `${ACTION_ESCROW_STATE_STATEMENT_VERSION}\0`;
15
+ const HASH = /^sha256:[0-9a-f]{64}$/;
16
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:/#@+-]{0,255}$/;
17
+ const BASE64URL = /^[A-Za-z0-9_-]+$/;
18
+ const TOP_KEYS = new Set(['version', 'issuer', 'payload', 'statement_digest', 'signature']);
19
+ const ISSUER_KEYS = new Set(['operator_id', 'key_id']);
20
+ const PAYLOAD_KEYS = new Set([
21
+ 'statement_id',
22
+ 'agreement_id',
23
+ 'binding_digest',
24
+ 'action_digest',
25
+ 'profile_digest',
26
+ 'state',
27
+ 'revision',
28
+ 'amendment_digests',
29
+ 'state_record_digest',
30
+ 'previous_statement_digest',
31
+ 'occurred_at',
32
+ ]);
33
+ const SIGNATURE_KEYS = new Set(['algorithm', 'signature_b64u']);
34
+ function isRecord(value) {
35
+ return value !== null
36
+ && typeof value === 'object'
37
+ && !Array.isArray(value)
38
+ && (Object.getPrototypeOf(value) === Object.prototype
39
+ || Object.getPrototypeOf(value) === null);
40
+ }
41
+ /**
42
+ * @param {*} value
43
+ * @param {Set<string>} keys
44
+ */
45
+ function exactKeys(value, keys) {
46
+ return isRecord(value)
47
+ && Object.keys(value).length === keys.size
48
+ && Object.keys(value).every((key) => keys.has(key));
49
+ }
50
+ /** @param {*} value */
51
+ function strictInstant(value) {
52
+ if (typeof value !== 'string')
53
+ return NaN;
54
+ const match = value.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d{1,9})?Z$/);
55
+ if (!match)
56
+ return NaN;
57
+ const [, year, month, day, hour, minute, second] = match;
58
+ const calendar = new Date(0);
59
+ calendar.setUTCFullYear(Number(year), Number(month) - 1, Number(day));
60
+ calendar.setUTCHours(Number(hour), Number(minute), Number(second), 0);
61
+ if (calendar.toISOString().slice(0, 19)
62
+ !== `${year}-${month}-${day}T${hour}:${minute}:${second}`)
63
+ return NaN;
64
+ const parsed = Date.parse(value);
65
+ return Number.isFinite(parsed) ? parsed : NaN;
66
+ }
67
+ /** @param {*} value */
68
+ function boundedCanonicalCopy(value) {
69
+ let nodes = 0;
70
+ let bytes = 0;
71
+ const seen = new WeakSet();
72
+ /**
73
+ * @param {*} current
74
+ * @param {number} depth
75
+ * @returns {*}
76
+ */
77
+ function copy(current, depth) {
78
+ nodes += 1;
79
+ if (nodes > 50_000 || depth > 64)
80
+ throw new TypeError('state statement exceeds resource limits');
81
+ if (current === null || typeof current === 'boolean')
82
+ return current;
83
+ if (typeof current === 'string') {
84
+ bytes += Buffer.byteLength(current, 'utf8');
85
+ if (bytes > 4 * 1024 * 1024)
86
+ throw new TypeError('state statement exceeds string limit');
87
+ return current;
88
+ }
89
+ if (typeof current === 'number') {
90
+ if (!Number.isSafeInteger(current) || Object.is(current, -0)) {
91
+ throw new TypeError('state statement contains a non-canonical number');
92
+ }
93
+ return current;
94
+ }
95
+ if (!isRecord(current) && !Array.isArray(current)) {
96
+ throw new TypeError('state statement is not canonical JSON');
97
+ }
98
+ if (seen.has(current))
99
+ throw new TypeError('state statement contains an alias or cycle');
100
+ seen.add(current);
101
+ if (Array.isArray(current))
102
+ return current.map((entry) => copy(entry, depth + 1));
103
+ return Object.fromEntries(Object.entries(current).map(([key, entry]) => [key, copy(entry, depth + 1)]));
104
+ }
105
+ return copy(value, 0);
106
+ }
107
+ /** @param {*} value */
108
+ function canonicalHash(value) {
109
+ return `sha256:${hashCanonical(value)}`;
110
+ }
111
+ /**
112
+ * @typedef {Object} StateStatementLike
113
+ * @property {string} [version]
114
+ * @property {*} [issuer]
115
+ * @property {*} [payload]
116
+ * @property {string} [statement_digest]
117
+ * @property {*} [signature]
118
+ */
119
+ /** @param {StateStatementLike} statement */
120
+ function signingBody(statement) {
121
+ return {
122
+ version: statement.version,
123
+ issuer: statement.issuer,
124
+ payload: statement.payload,
125
+ };
126
+ }
127
+ /** @param {StateStatementLike} statement */
128
+ function stateSigningBytes(statement) {
129
+ const body = boundedCanonicalCopy(signingBody(statement));
130
+ return Buffer.from(ACTION_ESCROW_STATE_STATEMENT_DOMAIN + canonicalize(body), 'utf8');
131
+ }
132
+ /** @param {*} value */
133
+ function deepFreeze(value) {
134
+ if (!value || typeof value !== 'object' || Object.isFrozen(value))
135
+ return value;
136
+ Object.freeze(value);
137
+ for (const child of Object.values(value))
138
+ deepFreeze(child);
139
+ return value;
140
+ }
141
+ /**
142
+ * @param {*} value
143
+ * @param {number} [length]
144
+ */
145
+ function strictBase64url(value, length) {
146
+ if (typeof value !== 'string' || !BASE64URL.test(value) || value.length % 4 === 1)
147
+ return null;
148
+ const bytes = Buffer.from(value, 'base64url');
149
+ if (bytes.toString('base64url') !== value || (length !== undefined && bytes.length !== length))
150
+ return null;
151
+ return bytes;
152
+ }
153
+ /** @param {*} value */
154
+ function validDigestList(value) {
155
+ return Array.isArray(value)
156
+ && value.length <= 1024
157
+ && value.every((entry) => typeof entry === 'string' && HASH.test(entry))
158
+ && new Set(value).size === value.length;
159
+ }
160
+ /** @param {*} payload */
161
+ function payloadValid(payload) {
162
+ return exactKeys(payload, PAYLOAD_KEYS)
163
+ && typeof payload.statement_id === 'string' && ID.test(payload.statement_id)
164
+ && typeof payload.agreement_id === 'string' && ID.test(payload.agreement_id)
165
+ && HASH.test(payload.binding_digest)
166
+ && HASH.test(payload.action_digest)
167
+ && HASH.test(payload.profile_digest)
168
+ && ACTION_ESCROW_EVIDENCE_STAGES.includes(payload.state)
169
+ && Number.isSafeInteger(payload.revision) && payload.revision >= 0
170
+ && validDigestList(payload.amendment_digests)
171
+ && HASH.test(payload.state_record_digest)
172
+ && (payload.previous_statement_digest === null || HASH.test(payload.previous_statement_digest))
173
+ && Number.isFinite(strictInstant(payload.occurred_at));
174
+ }
175
+ /**
176
+ * @typedef {Object} StateStatementChecks
177
+ * @property {boolean} structure
178
+ * @property {boolean} payload
179
+ * @property {boolean} issuer_pin
180
+ * @property {boolean} signature
181
+ * @property {boolean} statement_digest
182
+ * @property {boolean} state_record
183
+ * @property {boolean} expected_bindings
184
+ * @property {boolean} time
185
+ */
186
+ /**
187
+ * @param {string} reason
188
+ * @param {StateStatementChecks} checks
189
+ */
190
+ function refuse(reason, checks) {
191
+ return {
192
+ valid: false,
193
+ reason,
194
+ checks,
195
+ statement_digest: null,
196
+ agreement_id: null,
197
+ binding_digest: null,
198
+ action_digest: null,
199
+ profile_digest: null,
200
+ state: null,
201
+ revision: null,
202
+ amendment_digests: [],
203
+ };
204
+ }
205
+ /**
206
+ * Sign one exact state snapshot. Issuance may throw on invalid local input;
207
+ * verification below never throws.
208
+ */
209
+ export function signActionEscrowStateStatement({ statementId, agreementId, bindingDigest, actionDigest, profileDigest, state, revision, amendmentDigests = [], stateRecord, previousStatementDigest = null, occurredAt, } = {}, { operatorId, keyId, privateKey, } = {}) {
210
+ const stateRecordCopy = boundedCanonicalCopy(stateRecord);
211
+ const statement = {
212
+ version: ACTION_ESCROW_STATE_STATEMENT_VERSION,
213
+ issuer: {
214
+ operator_id: operatorId,
215
+ key_id: keyId,
216
+ },
217
+ payload: {
218
+ statement_id: statementId,
219
+ agreement_id: agreementId,
220
+ binding_digest: bindingDigest,
221
+ action_digest: actionDigest,
222
+ profile_digest: profileDigest,
223
+ state,
224
+ revision,
225
+ amendment_digests: boundedCanonicalCopy(amendmentDigests),
226
+ state_record_digest: canonicalHash(stateRecordCopy),
227
+ previous_statement_digest: previousStatementDigest,
228
+ occurred_at: occurredAt,
229
+ },
230
+ };
231
+ if (!exactKeys(statement.issuer, ISSUER_KEYS)
232
+ || typeof operatorId !== 'string' || !ID.test(operatorId)
233
+ || typeof keyId !== 'string' || !ID.test(keyId)
234
+ || !payloadValid(statement.payload)) {
235
+ throw new TypeError('action-escrow state statement input is invalid');
236
+ }
237
+ // privateKey may be omitted by a caller (optional field); createPrivateKey
238
+ // throws on undefined input, matching this function's documented
239
+ // throw-on-invalid-local-input contract.
240
+ const key = privateKey instanceof crypto.KeyObject ? privateKey : crypto.createPrivateKey(privateKey);
241
+ if (key.asymmetricKeyType !== 'ed25519') {
242
+ throw new TypeError('action-escrow state statement key must be Ed25519');
243
+ }
244
+ const bytes = stateSigningBytes(statement);
245
+ const statementDigest = `sha256:${crypto.createHash('sha256').update(bytes).digest('hex')}`;
246
+ return deepFreeze({
247
+ ...statement,
248
+ statement_digest: statementDigest,
249
+ signature: {
250
+ algorithm: 'Ed25519',
251
+ signature_b64u: crypto.sign(null, bytes, key).toString('base64url'),
252
+ },
253
+ });
254
+ }
255
+ /**
256
+ * Verify one state statement against an exact snapshot and relying-party pins.
257
+ *
258
+ * @param {*} statement
259
+ */
260
+ export function verifyActionEscrowStateStatement(statement, { trustedKeys, stateRecord, expectedAgreementId, expectedBindingDigest, expectedActionDigest, expectedProfileDigest, expectedState, expectedRevision, expectedAmendmentDigests, expectedPreviousStatementDigest, now, } = {}) {
261
+ const checks = {
262
+ structure: false,
263
+ payload: false,
264
+ issuer_pin: false,
265
+ signature: false,
266
+ statement_digest: false,
267
+ state_record: false,
268
+ expected_bindings: false,
269
+ time: false,
270
+ };
271
+ try {
272
+ checks.structure = exactKeys(statement, TOP_KEYS)
273
+ && statement.version === ACTION_ESCROW_STATE_STATEMENT_VERSION
274
+ && exactKeys(statement.issuer, ISSUER_KEYS)
275
+ && exactKeys(statement.signature, SIGNATURE_KEYS);
276
+ if (!checks.structure)
277
+ return refuse('malformed_state_statement', checks);
278
+ checks.payload = payloadValid(statement.payload);
279
+ if (!checks.payload)
280
+ return refuse('invalid_state_payload', checks);
281
+ const pin = isRecord(trustedKeys) && Object.hasOwn(trustedKeys, statement.issuer.key_id)
282
+ ? trustedKeys[statement.issuer.key_id]
283
+ : null;
284
+ checks.issuer_pin = exactKeys(pin, new Set(['operator_id', 'public_key']))
285
+ && pin.operator_id === statement.issuer.operator_id
286
+ && typeof pin.public_key === 'string';
287
+ if (!checks.issuer_pin)
288
+ return refuse('operator_key_not_pinned', checks);
289
+ const publicBytes = strictBase64url(pin.public_key);
290
+ const signatureBytes = strictBase64url(statement.signature.signature_b64u, 64);
291
+ let publicKey = null;
292
+ try {
293
+ // publicBytes may be null here (checked below via publicBytes !== null);
294
+ // createPublicKey rejects a null key and the catch maps that to null.
295
+ publicKey = crypto.createPublicKey({ key: publicBytes, format: 'der', type: 'spki' });
296
+ }
297
+ catch {
298
+ publicKey = null;
299
+ }
300
+ const bytes = stateSigningBytes(statement);
301
+ checks.signature = statement.signature.algorithm === 'Ed25519'
302
+ && publicBytes !== null
303
+ && signatureBytes !== null
304
+ && publicKey?.asymmetricKeyType === 'ed25519'
305
+ && crypto.verify(null, bytes, publicKey, signatureBytes);
306
+ if (!checks.signature)
307
+ return refuse('state_signature_invalid', checks);
308
+ const digest = `sha256:${crypto.createHash('sha256').update(bytes).digest('hex')}`;
309
+ checks.statement_digest = statement.statement_digest === digest;
310
+ if (!checks.statement_digest)
311
+ return refuse('state_statement_digest_mismatch', checks);
312
+ checks.state_record = canonicalHash(boundedCanonicalCopy(stateRecord))
313
+ === statement.payload.state_record_digest;
314
+ if (!checks.state_record)
315
+ return refuse('state_record_digest_mismatch', checks);
316
+ const amendments = expectedAmendmentDigests;
317
+ checks.expected_bindings = typeof expectedAgreementId === 'string'
318
+ && statement.payload.agreement_id === expectedAgreementId
319
+ && statement.payload.binding_digest === expectedBindingDigest
320
+ && statement.payload.action_digest === expectedActionDigest
321
+ && statement.payload.profile_digest === expectedProfileDigest
322
+ && statement.payload.state === expectedState
323
+ && statement.payload.revision === expectedRevision
324
+ && Array.isArray(amendments)
325
+ && statement.payload.amendment_digests.length === amendments.length
326
+ && statement.payload.amendment_digests.every(
327
+ /**
328
+ * @param {string} entry
329
+ * @param {number} index
330
+ */
331
+ (entry, index) => entry === amendments[index])
332
+ && statement.payload.previous_statement_digest === expectedPreviousStatementDigest;
333
+ if (!checks.expected_bindings)
334
+ return refuse('state_expected_binding_mismatch', checks);
335
+ const evaluation = now instanceof Date
336
+ ? now.getTime()
337
+ : typeof now === 'number' ? now : strictInstant(now);
338
+ checks.time = Number.isFinite(evaluation)
339
+ && strictInstant(statement.payload.occurred_at) <= evaluation;
340
+ if (!checks.time)
341
+ return refuse('state_statement_from_future', checks);
342
+ return {
343
+ valid: true,
344
+ reason: 'verified',
345
+ checks,
346
+ statement_digest: digest,
347
+ agreement_id: statement.payload.agreement_id,
348
+ binding_digest: statement.payload.binding_digest,
349
+ action_digest: statement.payload.action_digest,
350
+ profile_digest: statement.payload.profile_digest,
351
+ state: statement.payload.state,
352
+ revision: statement.payload.revision,
353
+ amendment_digests: [...statement.payload.amendment_digests],
354
+ };
355
+ }
356
+ catch {
357
+ return refuse('malformed_state_statement', checks);
358
+ }
359
+ }
360
+ /**
361
+ * Build the callback expected by verifyActionEscrowEvidencePackage. The
362
+ * package carries both the exact durable snapshot and the signed statement
363
+ * over it; trust keys and time remain verifier configuration.
364
+ */
365
+ export function createActionEscrowStatePackageVerifier({ trustedKeys, now, minimumRevision = 0, } = {}) {
366
+ if (!Number.isSafeInteger(minimumRevision) || minimumRevision < 0) {
367
+ throw new TypeError('minimumRevision must be a non-negative safe integer');
368
+ }
369
+ const pinnedKeys = boundedCanonicalCopy(trustedKeys);
370
+ /**
371
+ * @param {*} packaged
372
+ */
373
+ return async function verifyPackagedState(packaged, expected = {}) {
374
+ if (!exactKeys(packaged, new Set(['snapshot', 'statement']))
375
+ || !isRecord(packaged.statement?.payload)
376
+ || !isRecord(packaged.snapshot)
377
+ || packaged.statement.payload.state !== packaged.snapshot.state
378
+ || packaged.statement.payload.revision !== packaged.snapshot.revision
379
+ || packaged.statement.payload.revision < minimumRevision) {
380
+ return refuse('malformed_packaged_state', {
381
+ structure: false,
382
+ payload: false,
383
+ issuer_pin: false,
384
+ signature: false,
385
+ statement_digest: false,
386
+ state_record: false,
387
+ expected_bindings: false,
388
+ time: false,
389
+ });
390
+ }
391
+ return verifyActionEscrowStateStatement(packaged.statement, {
392
+ trustedKeys: pinnedKeys,
393
+ stateRecord: packaged.snapshot,
394
+ expectedAgreementId: expected.agreementId,
395
+ expectedBindingDigest: expected.bindingDigest,
396
+ expectedActionDigest: expected.actionDigest,
397
+ expectedProfileDigest: expected.profileDigest,
398
+ expectedState: expected.stage,
399
+ expectedRevision: packaged.statement.payload.revision,
400
+ expectedAmendmentDigests: expected.amendmentDigests,
401
+ expectedPreviousStatementDigest: packaged.statement.payload.previous_statement_digest,
402
+ now,
403
+ });
404
+ };
405
+ }
406
+ export default {
407
+ ACTION_ESCROW_STATE_STATEMENT_VERSION,
408
+ ACTION_ESCROW_STATE_STATEMENT_DOMAIN,
409
+ signActionEscrowStateStatement,
410
+ verifyActionEscrowStateStatement,
411
+ createActionEscrowStatePackageVerifier,
412
+ };
413
+ //# sourceMappingURL=action-escrow-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-escrow-state.js","sourceRoot":"","sources":["../src/action-escrow-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Validated, sorted shape of the caller-supplied expected-binding context
3
+ * returned by {@link exactExpected}.
4
+ * @typedef {Object} ExpectedActionBindingContext
5
+ * @property {string} agreement_digest
6
+ * @property {string} document_action_binding_digest
7
+ * @property {string} release_action_digest
8
+ * @property {string} milestone_id
9
+ * @property {Array<{party_id: string, role: string}>} parties
10
+ * @property {string} parties_digest
11
+ * @property {string} profile_digest
12
+ * @property {string|null} supersedes_document_action_binding_digest
13
+ */
14
+ /**
15
+ * Validated release-action template shape produced by
16
+ * {@link validateActionEscrowReleaseTemplate}.
17
+ * @typedef {Object} ActionEscrowReleaseTemplate
18
+ * @property {string} action_type
19
+ * @property {string} action_escrow_profile_digest
20
+ * @property {string} agreement_id
21
+ * @property {string} agreement_digest
22
+ * @property {string} milestone_id
23
+ * @property {string} amount
24
+ * @property {string} currency
25
+ * @property {string} destination_id
26
+ * @property {string} payee_id
27
+ * @property {string} custodian_provider
28
+ * @property {'sandbox'|'production'} custodian_environment
29
+ * @property {string} custodian_transaction_id
30
+ * @property {string} custodian_milestone_id
31
+ * @property {string} document_sha256
32
+ * @property {string} material_terms_sha256
33
+ * @property {string} completion_evidence_sha256
34
+ * @property {number} amendment_version
35
+ * @property {string} [project_record_snapshot_digest]
36
+ * @property {string} [action_escrow_template_profile]
37
+ */
38
+ export declare const ACTION_ESCROW_AGREEMENT_DIGEST_VERSION = "EP-ACTION-ESCROW-AGREEMENT-DIGEST-v1";
39
+ export declare const ACTION_ESCROW_CONTRACTOR_TEMPLATE_VERSION = "EP-ACTION-ESCROW-CONTRACTOR-TEMPLATE-v1";
40
+ export declare const ACTION_ESCROW_REQUIRED_MATERIAL_TERM_IDS: readonly string[];
41
+ export declare const ACTION_ESCROW_CONTRACTOR_REQUIRED_MATERIAL_TERM_IDS: readonly string[];
42
+ export declare function computeActionEscrowAgreementDigest(agreementId: any): string | null;
43
+ export declare function validateActionEscrowReleaseTemplate(template: any, { profileDigest, agreementId, agreementDigest, milestoneId, documentDigest, materialTerms, contractorProjectSource, }?: {
44
+ profileDigest?: any;
45
+ agreementId?: any;
46
+ agreementDigest?: any;
47
+ milestoneId?: any;
48
+ documentDigest?: any;
49
+ materialTerms?: any;
50
+ contractorProjectSource?: boolean;
51
+ }): any;
52
+ export declare function createActionEscrowDocumentBindingVerifier(options?: {}): (binding: any, untrustedExpected: any) => Promise<any>;
53
+ export declare function createActionEscrowContractorDocumentBindingVerifier(options?: {}): (binding: any, untrustedExpected: any) => Promise<any>;
54
+ declare const _default: Readonly<{
55
+ ACTION_ESCROW_AGREEMENT_DIGEST_VERSION: "EP-ACTION-ESCROW-AGREEMENT-DIGEST-v1";
56
+ ACTION_ESCROW_CONTRACTOR_TEMPLATE_VERSION: "EP-ACTION-ESCROW-CONTRACTOR-TEMPLATE-v1";
57
+ ACTION_ESCROW_CONTRACTOR_REQUIRED_MATERIAL_TERM_IDS: readonly string[];
58
+ ACTION_ESCROW_REQUIRED_MATERIAL_TERM_IDS: readonly string[];
59
+ computeActionEscrowAgreementDigest: typeof computeActionEscrowAgreementDigest;
60
+ createActionEscrowContractorDocumentBindingVerifier: typeof createActionEscrowContractorDocumentBindingVerifier;
61
+ createActionEscrowDocumentBindingVerifier: typeof createActionEscrowDocumentBindingVerifier;
62
+ validateActionEscrowReleaseTemplate: typeof validateActionEscrowReleaseTemplate;
63
+ }>;
64
+ export default _default;
65
+ //# sourceMappingURL=action-escrow-verifiers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-escrow-verifiers.d.ts","sourceRoot":"","sources":["../src/action-escrow-verifiers.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,eAAO,MAAM,sCAAsC,yCACX,CAAC;AACzC,eAAO,MAAM,yCAAyC,4CACX,CAAC;AAK5C,eAAO,MAAM,wCAAwC,mBAWnD,CAAC;AACH,eAAO,MAAM,mDAAmD,mBAG9D,CAAC;AA8FH,wBAAgB,kCAAkC,CAAC,WAAW,KAAA,iBAU7D;AAgCD,wBAAgB,mCAAmC,CAAC,QAAQ,EAAE,GAAG,EAAE,EACjE,aAAa,EACb,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,uBAA+B,GAChC,GAAE;IACD,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC9B,OAgDL;AA6LD,wBAAgB,yCAAyC,CAAC,OAAO,KAAK,0DAIrE;AAED,wBAAgB,mDAAmD,CAAC,OAAO,KAAK,0DAI/E;;;;;;;;;;;AAED,wBASG"}