@emilia-protocol/gate 0.11.0 → 0.13.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 (419) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +252 -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 +1002 -0
  179. package/dist/index.d.ts.map +1 -0
  180. package/dist/index.js +1736 -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/protocol-state.d.ts +141 -0
  203. package/dist/protocol-state.d.ts.map +1 -0
  204. package/dist/protocol-state.js +106 -0
  205. package/dist/protocol-state.js.map +1 -0
  206. package/dist/receipt-program.d.ts +59 -0
  207. package/dist/receipt-program.d.ts.map +1 -0
  208. package/dist/receipt-program.js +1053 -0
  209. package/dist/receipt-program.js.map +1 -0
  210. package/dist/reliance-kernel.d.ts +66 -0
  211. package/dist/reliance-kernel.d.ts.map +1 -0
  212. package/dist/reliance-kernel.js +103 -0
  213. package/dist/reliance-kernel.js.map +1 -0
  214. package/dist/reliance-packet.d.ts +67 -0
  215. package/dist/reliance-packet.d.ts.map +1 -0
  216. package/dist/reliance-packet.js +176 -0
  217. package/dist/reliance-packet.js.map +1 -0
  218. package/dist/remedy-program-postgres.d.ts +37 -0
  219. package/dist/remedy-program-postgres.d.ts.map +1 -0
  220. package/dist/remedy-program-postgres.js +291 -0
  221. package/dist/remedy-program-postgres.js.map +1 -0
  222. package/dist/remedy-program-receipt.d.ts +97 -0
  223. package/dist/remedy-program-receipt.d.ts.map +1 -0
  224. package/dist/remedy-program-receipt.js +817 -0
  225. package/dist/remedy-program-receipt.js.map +1 -0
  226. package/dist/remedy-program.d.ts +76 -0
  227. package/dist/remedy-program.d.ts.map +1 -0
  228. package/dist/remedy-program.js +1346 -0
  229. package/dist/remedy-program.js.map +1 -0
  230. package/dist/reports/art14.d.ts +101 -0
  231. package/dist/reports/art14.d.ts.map +1 -0
  232. package/dist/reports/art14.js +340 -0
  233. package/dist/reports/art14.js.map +1 -0
  234. package/dist/reports/assurance-package.d.ts +197 -0
  235. package/dist/reports/assurance-package.d.ts.map +1 -0
  236. package/dist/reports/assurance-package.js +313 -0
  237. package/dist/reports/assurance-package.js.map +1 -0
  238. package/dist/reports/auditor-workpaper.d.ts +194 -0
  239. package/dist/reports/auditor-workpaper.d.ts.map +1 -0
  240. package/dist/reports/auditor-workpaper.js +545 -0
  241. package/dist/reports/auditor-workpaper.js.map +1 -0
  242. package/dist/reports/external-verification.d.ts +76 -0
  243. package/dist/reports/external-verification.d.ts.map +1 -0
  244. package/dist/reports/external-verification.js +209 -0
  245. package/dist/reports/external-verification.js.map +1 -0
  246. package/dist/reports/reperform.d.ts +122 -0
  247. package/dist/reports/reperform.d.ts.map +1 -0
  248. package/dist/reports/reperform.js +432 -0
  249. package/dist/reports/reperform.js.map +1 -0
  250. package/dist/reports/underwriter.d.ts +127 -0
  251. package/dist/reports/underwriter.d.ts.map +1 -0
  252. package/dist/reports/underwriter.js +348 -0
  253. package/dist/reports/underwriter.js.map +1 -0
  254. package/dist/retention.d.ts +88 -0
  255. package/dist/retention.d.ts.map +1 -0
  256. package/dist/retention.js +90 -0
  257. package/dist/retention.js.map +1 -0
  258. package/dist/roster.d.ts +113 -0
  259. package/dist/roster.d.ts.map +1 -0
  260. package/dist/roster.js +261 -0
  261. package/dist/roster.js.map +1 -0
  262. package/dist/runtime-monitor.d.ts +132 -0
  263. package/dist/runtime-monitor.d.ts.map +1 -0
  264. package/dist/runtime-monitor.js +197 -0
  265. package/dist/runtime-monitor.js.map +1 -0
  266. package/dist/settlement.d.ts +68 -0
  267. package/dist/settlement.d.ts.map +1 -0
  268. package/dist/settlement.js +306 -0
  269. package/dist/settlement.js.map +1 -0
  270. package/dist/siem.d.ts +261 -0
  271. package/dist/siem.d.ts.map +1 -0
  272. package/dist/siem.js +247 -0
  273. package/dist/siem.js.map +1 -0
  274. package/dist/store-postgres.d.ts +107 -0
  275. package/dist/store-postgres.d.ts.map +1 -0
  276. package/dist/store-postgres.js +152 -0
  277. package/dist/store-postgres.js.map +1 -0
  278. package/dist/store.d.ts +95 -0
  279. package/dist/store.d.ts.map +1 -0
  280. package/dist/store.js +202 -0
  281. package/dist/store.js.map +1 -0
  282. package/dist/strict-json.d.ts +14 -0
  283. package/dist/strict-json.d.ts.map +1 -0
  284. package/dist/strict-json.js +132 -0
  285. package/dist/strict-json.js.map +1 -0
  286. package/dist/trust-program-adapters.d.ts +122 -0
  287. package/dist/trust-program-adapters.d.ts.map +1 -0
  288. package/dist/trust-program-adapters.js +802 -0
  289. package/dist/trust-program-adapters.js.map +1 -0
  290. package/dist/trust-program-postgres.d.ts +41 -0
  291. package/dist/trust-program-postgres.d.ts.map +1 -0
  292. package/dist/trust-program-postgres.js +346 -0
  293. package/dist/trust-program-postgres.js.map +1 -0
  294. package/dist/trust-program-revocation.d.ts +206 -0
  295. package/dist/trust-program-revocation.d.ts.map +1 -0
  296. package/dist/trust-program-revocation.js +600 -0
  297. package/dist/trust-program-revocation.js.map +1 -0
  298. package/dist/trust-program.d.ts +197 -0
  299. package/dist/trust-program.d.ts.map +1 -0
  300. package/dist/trust-program.js +1351 -0
  301. package/dist/trust-program.js.map +1 -0
  302. package/dist/witness-postgres.d.ts +43 -0
  303. package/dist/witness-postgres.d.ts.map +1 -0
  304. package/dist/witness-postgres.js +92 -0
  305. package/dist/witness-postgres.js.map +1 -0
  306. package/dist/zk-range-proof.d.ts +78 -0
  307. package/dist/zk-range-proof.d.ts.map +1 -0
  308. package/dist/zk-range-proof.js +228 -0
  309. package/dist/zk-range-proof.js.map +1 -0
  310. package/eg1-conformance.js +3 -404
  311. package/enterprise.js +3 -180
  312. package/ep-assure.mjs +1 -0
  313. package/evidence-postgres.js +3 -356
  314. package/evidence.js +4 -360
  315. package/execution-binding.js +3 -212
  316. package/formal-runtime-map.js +4 -0
  317. package/index.js +4 -1249
  318. package/key-registry.js +3 -134
  319. package/mcp.js +3 -109
  320. package/metering.js +3 -226
  321. package/metrics.js +3 -231
  322. package/network-witness.js +3 -499
  323. package/package.json +31 -2
  324. package/receipt-program.js +4 -0
  325. package/reliance-kernel.js +3 -112
  326. package/reliance-packet.js +3 -175
  327. package/remedy-program-postgres.js +4 -0
  328. package/remedy-program-receipt.js +4 -0
  329. package/remedy-program.js +4 -0
  330. package/reports/art14.js +0 -0
  331. package/reports/assurance-package.js +2 -312
  332. package/reports/auditor-workpaper.js +3 -537
  333. package/reports/external-verification.js +3 -222
  334. package/reports/reperform.js +3 -424
  335. package/reports/underwriter.js +3 -339
  336. package/retention.js +3 -84
  337. package/roster.js +3 -264
  338. package/runtime-monitor.js +4 -0
  339. package/settlement.js +3 -299
  340. package/siem.js +3 -235
  341. package/src/action-control-manifest.ts +424 -0
  342. package/src/action-escrow-custodian.ts +427 -0
  343. package/src/action-escrow-evidence.ts +1178 -0
  344. package/src/action-escrow-package.ts +1821 -0
  345. package/src/action-escrow-postgres.ts +366 -0
  346. package/src/action-escrow-state.ts +498 -0
  347. package/src/action-escrow-verifiers.ts +484 -0
  348. package/src/action-escrow.ts +3039 -0
  349. package/src/action-packs.ts +170 -0
  350. package/src/adapters/_kit.ts +117 -0
  351. package/src/adapters/aws.ts +142 -0
  352. package/src/adapters/cloudflare.ts +78 -0
  353. package/src/adapters/gcp.ts +71 -0
  354. package/src/adapters/github.ts +110 -0
  355. package/src/adapters/jira.ts +56 -0
  356. package/src/adapters/k8s.ts +71 -0
  357. package/src/adapters/linear.ts +56 -0
  358. package/src/adapters/salesforce.ts +56 -0
  359. package/src/adapters/stripe.ts +82 -0
  360. package/src/adapters/supabase.ts +122 -0
  361. package/src/adapters/terraform.ts +60 -0
  362. package/src/adapters/vercel.ts +85 -0
  363. package/src/aec-execution.ts +354 -0
  364. package/src/breakglass.ts +647 -0
  365. package/src/capability-receipt.ts +1258 -0
  366. package/src/cf1-conformance.ts +120 -0
  367. package/src/challenge-store.ts +70 -0
  368. package/src/control-plane.ts +374 -0
  369. package/src/coverage.ts +832 -0
  370. package/src/deployment-attestation.ts +259 -0
  371. package/src/eg1-conformance.ts +471 -0
  372. package/src/enterprise.ts +195 -0
  373. package/src/evidence-postgres.ts +374 -0
  374. package/src/evidence.ts +367 -0
  375. package/src/execution-binding.ts +236 -0
  376. package/src/formal-runtime-map.ts +24 -0
  377. package/src/index.ts +2122 -0
  378. package/src/key-registry.ts +150 -0
  379. package/src/mcp.ts +120 -0
  380. package/src/metering.ts +237 -0
  381. package/src/metrics.ts +232 -0
  382. package/src/network-witness.ts +585 -0
  383. package/src/protocol-state.ts +143 -0
  384. package/src/protocol-state.typecheck.ts +94 -0
  385. package/src/receipt-program.ts +1105 -0
  386. package/src/reliance-kernel.ts +119 -0
  387. package/src/reliance-packet.ts +206 -0
  388. package/src/remedy-program-postgres.ts +367 -0
  389. package/src/remedy-program-receipt.ts +891 -0
  390. package/src/remedy-program.ts +1388 -0
  391. package/src/reports/art14.ts +361 -0
  392. package/src/reports/assurance-package.ts +330 -0
  393. package/src/reports/auditor-workpaper.ts +558 -0
  394. package/src/reports/external-verification.ts +232 -0
  395. package/src/reports/reperform.ts +441 -0
  396. package/src/reports/underwriter.ts +356 -0
  397. package/src/retention.ts +100 -0
  398. package/src/roster.ts +273 -0
  399. package/src/runtime-monitor.ts +217 -0
  400. package/src/settlement.ts +313 -0
  401. package/src/siem.ts +247 -0
  402. package/src/store-postgres.ts +167 -0
  403. package/src/store.ts +214 -0
  404. package/src/strict-json.ts +115 -0
  405. package/src/trust-program-adapters.ts +847 -0
  406. package/src/trust-program-postgres.ts +429 -0
  407. package/src/trust-program-revocation.ts +751 -0
  408. package/src/trust-program.ts +1460 -0
  409. package/src/witness-postgres.ts +106 -0
  410. package/src/zk-range-proof.ts +250 -0
  411. package/store-postgres.js +3 -161
  412. package/store.js +4 -198
  413. package/strict-json.js +3 -102
  414. package/trust-program-adapters.js +4 -0
  415. package/trust-program-postgres.js +4 -0
  416. package/trust-program-revocation.js +4 -0
  417. package/trust-program.js +4 -0
  418. package/witness-postgres.js +3 -96
  419. package/zk-range-proof.js +4 -0
@@ -0,0 +1,600 @@
1
+ // @ts-nocheck
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Public experimental Trust Program profile for EP-REVOCATION-v1.
5
+ *
6
+ * The portable statement is untrusted input. The relying party derives the
7
+ * complete commit target from its own exact execution authorization binding,
8
+ * pinned receipt context, and pinned program version before invoking the
9
+ * published @emilia-protocol/verify verifier.
10
+ */
11
+ import { verifyRevocation as verifyPortableRevocation } from '@emilia-protocol/verify';
12
+ import { hashCanonical } from './execution-binding.js';
13
+ export const TRUST_PROGRAM_REVOCATION_TARGET_VERSION = 'EP-GATE-TRUST-PROGRAM-REVOCATION-TARGET-v1';
14
+ const DIGEST = /^sha256:[0-9a-f]{64}$/;
15
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
16
+ const CAID = /^caid:1:[a-z][a-z0-9.-]*\.[1-9][0-9]*:jcs-sha256:[A-Za-z0-9_-]{43}$/;
17
+ const FORBIDDEN_FIELD_NAMES = new Set(['__proto__', 'prototype', 'constructor']);
18
+ const MAX_TERMINAL_RECEIPTS = 64;
19
+ const MAX_CONTEXT_BYTES = 512;
20
+ const MAX_INVALIDATION_ATTEMPTS = 3;
21
+ const UNCLAIMED_EXECUTION_STATUSES = new Set(['locked', 'ready']);
22
+ const CLAIMED_OR_TERMINAL_EXECUTION_STATUSES = new Set([
23
+ 'claimed', 'indeterminate', 'executed', 'refused', 'proved_no_effect',
24
+ ]);
25
+ const DERIVATION_INPUT_KEYS = new Set([
26
+ 'authorizationBinding', 'programVersion', 'receiptContext',
27
+ ]);
28
+ const VERIFICATION_INPUT_KEYS = new Set([
29
+ 'authorizationBinding', 'programVersion', 'receiptContext',
30
+ 'statement', 'revokerKeys', 'now',
31
+ ]);
32
+ const APPLY_INPUT_KEYS = new Set([
33
+ 'authorizationBinding', 'programVersion', 'receiptContext',
34
+ 'statement', 'revokerKeys', 'now', 'expectedRevision', 'kernel',
35
+ ]);
36
+ const AUTHORIZATION_BINDING_KEYS = new Set([
37
+ 'instance_id', 'operation_id', 'program_digest', 'root_caid', 'action_digest',
38
+ 'receipt_context_digest', 'terminal_stage_receipt_digests', 'consequence_mode',
39
+ 'capability_template_digest', 'escrow_profile_digest',
40
+ ]);
41
+ const RECEIPT_CONTEXT_KEYS = new Set([
42
+ 'issuer', 'tenant', 'environment', 'audience', 'key_id',
43
+ ]);
44
+ const STATEMENT_KEYS = new Set([
45
+ '@version', 'target_type', 'target_id', 'action_hash', 'revoker_id',
46
+ 'revoked_at', 'reason', 'proof',
47
+ ]);
48
+ const PROOF_KEYS = new Set([
49
+ 'algorithm', 'revoker_key_id', 'signature_b64u', 'public_key',
50
+ ]);
51
+ const PIN_KEYS = new Set(['public_key', 'key_id']);
52
+ const PIN_KEYS_WITHOUT_ID = new Set(['public_key']);
53
+ function isDataRecord(value) {
54
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
55
+ return false;
56
+ const prototype = Object.getPrototypeOf(value);
57
+ if (prototype !== Object.prototype && prototype !== null)
58
+ return false;
59
+ return Reflect.ownKeys(value).every((key) => {
60
+ if (typeof key !== 'string')
61
+ return false;
62
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
63
+ return descriptor?.enumerable === true && Object.hasOwn(descriptor, 'value');
64
+ });
65
+ }
66
+ function exactKeys(value, keys) {
67
+ return isDataRecord(value)
68
+ && Reflect.ownKeys(value).length === keys.size
69
+ && Reflect.ownKeys(value).every((key) => typeof key === 'string' && keys.has(key));
70
+ }
71
+ function dataValue(value, key) {
72
+ return Object.getOwnPropertyDescriptor(value, key).value;
73
+ }
74
+ function assertNoPrototypeNamedFields(value) {
75
+ if (value === null || typeof value !== 'object')
76
+ return;
77
+ const stack = [value];
78
+ const seen = new WeakSet();
79
+ while (stack.length > 0) {
80
+ const current = stack.pop();
81
+ if (seen.has(current))
82
+ throw new TypeError('aliased or cyclic input is forbidden');
83
+ seen.add(current);
84
+ for (const key of Reflect.ownKeys(current)) {
85
+ if (typeof key !== 'string')
86
+ throw new TypeError('symbol fields are forbidden');
87
+ if (FORBIDDEN_FIELD_NAMES.has(key)) {
88
+ throw new TypeError(`prototype-named field ${key} is forbidden`);
89
+ }
90
+ const descriptor = Object.getOwnPropertyDescriptor(current, key);
91
+ if (!descriptor || descriptor.enumerable !== (key !== 'length')
92
+ || !Object.hasOwn(descriptor, 'value')) {
93
+ if (Array.isArray(current) && key === 'length'
94
+ && descriptor && Object.hasOwn(descriptor, 'value'))
95
+ continue;
96
+ throw new TypeError('accessor or non-enumerable fields are forbidden');
97
+ }
98
+ const child = descriptor.value;
99
+ if (child !== null && typeof child === 'object')
100
+ stack.push(child);
101
+ }
102
+ }
103
+ }
104
+ function deepFreeze(value) {
105
+ if (value === null || typeof value !== 'object')
106
+ return value;
107
+ const stack = [value];
108
+ const seen = new WeakSet();
109
+ while (stack.length > 0) {
110
+ const current = stack.pop();
111
+ if (seen.has(current))
112
+ continue;
113
+ seen.add(current);
114
+ for (const child of Object.values(current)) {
115
+ if (child !== null && typeof child === 'object')
116
+ stack.push(child);
117
+ }
118
+ Object.freeze(current);
119
+ }
120
+ return value;
121
+ }
122
+ function validContextString(value) {
123
+ return typeof value === 'string'
124
+ && value.length > 0
125
+ && Buffer.byteLength(value, 'utf8') <= MAX_CONTEXT_BYTES
126
+ && !/[\u0000-\u001f\u007f]/.test(value)
127
+ && !FORBIDDEN_FIELD_NAMES.has(value);
128
+ }
129
+ function snapshotReceiptContext(value) {
130
+ if (!exactKeys(value, RECEIPT_CONTEXT_KEYS)) {
131
+ throw new TypeError('receipt context must use the exact closed issuer schema');
132
+ }
133
+ assertNoPrototypeNamedFields(value);
134
+ const context = {
135
+ issuer: dataValue(value, 'issuer'),
136
+ tenant: dataValue(value, 'tenant'),
137
+ environment: dataValue(value, 'environment'),
138
+ audience: dataValue(value, 'audience'),
139
+ key_id: dataValue(value, 'key_id'),
140
+ };
141
+ if (!Object.values(context).every(validContextString)) {
142
+ throw new TypeError('receipt context is malformed');
143
+ }
144
+ return context;
145
+ }
146
+ function snapshotAuthorizationBinding(value) {
147
+ if (!exactKeys(value, AUTHORIZATION_BINDING_KEYS)) {
148
+ throw new TypeError('closed execution authorization binding required');
149
+ }
150
+ assertNoPrototypeNamedFields(value);
151
+ const binding = {
152
+ instance_id: dataValue(value, 'instance_id'),
153
+ operation_id: dataValue(value, 'operation_id'),
154
+ program_digest: dataValue(value, 'program_digest'),
155
+ root_caid: dataValue(value, 'root_caid'),
156
+ action_digest: dataValue(value, 'action_digest'),
157
+ receipt_context_digest: dataValue(value, 'receipt_context_digest'),
158
+ terminal_stage_receipt_digests: dataValue(value, 'terminal_stage_receipt_digests'),
159
+ consequence_mode: dataValue(value, 'consequence_mode'),
160
+ capability_template_digest: dataValue(value, 'capability_template_digest'),
161
+ escrow_profile_digest: dataValue(value, 'escrow_profile_digest'),
162
+ };
163
+ if (typeof binding.instance_id !== 'string' || !ID.test(binding.instance_id)
164
+ || typeof binding.operation_id !== 'string' || !ID.test(binding.operation_id)
165
+ || typeof binding.program_digest !== 'string' || !DIGEST.test(binding.program_digest)
166
+ || typeof binding.root_caid !== 'string' || !CAID.test(binding.root_caid)
167
+ || typeof binding.action_digest !== 'string' || !DIGEST.test(binding.action_digest)
168
+ || typeof binding.receipt_context_digest !== 'string'
169
+ || !DIGEST.test(binding.receipt_context_digest)) {
170
+ throw new TypeError('execution authorization binding is malformed');
171
+ }
172
+ const receipts = binding.terminal_stage_receipt_digests;
173
+ if (!Array.isArray(receipts) || receipts.length === 0
174
+ || receipts.length > MAX_TERMINAL_RECEIPTS
175
+ || receipts.some((entry) => typeof entry !== 'string' || !DIGEST.test(entry))) {
176
+ throw new TypeError('terminal receipt digests are malformed');
177
+ }
178
+ for (let index = 1; index < receipts.length; index += 1) {
179
+ if (receipts[index - 1] >= receipts[index]) {
180
+ throw new TypeError('sorted terminal receipt digests required');
181
+ }
182
+ }
183
+ const receiptProgramOwner = binding.capability_template_digest;
184
+ const actionEscrowOwner = binding.escrow_profile_digest;
185
+ const ownerXor = (typeof receiptProgramOwner === 'string' && DIGEST.test(receiptProgramOwner)
186
+ && actionEscrowOwner === null)
187
+ || (receiptProgramOwner === null
188
+ && typeof actionEscrowOwner === 'string' && DIGEST.test(actionEscrowOwner));
189
+ if (!ownerXor
190
+ || (binding.consequence_mode === 'receipt-program' && receiptProgramOwner === null)
191
+ || (binding.consequence_mode === 'action-escrow' && actionEscrowOwner === null)
192
+ || !['receipt-program', 'action-escrow'].includes(binding.consequence_mode)) {
193
+ throw new TypeError('exactly one consequence owner must match consequence mode');
194
+ }
195
+ return {
196
+ ...binding,
197
+ terminal_stage_receipt_digests: [...receipts],
198
+ };
199
+ }
200
+ function deriveTargetObjectInternal(input) {
201
+ if (!exactKeys(input, DERIVATION_INPUT_KEYS)) {
202
+ throw new TypeError('closed derivation input required');
203
+ }
204
+ const binding = snapshotAuthorizationBinding(dataValue(input, 'authorizationBinding'));
205
+ const receiptContext = snapshotReceiptContext(dataValue(input, 'receiptContext'));
206
+ const programVersion = dataValue(input, 'programVersion');
207
+ if (!Number.isSafeInteger(programVersion) || programVersion < 1) {
208
+ throw new TypeError('program version must be a positive safe integer');
209
+ }
210
+ const derivedReceiptContextDigest = `sha256:${hashCanonical(receiptContext)}`;
211
+ if (binding.receipt_context_digest !== derivedReceiptContextDigest) {
212
+ throw new TypeError('receipt context digest mismatch');
213
+ }
214
+ return deepFreeze({
215
+ '@version': TRUST_PROGRAM_REVOCATION_TARGET_VERSION,
216
+ instance_id: binding.instance_id,
217
+ program_digest: binding.program_digest,
218
+ program_version: programVersion,
219
+ root_caid: binding.root_caid,
220
+ action_digest: binding.action_digest,
221
+ operation_id: binding.operation_id,
222
+ receipt_context_digest: derivedReceiptContextDigest,
223
+ terminal_stage_receipt_digests: [...binding.terminal_stage_receipt_digests],
224
+ consequence_mode: binding.consequence_mode,
225
+ capability_template_digest: binding.capability_template_digest,
226
+ escrow_profile_digest: binding.escrow_profile_digest,
227
+ });
228
+ }
229
+ /** Derive the complete closed projection whose JCS SHA-256 is action_hash. */
230
+ export function deriveTrustProgramRevocationTargetObject(input) {
231
+ try {
232
+ return deriveTargetObjectInternal(input);
233
+ }
234
+ catch (error) {
235
+ if (error instanceof TypeError)
236
+ throw error;
237
+ throw new TypeError('Trust Program revocation target derivation failed closed');
238
+ }
239
+ }
240
+ /** Derive the EP-REVOCATION-v1 commit target; no statement field is consulted. */
241
+ export function deriveTrustProgramRevocationTarget(input) {
242
+ const targetObject = deriveTrustProgramRevocationTargetObject(input);
243
+ return Object.freeze({
244
+ target_type: 'commit',
245
+ target_id: targetObject.operation_id,
246
+ action_hash: `sha256:${hashCanonical(targetObject)}`,
247
+ });
248
+ }
249
+ function validStatementStructure(statement) {
250
+ try {
251
+ if (!exactKeys(statement, STATEMENT_KEYS))
252
+ return false;
253
+ assertNoPrototypeNamedFields(statement);
254
+ return exactKeys(dataValue(statement, 'proof'), PROOF_KEYS);
255
+ }
256
+ catch {
257
+ return false;
258
+ }
259
+ }
260
+ function snapshotRevokerKeys(value) {
261
+ if (!isDataRecord(value))
262
+ throw new TypeError('pinned revoker key registry required');
263
+ const names = Reflect.ownKeys(value);
264
+ if (names.length === 0 || names.length > 1024) {
265
+ throw new TypeError('pinned revoker key registry required');
266
+ }
267
+ const snapshot = Object.create(null);
268
+ for (const name of names) {
269
+ if (typeof name !== 'string' || !validContextString(name)) {
270
+ throw new TypeError('pinned revoker identifier is malformed');
271
+ }
272
+ const pin = dataValue(value, name);
273
+ if (!(exactKeys(pin, PIN_KEYS) || exactKeys(pin, PIN_KEYS_WITHOUT_ID))) {
274
+ throw new TypeError('pinned revoker key entry is malformed');
275
+ }
276
+ const publicKey = dataValue(pin, 'public_key');
277
+ const keyId = Object.hasOwn(pin, 'key_id') ? dataValue(pin, 'key_id') : undefined;
278
+ if (typeof publicKey !== 'string' || publicKey.length === 0
279
+ || (keyId !== undefined && (typeof keyId !== 'string' || keyId.length === 0))) {
280
+ throw new TypeError('pinned revoker key entry is malformed');
281
+ }
282
+ snapshot[name] = keyId === undefined
283
+ ? { public_key: publicKey }
284
+ : { public_key: publicKey, key_id: keyId };
285
+ }
286
+ return deepFreeze(snapshot);
287
+ }
288
+ function snapshotDecisionTime(value) {
289
+ if (typeof value === 'number' && Number.isFinite(value))
290
+ return value;
291
+ if (typeof value === 'string' && value.length > 0 && value.length <= 128)
292
+ return value;
293
+ if (value instanceof Date && Object.getPrototypeOf(value) === Date.prototype
294
+ && Number.isFinite(value.getTime()))
295
+ return value.getTime();
296
+ throw new TypeError('pinned verifier decision time required');
297
+ }
298
+ function verificationRefusal(check, message, target, targetObject) {
299
+ return {
300
+ valid: false,
301
+ checks: {
302
+ target_derived: check !== 'target_derived',
303
+ statement_structure: !['target_derived', 'statement_structure'].includes(check),
304
+ pinned_verifier_inputs: ![
305
+ 'target_derived', 'statement_structure', 'pinned_verifier_inputs',
306
+ ].includes(check),
307
+ portable_verifier_completed: false,
308
+ },
309
+ errors: [message],
310
+ target: target ?? null,
311
+ target_object: targetObject ?? null,
312
+ };
313
+ }
314
+ /**
315
+ * Verify a presented statement against a target independently derived from
316
+ * relying-party state. Pinned keys and decision time are mandatory.
317
+ */
318
+ function verifyTrustProgramRevocationInternal(input) {
319
+ if (!exactKeys(input, VERIFICATION_INPUT_KEYS)) {
320
+ return verificationRefusal('target_derived', 'closed Trust Program revocation verification input required');
321
+ }
322
+ const derivationInput = {
323
+ authorizationBinding: dataValue(input, 'authorizationBinding'),
324
+ programVersion: dataValue(input, 'programVersion'),
325
+ receiptContext: dataValue(input, 'receiptContext'),
326
+ };
327
+ let targetObject;
328
+ let target;
329
+ try {
330
+ targetObject = deriveTrustProgramRevocationTargetObject(derivationInput);
331
+ target = deriveTrustProgramRevocationTarget(derivationInput);
332
+ }
333
+ catch (error) {
334
+ return verificationRefusal('target_derived', error instanceof Error ? error.message : 'Trust Program revocation target derivation failed');
335
+ }
336
+ const statement = dataValue(input, 'statement');
337
+ if (!validStatementStructure(statement)) {
338
+ return verificationRefusal('statement_structure', 'revocation statement and proof must be closed plain data objects', target, targetObject);
339
+ }
340
+ let revokerKeys;
341
+ let now;
342
+ try {
343
+ revokerKeys = snapshotRevokerKeys(dataValue(input, 'revokerKeys'));
344
+ now = snapshotDecisionTime(dataValue(input, 'now'));
345
+ }
346
+ catch (error) {
347
+ return verificationRefusal('pinned_verifier_inputs', error instanceof Error ? error.message : 'pinned verifier inputs are malformed', target, targetObject);
348
+ }
349
+ try {
350
+ const result = verifyPortableRevocation(target, statement, { revokerKeys, now });
351
+ if (!isDataRecord(result) || typeof result.valid !== 'boolean'
352
+ || !isDataRecord(result.checks) || !Array.isArray(result.errors)
353
+ || result.errors.some((entry) => typeof entry !== 'string')) {
354
+ return verificationRefusal('portable_verifier_completed', 'portable revocation verifier returned a malformed result', target, targetObject);
355
+ }
356
+ return {
357
+ valid: result.valid === true,
358
+ checks: {
359
+ target_derived: true,
360
+ statement_structure: true,
361
+ pinned_verifier_inputs: true,
362
+ portable_verifier_completed: true,
363
+ ...result.checks,
364
+ },
365
+ errors: [...result.errors],
366
+ target,
367
+ target_object: targetObject,
368
+ };
369
+ }
370
+ catch {
371
+ return verificationRefusal('portable_verifier_completed', 'portable revocation verifier threw; refused fail-closed', target, targetObject);
372
+ }
373
+ }
374
+ export function verifyTrustProgramRevocation(input) {
375
+ try {
376
+ return verifyTrustProgramRevocationInternal(input);
377
+ }
378
+ catch {
379
+ return verificationRefusal('target_derived', 'malformed Trust Program revocation verification input; refused fail-closed');
380
+ }
381
+ }
382
+ function applyRefusal(reason, verification) {
383
+ return {
384
+ verified: verification?.valid === true,
385
+ applied: false,
386
+ blocks_claim: false,
387
+ claim_permitted: false,
388
+ future_authority_only: false,
389
+ retry_required: false,
390
+ // An unauthenticated or non-binding statement is discarded; otherwise an
391
+ // attacker could stop claims merely by submitting malformed revocations.
392
+ // Fail-closed is reserved for a VERIFIED revocation whose atomic state
393
+ // transition cannot be decided.
394
+ must_fail_closed: false,
395
+ disposition: 'refused',
396
+ reason,
397
+ verification: verification ?? null,
398
+ state: null,
399
+ };
400
+ }
401
+ function lateDisposition(reason, verification, state, applied = false) {
402
+ return {
403
+ verified: true,
404
+ applied,
405
+ blocks_claim: false,
406
+ claim_permitted: false,
407
+ future_authority_only: true,
408
+ retry_required: false,
409
+ must_fail_closed: false,
410
+ disposition: 'late_future_authority_only',
411
+ reason,
412
+ verification,
413
+ state,
414
+ };
415
+ }
416
+ function indeterminateDisposition(reason, verification, state) {
417
+ return {
418
+ verified: true,
419
+ applied: false,
420
+ blocks_claim: false,
421
+ claim_permitted: false,
422
+ future_authority_only: false,
423
+ retry_required: true,
424
+ must_fail_closed: true,
425
+ disposition: 'indeterminate_retry_required',
426
+ reason,
427
+ verification,
428
+ state,
429
+ };
430
+ }
431
+ /**
432
+ * Apply a verified revocation through bounded compare-and-swap attempts. A
433
+ * stale but still-unclaimed instance is retried at its current revision so it
434
+ * cannot remain claimable merely because an unrelated transition advanced the
435
+ * revision. A claim that already linearized is never relabeled or undone. If
436
+ * repeated conflicts prevent either conclusion, callers MUST fail closed and
437
+ * retry from a fresh authoritative snapshot.
438
+ */
439
+ async function applyTrustProgramRevocationInternal(input) {
440
+ if (!exactKeys(input, APPLY_INPUT_KEYS))
441
+ return applyRefusal('closed_apply_input_required');
442
+ const expectedRevision = dataValue(input, 'expectedRevision');
443
+ const kernel = dataValue(input, 'kernel');
444
+ if (!Number.isSafeInteger(expectedRevision) || expectedRevision < 0) {
445
+ return applyRefusal('expected_revision_invalid');
446
+ }
447
+ if (!isDataRecord(kernel) || typeof kernel.status !== 'function'
448
+ || typeof kernel.invalidate !== 'function') {
449
+ return applyRefusal('trust_program_kernel_invalid');
450
+ }
451
+ const verification = verifyTrustProgramRevocation({
452
+ authorizationBinding: dataValue(input, 'authorizationBinding'),
453
+ programVersion: dataValue(input, 'programVersion'),
454
+ receiptContext: dataValue(input, 'receiptContext'),
455
+ statement: dataValue(input, 'statement'),
456
+ revokerKeys: dataValue(input, 'revokerKeys'),
457
+ now: dataValue(input, 'now'),
458
+ });
459
+ if (!verification.valid)
460
+ return applyRefusal('revocation_verification_failed', verification);
461
+ const binding = snapshotAuthorizationBinding(dataValue(input, 'authorizationBinding'));
462
+ const statement = dataValue(input, 'statement');
463
+ const signedReason = dataValue(statement, 'reason');
464
+ const reason = typeof signedReason === 'string' && signedReason.length > 0
465
+ && signedReason.length <= 256 && !/[\u0000-\u001f\u007f]/.test(signedReason)
466
+ ? signedReason
467
+ : 'verified EP-REVOCATION-v1 statement';
468
+ const loadCurrentState = async () => {
469
+ try {
470
+ const observed = await kernel.status(binding.instance_id);
471
+ if (!isDataRecord(observed) || observed.ok !== true || !isDataRecord(observed.state)
472
+ || !Number.isSafeInteger(observed.state.revision)
473
+ || !isDataRecord(observed.state.execution)
474
+ || typeof observed.state.execution.status !== 'string') {
475
+ return { ok: false, reason: 'kernel_status_invalid', state: null };
476
+ }
477
+ return { ok: true, state: observed.state };
478
+ }
479
+ catch {
480
+ return { ok: false, reason: 'kernel_status_unavailable', state: null };
481
+ }
482
+ };
483
+ let loaded = await loadCurrentState();
484
+ if (!loaded.ok)
485
+ return indeterminateDisposition(loaded.reason, verification, loaded.state);
486
+ let currentState = loaded.state;
487
+ const initiallyStale = currentState.revision !== expectedRevision;
488
+ for (let attempt = 0; attempt < MAX_INVALIDATION_ATTEMPTS; attempt += 1) {
489
+ const executionStatus = currentState.execution.status;
490
+ if (currentState.status === 'invalidated') {
491
+ if (executionStatus !== 'invalidated') {
492
+ return lateDisposition('claim_already_linearized', verification, currentState);
493
+ }
494
+ return {
495
+ verified: true,
496
+ applied: false,
497
+ blocks_claim: true,
498
+ claim_permitted: false,
499
+ future_authority_only: false,
500
+ retry_required: false,
501
+ must_fail_closed: false,
502
+ disposition: 'already_invalidated',
503
+ reason: 'program_instance_invalidated',
504
+ verification,
505
+ state: currentState,
506
+ };
507
+ }
508
+ if (CLAIMED_OR_TERMINAL_EXECUTION_STATUSES.has(executionStatus)) {
509
+ return lateDisposition(initiallyStale ? 'stale_expected_revision_claim_already_linearized'
510
+ : 'claim_already_linearized', verification, currentState);
511
+ }
512
+ if (currentState.status !== 'active'
513
+ || !UNCLAIMED_EXECUTION_STATUSES.has(executionStatus)) {
514
+ return indeterminateDisposition('kernel_execution_state_indeterminate', verification, currentState);
515
+ }
516
+ let invalidated;
517
+ try {
518
+ // The only mutating call in this adapter. It occurs only after the actual
519
+ // portable verifier accepted the independently derived target.
520
+ invalidated = await kernel.invalidate({
521
+ instanceId: binding.instance_id,
522
+ expectedRevision: currentState.revision,
523
+ reason,
524
+ });
525
+ }
526
+ catch {
527
+ return indeterminateDisposition('kernel_invalidation_unavailable', verification, currentState);
528
+ }
529
+ if (!isDataRecord(invalidated) || typeof invalidated.ok !== 'boolean') {
530
+ return indeterminateDisposition('kernel_invalidation_result_invalid', verification, currentState);
531
+ }
532
+ if (invalidated.ok === true) {
533
+ if (!isDataRecord(invalidated.state) || invalidated.state.status !== 'invalidated'
534
+ || !isDataRecord(invalidated.state.execution)
535
+ || typeof invalidated.state.execution.status !== 'string') {
536
+ return indeterminateDisposition('kernel_invalidation_state_invalid', verification, currentState);
537
+ }
538
+ if (invalidated.state.execution.status !== 'invalidated') {
539
+ return lateDisposition('claim_already_linearized', verification, invalidated.state, true);
540
+ }
541
+ return {
542
+ verified: true,
543
+ applied: true,
544
+ blocks_claim: true,
545
+ claim_permitted: false,
546
+ future_authority_only: false,
547
+ retry_required: false,
548
+ must_fail_closed: false,
549
+ disposition: 'invalidated_before_claim',
550
+ reason: 'revocation_linearized_before_claim',
551
+ verification,
552
+ state: invalidated.state,
553
+ };
554
+ }
555
+ if (invalidated.reason !== 'revision_conflict') {
556
+ return indeterminateDisposition(typeof invalidated.reason === 'string'
557
+ ? invalidated.reason : 'kernel_invalidation_failed', verification, currentState);
558
+ }
559
+ loaded = await loadCurrentState();
560
+ if (!loaded.ok)
561
+ return indeterminateDisposition(loaded.reason, verification, loaded.state);
562
+ currentState = loaded.state;
563
+ }
564
+ const finalExecutionStatus = currentState.execution.status;
565
+ if (currentState.status === 'invalidated' && finalExecutionStatus === 'invalidated') {
566
+ return {
567
+ verified: true,
568
+ applied: false,
569
+ blocks_claim: true,
570
+ claim_permitted: false,
571
+ future_authority_only: false,
572
+ retry_required: false,
573
+ must_fail_closed: false,
574
+ disposition: 'already_invalidated',
575
+ reason: 'program_instance_invalidated',
576
+ verification,
577
+ state: currentState,
578
+ };
579
+ }
580
+ if (CLAIMED_OR_TERMINAL_EXECUTION_STATUSES.has(finalExecutionStatus)) {
581
+ return lateDisposition('revision_conflict_claim_already_linearized', verification, currentState);
582
+ }
583
+ return indeterminateDisposition('invalidation_conflict_retry_exhausted', verification, currentState);
584
+ }
585
+ export async function applyTrustProgramRevocation(input) {
586
+ try {
587
+ return await applyTrustProgramRevocationInternal(input);
588
+ }
589
+ catch {
590
+ return applyRefusal('malformed_apply_input_refused_fail_closed');
591
+ }
592
+ }
593
+ export default {
594
+ TRUST_PROGRAM_REVOCATION_TARGET_VERSION,
595
+ deriveTrustProgramRevocationTargetObject,
596
+ deriveTrustProgramRevocationTarget,
597
+ verifyTrustProgramRevocation,
598
+ applyTrustProgramRevocation,
599
+ };
600
+ //# sourceMappingURL=trust-program-revocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-program-revocation.js","sourceRoot":"","sources":["../src/trust-program-revocation.ts"],"names":[],"mappings":"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"}