@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 @@
1
+ {"version":3,"file":"eg1-conformance.js","sourceRoot":"","sources":["../src/eg1-conformance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ export declare const ENTITLEMENT_VERSION = "EP-GATE-ENTITLEMENT-v1";
2
+ export declare const ENTITLEMENT_TIERS: string[];
3
+ /**
4
+ * Mint a signed entitlement (test/ops helper — the licensing service, not the
5
+ * verifier, holds the private key). Throws on invalid fields: a malformed
6
+ * license must never be issued, only refused.
7
+ * @param {crypto.KeyObject} privateKey Ed25519 private key
8
+ * @param {object} fields { org, tier, features?, limits?, not_before, expires_at, kid }
9
+ * @returns {{ '@version': string, payload: object, signature: { algorithm: 'Ed25519', value: string } }}
10
+ */
11
+ export declare function mintEntitlement(privateKey: any, { org, tier, features, limits, not_before, expires_at, kid, }: {
12
+ org: string;
13
+ tier: string;
14
+ features?: string[];
15
+ limits?: Record<string, any>;
16
+ not_before: string | number;
17
+ expires_at: string | number;
18
+ kid: string;
19
+ }): {
20
+ '@version': string;
21
+ payload: {
22
+ org: string;
23
+ tier: string;
24
+ features: string[];
25
+ limits: Record<string, any>;
26
+ not_before: string | number;
27
+ expires_at: string | number;
28
+ kid: string;
29
+ };
30
+ signature: {
31
+ algorithm: string;
32
+ value: string;
33
+ };
34
+ };
35
+ /**
36
+ * Verify an entitlement. NEVER throws for a bad artifact — every failure
37
+ * resolves to the community tier with a machine-readable reason, so a licensing
38
+ * problem degrades gracefully instead of bricking the gate. Enterprise features
39
+ * remain gated by `requireFeature`, which fails closed on any non-valid result.
40
+ *
41
+ * @param {object|string|null} entitlementJson the artifact (object or JSON string); absence -> community
42
+ * @param {object} [o]
43
+ * @param {object|Array<{kid:string,key:string}>} [o.issuerKeys] pinned kid -> base64url SPKI-DER public key
44
+ * @param {number|string|function} [o.now=Date.now] injected clock (ms, ISO, or () => ms)
45
+ * @returns {{ valid: boolean, tier: string, features: string[], limits: object|null, reason: string, org?: string, kid?: string, not_before?: any, expires_at?: any }}
46
+ */
47
+ export declare function verifyEntitlement(entitlementJson: any, { issuerKeys, now, }?: {
48
+ issuerKeys?: Record<string, string> | Array<{
49
+ kid: string;
50
+ key: string;
51
+ }>;
52
+ now?: number | string | (() => number);
53
+ }): {
54
+ valid: boolean;
55
+ tier: string;
56
+ features: never[];
57
+ limits: null;
58
+ reason: any;
59
+ } | {
60
+ valid: boolean;
61
+ tier: any;
62
+ features: any;
63
+ limits: any;
64
+ reason: string;
65
+ org: any;
66
+ kid: any;
67
+ not_before: any;
68
+ expires_at: any;
69
+ };
70
+ /**
71
+ * Is `feature` licensed? FAIL CLOSED: true only for a valid entitlement that
72
+ * explicitly lists the feature. Community fallback, invalid/expired/tampered
73
+ * artifacts, and unlisted features are all false — no enterprise code path
74
+ * runs without a live license naming it.
75
+ * @param {object} verified the result of verifyEntitlement
76
+ * @param {string} feature
77
+ * @returns {boolean}
78
+ */
79
+ export declare function requireFeature(verified: any, feature: any): any;
80
+ declare const _default: {
81
+ mintEntitlement: typeof mintEntitlement;
82
+ verifyEntitlement: typeof verifyEntitlement;
83
+ requireFeature: typeof requireFeature;
84
+ ENTITLEMENT_VERSION: string;
85
+ ENTITLEMENT_TIERS: string[];
86
+ };
87
+ export default _default;
88
+ //# sourceMappingURL=enterprise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enterprise.d.ts","sourceRoot":"","sources":["../src/enterprise.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,eAAO,MAAM,iBAAiB,UAA+D,CAAC;AA0B9F;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,UAAU,KAAA,EAAE,EAC1C,GAAG,EAAE,IAAI,EAAE,QAAa,EAAE,MAAW,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,GACnE,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb;;;;;;;;;;;;;;;EAoBA;AAaD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,KAAA,EAAE,EACjD,UAAU,EACV,GAAc,GACf,GAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CACnC;;;;;;;;;;;;;;;;EAwDL;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAA,OAI/C;;;;;;;;AAED,wBAA8G"}
@@ -0,0 +1,194 @@
1
+ // @ts-nocheck
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * EMILIA Gate — enterprise entitlement layer (EP-GATE-ENTITLEMENT-v1).
5
+ *
6
+ * The license key IS an EP-style artifact: a signed entitlement — Ed25519 over
7
+ * canonical JSON (sorted keys, same idiom as receipts/evidence) of
8
+ * { org, tier, features[], limits, not_before, expires_at, kid }. Verifiers pin
9
+ * issuer keys by kid; nothing in the artifact is trusted until the signature
10
+ * verifies against a pinned key.
11
+ *
12
+ * OPEN-CORE SEMANTICS — two different fail directions, by design:
13
+ * - The CORE gate is never bricked. No entitlement, an expired one, a
14
+ * tampered one, an unknown kid — all resolve to { valid:false,
15
+ * tier:'community' } with a machine-readable reason. Community tier always
16
+ * works; a licensing failure can never block the firewall itself.
17
+ * - Enterprise FEATURES fail closed. `requireFeature` returns true ONLY for
18
+ * a cryptographically valid, in-window entitlement that explicitly lists
19
+ * the feature. Everything else — including community fallback — is false.
20
+ *
21
+ * Pure functions: inputs in, verdict out. Time is injected (`now`), never read
22
+ * from the wall clock implicitly, so verification is deterministic.
23
+ */
24
+ import crypto from 'node:crypto';
25
+ import { strictJsonGate } from './strict-json.js';
26
+ export const ENTITLEMENT_VERSION = 'EP-GATE-ENTITLEMENT-v1';
27
+ export const ENTITLEMENT_TIERS = ['community', 'team', 'business', 'enterprise', 'regulated'];
28
+ /** The tier every failure path resolves to — the gate keeps working on it. */
29
+ const COMMUNITY = 'community';
30
+ /** Canonical JSON (recursive sorted keys) — matches @emilia-protocol/verify. */
31
+ function canonical(v) {
32
+ if (v === null || v === undefined)
33
+ return JSON.stringify(v);
34
+ if (Array.isArray(v))
35
+ return `[${v.map(canonical).join(',')}]`;
36
+ if (typeof v === 'object') {
37
+ return `{${Object.keys(v).sort().map((k) => JSON.stringify(k) + ':' + canonical(v[k])).join(',')}}`;
38
+ }
39
+ return JSON.stringify(v);
40
+ }
41
+ function toMs(t) {
42
+ if (t == null)
43
+ return null;
44
+ const ms = typeof t === 'number' ? t : Date.parse(t);
45
+ return Number.isFinite(ms) ? ms : null;
46
+ }
47
+ /** Community fallback — every refusal shape is identical and machine-readable. */
48
+ function community(reason, extra = {}) {
49
+ return { valid: false, tier: COMMUNITY, features: [], limits: null, reason, ...extra };
50
+ }
51
+ /**
52
+ * Mint a signed entitlement (test/ops helper — the licensing service, not the
53
+ * verifier, holds the private key). Throws on invalid fields: a malformed
54
+ * license must never be issued, only refused.
55
+ * @param {crypto.KeyObject} privateKey Ed25519 private key
56
+ * @param {object} fields { org, tier, features?, limits?, not_before, expires_at, kid }
57
+ * @returns {{ '@version': string, payload: object, signature: { algorithm: 'Ed25519', value: string } }}
58
+ */
59
+ export function mintEntitlement(privateKey, { org, tier, features = [], limits = {}, not_before, expires_at, kid, }) {
60
+ if (!org || typeof org !== 'string')
61
+ throw new Error('entitlement: org is required');
62
+ if (!ENTITLEMENT_TIERS.includes(tier)) {
63
+ throw new Error(`entitlement: unknown tier "${tier}" (expected one of ${ENTITLEMENT_TIERS.join('|')})`);
64
+ }
65
+ if (!Array.isArray(features) || features.some((f) => typeof f !== 'string')) {
66
+ throw new Error('entitlement: features must be an array of strings');
67
+ }
68
+ if (!limits || typeof limits !== 'object' || Array.isArray(limits)) {
69
+ throw new Error('entitlement: limits must be an object');
70
+ }
71
+ if (toMs(not_before) == null)
72
+ throw new Error('entitlement: not_before is required (ISO or ms)');
73
+ if (toMs(expires_at) == null)
74
+ throw new Error('entitlement: expires_at is required (ISO or ms)');
75
+ if (!kid || typeof kid !== 'string')
76
+ throw new Error('entitlement: kid is required');
77
+ // Snapshot features/limits into the signed payload: embedding the caller's live
78
+ // array/object would let a licensing service mutate them after minting and
79
+ // diverge the entitlement from its signature.
80
+ const payload = { org, tier, features: structuredClone(features), limits: structuredClone(limits), not_before, expires_at, kid };
81
+ const value = crypto.sign(null, Buffer.from(canonical(payload), 'utf8'), privateKey).toString('base64url');
82
+ return { '@version': ENTITLEMENT_VERSION, payload, signature: { algorithm: 'Ed25519', value } };
83
+ }
84
+ /** Resolve a base64url SPKI-DER key for `kid` from a map or an entry list. */
85
+ function issuerKeyFor(issuerKeys, kid) {
86
+ if (!issuerKeys)
87
+ return null;
88
+ if (Array.isArray(issuerKeys)) {
89
+ const e = issuerKeys.find((x) => x && x.kid === kid && typeof x.key === 'string');
90
+ return e ? e.key : null;
91
+ }
92
+ const k = issuerKeys[kid];
93
+ return typeof k === 'string' ? k : null;
94
+ }
95
+ /**
96
+ * Verify an entitlement. NEVER throws for a bad artifact — every failure
97
+ * resolves to the community tier with a machine-readable reason, so a licensing
98
+ * problem degrades gracefully instead of bricking the gate. Enterprise features
99
+ * remain gated by `requireFeature`, which fails closed on any non-valid result.
100
+ *
101
+ * @param {object|string|null} entitlementJson the artifact (object or JSON string); absence -> community
102
+ * @param {object} [o]
103
+ * @param {object|Array<{kid:string,key:string}>} [o.issuerKeys] pinned kid -> base64url SPKI-DER public key
104
+ * @param {number|string|function} [o.now=Date.now] injected clock (ms, ISO, or () => ms)
105
+ * @returns {{ valid: boolean, tier: string, features: string[], limits: object|null, reason: string, org?: string, kid?: string, not_before?: any, expires_at?: any }}
106
+ */
107
+ export function verifyEntitlement(entitlementJson, { issuerKeys, now = Date.now, } = {}) {
108
+ // Absence is NOT an error: the open-core floor. Community keeps working.
109
+ if (entitlementJson == null || entitlementJson === '')
110
+ return community('no_entitlement');
111
+ let doc = entitlementJson;
112
+ if (typeof doc === 'string') {
113
+ try {
114
+ if (Buffer.byteLength(doc, 'utf8') > 1024 * 1024 || !strictJsonGate(doc).ok)
115
+ return community('entitlement_unparseable');
116
+ doc = JSON.parse(doc);
117
+ }
118
+ catch {
119
+ return community('entitlement_unparseable');
120
+ }
121
+ }
122
+ if (!doc || typeof doc !== 'object' || Array.isArray(doc))
123
+ return community('entitlement_malformed');
124
+ if (doc['@version'] !== ENTITLEMENT_VERSION)
125
+ return community('unsupported_version');
126
+ const p = doc.payload;
127
+ const sig = doc.signature;
128
+ if (!p || typeof p !== 'object' || !sig || typeof sig !== 'object')
129
+ return community('entitlement_malformed');
130
+ if (sig.algorithm !== 'Ed25519' || typeof sig.value !== 'string')
131
+ return community('unsupported_algorithm');
132
+ if (!ENTITLEMENT_TIERS.includes(p.tier))
133
+ return community('unknown_tier');
134
+ if (!Array.isArray(p.features) || p.features.some((f) => typeof f !== 'string'))
135
+ return community('entitlement_malformed');
136
+ // Issuer pinning: the kid must resolve to a PINNED key. An entitlement can
137
+ // never nominate its own key — unknown kid (or no pins at all) fails closed.
138
+ const keyB64 = issuerKeyFor(issuerKeys, p.kid);
139
+ if (!keyB64)
140
+ return community('unknown_kid', { kid: p.kid ?? null });
141
+ let ok = false;
142
+ try {
143
+ const pub = crypto.createPublicKey({ key: Buffer.from(keyB64, 'base64url'), format: 'der', type: 'spki' });
144
+ ok = crypto.verify(null, Buffer.from(canonical(p), 'utf8'), pub, Buffer.from(sig.value, 'base64url'));
145
+ }
146
+ catch {
147
+ ok = false;
148
+ }
149
+ // One reason covers both tampering and a wrong key: the signature does not
150
+ // verify against the pinned key for this kid.
151
+ if (!ok)
152
+ return community('bad_signature', { kid: p.kid });
153
+ // Validity window — checked only AFTER the signature, so the timestamps
154
+ // themselves are authenticated. Both bounds are required; an unparseable
155
+ // window fails closed.
156
+ const nowMs = typeof now === 'function' ? now() : toMs(now);
157
+ const nbf = toMs(p.not_before);
158
+ const exp = toMs(p.expires_at);
159
+ if (nbf == null || exp == null || nowMs == null)
160
+ return community('invalid_validity_window', { kid: p.kid });
161
+ if (nowMs < nbf)
162
+ return community('not_yet_valid', { kid: p.kid, not_before: p.not_before });
163
+ if (nowMs > exp)
164
+ return community('expired', { kid: p.kid, expires_at: p.expires_at });
165
+ return {
166
+ valid: true,
167
+ tier: p.tier,
168
+ features: p.features.slice(),
169
+ limits: (p.limits && typeof p.limits === 'object') ? { ...p.limits } : {},
170
+ reason: 'entitlement_verified',
171
+ org: p.org,
172
+ kid: p.kid,
173
+ not_before: p.not_before,
174
+ expires_at: p.expires_at,
175
+ };
176
+ }
177
+ /**
178
+ * Is `feature` licensed? FAIL CLOSED: true only for a valid entitlement that
179
+ * explicitly lists the feature. Community fallback, invalid/expired/tampered
180
+ * artifacts, and unlisted features are all false — no enterprise code path
181
+ * runs without a live license naming it.
182
+ * @param {object} verified the result of verifyEntitlement
183
+ * @param {string} feature
184
+ * @returns {boolean}
185
+ */
186
+ export function requireFeature(verified, feature) {
187
+ if (!verified || verified.valid !== true)
188
+ return false;
189
+ if (typeof feature !== 'string' || feature.length === 0)
190
+ return false;
191
+ return Array.isArray(verified.features) && verified.features.includes(feature);
192
+ }
193
+ export default { mintEntitlement, verifyEntitlement, requireFeature, ENTITLEMENT_VERSION, ENTITLEMENT_TIERS };
194
+ //# sourceMappingURL=enterprise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enterprise.js","sourceRoot":"","sources":["../src/enterprise.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * EMILIA Gate production evidence backend for Postgres.
3
+ *
4
+ * The deployment SQL exposes one SECURITY DEFINER append function. That
5
+ * function locks the tenant/gate/stream head, checks the caller's expected
6
+ * head, inserts one immutable record, and advances the head in the same SQL
7
+ * statement transaction. Runtime roles receive SELECT and EXECUTE only; they
8
+ * cannot insert, update, delete, or truncate evidence tables directly.
9
+ *
10
+ * Database errors and malformed driver responses always propagate on the
11
+ * write path. A storage outage must never be mistaken for a successful append
12
+ * or an ordinary contention retry.
13
+ */
14
+ export declare const PG_EVIDENCE_VERSION = "EP-GATE-PG-EVIDENCE-v1";
15
+ export declare const EVIDENCE_SCHEMA = "emilia_gate_evidence";
16
+ export declare const EVIDENCE_RECORDS_TABLE = "emilia_gate_evidence.records";
17
+ export declare const EVIDENCE_HEADS_TABLE = "emilia_gate_evidence.heads";
18
+ export declare const EVIDENCE_APPEND_FUNCTION = "emilia_gate_evidence.append_record";
19
+ /** Exact statements issued by the adapter, exported for audit and test fakes. */
20
+ export declare const EVIDENCE_SQL: Readonly<{
21
+ health: "SELECT\n to_regclass('emilia_gate_evidence.records') IS NOT NULL AS records_ready,\n to_regclass('emilia_gate_evidence.heads') IS NOT NULL AS heads_ready,\n to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)') IS NOT NULL AS append_ready,\n CASE WHEN to_regclass('emilia_gate_evidence.records') IS NULL THEN FALSE\n ELSE has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'SELECT') END AS can_read_records,\n CASE WHEN to_regclass('emilia_gate_evidence.heads') IS NULL THEN FALSE\n ELSE has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'SELECT') END AS can_read_heads,\n CASE WHEN to_regclass('emilia_gate_evidence.records') IS NULL THEN FALSE ELSE (\n has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'INSERT')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'UPDATE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'DELETE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'TRUNCATE')\n ) END AS can_write_records_directly,\n CASE WHEN to_regclass('emilia_gate_evidence.heads') IS NULL THEN FALSE ELSE (\n has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'INSERT')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'UPDATE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'DELETE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'TRUNCATE')\n ) END AS can_write_heads_directly,\n CASE WHEN to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)') IS NULL THEN FALSE\n ELSE has_function_privilege(current_user,\n to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)'), 'EXECUTE') END AS can_append";
22
+ readHead: "SELECT head_seq AS seq, head_hash AS hash\nFROM emilia_gate_evidence.heads\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3";
23
+ getById: "SELECT seq, record_id, prev_hash, hash, record\nFROM emilia_gate_evidence.records\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3 AND record_id = $4";
24
+ readAll: "SELECT seq, record_id, prev_hash, hash, record\nFROM emilia_gate_evidence.records\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3\nORDER BY seq ASC";
25
+ snapshot: "SELECT\n COALESCE((\n SELECT jsonb_agg(jsonb_build_object(\n 'seq', r.seq,\n 'record_id', r.record_id,\n 'prev_hash', r.prev_hash,\n 'hash', r.hash,\n 'record', r.record\n ) ORDER BY r.seq ASC)\n FROM emilia_gate_evidence.records r\n WHERE r.tenant_id = $1 AND r.gate_id = $2 AND r.stream_id = $3\n ), '[]'::jsonb) AS record_rows,\n (\n SELECT CASE WHEN h.head_seq = -1 THEN NULL ELSE jsonb_build_object(\n 'seq', h.head_seq, 'hash', h.head_hash\n ) END\n FROM emilia_gate_evidence.heads h\n WHERE h.tenant_id = $1 AND h.gate_id = $2 AND h.stream_id = $3\n ) AS head";
26
+ appendIfHead: "SELECT emilia_gate_evidence.append_record($1, $2, $3, $4, $5::jsonb, $6) AS appended";
27
+ }>;
28
+ /**
29
+ * Create a tenant-and-gate-bound backend for createAtomicEvidenceLog().
30
+ *
31
+ * `query` is a node-postgres style function such as `pool.query.bind(pool)`.
32
+ * The migration must be installed and the connection role must inherit or SET
33
+ * ROLE to `emilia_gate_evidence_runtime`.
34
+ *
35
+ * @param {{ query?: (text: string, params: any[]) => Promise<{ rowCount: number, rows?: any[] }>, tenantId?: any, gateId?: any }} [options]
36
+ */
37
+ export declare function createPostgresEvidenceBackend({ query, tenantId, gateId, }?: {
38
+ query?: (text: string, params: any[]) => Promise<{
39
+ rowCount: number;
40
+ rows?: any[];
41
+ }>;
42
+ tenantId?: string;
43
+ gateId?: string;
44
+ }): {
45
+ durable: boolean;
46
+ persisted: boolean;
47
+ strict: boolean;
48
+ forkAware: boolean;
49
+ atomicAppend: boolean;
50
+ appendOnly: boolean;
51
+ version: string;
52
+ scope: Readonly<{
53
+ tenantId: string;
54
+ gateId: string;
55
+ }>;
56
+ readHead: (streamId: any) => Promise<{
57
+ seq: any;
58
+ hash: any;
59
+ } | null>;
60
+ head: (streamId: any) => Promise<{
61
+ seq: any;
62
+ hash: any;
63
+ } | null>;
64
+ getById: (streamId: any, recordId: any) => Promise<any>;
65
+ appendIfHead: (streamId: any, expectedHeadHash: any, record: any) => Promise<any>;
66
+ readAll: (streamId: any) => Promise<any>;
67
+ all: (streamId: any) => Promise<any>;
68
+ verify(streamId: any): Promise<{
69
+ ok: boolean;
70
+ at: any;
71
+ reason: string;
72
+ length?: undefined;
73
+ head?: undefined;
74
+ } | {
75
+ ok: boolean;
76
+ reason: string;
77
+ at?: undefined;
78
+ length?: undefined;
79
+ head?: undefined;
80
+ } | {
81
+ ok: boolean;
82
+ length: any;
83
+ head: string | null;
84
+ at?: undefined;
85
+ reason?: undefined;
86
+ }>;
87
+ health(): Promise<{
88
+ ok: boolean;
89
+ version: string;
90
+ scope: Readonly<{
91
+ tenantId: string;
92
+ gateId: string;
93
+ }>;
94
+ checks: {
95
+ recordsReady: boolean;
96
+ headsReady: boolean;
97
+ appendReady: boolean;
98
+ canReadRecords: boolean;
99
+ canReadHeads: boolean;
100
+ noDirectRecordWrites: boolean;
101
+ noDirectHeadWrites: boolean;
102
+ canAppend: boolean;
103
+ };
104
+ }>;
105
+ };
106
+ declare const postgresEvidence: {
107
+ createPostgresEvidenceBackend: typeof createPostgresEvidenceBackend;
108
+ EVIDENCE_SQL: Readonly<{
109
+ health: "SELECT\n to_regclass('emilia_gate_evidence.records') IS NOT NULL AS records_ready,\n to_regclass('emilia_gate_evidence.heads') IS NOT NULL AS heads_ready,\n to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)') IS NOT NULL AS append_ready,\n CASE WHEN to_regclass('emilia_gate_evidence.records') IS NULL THEN FALSE\n ELSE has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'SELECT') END AS can_read_records,\n CASE WHEN to_regclass('emilia_gate_evidence.heads') IS NULL THEN FALSE\n ELSE has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'SELECT') END AS can_read_heads,\n CASE WHEN to_regclass('emilia_gate_evidence.records') IS NULL THEN FALSE ELSE (\n has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'INSERT')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'UPDATE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'DELETE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.records'), 'TRUNCATE')\n ) END AS can_write_records_directly,\n CASE WHEN to_regclass('emilia_gate_evidence.heads') IS NULL THEN FALSE ELSE (\n has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'INSERT')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'UPDATE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'DELETE')\n OR has_table_privilege(current_user, to_regclass('emilia_gate_evidence.heads'), 'TRUNCATE')\n ) END AS can_write_heads_directly,\n CASE WHEN to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)') IS NULL THEN FALSE\n ELSE has_function_privilege(current_user,\n to_regprocedure('emilia_gate_evidence.append_record(text,text,text,text,jsonb,text)'), 'EXECUTE') END AS can_append";
110
+ readHead: "SELECT head_seq AS seq, head_hash AS hash\nFROM emilia_gate_evidence.heads\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3";
111
+ getById: "SELECT seq, record_id, prev_hash, hash, record\nFROM emilia_gate_evidence.records\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3 AND record_id = $4";
112
+ readAll: "SELECT seq, record_id, prev_hash, hash, record\nFROM emilia_gate_evidence.records\nWHERE tenant_id = $1 AND gate_id = $2 AND stream_id = $3\nORDER BY seq ASC";
113
+ snapshot: "SELECT\n COALESCE((\n SELECT jsonb_agg(jsonb_build_object(\n 'seq', r.seq,\n 'record_id', r.record_id,\n 'prev_hash', r.prev_hash,\n 'hash', r.hash,\n 'record', r.record\n ) ORDER BY r.seq ASC)\n FROM emilia_gate_evidence.records r\n WHERE r.tenant_id = $1 AND r.gate_id = $2 AND r.stream_id = $3\n ), '[]'::jsonb) AS record_rows,\n (\n SELECT CASE WHEN h.head_seq = -1 THEN NULL ELSE jsonb_build_object(\n 'seq', h.head_seq, 'hash', h.head_hash\n ) END\n FROM emilia_gate_evidence.heads h\n WHERE h.tenant_id = $1 AND h.gate_id = $2 AND h.stream_id = $3\n ) AS head";
114
+ appendIfHead: "SELECT emilia_gate_evidence.append_record($1, $2, $3, $4, $5::jsonb, $6) AS appended";
115
+ }>;
116
+ EVIDENCE_SCHEMA: string;
117
+ EVIDENCE_RECORDS_TABLE: string;
118
+ EVIDENCE_HEADS_TABLE: string;
119
+ EVIDENCE_APPEND_FUNCTION: string;
120
+ PG_EVIDENCE_VERSION: string;
121
+ };
122
+ export default postgresEvidence;
123
+ //# sourceMappingURL=evidence-postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-postgres.d.ts","sourceRoot":"","sources":["../src/evidence-postgres.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;AAOH,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,eAAO,MAAM,eAAe,yBAAyB,CAAC;AACtD,eAAO,MAAM,sBAAsB,iCAA+B,CAAC;AACnE,eAAO,MAAM,oBAAoB,+BAA6B,CAAC;AAC/D,eAAO,MAAM,wBAAwB,uCAAqC,CAAC;AAO3E,iFAAiF;AACjF,eAAO,MAAM,YAAY;;;;;;;EA4DvB,CAAC;AA8IH;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,KAAK,EACL,QAAQ,EACR,MAAM,GACP,GAAE;IACD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8GL;AAED,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;CAQrB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}