@emilia-protocol/gate 0.11.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +310 -0
  3. package/action-control-manifest.js +3 -268
  4. package/action-escrow-custodian.js +3 -394
  5. package/action-escrow-evidence.js +3 -858
  6. package/action-escrow-package.js +3 -1668
  7. package/action-escrow-postgres.js +3 -337
  8. package/action-escrow-state.js +3 -396
  9. package/action-escrow-verifiers.js +3 -331
  10. package/action-escrow.js +3 -2447
  11. package/action-packs.js +3 -140
  12. package/adapters/_kit.js +3 -104
  13. package/adapters/aws.js +3 -108
  14. package/adapters/cloudflare.js +3 -54
  15. package/adapters/gcp.js +3 -70
  16. package/adapters/github.js +3 -109
  17. package/adapters/jira.js +3 -55
  18. package/adapters/k8s.js +3 -70
  19. package/adapters/linear.js +3 -55
  20. package/adapters/salesforce.js +3 -55
  21. package/adapters/stripe.js +3 -81
  22. package/adapters/supabase.js +3 -121
  23. package/adapters/terraform.js +3 -59
  24. package/adapters/vercel.js +3 -84
  25. package/aec-execution.js +3 -312
  26. package/breakglass.js +3 -582
  27. package/capability-receipt.js +4 -0
  28. package/cf1-conformance.js +3 -106
  29. package/challenge-store.js +3 -69
  30. package/control-plane.js +3 -340
  31. package/coverage.js +3 -721
  32. package/demo.mjs +1 -1
  33. package/deployment-attestation.js +3 -247
  34. package/dist/action-control-manifest.d.ts +82 -0
  35. package/dist/action-control-manifest.d.ts.map +1 -0
  36. package/dist/action-control-manifest.js +422 -0
  37. package/dist/action-control-manifest.js.map +1 -0
  38. package/dist/action-escrow-custodian.d.ts +74 -0
  39. package/dist/action-escrow-custodian.d.ts.map +1 -0
  40. package/dist/action-escrow-custodian.js +363 -0
  41. package/dist/action-escrow-custodian.js.map +1 -0
  42. package/dist/action-escrow-evidence.d.ts +130 -0
  43. package/dist/action-escrow-evidence.d.ts.map +1 -0
  44. package/dist/action-escrow-evidence.js +1012 -0
  45. package/dist/action-escrow-evidence.js.map +1 -0
  46. package/dist/action-escrow-package.d.ts +10 -0
  47. package/dist/action-escrow-package.d.ts.map +1 -0
  48. package/dist/action-escrow-package.js +1583 -0
  49. package/dist/action-escrow-package.js.map +1 -0
  50. package/dist/action-escrow-postgres.d.ts +62 -0
  51. package/dist/action-escrow-postgres.d.ts.map +1 -0
  52. package/dist/action-escrow-postgres.js +339 -0
  53. package/dist/action-escrow-postgres.js.map +1 -0
  54. package/dist/action-escrow-state.d.ts +141 -0
  55. package/dist/action-escrow-state.d.ts.map +1 -0
  56. package/dist/action-escrow-state.js +413 -0
  57. package/dist/action-escrow-state.js.map +1 -0
  58. package/dist/action-escrow-verifiers.d.ts +65 -0
  59. package/dist/action-escrow-verifiers.d.ts.map +1 -0
  60. package/dist/action-escrow-verifiers.js +421 -0
  61. package/dist/action-escrow-verifiers.js.map +1 -0
  62. package/dist/action-escrow.d.ts +112 -0
  63. package/dist/action-escrow.d.ts.map +1 -0
  64. package/dist/action-escrow.js +2661 -0
  65. package/dist/action-escrow.js.map +1 -0
  66. package/dist/action-packs.d.ts +54 -0
  67. package/dist/action-packs.d.ts.map +1 -0
  68. package/dist/action-packs.js +143 -0
  69. package/dist/action-packs.js.map +1 -0
  70. package/dist/adapters/_kit.d.ts +50 -0
  71. package/dist/adapters/_kit.d.ts.map +1 -0
  72. package/dist/adapters/_kit.js +98 -0
  73. package/dist/adapters/_kit.js.map +1 -0
  74. package/dist/adapters/aws.d.ts +158 -0
  75. package/dist/adapters/aws.d.ts.map +1 -0
  76. package/dist/adapters/aws.js +136 -0
  77. package/dist/adapters/aws.js.map +1 -0
  78. package/dist/adapters/cloudflare.d.ts +116 -0
  79. package/dist/adapters/cloudflare.d.ts.map +1 -0
  80. package/dist/adapters/cloudflare.js +75 -0
  81. package/dist/adapters/cloudflare.js.map +1 -0
  82. package/dist/adapters/gcp.d.ts +139 -0
  83. package/dist/adapters/gcp.d.ts.map +1 -0
  84. package/dist/adapters/gcp.js +69 -0
  85. package/dist/adapters/gcp.js.map +1 -0
  86. package/dist/adapters/github.d.ts +123 -0
  87. package/dist/adapters/github.d.ts.map +1 -0
  88. package/dist/adapters/github.js +105 -0
  89. package/dist/adapters/github.js.map +1 -0
  90. package/dist/adapters/jira.d.ts +109 -0
  91. package/dist/adapters/jira.d.ts.map +1 -0
  92. package/dist/adapters/jira.js +54 -0
  93. package/dist/adapters/jira.js.map +1 -0
  94. package/dist/adapters/k8s.d.ts +139 -0
  95. package/dist/adapters/k8s.d.ts.map +1 -0
  96. package/dist/adapters/k8s.js +69 -0
  97. package/dist/adapters/k8s.js.map +1 -0
  98. package/dist/adapters/linear.d.ts +109 -0
  99. package/dist/adapters/linear.d.ts.map +1 -0
  100. package/dist/adapters/linear.js +54 -0
  101. package/dist/adapters/linear.js.map +1 -0
  102. package/dist/adapters/salesforce.d.ts +109 -0
  103. package/dist/adapters/salesforce.d.ts.map +1 -0
  104. package/dist/adapters/salesforce.js +54 -0
  105. package/dist/adapters/salesforce.js.map +1 -0
  106. package/dist/adapters/stripe.d.ts +116 -0
  107. package/dist/adapters/stripe.d.ts.map +1 -0
  108. package/dist/adapters/stripe.js +77 -0
  109. package/dist/adapters/stripe.js.map +1 -0
  110. package/dist/adapters/supabase.d.ts +127 -0
  111. package/dist/adapters/supabase.d.ts.map +1 -0
  112. package/dist/adapters/supabase.js +112 -0
  113. package/dist/adapters/supabase.js.map +1 -0
  114. package/dist/adapters/terraform.d.ts +109 -0
  115. package/dist/adapters/terraform.d.ts.map +1 -0
  116. package/dist/adapters/terraform.js +58 -0
  117. package/dist/adapters/terraform.js.map +1 -0
  118. package/dist/adapters/vercel.d.ts +114 -0
  119. package/dist/adapters/vercel.d.ts.map +1 -0
  120. package/dist/adapters/vercel.js +81 -0
  121. package/dist/adapters/vercel.js.map +1 -0
  122. package/dist/aec-execution.d.ts +107 -0
  123. package/dist/aec-execution.d.ts.map +1 -0
  124. package/dist/aec-execution.js +334 -0
  125. package/dist/aec-execution.js.map +1 -0
  126. package/dist/breakglass.d.ts +205 -0
  127. package/dist/breakglass.d.ts.map +1 -0
  128. package/dist/breakglass.js +627 -0
  129. package/dist/breakglass.js.map +1 -0
  130. package/dist/capability-receipt.d.ts +601 -0
  131. package/dist/capability-receipt.d.ts.map +1 -0
  132. package/dist/capability-receipt.js +1177 -0
  133. package/dist/capability-receipt.js.map +1 -0
  134. package/dist/cf1-conformance.d.ts +83 -0
  135. package/dist/cf1-conformance.d.ts.map +1 -0
  136. package/dist/cf1-conformance.js +94 -0
  137. package/dist/cf1-conformance.js.map +1 -0
  138. package/dist/challenge-store.d.ts +20 -0
  139. package/dist/challenge-store.d.ts.map +1 -0
  140. package/dist/challenge-store.js +62 -0
  141. package/dist/challenge-store.js.map +1 -0
  142. package/dist/control-plane.d.ts +136 -0
  143. package/dist/control-plane.d.ts.map +1 -0
  144. package/dist/control-plane.js +349 -0
  145. package/dist/control-plane.js.map +1 -0
  146. package/dist/coverage.d.ts +156 -0
  147. package/dist/coverage.d.ts.map +1 -0
  148. package/dist/coverage.js +768 -0
  149. package/dist/coverage.js.map +1 -0
  150. package/dist/deployment-attestation.d.ts +93 -0
  151. package/dist/deployment-attestation.d.ts.map +1 -0
  152. package/dist/deployment-attestation.js +262 -0
  153. package/dist/deployment-attestation.js.map +1 -0
  154. package/dist/eg1-conformance.d.ts +286 -0
  155. package/dist/eg1-conformance.d.ts.map +1 -0
  156. package/dist/eg1-conformance.js +379 -0
  157. package/dist/eg1-conformance.js.map +1 -0
  158. package/dist/enterprise.d.ts +88 -0
  159. package/dist/enterprise.d.ts.map +1 -0
  160. package/dist/enterprise.js +194 -0
  161. package/dist/enterprise.js.map +1 -0
  162. package/dist/evidence-postgres.d.ts +123 -0
  163. package/dist/evidence-postgres.d.ts.map +1 -0
  164. package/dist/evidence-postgres.js +343 -0
  165. package/dist/evidence-postgres.js.map +1 -0
  166. package/dist/evidence.d.ts +113 -0
  167. package/dist/evidence.d.ts.map +1 -0
  168. package/dist/evidence.js +369 -0
  169. package/dist/evidence.js.map +1 -0
  170. package/dist/execution-binding.d.ts +49 -0
  171. package/dist/execution-binding.d.ts.map +1 -0
  172. package/dist/execution-binding.js +243 -0
  173. package/dist/execution-binding.js.map +1 -0
  174. package/dist/formal-runtime-map.d.ts +42 -0
  175. package/dist/formal-runtime-map.d.ts.map +1 -0
  176. package/dist/formal-runtime-map.js +23 -0
  177. package/dist/formal-runtime-map.js.map +1 -0
  178. package/dist/index.d.ts +1003 -0
  179. package/dist/index.d.ts.map +1 -0
  180. package/dist/index.js +1737 -0
  181. package/dist/index.js.map +1 -0
  182. package/dist/key-registry.d.ts +60 -0
  183. package/dist/key-registry.d.ts.map +1 -0
  184. package/dist/key-registry.js +144 -0
  185. package/dist/key-registry.js.map +1 -0
  186. package/dist/mcp.d.ts +53 -0
  187. package/dist/mcp.d.ts.map +1 -0
  188. package/dist/mcp.js +112 -0
  189. package/dist/mcp.js.map +1 -0
  190. package/dist/metering.d.ts +80 -0
  191. package/dist/metering.d.ts.map +1 -0
  192. package/dist/metering.js +227 -0
  193. package/dist/metering.js.map +1 -0
  194. package/dist/metrics.d.ts +68 -0
  195. package/dist/metrics.d.ts.map +1 -0
  196. package/dist/metrics.js +242 -0
  197. package/dist/metrics.js.map +1 -0
  198. package/dist/network-witness.d.ts +167 -0
  199. package/dist/network-witness.d.ts.map +1 -0
  200. package/dist/network-witness.js +520 -0
  201. package/dist/network-witness.js.map +1 -0
  202. package/dist/proposal-to-effect.d.ts +146 -0
  203. package/dist/proposal-to-effect.d.ts.map +1 -0
  204. package/dist/proposal-to-effect.js +427 -0
  205. package/dist/proposal-to-effect.js.map +1 -0
  206. package/dist/protocol-state.d.ts +141 -0
  207. package/dist/protocol-state.d.ts.map +1 -0
  208. package/dist/protocol-state.js +106 -0
  209. package/dist/protocol-state.js.map +1 -0
  210. package/dist/receipt-program.d.ts +59 -0
  211. package/dist/receipt-program.d.ts.map +1 -0
  212. package/dist/receipt-program.js +1053 -0
  213. package/dist/receipt-program.js.map +1 -0
  214. package/dist/reliance-kernel.d.ts +66 -0
  215. package/dist/reliance-kernel.d.ts.map +1 -0
  216. package/dist/reliance-kernel.js +103 -0
  217. package/dist/reliance-kernel.js.map +1 -0
  218. package/dist/reliance-packet.d.ts +67 -0
  219. package/dist/reliance-packet.d.ts.map +1 -0
  220. package/dist/reliance-packet.js +176 -0
  221. package/dist/reliance-packet.js.map +1 -0
  222. package/dist/remedy-program-postgres.d.ts +37 -0
  223. package/dist/remedy-program-postgres.d.ts.map +1 -0
  224. package/dist/remedy-program-postgres.js +291 -0
  225. package/dist/remedy-program-postgres.js.map +1 -0
  226. package/dist/remedy-program-receipt.d.ts +97 -0
  227. package/dist/remedy-program-receipt.d.ts.map +1 -0
  228. package/dist/remedy-program-receipt.js +817 -0
  229. package/dist/remedy-program-receipt.js.map +1 -0
  230. package/dist/remedy-program.d.ts +76 -0
  231. package/dist/remedy-program.d.ts.map +1 -0
  232. package/dist/remedy-program.js +1346 -0
  233. package/dist/remedy-program.js.map +1 -0
  234. package/dist/reports/art14.d.ts +101 -0
  235. package/dist/reports/art14.d.ts.map +1 -0
  236. package/dist/reports/art14.js +340 -0
  237. package/dist/reports/art14.js.map +1 -0
  238. package/dist/reports/assurance-package.d.ts +197 -0
  239. package/dist/reports/assurance-package.d.ts.map +1 -0
  240. package/dist/reports/assurance-package.js +313 -0
  241. package/dist/reports/assurance-package.js.map +1 -0
  242. package/dist/reports/auditor-workpaper.d.ts +194 -0
  243. package/dist/reports/auditor-workpaper.d.ts.map +1 -0
  244. package/dist/reports/auditor-workpaper.js +545 -0
  245. package/dist/reports/auditor-workpaper.js.map +1 -0
  246. package/dist/reports/external-verification.d.ts +76 -0
  247. package/dist/reports/external-verification.d.ts.map +1 -0
  248. package/dist/reports/external-verification.js +209 -0
  249. package/dist/reports/external-verification.js.map +1 -0
  250. package/dist/reports/reperform.d.ts +122 -0
  251. package/dist/reports/reperform.d.ts.map +1 -0
  252. package/dist/reports/reperform.js +432 -0
  253. package/dist/reports/reperform.js.map +1 -0
  254. package/dist/reports/underwriter.d.ts +127 -0
  255. package/dist/reports/underwriter.d.ts.map +1 -0
  256. package/dist/reports/underwriter.js +348 -0
  257. package/dist/reports/underwriter.js.map +1 -0
  258. package/dist/retention.d.ts +88 -0
  259. package/dist/retention.d.ts.map +1 -0
  260. package/dist/retention.js +90 -0
  261. package/dist/retention.js.map +1 -0
  262. package/dist/roster.d.ts +113 -0
  263. package/dist/roster.d.ts.map +1 -0
  264. package/dist/roster.js +261 -0
  265. package/dist/roster.js.map +1 -0
  266. package/dist/runtime-monitor.d.ts +132 -0
  267. package/dist/runtime-monitor.d.ts.map +1 -0
  268. package/dist/runtime-monitor.js +197 -0
  269. package/dist/runtime-monitor.js.map +1 -0
  270. package/dist/settlement.d.ts +68 -0
  271. package/dist/settlement.d.ts.map +1 -0
  272. package/dist/settlement.js +306 -0
  273. package/dist/settlement.js.map +1 -0
  274. package/dist/siem.d.ts +261 -0
  275. package/dist/siem.d.ts.map +1 -0
  276. package/dist/siem.js +247 -0
  277. package/dist/siem.js.map +1 -0
  278. package/dist/store-postgres.d.ts +107 -0
  279. package/dist/store-postgres.d.ts.map +1 -0
  280. package/dist/store-postgres.js +152 -0
  281. package/dist/store-postgres.js.map +1 -0
  282. package/dist/store.d.ts +95 -0
  283. package/dist/store.d.ts.map +1 -0
  284. package/dist/store.js +202 -0
  285. package/dist/store.js.map +1 -0
  286. package/dist/strict-json.d.ts +14 -0
  287. package/dist/strict-json.d.ts.map +1 -0
  288. package/dist/strict-json.js +132 -0
  289. package/dist/strict-json.js.map +1 -0
  290. package/dist/trust-program-adapters.d.ts +122 -0
  291. package/dist/trust-program-adapters.d.ts.map +1 -0
  292. package/dist/trust-program-adapters.js +802 -0
  293. package/dist/trust-program-adapters.js.map +1 -0
  294. package/dist/trust-program-postgres.d.ts +41 -0
  295. package/dist/trust-program-postgres.d.ts.map +1 -0
  296. package/dist/trust-program-postgres.js +346 -0
  297. package/dist/trust-program-postgres.js.map +1 -0
  298. package/dist/trust-program-revocation.d.ts +206 -0
  299. package/dist/trust-program-revocation.d.ts.map +1 -0
  300. package/dist/trust-program-revocation.js +600 -0
  301. package/dist/trust-program-revocation.js.map +1 -0
  302. package/dist/trust-program.d.ts +197 -0
  303. package/dist/trust-program.d.ts.map +1 -0
  304. package/dist/trust-program.js +1351 -0
  305. package/dist/trust-program.js.map +1 -0
  306. package/dist/witness-postgres.d.ts +43 -0
  307. package/dist/witness-postgres.d.ts.map +1 -0
  308. package/dist/witness-postgres.js +92 -0
  309. package/dist/witness-postgres.js.map +1 -0
  310. package/dist/zk-range-proof.d.ts +78 -0
  311. package/dist/zk-range-proof.d.ts.map +1 -0
  312. package/dist/zk-range-proof.js +228 -0
  313. package/dist/zk-range-proof.js.map +1 -0
  314. package/eg1-conformance.js +3 -404
  315. package/enterprise.js +3 -180
  316. package/ep-assure.mjs +1 -0
  317. package/evidence-postgres.js +3 -356
  318. package/evidence.js +4 -360
  319. package/execution-binding.js +3 -212
  320. package/formal-runtime-map.js +4 -0
  321. package/index.js +4 -1249
  322. package/key-registry.js +3 -134
  323. package/mcp.js +3 -109
  324. package/metering.js +3 -226
  325. package/metrics.js +3 -231
  326. package/network-witness.js +3 -499
  327. package/package.json +35 -4
  328. package/proposal-to-effect.js +4 -0
  329. package/receipt-program.js +4 -0
  330. package/reliance-kernel.js +3 -112
  331. package/reliance-packet.js +3 -175
  332. package/remedy-program-postgres.js +4 -0
  333. package/remedy-program-receipt.js +4 -0
  334. package/remedy-program.js +4 -0
  335. package/reports/art14.js +0 -0
  336. package/reports/assurance-package.js +2 -312
  337. package/reports/auditor-workpaper.js +3 -537
  338. package/reports/external-verification.js +3 -222
  339. package/reports/reperform.js +3 -424
  340. package/reports/underwriter.js +3 -339
  341. package/retention.js +3 -84
  342. package/roster.js +3 -264
  343. package/runtime-monitor.js +4 -0
  344. package/settlement.js +3 -299
  345. package/siem.js +3 -235
  346. package/src/action-control-manifest.ts +424 -0
  347. package/src/action-escrow-custodian.ts +427 -0
  348. package/src/action-escrow-evidence.ts +1178 -0
  349. package/src/action-escrow-package.ts +1821 -0
  350. package/src/action-escrow-postgres.ts +366 -0
  351. package/src/action-escrow-state.ts +498 -0
  352. package/src/action-escrow-verifiers.ts +484 -0
  353. package/src/action-escrow.ts +3039 -0
  354. package/src/action-packs.ts +170 -0
  355. package/src/adapters/_kit.ts +117 -0
  356. package/src/adapters/aws.ts +142 -0
  357. package/src/adapters/cloudflare.ts +78 -0
  358. package/src/adapters/gcp.ts +71 -0
  359. package/src/adapters/github.ts +110 -0
  360. package/src/adapters/jira.ts +56 -0
  361. package/src/adapters/k8s.ts +71 -0
  362. package/src/adapters/linear.ts +56 -0
  363. package/src/adapters/salesforce.ts +56 -0
  364. package/src/adapters/stripe.ts +82 -0
  365. package/src/adapters/supabase.ts +122 -0
  366. package/src/adapters/terraform.ts +60 -0
  367. package/src/adapters/vercel.ts +85 -0
  368. package/src/aec-execution.ts +354 -0
  369. package/src/breakglass.ts +647 -0
  370. package/src/capability-receipt.ts +1258 -0
  371. package/src/cf1-conformance.ts +120 -0
  372. package/src/challenge-store.ts +70 -0
  373. package/src/control-plane.ts +374 -0
  374. package/src/coverage.ts +832 -0
  375. package/src/deployment-attestation.ts +259 -0
  376. package/src/eg1-conformance.ts +471 -0
  377. package/src/enterprise.ts +195 -0
  378. package/src/evidence-postgres.ts +374 -0
  379. package/src/evidence.ts +367 -0
  380. package/src/execution-binding.ts +236 -0
  381. package/src/formal-runtime-map.ts +24 -0
  382. package/src/index.ts +2127 -0
  383. package/src/key-registry.ts +150 -0
  384. package/src/mcp.ts +120 -0
  385. package/src/metering.ts +237 -0
  386. package/src/metrics.ts +232 -0
  387. package/src/network-witness.ts +585 -0
  388. package/src/proposal-to-effect.ts +571 -0
  389. package/src/protocol-state.ts +143 -0
  390. package/src/protocol-state.typecheck.ts +94 -0
  391. package/src/receipt-program.ts +1105 -0
  392. package/src/reliance-kernel.ts +119 -0
  393. package/src/reliance-packet.ts +206 -0
  394. package/src/remedy-program-postgres.ts +367 -0
  395. package/src/remedy-program-receipt.ts +891 -0
  396. package/src/remedy-program.ts +1388 -0
  397. package/src/reports/art14.ts +361 -0
  398. package/src/reports/assurance-package.ts +330 -0
  399. package/src/reports/auditor-workpaper.ts +558 -0
  400. package/src/reports/external-verification.ts +232 -0
  401. package/src/reports/reperform.ts +441 -0
  402. package/src/reports/underwriter.ts +356 -0
  403. package/src/retention.ts +100 -0
  404. package/src/roster.ts +273 -0
  405. package/src/runtime-monitor.ts +217 -0
  406. package/src/settlement.ts +313 -0
  407. package/src/siem.ts +247 -0
  408. package/src/store-postgres.ts +167 -0
  409. package/src/store.ts +214 -0
  410. package/src/strict-json.ts +115 -0
  411. package/src/trust-program-adapters.ts +847 -0
  412. package/src/trust-program-postgres.ts +429 -0
  413. package/src/trust-program-revocation.ts +751 -0
  414. package/src/trust-program.ts +1460 -0
  415. package/src/witness-postgres.ts +106 -0
  416. package/src/zk-range-proof.ts +250 -0
  417. package/store-postgres.js +3 -161
  418. package/store.js +4 -198
  419. package/strict-json.js +3 -102
  420. package/trust-program-adapters.js +4 -0
  421. package/trust-program-postgres.js +4 -0
  422. package/trust-program-revocation.js +4 -0
  423. package/trust-program.js +4 -0
  424. package/witness-postgres.js +3 -96
  425. package/zk-range-proof.js +4 -0
@@ -0,0 +1,113 @@
1
+ /**
2
+ * EMILIA Gate — signer-roster sync from an enterprise IdP (EP-GATE-ROSTER-v1).
3
+ *
4
+ * The boring key story: WHO may approve is an HR fact, not a crypto fact. This
5
+ * module turns a SCIM-like IdP export into a versioned signer roster and
6
+ * reconciles a key registry (key-registry.js) against it, so a deprovisioned
7
+ * employee STOPS being an acceptable approver on the next sync. Fail closed:
8
+ * - only `active === true` users' keys are ever pinned; anything else
9
+ * (false, missing, truthy-but-not-boolean) never pins;
10
+ * - a user absent from the import — offboarded, or silently dropped by a
11
+ * broken IdP export — has every previously pinned key revoked;
12
+ * - a kid claimed by two principals (or carrying two different key
13
+ * materials) is CONTESTED: it pins nothing and is revoked if present;
14
+ * - an import that would leave ZERO active signers requires an explicit
15
+ * `allowEmpty` acknowledgment, so an empty/broken IdP response cannot
16
+ * silently mass-revoke every approver.
17
+ *
18
+ * importRoster/diffRoster are pure (inputs in, artifact out; `importedAt` is
19
+ * the caller-supplied clock). applyRosterToRegistry mutates the given registry
20
+ * through its real API: key-registry CAN express revocation (`revoke(kid, at)`,
21
+ * hard and fail-closed), so reconciliation performs it directly and the
22
+ * returned `revoked` list is the exact set of revocations performed.
23
+ */
24
+ export declare const ROSTER_VERSION = "EP-GATE-ROSTER-v1";
25
+ /**
26
+ * Import a SCIM-like IdP user export into a signer roster.
27
+ * @param {Array<{id:string, userName:string, active:boolean, emails?:any, keys?:Array<{kid:string, publicKey:string}>}>} idpUsers
28
+ * @param {object} [o]
29
+ * @param {string} [o.source] IdP provenance, e.g. 'scim:okta:acme' (required)
30
+ * @param {string|number} [o.importedAt] import time (ISO or ms); the caller's clock
31
+ * @param {boolean} [o.allowEmpty=false] acknowledge an import with zero active signers
32
+ * @returns {{version:string, source:string, imported_at:string, signers:Array<{principal:string, kid:string, publicKey:string, active:boolean}>, integrity_warnings:object[]}}
33
+ */
34
+ export declare function importRoster(idpUsers: any, { source, importedAt, allowEmpty, }?: {
35
+ source?: string;
36
+ importedAt?: string | number;
37
+ allowEmpty?: boolean;
38
+ }): {
39
+ version: string;
40
+ source: string;
41
+ imported_at: string;
42
+ signers: {
43
+ principal: string;
44
+ kid: string;
45
+ publicKey: string;
46
+ active: boolean;
47
+ }[];
48
+ integrity_warnings: Record<string, any>[];
49
+ };
50
+ /**
51
+ * Diff two rosters at the principal level.
52
+ * `removed`/`deactivated` carry the PREVIOUS roster's kids — the revocation
53
+ * candidates; `added` carries the next roster's kids.
54
+ * @returns {{added:Array<{principal:string,kids:string[]}>, removed:Array<{principal:string,kids:string[]}>, deactivated:Array<{principal:string,kids:string[]}>}}
55
+ */
56
+ export declare function diffRoster(previous: any, next: any): {
57
+ added: {
58
+ principal: string;
59
+ kids: string[];
60
+ }[];
61
+ removed: {
62
+ principal: string;
63
+ kids: string[];
64
+ }[];
65
+ deactivated: {
66
+ principal: string;
67
+ kids: string[];
68
+ }[];
69
+ };
70
+ /**
71
+ * Reconcile a key registry (createKeyRegistry) against a roster:
72
+ * - PIN each ACTIVE, uncontested signer's key not already present;
73
+ * - REVOKE every registry kid not owned by an active roster signer — absent
74
+ * or inactive means deprovisioned. The registry passed here must therefore
75
+ * be DEDICATED to roster-managed approver keys.
76
+ * key-registry's API DOES express revocation (revoke(kid, at) — hard,
77
+ * fail-closed), so revocations are performed directly; `revoked` is the exact
78
+ * set performed, returned for the caller's evidence trail.
79
+ * A kid the registry has EVER revoked is never re-pinned (a rehire gets a new
80
+ * key; revoked key material stays dead).
81
+ * @param {object} roster an EP-GATE-ROSTER-v1 roster
82
+ * @param {object} registry createKeyRegistry() instance (add/revoke/status)
83
+ * @param {object} [o]
84
+ * @param {string|number} [o.revokedAt=roster.imported_at] revocation timestamp
85
+ * @returns {{pinned:Array<{principal:string,kid:string}>, already_pinned:string[], revoked:Array<{kid:string,revoked_at:string|number,reason:string}>, refused:Array<{principal:string,kid:string,reason:string}>}}
86
+ */
87
+ export declare function applyRosterToRegistry(roster: any, registry: any, { revokedAt }?: {
88
+ revokedAt?: string | number;
89
+ }): {
90
+ pinned: {
91
+ principal: string;
92
+ kid: string;
93
+ }[];
94
+ already_pinned: string[];
95
+ revoked: {
96
+ kid: string;
97
+ revoked_at: string | number;
98
+ reason: string;
99
+ }[];
100
+ refused: {
101
+ principal: string;
102
+ kid: string;
103
+ reason: string;
104
+ }[];
105
+ };
106
+ declare const _default: {
107
+ ROSTER_VERSION: string;
108
+ importRoster: typeof importRoster;
109
+ diffRoster: typeof diffRoster;
110
+ applyRosterToRegistry: typeof applyRosterToRegistry;
111
+ };
112
+ export default _default;
113
+ //# sourceMappingURL=roster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roster.d.ts","sourceRoot":"","sources":["../src/roster.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,eAAO,MAAM,cAAc,sBAAsB,CAAC;AAElD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,QAAQ,KAAA,EAAE,EACrC,MAAM,EACN,UAAU,EACV,UAAkB,GACnB,GAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB;;;;;;;;;;;EA0FL;AA4BD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,KAAA,EAAE,IAAI,KAAA;;mBAKb,MAAM;cAAQ,MAAM,EAAE;;;mBACpB,MAAM;cAAQ,MAAM,EAAE;;;mBAClB,MAAM;cAAQ,MAAM,EAAE;;EAWvD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,KAAA,EAAE,QAAQ,KAAA,EAAE,EAAE,SAAS,EAAE,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAO;;mBAkC9E,MAAM;aAAO,MAAM;;;;aAExB,MAAM;oBAAc,MAAM,GAAG,MAAM;gBAAU,MAAM;;;mBAC7C,MAAM;aAAO,MAAM;gBAAU,MAAM;;EA4BhE;;;;;;;AAED,wBAAmF"}
package/dist/roster.js ADDED
@@ -0,0 +1,261 @@
1
+ // @ts-nocheck
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * EMILIA Gate — signer-roster sync from an enterprise IdP (EP-GATE-ROSTER-v1).
5
+ *
6
+ * The boring key story: WHO may approve is an HR fact, not a crypto fact. This
7
+ * module turns a SCIM-like IdP export into a versioned signer roster and
8
+ * reconciles a key registry (key-registry.js) against it, so a deprovisioned
9
+ * employee STOPS being an acceptable approver on the next sync. Fail closed:
10
+ * - only `active === true` users' keys are ever pinned; anything else
11
+ * (false, missing, truthy-but-not-boolean) never pins;
12
+ * - a user absent from the import — offboarded, or silently dropped by a
13
+ * broken IdP export — has every previously pinned key revoked;
14
+ * - a kid claimed by two principals (or carrying two different key
15
+ * materials) is CONTESTED: it pins nothing and is revoked if present;
16
+ * - an import that would leave ZERO active signers requires an explicit
17
+ * `allowEmpty` acknowledgment, so an empty/broken IdP response cannot
18
+ * silently mass-revoke every approver.
19
+ *
20
+ * importRoster/diffRoster are pure (inputs in, artifact out; `importedAt` is
21
+ * the caller-supplied clock). applyRosterToRegistry mutates the given registry
22
+ * through its real API: key-registry CAN express revocation (`revoke(kid, at)`,
23
+ * hard and fail-closed), so reconciliation performs it directly and the
24
+ * returned `revoked` list is the exact set of revocations performed.
25
+ */
26
+ export const ROSTER_VERSION = 'EP-GATE-ROSTER-v1';
27
+ /**
28
+ * Import a SCIM-like IdP user export into a signer roster.
29
+ * @param {Array<{id:string, userName:string, active:boolean, emails?:any, keys?:Array<{kid:string, publicKey:string}>}>} idpUsers
30
+ * @param {object} [o]
31
+ * @param {string} [o.source] IdP provenance, e.g. 'scim:okta:acme' (required)
32
+ * @param {string|number} [o.importedAt] import time (ISO or ms); the caller's clock
33
+ * @param {boolean} [o.allowEmpty=false] acknowledge an import with zero active signers
34
+ * @returns {{version:string, source:string, imported_at:string, signers:Array<{principal:string, kid:string, publicKey:string, active:boolean}>, integrity_warnings:object[]}}
35
+ */
36
+ export function importRoster(idpUsers, { source, importedAt, allowEmpty = false, } = {}) {
37
+ if (!Array.isArray(idpUsers))
38
+ throw new Error('roster import: idpUsers must be an array');
39
+ if (!source || typeof source !== 'string') {
40
+ throw new Error('roster import: source (IdP provenance, e.g. "scim:okta:acme") is required');
41
+ }
42
+ const atMs = importedAt == null
43
+ ? Date.now()
44
+ : (typeof importedAt === 'number' ? importedAt : Date.parse(importedAt));
45
+ if (!Number.isFinite(atMs))
46
+ throw new Error('roster import: importedAt is not a valid time');
47
+ const warnings = [];
48
+ const candidates = [];
49
+ const usersByPrincipal = new Map();
50
+ for (const u of idpUsers) {
51
+ // A user without a stable id AND a userName cannot be diffed or revoked
52
+ // reliably later — excluded, never an approver.
53
+ if (!u || typeof u !== 'object'
54
+ || typeof u.id !== 'string' || !u.id
55
+ || typeof u.userName !== 'string' || !u.userName) {
56
+ warnings.push({ code: 'malformed_user', id: u?.id ?? null, userName: u?.userName ?? null });
57
+ continue;
58
+ }
59
+ const principal = u.userName;
60
+ usersByPrincipal.set(principal, (usersByPrincipal.get(principal) || 0) + 1);
61
+ const active = u.active === true; // strictly boolean true; anything else never pins
62
+ for (const k of Array.isArray(u.keys) ? u.keys : []) {
63
+ if (!k || typeof k.kid !== 'string' || !k.kid
64
+ || typeof k.publicKey !== 'string' || !k.publicKey) {
65
+ warnings.push({ code: 'malformed_key', principal, kid: k?.kid ?? null });
66
+ continue;
67
+ }
68
+ candidates.push({ principal, kid: k.kid, publicKey: k.publicKey, active });
69
+ }
70
+ }
71
+ // Two IdP users claiming one principal: identity is ambiguous — neither pins.
72
+ const contestedPrincipals = new Set();
73
+ for (const [principal, count] of usersByPrincipal) {
74
+ if (count > 1) {
75
+ contestedPrincipals.add(principal);
76
+ warnings.push({ code: 'duplicate_principal', principal, users: count });
77
+ }
78
+ }
79
+ let entries = candidates.filter((c) => !contestedPrincipals.has(c.principal));
80
+ // Exact-duplicate rows collapse silently (same principal + kid + key).
81
+ const seen = new Set();
82
+ entries = entries.filter((c) => {
83
+ const id = `${c.principal}\n${c.kid}\n${c.publicKey}`;
84
+ if (seen.has(id))
85
+ return false;
86
+ seen.add(id);
87
+ return true;
88
+ });
89
+ // One kid claimed by two principals, or one kid carrying two key materials,
90
+ // is an integrity failure: the contested kid pins NOTHING for anyone.
91
+ const byKid = new Map();
92
+ for (const c of entries) {
93
+ const g = byKid.get(c.kid) || { principals: new Set(), keys: new Set() };
94
+ g.principals.add(c.principal);
95
+ g.keys.add(c.publicKey);
96
+ byKid.set(c.kid, g);
97
+ }
98
+ const contestedKids = new Set();
99
+ for (const [kid, g] of byKid) {
100
+ if (g.principals.size > 1 || g.keys.size > 1) {
101
+ contestedKids.add(kid);
102
+ warnings.push({ code: 'duplicate_kid', kid, principals: [...g.principals].sort() });
103
+ }
104
+ }
105
+ entries = entries.filter((c) => !contestedKids.has(c.kid));
106
+ // Mass-deprovision guard: a roster with zero active signers would, on apply,
107
+ // revoke EVERY approver. That is indistinguishable from a broken IdP export,
108
+ // so it requires the operator's explicit acknowledgment.
109
+ if (!allowEmpty && !entries.some((e) => e.active)) {
110
+ throw new Error('roster import: zero active signers (mass-deprovision guard) — pass allowEmpty:true to acknowledge revoking every approver');
111
+ }
112
+ entries.sort((a, b) => (a.principal < b.principal ? -1 : a.principal > b.principal ? 1
113
+ : a.kid < b.kid ? -1 : a.kid > b.kid ? 1 : 0));
114
+ return {
115
+ version: ROSTER_VERSION,
116
+ source,
117
+ imported_at: new Date(atMs).toISOString(),
118
+ signers: entries.map(({ principal, kid, publicKey, active }) => ({ principal, kid, publicKey, active })),
119
+ integrity_warnings: warnings,
120
+ };
121
+ }
122
+ /** A roster must be well-formed before it can drive a diff or a registry mutation. */
123
+ function assertRoster(r, name) {
124
+ if (!r || r.version !== ROSTER_VERSION || !Array.isArray(r.signers)) {
125
+ throw new Error(`roster: ${name} is not an ${ROSTER_VERSION} roster`);
126
+ }
127
+ for (const s of r.signers) {
128
+ if (!s || typeof s.principal !== 'string' || !s.principal
129
+ || typeof s.kid !== 'string' || !s.kid
130
+ || typeof s.publicKey !== 'string' || !s.publicKey
131
+ || typeof s.active !== 'boolean') {
132
+ throw new Error(`roster: ${name} contains a malformed signer entry`);
133
+ }
134
+ }
135
+ }
136
+ function groupByPrincipal(roster) {
137
+ const m = new Map();
138
+ for (const s of roster.signers) {
139
+ const g = m.get(s.principal) || { kids: new Set(), active: false };
140
+ g.kids.add(s.kid);
141
+ if (s.active === true)
142
+ g.active = true;
143
+ m.set(s.principal, g);
144
+ }
145
+ return m;
146
+ }
147
+ /**
148
+ * Diff two rosters at the principal level.
149
+ * `removed`/`deactivated` carry the PREVIOUS roster's kids — the revocation
150
+ * candidates; `added` carries the next roster's kids.
151
+ * @returns {{added:Array<{principal:string,kids:string[]}>, removed:Array<{principal:string,kids:string[]}>, deactivated:Array<{principal:string,kids:string[]}>}}
152
+ */
153
+ export function diffRoster(previous, next) {
154
+ assertRoster(previous, 'previous');
155
+ assertRoster(next, 'next');
156
+ const prev = groupByPrincipal(previous);
157
+ const nxt = groupByPrincipal(next);
158
+ const added = [];
159
+ const removed = [];
160
+ const deactivated = [];
161
+ for (const [principal, g] of nxt) {
162
+ if (!prev.has(principal))
163
+ added.push({ principal, kids: [...g.kids].sort() });
164
+ }
165
+ for (const [principal, g] of prev) {
166
+ if (!nxt.has(principal)) {
167
+ removed.push({ principal, kids: [...g.kids].sort() });
168
+ continue;
169
+ }
170
+ if (g.active && !nxt.get(principal).active)
171
+ deactivated.push({ principal, kids: [...g.kids].sort() });
172
+ }
173
+ const byPrincipal = (a, b) => (a.principal < b.principal ? -1 : a.principal > b.principal ? 1 : 0);
174
+ added.sort(byPrincipal);
175
+ removed.sort(byPrincipal);
176
+ deactivated.sort(byPrincipal);
177
+ return { added, removed, deactivated };
178
+ }
179
+ /**
180
+ * Reconcile a key registry (createKeyRegistry) against a roster:
181
+ * - PIN each ACTIVE, uncontested signer's key not already present;
182
+ * - REVOKE every registry kid not owned by an active roster signer — absent
183
+ * or inactive means deprovisioned. The registry passed here must therefore
184
+ * be DEDICATED to roster-managed approver keys.
185
+ * key-registry's API DOES express revocation (revoke(kid, at) — hard,
186
+ * fail-closed), so revocations are performed directly; `revoked` is the exact
187
+ * set performed, returned for the caller's evidence trail.
188
+ * A kid the registry has EVER revoked is never re-pinned (a rehire gets a new
189
+ * key; revoked key material stays dead).
190
+ * @param {object} roster an EP-GATE-ROSTER-v1 roster
191
+ * @param {object} registry createKeyRegistry() instance (add/revoke/status)
192
+ * @param {object} [o]
193
+ * @param {string|number} [o.revokedAt=roster.imported_at] revocation timestamp
194
+ * @returns {{pinned:Array<{principal:string,kid:string}>, already_pinned:string[], revoked:Array<{kid:string,revoked_at:string|number,reason:string}>, refused:Array<{principal:string,kid:string,reason:string}>}}
195
+ */
196
+ export function applyRosterToRegistry(roster, registry, { revokedAt } = {}) {
197
+ assertRoster(roster, 'roster');
198
+ // Fail closed on the registry too: never coerce a flat key array here —
199
+ // asKeyRegistry would build a DETACHED registry and every revocation this
200
+ // function performs would be silently lost.
201
+ if (!registry || typeof registry.add !== 'function'
202
+ || typeof registry.revoke !== 'function' || typeof registry.status !== 'function') {
203
+ throw new Error('roster apply: registry must expose add/revoke/status (createKeyRegistry)');
204
+ }
205
+ const at = revokedAt ?? roster.imported_at;
206
+ // Recompute kid contests here as well — a hand-built roster must not bypass
207
+ // the import-time duplicate-kid integrity check.
208
+ const byKid = new Map();
209
+ for (const s of roster.signers) {
210
+ const g = byKid.get(s.kid) || { principals: new Set(), keys: new Set() };
211
+ g.principals.add(s.principal);
212
+ g.keys.add(s.publicKey);
213
+ byKid.set(s.kid, g);
214
+ }
215
+ const contested = new Set();
216
+ for (const [kid, g] of byKid) {
217
+ if (g.principals.size > 1 || g.keys.size > 1)
218
+ contested.add(kid);
219
+ }
220
+ const activeByKid = new Map();
221
+ for (const s of roster.signers) {
222
+ if (s.active === true && !contested.has(s.kid))
223
+ activeByKid.set(s.kid, s);
224
+ }
225
+ const status = registry.status();
226
+ const everRevoked = new Set(status.filter((e) => e.revoked).map((e) => e.kid));
227
+ const present = new Set(status.map((e) => e.kid));
228
+ const pinned = [];
229
+ const alreadyPinned = [];
230
+ const revoked = [];
231
+ const refused = [];
232
+ for (const s of roster.signers) {
233
+ if (s.active === true && contested.has(s.kid)) {
234
+ refused.push({ principal: s.principal, kid: s.kid, reason: 'contested_kid' });
235
+ }
236
+ }
237
+ for (const [kid, s] of activeByKid) {
238
+ if (everRevoked.has(kid)) {
239
+ refused.push({ principal: s.principal, kid, reason: 'kid_previously_revoked' });
240
+ continue;
241
+ }
242
+ if (present.has(kid)) {
243
+ alreadyPinned.push(kid);
244
+ continue;
245
+ }
246
+ registry.add({ kid, key: s.publicKey });
247
+ pinned.push({ principal: s.principal, kid });
248
+ }
249
+ // Absent-or-inactive (and contested) kids stop being acceptable NOW.
250
+ const done = new Set();
251
+ for (const e of status) {
252
+ if (e.revoked || done.has(e.kid) || activeByKid.has(e.kid))
253
+ continue;
254
+ registry.revoke(e.kid, at);
255
+ done.add(e.kid);
256
+ revoked.push({ kid: e.kid, revoked_at: at, reason: contested.has(e.kid) ? 'contested_kid' : 'absent_or_inactive' });
257
+ }
258
+ return { pinned, already_pinned: alreadyPinned, revoked, refused };
259
+ }
260
+ export default { ROSTER_VERSION, importRoster, diffRoster, applyRosterToRegistry };
261
+ //# sourceMappingURL=roster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roster.js","sourceRoot":"","sources":["../src/roster.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Runtime bridge for the Gate lifecycle.
3
+ *
4
+ * This is deliberately an explicit, reviewable monitor rather than a claim
5
+ * that TLA+ can be mechanically compiled into JavaScript. Its transition
6
+ * table mirrors the load-bearing lifecycle invariants in
7
+ * formal/ep_handshake.tla: an effect follows authorization, consumption is
8
+ * one-way, and execution evidence follows the effect attempt. A divergence
9
+ * enters fail-closed safe mode; recovery requires an operator-supplied
10
+ * authorizer and never re-authorizes an old receipt.
11
+ */
12
+ export declare const RUNTIME_MONITOR_VERSION = "EP-GATE-RUNTIME-MONITOR-v1";
13
+ export declare const RUNTIME_MONITOR_MODES: Readonly<{
14
+ NORMAL: "normal";
15
+ DEGRADED: "degraded";
16
+ LOCKDOWN: "lockdown";
17
+ }>;
18
+ export declare const RUNTIME_INVARIANTS: Readonly<{
19
+ CONSUME_ONCE: "ConsumeOnceSafety";
20
+ WRITE_BYPASS: "WriteBypassSafety";
21
+ SIGNOFF_BINDING: "SignoffBindingMatch";
22
+ }>;
23
+ /**
24
+ * Create a process-local monitor. Operators should export divergence events to
25
+ * durable SIEM/evidence storage through onDivergence; the monitor itself keeps
26
+ * only a bounded diagnostic buffer.
27
+ *
28
+ * @param {{ now?: (() => number) | number, onDivergence?: ((event: object) => any) | null, authorizeRecovery?: ((input: object) => boolean) | null }} [options]
29
+ */
30
+ export declare function createRuntimeMonitor({ now, onDivergence, authorizeRecovery, }?: {
31
+ now?: (() => number) | number;
32
+ onDivergence?: ((event: object) => any) | null;
33
+ authorizeRecovery?: ((input: object) => boolean) | null;
34
+ }): {
35
+ version: string;
36
+ beginCheck({ action, receipt_id }?: {
37
+ action?: null | undefined;
38
+ receipt_id?: null | undefined;
39
+ }): string;
40
+ preflight({ hasReceipt }?: {
41
+ hasReceipt?: boolean;
42
+ }): {
43
+ ok: boolean;
44
+ reason?: undefined;
45
+ mode?: undefined;
46
+ } | {
47
+ ok: boolean;
48
+ reason: string;
49
+ mode: "degraded" | "lockdown";
50
+ };
51
+ minimumAssuranceTier(declaredTier: any): any;
52
+ recordDecision(cycleId: any, details: any): {
53
+ ok: boolean;
54
+ reason: string;
55
+ event: any;
56
+ } | {
57
+ ok: boolean;
58
+ };
59
+ beginExecution(cycleId: any, authorization: any): {
60
+ ok: boolean;
61
+ };
62
+ effectReturned(cycleId: any): {
63
+ ok: boolean;
64
+ reason: string;
65
+ event: any;
66
+ } | {
67
+ ok: boolean;
68
+ };
69
+ effectFailed(cycleId: any): {
70
+ ok: boolean;
71
+ reason: string;
72
+ event: any;
73
+ } | {
74
+ ok: boolean;
75
+ };
76
+ capabilityRefused(cycleId: any): {
77
+ ok: boolean;
78
+ reason: string;
79
+ event: any;
80
+ } | {
81
+ ok: boolean;
82
+ };
83
+ consumptionCommitted(cycleId: any): {
84
+ ok: boolean;
85
+ reason: string;
86
+ event: any;
87
+ } | {
88
+ ok: boolean;
89
+ };
90
+ executionRecorded(cycleId: any): {
91
+ ok: boolean;
92
+ reason: string;
93
+ event: any;
94
+ } | {
95
+ ok: boolean;
96
+ };
97
+ executionSkipped(cycleId: any): {
98
+ ok: boolean;
99
+ reason: string;
100
+ event: any;
101
+ } | {
102
+ ok: boolean;
103
+ };
104
+ getMode(): "normal" | "degraded" | "lockdown";
105
+ getEvents(): any[];
106
+ getState(cycleId: any): any;
107
+ recover(input?: {}): {
108
+ ok: boolean;
109
+ mode: "normal";
110
+ reason?: undefined;
111
+ } | {
112
+ ok: boolean;
113
+ reason: string;
114
+ mode: "degraded" | "lockdown";
115
+ };
116
+ };
117
+ declare const _default: {
118
+ createRuntimeMonitor: typeof createRuntimeMonitor;
119
+ RUNTIME_MONITOR_VERSION: string;
120
+ RUNTIME_MONITOR_MODES: Readonly<{
121
+ NORMAL: "normal";
122
+ DEGRADED: "degraded";
123
+ LOCKDOWN: "lockdown";
124
+ }>;
125
+ RUNTIME_INVARIANTS: Readonly<{
126
+ CONSUME_ONCE: "ConsumeOnceSafety";
127
+ WRITE_BYPASS: "WriteBypassSafety";
128
+ SIGNOFF_BINDING: "SignoffBindingMatch";
129
+ }>;
130
+ };
131
+ export default _default;
132
+ //# sourceMappingURL=runtime-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-monitor.d.ts","sourceRoot":"","sources":["../src/runtime-monitor.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,uBAAuB,+BAA+B,CAAC;AACpE,eAAO,MAAM,qBAAqB;;;;EAIhC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;EAI7B,CAAC;AA0BH;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,GAAc,EACd,YAAmB,EACnB,iBAAwB,GACzB,GAAE;IACD,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC;CACpD;;;;;;+BAoGwB;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgDrD;;;;;;;;;;;;;;;AAED,wBAA4G"}