@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,107 @@
1
+ import { MemoryConsumptionStore } from './store.js';
2
+ type Obj = Record<string, any>;
3
+ type ConsumptionStore = {
4
+ durable?: boolean;
5
+ ownershipFenced?: boolean;
6
+ permanentConsumption?: boolean;
7
+ reserve?: (key: string) => Promise<boolean> | boolean;
8
+ commit?: (key: string) => Promise<boolean> | boolean;
9
+ release?: (key: string) => Promise<void> | void;
10
+ };
11
+ type ExecutionEvidenceLog = {
12
+ durable?: boolean;
13
+ strict?: boolean;
14
+ forkAware?: boolean;
15
+ atomicAppend?: boolean;
16
+ record?: (entry: Obj) => Promise<Obj> | Obj;
17
+ };
18
+ declare function deepFreeze(value: any): any;
19
+ declare function validLogRecord(record: any, atomicRequired: any, expectedEntry: any): boolean;
20
+ declare function validComponent(result: any, type: any): any;
21
+ declare function humanFloorSatisfied(result: any, floor: any): any;
22
+ declare function evidenceSatisfied(result: any): boolean;
23
+ declare function consumptionKey(result: any): string | null;
24
+ declare function instant(now: any): string | null;
25
+ /**
26
+ * @param {object} [config]
27
+ * @param {string} [config.requirement] relying-party AEC requirement (required at runtime)
28
+ * @param {object} [config.policiesByType] relying-party human acceptance profiles (required at runtime)
29
+ * @param {object} [config.verifiers] relying-party-pinned custom component verifiers
30
+ * @param {object} [config.keysByType] relying-party-pinned custom verifier keys
31
+ * @param {'class_a'|'quorum'|'class_a_or_quorum'} [config.humanFloor] (required at runtime)
32
+ * @param {object} [config.store] ownership-fenced consumption store
33
+ * @param {object} [config.log] tamper-evident evidence log
34
+ * @param {boolean} [config.allowEphemeralState=false] test/demo opt-in only
35
+ * @param {Function|number|Date} [config.now=Date.now]
36
+ */
37
+ export declare function createAECExecutionGate({ requirement, policiesByType, verifiers, keysByType, humanFloor, store, log, allowEphemeralState, now, }?: {
38
+ requirement?: string;
39
+ policiesByType?: Obj;
40
+ verifiers?: Record<string, Function>;
41
+ keysByType?: Obj;
42
+ humanFloor?: 'class_a' | 'quorum' | 'class_a_or_quorum';
43
+ store?: ConsumptionStore;
44
+ log?: ExecutionEvidenceLog;
45
+ allowEphemeralState?: boolean;
46
+ now?: (() => number) | number | Date;
47
+ }): {
48
+ run: (request: Obj | undefined, effect: (input: {
49
+ action: any;
50
+ result: any;
51
+ authorization: any;
52
+ }) => any) => Promise<{
53
+ ok: false;
54
+ allow: false;
55
+ reason: string;
56
+ result: Obj | null;
57
+ decision: any;
58
+ value?: undefined;
59
+ authorization?: undefined;
60
+ execution?: undefined;
61
+ } | {
62
+ ok: true;
63
+ allow: true;
64
+ value: any;
65
+ result: any;
66
+ authorization: any;
67
+ execution: any;
68
+ reason?: undefined;
69
+ }>;
70
+ evidence: {
71
+ durable: boolean;
72
+ persisted: boolean;
73
+ strict: boolean;
74
+ forkAware: boolean;
75
+ atomicAppend: boolean;
76
+ record(entry: any): Promise<any>;
77
+ all(): Record<string, any>[];
78
+ verify(): {
79
+ ok: boolean;
80
+ at: any;
81
+ reason: string;
82
+ length?: undefined;
83
+ head?: undefined;
84
+ } | {
85
+ ok: boolean;
86
+ length: number;
87
+ head: string | null;
88
+ at?: undefined;
89
+ reason?: undefined;
90
+ };
91
+ } | ExecutionEvidenceLog;
92
+ store: MemoryConsumptionStore | ConsumptionStore;
93
+ };
94
+ export declare const __aecExecutionSecurityInternals: Readonly<{
95
+ deepFreeze: typeof deepFreeze;
96
+ validLogRecord: typeof validLogRecord;
97
+ validComponent: typeof validComponent;
98
+ humanFloorSatisfied: typeof humanFloorSatisfied;
99
+ evidenceSatisfied: typeof evidenceSatisfied;
100
+ consumptionKey: typeof consumptionKey;
101
+ instant: typeof instant;
102
+ }>;
103
+ declare const _default: {
104
+ createAECExecutionGate: typeof createAECExecutionGate;
105
+ };
106
+ export default _default;
107
+ //# sourceMappingURL=aec-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aec-execution.d.ts","sourceRoot":"","sources":["../src/aec-execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,334 @@
1
+ // @ts-nocheck
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Stateful execution boundary for EP-AEC.
5
+ *
6
+ * verifyAuthorizationChain is a pure evidence-composition decision. This
7
+ * wrapper adds the stateful properties an executor needs: independently bound
8
+ * action bytes, a mandatory human-assurance floor, atomic one-time reservation,
9
+ * tamper-evident decision records, and conservative crash semantics.
10
+ */
11
+ import { createEvidenceLog, verifyEvidenceRecord } from './evidence.js';
12
+ import { MemoryConsumptionStore } from './store.js';
13
+ import { verifyAuthorizationChain } from '@emilia-protocol/verify/evidence-chain';
14
+ const HUMAN_FLOORS = new Set(['class_a', 'quorum', 'class_a_or_quorum']);
15
+ const HEX_256 = /^[0-9a-f]{64}$/;
16
+ const COMPONENT_TYPE = /^[A-Za-z0-9_.:-]+$/;
17
+ const RESERVED_COMPONENT_TYPES = new Set(['ep-receipt', 'ep-quorum']);
18
+ const own = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
19
+ function deepFreeze(value) {
20
+ if (!value || typeof value !== 'object')
21
+ return value;
22
+ const stack = [value];
23
+ const seen = new WeakSet();
24
+ while (stack.length) {
25
+ const current = stack.pop();
26
+ if (!current || typeof current !== 'object' || seen.has(current))
27
+ continue;
28
+ seen.add(current);
29
+ for (const child of Object.values(current))
30
+ stack.push(child);
31
+ Object.freeze(current);
32
+ }
33
+ return value;
34
+ }
35
+ function validLogRecord(record, atomicRequired, expectedEntry) {
36
+ return verifyEvidenceRecord(record, { atomicRequired, expectedEntry });
37
+ }
38
+ function validComponent(result, type) {
39
+ return Array.isArray(result?.components)
40
+ && result.components.some((component) => component.type === type && component.valid === true && component.bound === true);
41
+ }
42
+ function humanFloorSatisfied(result, floor) {
43
+ const classA = validComponent(result, 'ep-receipt');
44
+ const quorum = validComponent(result, 'ep-quorum');
45
+ if (floor === 'class_a')
46
+ return classA;
47
+ if (floor === 'quorum')
48
+ return quorum;
49
+ return classA || quorum;
50
+ }
51
+ function evidenceSatisfied(result) {
52
+ try {
53
+ if (!result || typeof result !== 'object')
54
+ return false;
55
+ // New verifiers expose the evidence-layer term. Older supported 3.x
56
+ // verifiers expose the equivalent `allow` result only. If `satisfied` is
57
+ // present, it is authoritative so a conflicting compatibility alias can
58
+ // never upgrade a refusal.
59
+ return own(result, 'satisfied') ? result.satisfied === true : result.allow === true;
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ function consumptionKey(result) {
66
+ // Consume the executor-owned action instance, not a presenter-selected
67
+ // component identifier. Otherwise an invalid decoy component or an alternate
68
+ // valid human proof can create a fresh key for the same physical effect.
69
+ // Repeated intended effects therefore need a unique nonce/id inside the
70
+ // canonical action before authorization is collected.
71
+ return HEX_256.test(result?.action_digest)
72
+ ? `aec:action:${result.action_digest}`
73
+ : null;
74
+ }
75
+ function instant(now) {
76
+ try {
77
+ const value = typeof now === 'function' ? now() : now;
78
+ const date = value instanceof Date ? value : new Date(value);
79
+ return Number.isFinite(date.getTime()) ? date.toISOString() : null;
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ /**
86
+ * @param {object} [config]
87
+ * @param {string} [config.requirement] relying-party AEC requirement (required at runtime)
88
+ * @param {object} [config.policiesByType] relying-party human acceptance profiles (required at runtime)
89
+ * @param {object} [config.verifiers] relying-party-pinned custom component verifiers
90
+ * @param {object} [config.keysByType] relying-party-pinned custom verifier keys
91
+ * @param {'class_a'|'quorum'|'class_a_or_quorum'} [config.humanFloor] (required at runtime)
92
+ * @param {object} [config.store] ownership-fenced consumption store
93
+ * @param {object} [config.log] tamper-evident evidence log
94
+ * @param {boolean} [config.allowEphemeralState=false] test/demo opt-in only
95
+ * @param {Function|number|Date} [config.now=Date.now]
96
+ */
97
+ export function createAECExecutionGate({ requirement, policiesByType, verifiers = {}, keysByType = {}, humanFloor, store, log, allowEphemeralState = false, now = Date.now, } = {}) {
98
+ if (typeof requirement !== 'string' || !requirement.trim()) {
99
+ throw new Error('AEC execution gate requires a relying-party requirement');
100
+ }
101
+ if (!policiesByType || typeof policiesByType !== 'object' || Array.isArray(policiesByType)) {
102
+ throw new Error('AEC execution gate requires relying-party policiesByType');
103
+ }
104
+ let pinnedPolicies;
105
+ try {
106
+ pinnedPolicies = deepFreeze(structuredClone(policiesByType));
107
+ }
108
+ catch {
109
+ throw new Error('AEC execution gate policiesByType must be cloneable canonical data');
110
+ }
111
+ if (!verifiers || typeof verifiers !== 'object' || Array.isArray(verifiers)) {
112
+ throw new Error('AEC execution gate verifiers must be a relying-party-owned object');
113
+ }
114
+ const pinnedVerifiers = Object.create(null);
115
+ try {
116
+ for (const [type, verifier] of Object.entries(verifiers)) {
117
+ if (!COMPONENT_TYPE.test(type) || type.length > 128 || RESERVED_COMPONENT_TYPES.has(type)
118
+ || typeof verifier !== 'function') {
119
+ throw new Error('invalid verifier registry member');
120
+ }
121
+ pinnedVerifiers[type] = verifier;
122
+ }
123
+ Object.freeze(pinnedVerifiers);
124
+ }
125
+ catch {
126
+ throw new Error('AEC execution gate verifiers must contain only named custom verifier functions');
127
+ }
128
+ if (!keysByType || typeof keysByType !== 'object' || Array.isArray(keysByType)) {
129
+ throw new Error('AEC execution gate keysByType must be a relying-party-owned object');
130
+ }
131
+ let pinnedKeysByType;
132
+ try {
133
+ pinnedKeysByType = deepFreeze(structuredClone(keysByType));
134
+ }
135
+ catch {
136
+ throw new Error('AEC execution gate keysByType must be cloneable canonical data');
137
+ }
138
+ if (!HUMAN_FLOORS.has(humanFloor)) {
139
+ throw new Error('AEC execution gate requires humanFloor class_a, quorum, or class_a_or_quorum');
140
+ }
141
+ if (!store && !allowEphemeralState) {
142
+ throw new Error('AEC execution gate requires a durable consumption store');
143
+ }
144
+ if (!log && !allowEphemeralState) {
145
+ throw new Error('AEC execution gate requires a durable strict evidence log');
146
+ }
147
+ const consumption = store || new MemoryConsumptionStore();
148
+ const evidence = log || createEvidenceLog({ strict: true });
149
+ if (!allowEphemeralState && (consumption.durable !== true || consumption.ownershipFenced !== true
150
+ || consumption.permanentConsumption !== true)) {
151
+ throw new Error('AEC execution gate requires a capability-marked, ownership-fenced durable store with non-expiring committed keys');
152
+ }
153
+ if (!allowEphemeralState && (evidence.durable !== true || evidence.strict !== true
154
+ || evidence.forkAware !== true || evidence.atomicAppend !== true)) {
155
+ throw new Error('AEC execution gate requires a durable strict evidence log with atomic shared-head append and fork detection');
156
+ }
157
+ for (const method of ['reserve', 'commit']) {
158
+ if (typeof consumption?.[method] !== 'function') {
159
+ throw new Error(`AEC execution gate consumption store requires ${method}()`);
160
+ }
161
+ }
162
+ if (typeof evidence?.record !== 'function') {
163
+ throw new Error('AEC execution gate evidence log requires record()');
164
+ }
165
+ // Capture the methods that passed construction checks. Callers may retain the
166
+ // objects for observability, but replacing a method later must not rewrite the
167
+ // gate's replay or evidence semantics.
168
+ // The loop above already proves reserve/commit are functions; TS can't track
169
+ // narrowing through a dynamic (computed) property key, hence the assertions.
170
+ const reserveConsumption = consumption.reserve.bind(consumption);
171
+ const commitConsumption = consumption.commit.bind(consumption);
172
+ const releaseConsumption = typeof consumption.release === 'function'
173
+ ? consumption.release.bind(consumption) : null;
174
+ const recordEvidence = evidence.record.bind(evidence);
175
+ async function deny(reason, result = null, extra = {}) {
176
+ let decision = null;
177
+ try {
178
+ const entry = {
179
+ type: 'aec.execution.decision',
180
+ at: instant(now),
181
+ allow: false,
182
+ reason,
183
+ action_digest: result?.action_digest ?? null,
184
+ requirement,
185
+ human_floor: humanFloor,
186
+ ...extra,
187
+ };
188
+ decision = await recordEvidence(entry);
189
+ if (!validLogRecord(decision, !allowEphemeralState, entry))
190
+ throw new Error('malformed evidence record');
191
+ }
192
+ catch {
193
+ return { ok: false, allow: false, reason: 'evidence_log_failed', result, decision: null };
194
+ }
195
+ return { ok: false, allow: false, reason, result, decision };
196
+ }
197
+ async function run(request = {}, effect) {
198
+ if (typeof effect !== 'function')
199
+ throw new Error('AEC execution gate run() requires an effect function');
200
+ let chain;
201
+ let expectedAction;
202
+ try {
203
+ if (!request || typeof request !== 'object' || Array.isArray(request)) {
204
+ return deny('invalid_execution_request');
205
+ }
206
+ // Trust configuration belongs to the relying party at gate construction.
207
+ // Accepting verifier code or trust keys beside presenter evidence lets the
208
+ // presenter define the proof that its own evidence must pass.
209
+ if (own(request, 'verifiers') || own(request, 'keysByType') || own(request, 'policiesByType')) {
210
+ return deny('runtime_trust_configuration_refused');
211
+ }
212
+ chain = request.chain;
213
+ expectedAction = request.expectedAction;
214
+ }
215
+ catch {
216
+ return deny('invalid_execution_request');
217
+ }
218
+ const verificationTime = instant(now);
219
+ if (!verificationTime)
220
+ return deny('invalid_verification_time');
221
+ let actionSnapshot;
222
+ try {
223
+ actionSnapshot = deepFreeze(structuredClone(expectedAction));
224
+ }
225
+ catch {
226
+ return deny('invalid_expected_action');
227
+ }
228
+ const result = verifyAuthorizationChain(chain, {
229
+ verifiers: pinnedVerifiers,
230
+ keysByType: pinnedKeysByType,
231
+ policiesByType: pinnedPolicies,
232
+ requirement,
233
+ expectedAction: actionSnapshot,
234
+ verificationTime,
235
+ });
236
+ if (!evidenceSatisfied(result))
237
+ return deny('aec_refused', result, { reasons: result.reasons });
238
+ if (!humanFloorSatisfied(result, humanFloor))
239
+ return deny('human_floor_unsatisfied', result);
240
+ const key = consumptionKey(result);
241
+ if (!key)
242
+ return deny('missing_stable_consumption_key', result);
243
+ let reserved;
244
+ try {
245
+ reserved = (await reserveConsumption(key)) === true;
246
+ }
247
+ catch {
248
+ return deny('consumption_store_unavailable', result, { consumption_key: key });
249
+ }
250
+ if (!reserved)
251
+ return deny('replay_refused', result, { consumption_key: key });
252
+ let authorization;
253
+ try {
254
+ const entry = {
255
+ type: 'aec.execution.decision',
256
+ at: verificationTime,
257
+ allow: true,
258
+ reason: 'allow',
259
+ action_digest: result.action_digest,
260
+ requirement,
261
+ human_floor: humanFloor,
262
+ consumption_key: key,
263
+ };
264
+ authorization = await recordEvidence(entry);
265
+ if (!validLogRecord(authorization, !allowEphemeralState, entry))
266
+ throw new Error('malformed evidence record');
267
+ }
268
+ catch {
269
+ try {
270
+ if (releaseConsumption)
271
+ await releaseConsumption(key);
272
+ }
273
+ catch { /* frozen is safe */ }
274
+ return { ok: false, allow: false, reason: 'evidence_log_failed', result, decision: null };
275
+ }
276
+ let effectStarted = false;
277
+ let committed = false;
278
+ try {
279
+ effectStarted = true;
280
+ const value = await effect({ action: actionSnapshot, result, authorization });
281
+ if ((await commitConsumption(key)) !== true)
282
+ throw new Error('consumption_store_commit_refused');
283
+ committed = true;
284
+ const executionEntry = {
285
+ type: 'aec.execution.outcome',
286
+ at: instant(now),
287
+ outcome: 'executed',
288
+ authorizes_decision: authorization.hash,
289
+ action_digest: result.action_digest,
290
+ consumption_key: key,
291
+ };
292
+ const execution = await recordEvidence(executionEntry);
293
+ if (!validLogRecord(execution, !allowEphemeralState, executionEntry))
294
+ throw new Error('malformed evidence record');
295
+ return { ok: true, allow: true, value, result, authorization, execution };
296
+ }
297
+ catch (error) {
298
+ if (effectStarted && !committed) {
299
+ try {
300
+ committed = (await commitConsumption(key)) === true;
301
+ }
302
+ catch { /* reservation remains fail-closed */ }
303
+ }
304
+ try {
305
+ const indeterminateEntry = {
306
+ type: 'aec.execution.outcome',
307
+ at: instant(now),
308
+ outcome: 'indeterminate',
309
+ authorizes_decision: authorization.hash,
310
+ action_digest: result.action_digest,
311
+ consumption_key: key,
312
+ };
313
+ const indeterminate = await recordEvidence(indeterminateEntry);
314
+ if (!validLogRecord(indeterminate, !allowEphemeralState, indeterminateEntry)) {
315
+ throw new Error('malformed evidence record');
316
+ }
317
+ }
318
+ catch { /* the original failure remains primary; replay is still blocked */ }
319
+ throw error;
320
+ }
321
+ }
322
+ return { run, evidence, store: consumption };
323
+ }
324
+ export const __aecExecutionSecurityInternals = Object.freeze({
325
+ deepFreeze,
326
+ validLogRecord,
327
+ validComponent,
328
+ humanFloorSatisfied,
329
+ evidenceSatisfied,
330
+ consumptionKey,
331
+ instant,
332
+ });
333
+ export default { createAECExecutionGate };
334
+ //# sourceMappingURL=aec-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aec-execution.js","sourceRoot":"","sources":["../src/aec-execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,205 @@
1
+ export declare const BREAKGLASS_VERSION = "EP-GATE-BREAKGLASS-v1";
2
+ export declare const BREAKGLASS_EVIDENCE_KIND = "breakglass";
3
+ type Obj = Record<string, any>;
4
+ /** Relying-party break-glass trust policy: pinned roster + minimum threshold. */
5
+ type BreakGlassPolicy = {
6
+ minimum_threshold: number;
7
+ roster: Array<{
8
+ kid: string;
9
+ principal_id: string;
10
+ key?: string;
11
+ }>;
12
+ };
13
+ /** Optional pinned keys when roster entries omit their own `key`. */
14
+ type IssuerKeys = Record<string, string> | Array<{
15
+ kid: string;
16
+ key: string;
17
+ }>;
18
+ /** Injected clock: fixed ms/ISO value, or a () => ms function (default Date.now). */
19
+ type BreakGlassClock = number | string | (() => number);
20
+ /**
21
+ * Mint a break-glass authorization: every signer signs the canonical JSON of
22
+ * the SAME grant payload. Throws on invalid fields — a malformed grant must
23
+ * never be issued, only refused. Signer kids must already be distinct at mint
24
+ * time: one key can never pre-fill two threshold slots. Relying-party principal
25
+ * uniqueness is enforced at verification through the pinned policy roster.
26
+ *
27
+ * grant_id is CONTENT-DERIVED (sha-256 of the canonical grant fields), so the
28
+ * id is deterministic and re-minting the identical grant yields the identical
29
+ * single-use consumption key — the same emergency authorization cannot be
30
+ * "refreshed" into extra uses by minting it twice.
31
+ *
32
+ * @param {Array<{ privateKey: crypto.KeyObject, kid: string }>} signers
33
+ * @param {object} fields { scope: { action_types: string[] }, window: { not_before, expires_at }, reason, incident_ref, threshold }
34
+ * @returns {{ '@version': string, payload: object, signatures: Array<{ kid: string, algorithm: 'Ed25519', value: string }> }}
35
+ */
36
+ export declare function mintBreakGlassAuthorization(signers: any, { scope, window: win, reason, incident_ref, threshold, }?: {
37
+ scope?: {
38
+ action_types: string[];
39
+ };
40
+ window?: {
41
+ not_before: number | string;
42
+ expires_at: number | string;
43
+ };
44
+ reason?: string;
45
+ incident_ref?: string;
46
+ threshold?: number;
47
+ }): {
48
+ '@version': string;
49
+ payload: {
50
+ scope: {
51
+ action_types: string[];
52
+ };
53
+ window: {
54
+ not_before: string | number;
55
+ expires_at: string | number;
56
+ };
57
+ reason: string | undefined;
58
+ incident_ref: string | undefined;
59
+ threshold: number;
60
+ grant_id: string;
61
+ };
62
+ signatures: {
63
+ kid: any;
64
+ algorithm: string;
65
+ value: string;
66
+ }[];
67
+ };
68
+ export declare function verifyBreakGlass(grantJson: any, options?: {}): {
69
+ valid: boolean;
70
+ reason: any;
71
+ };
72
+ /**
73
+ * SINGLE-USE consumption via the consumption-store contract (store.js):
74
+ * `consume(key)` returns true the FIRST time, false on every replay, and marks
75
+ * the key seen BEFORE the caller acts — consumption is committed before use.
76
+ * If the process crashes after consume() and before the override, the grant is
77
+ * burned, not replayable: the fail direction is unusable, never reusable.
78
+ *
79
+ * Accepts the grant document ({ payload: { grant_id } }) or a verified result
80
+ * ({ grant_id }). NEVER throws — a missing store, missing grant_id, or a store
81
+ * error all refuse with a machine-readable reason. This is a low-level primitive;
82
+ * only runBreakGlass also enforces store capabilities, evidence, and execution order.
83
+ *
84
+ * @param {object} grant break-glass grant document or verifyBreakGlass result
85
+ * @param {{ consume(key: string): Promise<boolean> }} store consumption store (store.js contract)
86
+ * @returns {Promise<{ consumed: boolean, reason: string, key?: string }>}
87
+ */
88
+ export declare function consumeBreakGlass(grant: any, store: any): Promise<{
89
+ consumed: boolean;
90
+ reason: string;
91
+ key?: undefined;
92
+ } | {
93
+ consumed: boolean;
94
+ reason: string;
95
+ key: string;
96
+ }>;
97
+ export declare function buildBreakGlassEvidence(grant: any, decision: any, options?: {}): {
98
+ kind: string;
99
+ '@version': string;
100
+ at: string;
101
+ grant_id: any;
102
+ incident_ref: any;
103
+ grant_reason: any;
104
+ scope: any;
105
+ threshold: any;
106
+ policy_minimum_threshold: any;
107
+ required_threshold: any;
108
+ signer_kids: any;
109
+ signer_principal_ids: any;
110
+ signer_spki_fingerprints: any;
111
+ grant_hash: string | null;
112
+ decision: {
113
+ allow: boolean;
114
+ reason: any;
115
+ action_type: any;
116
+ };
117
+ };
118
+ /**
119
+ * The sole high-level break-glass execution path. It snapshots the presented
120
+ * artifact, verifies it against relying-party policy, atomically consumes the
121
+ * grant in a capability-marked permanent store, validates a strict evidence
122
+ * acknowledgement, and only then invokes `effect`.
123
+ *
124
+ * @param {object} [args]
125
+ * @param {object|string} [args.grant] the presented break-glass artifact
126
+ * @param {{minimum_threshold:number,roster:Array<{kid:string,principal_id:string,key?:string}>}} [args.policy]
127
+ * @param {object|Array<{kid:string,key:string}>} [args.issuerKeys]
128
+ * @param {string} [args.actionType]
129
+ * @param {{ consume(key: string): Promise<boolean> }} [args.store]
130
+ * @param {{ strict?: boolean, atomicAppend?: boolean, record?: Function }} [args.evidence]
131
+ * @param {number|string|function} [args.now=Date.now]
132
+ * @param {Function} [effect] required at runtime; a missing effect throws
133
+ */
134
+ export declare function runBreakGlass({ grant, policy, issuerKeys, actionType, store, evidence, now, }: {
135
+ grant?: Obj | string;
136
+ policy?: BreakGlassPolicy;
137
+ issuerKeys?: IssuerKeys;
138
+ actionType?: string;
139
+ store?: {
140
+ consume(key: string): Promise<boolean>;
141
+ };
142
+ evidence?: {
143
+ strict?: boolean;
144
+ atomicAppend?: boolean;
145
+ record?: (entry: Obj) => any;
146
+ };
147
+ now?: BreakGlassClock;
148
+ } | undefined, effect: any): Promise<{
149
+ ok: boolean;
150
+ reason: any;
151
+ verification: {
152
+ valid: boolean;
153
+ reason: any;
154
+ };
155
+ consumption: null;
156
+ evidence: null;
157
+ result?: undefined;
158
+ } | {
159
+ ok: boolean;
160
+ reason: string;
161
+ verification: {
162
+ valid: boolean;
163
+ reason: any;
164
+ };
165
+ consumption: {
166
+ consumed: boolean;
167
+ reason: string;
168
+ key?: undefined;
169
+ } | {
170
+ consumed: boolean;
171
+ reason: string;
172
+ key: string;
173
+ };
174
+ evidence: null;
175
+ result?: undefined;
176
+ } | {
177
+ ok: boolean;
178
+ reason: string;
179
+ result: any;
180
+ verification: {
181
+ valid: boolean;
182
+ reason: any;
183
+ };
184
+ consumption: {
185
+ consumed: boolean;
186
+ reason: string;
187
+ key?: undefined;
188
+ } | {
189
+ consumed: boolean;
190
+ reason: string;
191
+ key: string;
192
+ };
193
+ evidence: any;
194
+ }>;
195
+ declare const _default: {
196
+ mintBreakGlassAuthorization: typeof mintBreakGlassAuthorization;
197
+ verifyBreakGlass: typeof verifyBreakGlass;
198
+ consumeBreakGlass: typeof consumeBreakGlass;
199
+ buildBreakGlassEvidence: typeof buildBreakGlassEvidence;
200
+ runBreakGlass: typeof runBreakGlass;
201
+ BREAKGLASS_VERSION: string;
202
+ BREAKGLASS_EVIDENCE_KIND: string;
203
+ };
204
+ export default _default;
205
+ //# sourceMappingURL=breakglass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breakglass.d.ts","sourceRoot":"","sources":["../src/breakglass.ts"],"names":[],"mappings":"AAgDA,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAC1D,eAAO,MAAM,wBAAwB,eAAe,CAAC;AAErD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,iFAAiF;AACjF,KAAK,gBAAgB,GAAG;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE,CAAC;AAEF,qEAAqE;AACrE,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE/E,qFAAqF;AACrF,KAAK,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;AAiCxD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,KAAA,EAAE,EACnD,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,GACpD,GAAE;IACD,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACnC,MAAM,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACf;;;;;;;;;;;;;;;;;;;;EAkEL;AAiOD,wBAAgB,gBAAgB,CAAC,SAAS,KAAA,EAAE,OAAO,KAAK;;;EAEvD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,KAAA,EAAE,KAAK,KAAA;;;;;;;;GAiBnD;AA2DD,wBAAgB,uBAAuB,CAAC,KAAK,KAAA,EAAE,QAAQ,KAAA,EAAE,OAAO,KAAK;;;;;;;;;;;;;;;;;;;;EAoBpE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CAAC,EAClC,KAAK,EACL,MAAM,EACN,UAAU,EACV,UAAU,EACV,KAAK,EACL,QAAQ,EACR,GAAc,GACf,EAAE;IACD,KAAK,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IACnD,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;KAAE,CAAC;IACtF,GAAG,CAAC,EAAE,eAAe,CAAC;CACvB,YAAK,EAAE,MAAM,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2Eb;;;;;;;;;;AAED,wBAQE"}