@noy-db/hub 0.7.1-pre.0 → 0.8.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 (812) hide show
  1. package/CHANGELOG.md +147 -14
  2. package/LICENSE +202 -21
  3. package/NOTICE +1 -0
  4. package/README.md +5 -5
  5. package/codemods/0.8.0-pre.json +61 -0
  6. package/dist/api-OS747DS4.js +18 -0
  7. package/dist/as/index.js +11 -12
  8. package/dist/as/index.js.map +1 -1
  9. package/dist/at/index.js +9 -10
  10. package/dist/attestation/index.js +37 -26
  11. package/dist/attestation/index.js.map +1 -1
  12. package/dist/{backup-XKCXVKV3.js → backup-YE2VQ26S.js} +15 -16
  13. package/dist/backup-YE2VQ26S.js.map +1 -0
  14. package/dist/blobs/index.js +13 -14
  15. package/dist/blobs/index.js.map +1 -1
  16. package/dist/broker/index.js +12 -13
  17. package/dist/broker/index.js.map +1 -1
  18. package/dist/by/index.js +2 -2
  19. package/dist/capsule/contract.d.ts +159 -0
  20. package/dist/capsule/contract.js +95 -0
  21. package/dist/capsule/enclave-aes/bound.d.ts +52 -0
  22. package/dist/capsule/enclave-aes/capabilities.d.ts +2 -0
  23. package/dist/capsule/enclave-aes/classify/compare.d.ts +20 -0
  24. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/find.d.ts +1 -1
  25. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/reveal.d.ts +1 -1
  26. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/verify.d.ts +2 -2
  27. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/write.d.ts +1 -1
  28. package/dist/{kernel/enclave → capsule/enclave-aes}/crypto.d.ts +33 -129
  29. package/dist/capsule/enclave-aes/index.d.ts +113 -0
  30. package/dist/capsule/enclave-aes/index.js +335 -0
  31. package/dist/capsule/enclave-aes/index.js.map +1 -0
  32. package/dist/capsule/enclave-aes/primitives.d.ts +29 -0
  33. package/dist/capsule/index.d.ts +27 -0
  34. package/dist/capsule/plumbing/ct-equal.d.ts +11 -0
  35. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/deterministic.d.ts +8 -21
  36. package/dist/capsule/plumbing/digest.d.ts +122 -0
  37. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/envelope-body.d.ts +44 -48
  38. package/dist/capsule/plumbing/index.d.ts +100 -0
  39. package/dist/capsule/plumbing/lifecycle.d.ts +50 -0
  40. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/record-codec.d.ts +80 -20
  41. package/dist/{kernel/enclave → capsule/plumbing}/record-envelope.d.ts +1 -1
  42. package/dist/capsule/plumbing/rekey-blob.d.ts +33 -0
  43. package/dist/capsule/plumbing/rekey.d.ts +44 -0
  44. package/dist/capsule/plumbing/sealed-slot.d.ts +22 -0
  45. package/dist/capsule/plumbing/sealed-slots.d.ts +37 -0
  46. package/dist/capsule/plumbing/sealing.d.ts +29 -0
  47. package/dist/capsule/plumbing/sign.d.ts +9 -0
  48. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/tombstone.d.ts +2 -2
  49. package/dist/capsule-VOLX3QRQ.js +209 -0
  50. package/dist/cargo/index.js +39 -36
  51. package/dist/{chunk-Q2MPFCQ7.js → chunk-23D6M6VM.js} +5 -5
  52. package/dist/chunk-23D6M6VM.js.map +1 -0
  53. package/dist/{chunk-R7BX2NB3.js → chunk-244QBK7Z.js} +4 -4
  54. package/dist/chunk-244QBK7Z.js.map +1 -0
  55. package/dist/chunk-2AFX33YA.js +936 -0
  56. package/dist/chunk-2AFX33YA.js.map +1 -0
  57. package/dist/{chunk-MVMXZYXT.js → chunk-2GHDLTPE.js} +2 -2
  58. package/dist/{chunk-GYGLAVCX.js → chunk-2MG3SW7Q.js} +6 -2
  59. package/dist/chunk-2MG3SW7Q.js.map +1 -0
  60. package/dist/{chunk-XLMEZIAJ.js → chunk-2ODVB6LZ.js} +2 -2
  61. package/dist/{chunk-HJUWN7JN.js → chunk-2PVXF5CS.js} +33 -8
  62. package/dist/chunk-2PVXF5CS.js.map +1 -0
  63. package/dist/{chunk-YJRT5UQM.js → chunk-2RH777HH.js} +21 -20
  64. package/dist/{chunk-YJRT5UQM.js.map → chunk-2RH777HH.js.map} +1 -1
  65. package/dist/{chunk-7O3Y4PPD.js → chunk-37EPTBBR.js} +153 -16
  66. package/dist/chunk-37EPTBBR.js.map +1 -0
  67. package/dist/{chunk-2ENE6445.js → chunk-3A5DUZ56.js} +102 -16
  68. package/dist/chunk-3A5DUZ56.js.map +1 -0
  69. package/dist/chunk-3EWS67C7.js +461 -0
  70. package/dist/chunk-3EWS67C7.js.map +1 -0
  71. package/dist/{chunk-SGZAIJCV.js → chunk-3L2NBKDR.js} +4 -8
  72. package/dist/chunk-3L2NBKDR.js.map +1 -0
  73. package/dist/{chunk-YMUFFJCO.js → chunk-3TDUWVWB.js} +5 -2
  74. package/dist/chunk-3TDUWVWB.js.map +1 -0
  75. package/dist/{chunk-4GVM6QZA.js → chunk-3XJQBBZD.js} +26 -28
  76. package/dist/chunk-3XJQBBZD.js.map +1 -0
  77. package/dist/{chunk-4ZS56W5S.js → chunk-42ALPZ2B.js} +672 -664
  78. package/dist/chunk-42ALPZ2B.js.map +1 -0
  79. package/dist/chunk-4CIQDWRB.js +524 -0
  80. package/dist/chunk-4CIQDWRB.js.map +1 -0
  81. package/dist/{chunk-RMS3NEA3.js → chunk-4JPMZTJY.js} +2 -2
  82. package/dist/{chunk-P3MG6QCN.js → chunk-4T3SE27M.js} +5 -9
  83. package/dist/chunk-4T3SE27M.js.map +1 -0
  84. package/dist/chunk-4V3Q35WG.js +204 -0
  85. package/dist/chunk-4V3Q35WG.js.map +1 -0
  86. package/dist/{chunk-NQKIUNW5.js → chunk-52MGURXO.js} +2 -2
  87. package/dist/{chunk-EQEYOJBM.js → chunk-5A4345TG.js} +4 -4
  88. package/dist/chunk-5A4345TG.js.map +1 -0
  89. package/dist/{chunk-334WSVOW.js → chunk-5FE75J4S.js} +6 -6
  90. package/dist/chunk-5FE75J4S.js.map +1 -0
  91. package/dist/chunk-5KC7QYEC.js +565 -0
  92. package/dist/chunk-5KC7QYEC.js.map +1 -0
  93. package/dist/{chunk-RSGLUIO6.js → chunk-5UMK7GRI.js} +13 -12
  94. package/dist/chunk-5UMK7GRI.js.map +1 -0
  95. package/dist/chunk-5WWDGFOS.js +275 -0
  96. package/dist/chunk-5WWDGFOS.js.map +1 -0
  97. package/dist/{chunk-QPQUVOZ2.js → chunk-6QVKPHBF.js} +3 -5
  98. package/dist/chunk-6QVKPHBF.js.map +1 -0
  99. package/dist/{chunk-ACAQ2DSG.js → chunk-747G6CT3.js} +2 -2
  100. package/dist/chunk-747G6CT3.js.map +1 -0
  101. package/dist/{chunk-QTQUH4DS.js → chunk-7R2Q7CPL.js} +16 -16
  102. package/dist/chunk-7R2Q7CPL.js.map +1 -0
  103. package/dist/{chunk-UGTBXF5U.js → chunk-7XMHMVTS.js} +3 -3
  104. package/dist/{chunk-YJX7EOJD.js → chunk-A4XMIZT3.js} +6 -6
  105. package/dist/{chunk-YJX7EOJD.js.map → chunk-A4XMIZT3.js.map} +1 -1
  106. package/dist/{chunk-A66I4JOA.js → chunk-AEQGFRU4.js} +4 -4
  107. package/dist/chunk-AEQGFRU4.js.map +1 -0
  108. package/dist/chunk-AL6ML4LA.js +1558 -0
  109. package/dist/chunk-AL6ML4LA.js.map +1 -0
  110. package/dist/{chunk-BZ3534YM.js → chunk-AUKKUPVB.js} +2 -2
  111. package/dist/{chunk-CUZLNGD5.js → chunk-B2YY6WDD.js} +1 -1
  112. package/dist/chunk-B2YY6WDD.js.map +1 -0
  113. package/dist/chunk-BKT776R5.js +1 -0
  114. package/dist/chunk-BNWA3WG5.js +22 -0
  115. package/dist/chunk-BNWA3WG5.js.map +1 -0
  116. package/dist/{chunk-VXANTWBJ.js → chunk-BPWYQ25R.js} +92 -6
  117. package/dist/{chunk-VXANTWBJ.js.map → chunk-BPWYQ25R.js.map} +1 -1
  118. package/dist/{chunk-6LKOJBV6.js → chunk-BVCUTXE3.js} +2 -2
  119. package/dist/chunk-CY2CYVWZ.js +41 -0
  120. package/dist/chunk-CY2CYVWZ.js.map +1 -0
  121. package/dist/{chunk-M4YPHYEH.js → chunk-DHHGL42E.js} +70 -25
  122. package/dist/chunk-DHHGL42E.js.map +1 -0
  123. package/dist/{chunk-VTFVLCUH.js → chunk-DIZLQVAA.js} +2 -2
  124. package/dist/{chunk-G73UVHCA.js → chunk-DLD5LGDS.js} +11 -12
  125. package/dist/chunk-DLD5LGDS.js.map +1 -0
  126. package/dist/{chunk-WQBG4SZS.js → chunk-DQESF6RP.js} +60 -49
  127. package/dist/chunk-DQESF6RP.js.map +1 -0
  128. package/dist/{chunk-LWBCUYZW.js → chunk-E2N2T5ZO.js} +2 -2
  129. package/dist/{chunk-3PGS7TYR.js → chunk-EGVJ7TM4.js} +29 -32
  130. package/dist/chunk-EGVJ7TM4.js.map +1 -0
  131. package/dist/{chunk-JVIBCBC7.js → chunk-EJLV62NI.js} +2 -2
  132. package/dist/{chunk-KKEESNPE.js → chunk-EYG2CY2X.js} +126 -19
  133. package/dist/chunk-EYG2CY2X.js.map +1 -0
  134. package/dist/{enclave-55PAM4YO.js → chunk-EZGV6F47.js} +83 -56
  135. package/dist/chunk-EZGV6F47.js.map +1 -0
  136. package/dist/{chunk-CHQCZZWC.js → chunk-EZOAKKTB.js} +36 -27
  137. package/dist/chunk-EZOAKKTB.js.map +1 -0
  138. package/dist/chunk-F6NCB7KT.js +13 -0
  139. package/dist/chunk-F6NCB7KT.js.map +1 -0
  140. package/dist/chunk-FFJFE4T7.js +100 -0
  141. package/dist/chunk-FFJFE4T7.js.map +1 -0
  142. package/dist/{chunk-JMGDHKQF.js → chunk-FLPCETP6.js} +2 -2
  143. package/dist/chunk-FOEDQATO.js +53 -0
  144. package/dist/chunk-FOEDQATO.js.map +1 -0
  145. package/dist/{chunk-DGOZ4UZD.js → chunk-FVH5QYY2.js} +2 -2
  146. package/dist/{chunk-HIWCKBEY.js → chunk-G2MVBDFP.js} +54 -28
  147. package/dist/chunk-G2MVBDFP.js.map +1 -0
  148. package/dist/chunk-GMKGGY7V.js +234 -0
  149. package/dist/chunk-GMKGGY7V.js.map +1 -0
  150. package/dist/{chunk-EIPVYUEP.js → chunk-GQ4MF3CM.js} +3 -3
  151. package/dist/chunk-GQ4MF3CM.js.map +1 -0
  152. package/dist/{chunk-PEOZ34EM.js → chunk-GSAK56VF.js} +1 -1
  153. package/dist/chunk-GSAK56VF.js.map +1 -0
  154. package/dist/{chunk-5VCRVKOZ.js → chunk-GUZET4SG.js} +12 -4
  155. package/dist/chunk-GUZET4SG.js.map +1 -0
  156. package/dist/{chunk-JBDFMYKQ.js → chunk-GZT3NQRA.js} +2 -2
  157. package/dist/{chunk-K23VKTN4.js → chunk-H23XHRTT.js} +19 -34
  158. package/dist/chunk-H23XHRTT.js.map +1 -0
  159. package/dist/{chunk-TFR7DSOV.js → chunk-H427H63K.js} +2 -2
  160. package/dist/{chunk-DFMWUOU5.js → chunk-H7JBY4P7.js} +23 -32
  161. package/dist/chunk-H7JBY4P7.js.map +1 -0
  162. package/dist/{chunk-SKGMN35F.js → chunk-HS554XAF.js} +3 -3
  163. package/dist/chunk-HS554XAF.js.map +1 -0
  164. package/dist/{chunk-HK67PX4J.js → chunk-HW7CMKUG.js} +1 -1
  165. package/dist/chunk-HW7CMKUG.js.map +1 -0
  166. package/dist/{chunk-3BVH633C.js → chunk-IMQKWR46.js} +5 -7
  167. package/dist/chunk-IMQKWR46.js.map +1 -0
  168. package/dist/{chunk-R42NSZI6.js → chunk-IUBMZPHM.js} +7 -7
  169. package/dist/chunk-IUBMZPHM.js.map +1 -0
  170. package/dist/{chunk-CUQPWYRX.js → chunk-IUT3GWP3.js} +75 -386
  171. package/dist/chunk-IUT3GWP3.js.map +1 -0
  172. package/dist/{chunk-RF6D3Y5E.js → chunk-JDEYF3PJ.js} +4 -8
  173. package/dist/{chunk-RF6D3Y5E.js.map → chunk-JDEYF3PJ.js.map} +1 -1
  174. package/dist/{chunk-PPTHY5QO.js → chunk-JIBUPZHA.js} +99 -8
  175. package/dist/chunk-JIBUPZHA.js.map +1 -0
  176. package/dist/{chunk-SMH6SRX7.js → chunk-JOSPH3E5.js} +2 -2
  177. package/dist/chunk-JQYKPKG6.js +193 -0
  178. package/dist/chunk-JQYKPKG6.js.map +1 -0
  179. package/dist/{chunk-7APJ6CO6.js → chunk-JSMTXZR3.js} +45 -13
  180. package/dist/chunk-JSMTXZR3.js.map +1 -0
  181. package/dist/chunk-JWWYRR4Q.js +12 -0
  182. package/dist/chunk-JWWYRR4Q.js.map +1 -0
  183. package/dist/{chunk-BVN6KXL2.js → chunk-KZXDLBY6.js} +14 -9
  184. package/dist/chunk-KZXDLBY6.js.map +1 -0
  185. package/dist/chunk-LGNDFRYC.js +23 -0
  186. package/dist/chunk-LGNDFRYC.js.map +1 -0
  187. package/dist/{chunk-XKWGNJ26.js → chunk-LIOVX5TJ.js} +7 -11
  188. package/dist/chunk-LIOVX5TJ.js.map +1 -0
  189. package/dist/{chunk-AYX7AINO.js → chunk-LNSVGRHO.js} +5 -7
  190. package/dist/chunk-LNSVGRHO.js.map +1 -0
  191. package/dist/chunk-M5B2W6YY.js +293 -0
  192. package/dist/chunk-M5B2W6YY.js.map +1 -0
  193. package/dist/chunk-MBMTND6D.js +456 -0
  194. package/dist/chunk-MBMTND6D.js.map +1 -0
  195. package/dist/{chunk-3BZZJJMQ.js → chunk-MILI22XQ.js} +3 -3
  196. package/dist/{chunk-A2HKRLPV.js → chunk-MXKI4ABF.js} +18 -59
  197. package/dist/chunk-MXKI4ABF.js.map +1 -0
  198. package/dist/{chunk-ZYIYHJ5R.js → chunk-MXOQ5JCG.js} +869 -238
  199. package/dist/chunk-MXOQ5JCG.js.map +1 -0
  200. package/dist/{chunk-V7ZRRCRJ.js → chunk-N7EVQD5S.js} +9 -13
  201. package/dist/chunk-N7EVQD5S.js.map +1 -0
  202. package/dist/chunk-N7UDP5VU.js +757 -0
  203. package/dist/chunk-N7UDP5VU.js.map +1 -0
  204. package/dist/chunk-NBQ3KK6X.js +270 -0
  205. package/dist/chunk-NBQ3KK6X.js.map +1 -0
  206. package/dist/{chunk-ZORTV6NH.js → chunk-NCO25JZO.js} +88 -4
  207. package/dist/chunk-NCO25JZO.js.map +1 -0
  208. package/dist/chunk-NH2UOV3B.js +18 -0
  209. package/dist/chunk-NH2UOV3B.js.map +1 -0
  210. package/dist/chunk-NYMLINRP.js +28 -0
  211. package/dist/chunk-NYMLINRP.js.map +1 -0
  212. package/dist/{chunk-YYP7WSEB.js → chunk-O2IMQSNA.js} +2 -2
  213. package/dist/chunk-O46CHQT7.js +215 -0
  214. package/dist/chunk-O46CHQT7.js.map +1 -0
  215. package/dist/chunk-OIEO4WDL.js +27 -0
  216. package/dist/chunk-OIEO4WDL.js.map +1 -0
  217. package/dist/{chunk-TRGTKX5E.js → chunk-OKSTSITU.js} +27 -4
  218. package/dist/chunk-OKSTSITU.js.map +1 -0
  219. package/dist/chunk-OYW3I5M4.js +31 -0
  220. package/dist/chunk-OYW3I5M4.js.map +1 -0
  221. package/dist/{chunk-Q7HZX3IF.js → chunk-PD64727P.js} +2 -2
  222. package/dist/chunk-PD64727P.js.map +1 -0
  223. package/dist/{chunk-FET5XCAT.js → chunk-PP3K67AJ.js} +34 -6
  224. package/dist/chunk-PP3K67AJ.js.map +1 -0
  225. package/dist/chunk-Q2XRFWOI.js +40 -0
  226. package/dist/chunk-Q2XRFWOI.js.map +1 -0
  227. package/dist/{chunk-QIZPZMUI.js → chunk-Q4UHJ5SN.js} +2 -2
  228. package/dist/{chunk-FAHMLERK.js → chunk-QBLT6POL.js} +2 -2
  229. package/dist/chunk-QMWY2FDS.js +157 -0
  230. package/dist/chunk-QMWY2FDS.js.map +1 -0
  231. package/dist/{chunk-LH5A3ZPG.js → chunk-RB4DOPGZ.js} +150 -22
  232. package/dist/chunk-RB4DOPGZ.js.map +1 -0
  233. package/dist/chunk-RHVMZSUU.js +7 -0
  234. package/dist/chunk-RHVMZSUU.js.map +1 -0
  235. package/dist/{chunk-BUE2D7PX.js → chunk-SMV2HRDU.js} +2 -2
  236. package/dist/chunk-SUZKW6UR.js +25 -0
  237. package/dist/chunk-SUZKW6UR.js.map +1 -0
  238. package/dist/{chunk-7MG7SJT7.js → chunk-SV2PM2OY.js} +1 -1
  239. package/dist/chunk-SV2PM2OY.js.map +1 -0
  240. package/dist/{chunk-UXVWEX5L.js → chunk-SYNY3VB5.js} +6 -2
  241. package/dist/chunk-SYNY3VB5.js.map +1 -0
  242. package/dist/{chunk-4GFX6MPA.js → chunk-TEHHROZL.js} +6 -8
  243. package/dist/chunk-TEHHROZL.js.map +1 -0
  244. package/dist/chunk-TKVUE4JF.js +1289 -0
  245. package/dist/chunk-TKVUE4JF.js.map +1 -0
  246. package/dist/{chunk-SFAWCTEM.js → chunk-TZZBXPZK.js} +2 -2
  247. package/dist/{chunk-F3W6YMDC.js → chunk-U2FZNEWJ.js} +4 -4
  248. package/dist/chunk-U2FZNEWJ.js.map +1 -0
  249. package/dist/{chunk-BLN54W3L.js → chunk-UA372JHH.js} +56 -3
  250. package/dist/chunk-UA372JHH.js.map +1 -0
  251. package/dist/{chunk-6YXCPL4T.js → chunk-UEFOQH74.js} +2 -2
  252. package/dist/chunk-UEFOQH74.js.map +1 -0
  253. package/dist/{chunk-2N5ML6HT.js → chunk-UIYESRD6.js} +9 -11
  254. package/dist/chunk-UIYESRD6.js.map +1 -0
  255. package/dist/{chunk-UHHPLO3I.js → chunk-V3RWOOSO.js} +4 -4
  256. package/dist/{chunk-KTFRCC5C.js → chunk-V7ADQF5O.js} +82 -8
  257. package/dist/chunk-V7ADQF5O.js.map +1 -0
  258. package/dist/{chunk-453F654R.js → chunk-VAORSCSU.js} +3 -3
  259. package/dist/chunk-VAORSCSU.js.map +1 -0
  260. package/dist/{chunk-GPNTB4Y7.js → chunk-VFHCKG5M.js} +6 -10
  261. package/dist/chunk-VFHCKG5M.js.map +1 -0
  262. package/dist/{chunk-2577DKXB.js → chunk-VHBKYN2J.js} +3 -3
  263. package/dist/chunk-VHBKYN2J.js.map +1 -0
  264. package/dist/chunk-VHM7HCKB.js +220 -0
  265. package/dist/chunk-VHM7HCKB.js.map +1 -0
  266. package/dist/{chunk-ZHKOPKE3.js → chunk-VKI2EB3N.js} +3 -3
  267. package/dist/chunk-VKI2EB3N.js.map +1 -0
  268. package/dist/{chunk-UDHWDSRL.js → chunk-VMV5SBE4.js} +16 -17
  269. package/dist/chunk-VMV5SBE4.js.map +1 -0
  270. package/dist/{chunk-SPYWXKJN.js → chunk-VQDZYB2B.js} +3 -3
  271. package/dist/chunk-VQDZYB2B.js.map +1 -0
  272. package/dist/{chunk-Q2PU57HC.js → chunk-VVOLDVIR.js} +2 -2
  273. package/dist/{chunk-3VF3WQ4F.js → chunk-WPOYWFSE.js} +7 -7
  274. package/dist/{chunk-3VF3WQ4F.js.map → chunk-WPOYWFSE.js.map} +1 -1
  275. package/dist/{chunk-OTQZ7ZWU.js → chunk-WXE4W2U6.js} +7 -11
  276. package/dist/chunk-WXE4W2U6.js.map +1 -0
  277. package/dist/chunk-XBKH4FOC.js +195 -0
  278. package/dist/chunk-XBKH4FOC.js.map +1 -0
  279. package/dist/{chunk-TUFM4UZP.js → chunk-XQRFSKYM.js} +2 -2
  280. package/dist/{chunk-3V4KWFX7.js → chunk-XSPFDUDG.js} +58 -53
  281. package/dist/chunk-XSPFDUDG.js.map +1 -0
  282. package/dist/{chunk-GY4WYNNG.js → chunk-Y2RKVFKR.js} +2 -2
  283. package/dist/{chunk-UP4BECPY.js → chunk-Y3LPTBG7.js} +89 -27
  284. package/dist/chunk-Y3LPTBG7.js.map +1 -0
  285. package/dist/{chunk-4OZNXTO4.js → chunk-YRXFFWG4.js} +2 -2
  286. package/dist/classified/index.js +5 -5
  287. package/dist/{classified-marker-BWOFVYAC.js → classified-marker-SIYKUU5L.js} +3 -3
  288. package/dist/classified-marker-SIYKUU5L.js.map +1 -0
  289. package/dist/collection-facade-CS7CA2XO.js +47 -0
  290. package/dist/{computed-VPOKQK4N.js → computed-FAD7SED4.js} +3 -3
  291. package/dist/consent/index.js +10 -11
  292. package/dist/consent/index.js.map +1 -1
  293. package/dist/cover/index.js +10 -11
  294. package/dist/coverage/index.js +306 -0
  295. package/dist/coverage/index.js.map +1 -0
  296. package/dist/custody/index.js +12 -13
  297. package/dist/{dead-filter-PKQDLOT4.js → dead-filter-4F3LWYKH.js} +11 -3
  298. package/dist/dead-filter-4F3LWYKH.js.map +1 -0
  299. package/dist/debug/index.js +11 -2
  300. package/dist/debug/index.js.map +1 -1
  301. package/dist/{delegation-DS5NRILW.js → delegation-NANZDG4N.js} +13 -16
  302. package/dist/delegation-NANZDG4N.js.map +1 -0
  303. package/dist/derivations/index.js +25 -23
  304. package/dist/derive-XLOJVXPU.js +20 -0
  305. package/dist/directory/index.js +10 -11
  306. package/dist/{dispatch-IEPAVQUM.js → dispatch-H4HV32AM.js} +5 -5
  307. package/dist/{dispatch-Q6MWLOJY.js → dispatch-JDZNGEB3.js} +20 -21
  308. package/dist/dispatch-JDZNGEB3.js.map +1 -0
  309. package/dist/executor-FMPVN6DT.js +35 -0
  310. package/dist/executor-LBBBRTN5.js +8 -0
  311. package/dist/executor-OSRZST2U.js +8 -0
  312. package/dist/export-accessible-RAOJAAU5.js +22 -0
  313. package/dist/extract-partition-JD5CUSTG.js +37 -0
  314. package/dist/{fanout-sidecar-S3QL53YX.js → fanout-sidecar-L7NHPIOC.js} +13 -15
  315. package/dist/fanout-sidecar-L7NHPIOC.js.map +1 -0
  316. package/dist/find-JRN4RNQ5.js +10 -0
  317. package/dist/forget/index.js +9 -10
  318. package/dist/forget/index.js.map +1 -1
  319. package/dist/guards/index.js +4 -4
  320. package/dist/history/index.js +13 -14
  321. package/dist/history/index.js.map +1 -1
  322. package/dist/i18n/index.js +14 -15
  323. package/dist/i18n/index.js.map +1 -1
  324. package/dist/index.d.ts +36 -14
  325. package/dist/index.js +970 -163
  326. package/dist/index.js.map +1 -1
  327. package/dist/indexing/index.js +13 -5
  328. package/dist/indexing/index.js.map +1 -1
  329. package/dist/introspection/index.js +11 -12
  330. package/dist/issue-YIVBZUTH.js +19 -0
  331. package/dist/ivf-flat-UZ6DQDLS.js +314 -0
  332. package/dist/ivf-flat-UZ6DQDLS.js.map +1 -0
  333. package/dist/{json-schema-V3M5MUCM.js → json-schema-3SHX72CC.js} +2 -1
  334. package/dist/json-schema-3SHX72CC.js.map +1 -0
  335. package/dist/kernel/attestation-types.d.ts +62 -0
  336. package/dist/kernel/collection-config.d.ts +5 -68
  337. package/dist/kernel/collection.d.ts +30 -9
  338. package/dist/kernel/cutover-transform.d.ts +1 -1
  339. package/dist/kernel/errors.d.ts +257 -38
  340. package/dist/kernel/generation-map.d.ts +48 -0
  341. package/dist/kernel/merge-authority.d.ts +1 -1
  342. package/dist/kernel/noydb.d.ts +6 -1
  343. package/dist/kernel/paths.d.ts +29 -5
  344. package/dist/kernel/prepared-write.d.ts +1 -1
  345. package/dist/kernel/present-cache.d.ts +58 -0
  346. package/dist/kernel/query/all.d.ts +7 -0
  347. package/dist/kernel/query/builder.d.ts +601 -270
  348. package/dist/kernel/query/civil-date.d.ts +64 -0
  349. package/dist/kernel/query/cursor.d.ts +40 -0
  350. package/dist/kernel/query/distinct-key.d.ts +98 -0
  351. package/dist/kernel/query/hydration.d.ts +76 -0
  352. package/dist/kernel/query/index.d.ts +31 -15
  353. package/dist/kernel/query/internal/core.d.ts +30 -0
  354. package/dist/kernel/query/internal/hooks.d.ts +22 -0
  355. package/dist/kernel/query/internal/maintenance.d.ts +43 -0
  356. package/dist/kernel/query/live/incremental.d.ts +314 -0
  357. package/dist/kernel/query/live/index.d.ts +22 -0
  358. package/dist/kernel/query/live/install.d.ts +2 -0
  359. package/dist/kernel/query/{live.d.ts → live/live.d.ts} +39 -9
  360. package/dist/kernel/query/live/methods.d.ts +107 -0
  361. package/dist/kernel/query/predicate.d.ts +119 -1
  362. package/dist/kernel/query/reduce/date-trunc.d.ts +75 -0
  363. package/dist/kernel/query/reduce/index.d.ts +36 -0
  364. package/dist/kernel/query/reduce/install.d.ts +2 -0
  365. package/dist/kernel/query/reduce/methods.d.ts +259 -0
  366. package/dist/kernel/query/reduce/scan-methods.d.ts +121 -0
  367. package/dist/kernel/query/relate/explain.d.ts +199 -0
  368. package/dist/kernel/query/relate/index.d.ts +48 -0
  369. package/dist/kernel/query/relate/install.d.ts +2 -0
  370. package/dist/kernel/query/relate/join-on.d.ts +126 -0
  371. package/dist/kernel/query/relate/join-reduce.d.ts +16 -0
  372. package/dist/kernel/query/relate/join.d.ts +452 -0
  373. package/dist/kernel/query/relate/methods.d.ts +426 -0
  374. package/dist/kernel/query/relate/partition.d.ts +87 -0
  375. package/dist/kernel/query/relate/scan-methods.d.ts +163 -0
  376. package/dist/kernel/query/relate/traverse.d.ts +109 -0
  377. package/dist/kernel/query/scan-builder.d.ts +79 -176
  378. package/dist/kernel/query/sort-key.d.ts +52 -0
  379. package/dist/kernel/secret-mode.d.ts +1 -1
  380. package/dist/kernel/tx-write-gate.d.ts +77 -0
  381. package/dist/kernel/types.d.ts +113 -8
  382. package/dist/kernel/validation.d.ts +27 -10
  383. package/dist/kernel/vault.d.ts +11 -6
  384. package/dist/kernel/via/compose.d.ts +3 -0
  385. package/dist/kernel/via/index.d.ts +56 -0
  386. package/dist/kernel/via/pipeline.d.ts +48 -0
  387. package/dist/kernel/write-queue.d.ts +17 -0
  388. package/dist/{ledger-EDXFFZQL.js → ledger-5ZMGE44K.js} +11 -12
  389. package/dist/liberate-WZSZM2W6.js +24 -0
  390. package/dist/link-set-MFXC24VK.js +29 -0
  391. package/dist/{managed-secret-NCWEMPUQ.js → managed-secret-MFTFT22X.js} +10 -11
  392. package/dist/materialized-views/index.js +30 -24
  393. package/dist/{migrate-cek-5ENH64AA.js → migrate-cek-DZRFFOHW.js} +2 -2
  394. package/dist/money/index.js +5 -5
  395. package/dist/noydb-ITIGNKUF.js +96 -0
  396. package/dist/overlay-views/index.js +4 -4
  397. package/dist/periods/index.js +12 -13
  398. package/dist/pod/index.js +74 -67
  399. package/dist/{pod-handle-ECVCDIXW.js → pod-handle-A3LET7NO.js} +10 -11
  400. package/dist/pod-handle-A3LET7NO.js.map +1 -0
  401. package/dist/policy/index.js +10 -11
  402. package/dist/port/on/index.d.ts +1 -1
  403. package/dist/port/to/index.d.ts +1 -1
  404. package/dist/port/with/blob-strategy.d.ts +10 -1
  405. package/dist/port/with/classified-strategy.d.ts +1 -1
  406. package/dist/port/with/collection-options.d.ts +6 -1
  407. package/dist/port/with/collection-registries.d.ts +1 -1
  408. package/dist/port/with/coverage-strategy.d.ts +83 -0
  409. package/dist/port/with/lookup-strategy.d.ts +2 -2
  410. package/dist/port/with/service-bus.d.ts +46 -0
  411. package/dist/port/with/strategies.d.ts +2 -0
  412. package/dist/portability/index.js +8 -8
  413. package/dist/{post-register-3IPCSG6Q.js → post-register-7ND27CF2.js} +6 -6
  414. package/dist/post-register-7ND27CF2.js.map +1 -0
  415. package/dist/query/all/index.js +31 -0
  416. package/dist/query/index.js +20 -32
  417. package/dist/query/live/index.js +21 -0
  418. package/dist/query/live/index.js.map +1 -0
  419. package/dist/query/reduce/index.js +33 -0
  420. package/dist/query/reduce/index.js.map +1 -0
  421. package/dist/query/relate/index.js +56 -0
  422. package/dist/query/relate/index.js.map +1 -0
  423. package/dist/reduce/index.js +72 -18
  424. package/dist/reduce/index.js.map +1 -1
  425. package/dist/register-DT5HZ2LZ.js +30 -0
  426. package/dist/registry-BHRZGZHF.js +8 -0
  427. package/dist/registry-ET6ZFFWA.js +34 -0
  428. package/dist/registry-HXFGLGTG.js +8 -0
  429. package/dist/registry-THCPDEOD.js +23 -0
  430. package/dist/request-withdrawal-AV2MJJKY.js +30 -0
  431. package/dist/{reveal-QZDHSGD4.js → reveal-B2TLP4JQ.js} +10 -9
  432. package/dist/reveal-B2TLP4JQ.js.map +1 -0
  433. package/dist/revoke-6DWIEOCV.js +24 -0
  434. package/dist/satellites/index.js +1 -1
  435. package/dist/schema-update/index.js +2 -2
  436. package/dist/sealed-record/index.js +16 -18
  437. package/dist/sealed-record/index.js.map +1 -1
  438. package/dist/search/index.js +11 -5
  439. package/dist/{seed-X5CC22CQ.js → seed-XNSE4U3S.js} +15 -18
  440. package/dist/seed-XNSE4U3S.js.map +1 -0
  441. package/dist/sequence/index.js +9 -10
  442. package/dist/session/index.js +9 -10
  443. package/dist/session/index.js.map +1 -1
  444. package/dist/shadow/index.js +2 -2
  445. package/dist/signer-MHGW3OIL.js +23 -0
  446. package/dist/snapshots/index.js +11 -11
  447. package/dist/stale-6GCFMOOR.js +28 -0
  448. package/dist/storage-BYN5LO6Z.js +21 -0
  449. package/dist/storage-BYN5LO6Z.js.map +1 -0
  450. package/dist/store/index.js +1 -1
  451. package/dist/{store-coordination-provider-4WZAIRHC.js → store-coordination-provider-C4BPT5XF.js} +11 -12
  452. package/dist/store-coordination-provider-C4BPT5XF.js.map +1 -0
  453. package/dist/sync/index.js +10 -11
  454. package/dist/sync/index.js.map +1 -1
  455. package/dist/team/index.js +17 -16
  456. package/dist/tiers/index.js +13 -12
  457. package/dist/to/index.js +2 -2
  458. package/dist/transactions/index.js +3 -3
  459. package/dist/util/index.js +1 -1
  460. package/dist/vault-head/index.js +11 -14
  461. package/dist/vault-head/index.js.map +1 -1
  462. package/dist/{verify-6MDTIUEV.js → verify-UKALW7C2.js} +14 -12
  463. package/dist/verify-UKALW7C2.js.map +1 -0
  464. package/dist/via/blob/index.d.ts +1 -0
  465. package/dist/via/classified/binding.d.ts +2 -2
  466. package/dist/via/classified/config-drift.d.ts +2 -2
  467. package/dist/via/classified/errors.d.ts +1 -1
  468. package/dist/via/geo/binding.d.ts +31 -0
  469. package/dist/via/geo/descriptor.d.ts +54 -0
  470. package/dist/via/geo/geohash.d.ts +95 -0
  471. package/dist/via/geo/index.d.ts +13 -0
  472. package/dist/via/geo/where.d.ts +50 -0
  473. package/dist/via/i18n/core.d.ts +1 -1
  474. package/dist/via/lookup/handle.d.ts +4 -4
  475. package/dist/via/lookup/registry.d.ts +1 -1
  476. package/dist/via/lookup/snapshot.d.ts +3 -3
  477. package/dist/walk-4VPK7AS4.js +20 -0
  478. package/dist/walk-4VPK7AS4.js.map +1 -0
  479. package/dist/with-audit/attestation/index.d.ts +2 -1
  480. package/dist/with-audit/attestation/issue.d.ts +2 -2
  481. package/dist/with-audit/attestation/revoke.d.ts +2 -2
  482. package/dist/with-audit/attestation/scheme.d.ts +7 -0
  483. package/dist/with-audit/attestation/signer.d.ts +1 -1
  484. package/dist/with-audit/attestation/strategy.d.ts +2 -2
  485. package/dist/with-audit/attestation/types.d.ts +10 -0
  486. package/dist/with-audit/attestation/vault-facade.d.ts +2 -2
  487. package/dist/with-audit/attestation/verifier.d.ts +6 -0
  488. package/dist/with-audit/consent/consent.d.ts +1 -1
  489. package/dist/with-audit/consent/strategy.d.ts +1 -1
  490. package/dist/with-audit/coverage/accounting.d.ts +112 -0
  491. package/dist/with-audit/coverage/active.d.ts +29 -0
  492. package/dist/with-audit/coverage/index.d.ts +61 -0
  493. package/dist/with-audit/coverage/sketch.d.ts +75 -0
  494. package/dist/with-audit/forget/subject-index.d.ts +1 -1
  495. package/dist/with-audit/periods/periods.d.ts +55 -7
  496. package/dist/with-audit/periods/reserved-collections.d.ts +3 -0
  497. package/dist/with-audit/periods/vault-facade.d.ts +18 -1
  498. package/dist/with-audit/sealed-record/index.d.ts +2 -2
  499. package/dist/with-audit/sealed-record/strategy.d.ts +1 -1
  500. package/dist/with-audit/tiers/index.d.ts +53 -2
  501. package/dist/with-audit/tiers/strategy.d.ts +8 -0
  502. package/dist/with-cargo/adopt-partition.d.ts +1 -1
  503. package/dist/with-cargo/extract-partition.d.ts +1 -1
  504. package/dist/with-cargo/floor.d.ts +3 -3
  505. package/dist/with-commit/history/history.d.ts +2 -2
  506. package/dist/with-commit/history/index.d.ts +1 -1
  507. package/dist/with-commit/history/ledger/store.d.ts +1 -1
  508. package/dist/with-commit/history/strategy.d.ts +1 -1
  509. package/dist/with-commit/history/time-machine.d.ts +1 -1
  510. package/dist/with-commit/numbering/index.d.ts +1 -1
  511. package/dist/with-commit/sequence/index.d.ts +1 -1
  512. package/dist/with-commit/tx/invariants.d.ts +1 -1
  513. package/dist/with-commit/tx/transaction.d.ts +13 -3
  514. package/dist/with-commit/vault-head/head.d.ts +1 -1
  515. package/dist/with-commit/vault-head/index.d.ts +1 -1
  516. package/dist/with-commit/vault-head/strategy.d.ts +1 -1
  517. package/dist/with-commit/vault-head/verify.d.ts +1 -1
  518. package/dist/with-formula/derivations/dispatch.d.ts +1 -1
  519. package/dist/with-formula/derivations/fanout-sidecar.d.ts +1 -1
  520. package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +4 -3
  521. package/dist/with-formula/materialized-views/emit-memo.d.ts +40 -0
  522. package/dist/with-formula/materialized-views/executor.d.ts +8 -0
  523. package/dist/with-formula/materialized-views/index.d.ts +1 -1
  524. package/dist/with-formula/materialized-views/registry.d.ts +15 -0
  525. package/dist/with-formula/materialized-views/types.d.ts +106 -14
  526. package/dist/with-formula/materialized-views/window-stage.d.ts +11 -0
  527. package/dist/with-formula/overlay-views/types.d.ts +1 -1
  528. package/dist/with-formula/overlay-views/virtual-collection.d.ts +13 -4
  529. package/dist/with-lookup/embeddings/chunks.d.ts +79 -0
  530. package/dist/with-lookup/embeddings/descriptor.d.ts +21 -0
  531. package/dist/with-lookup/embeddings/index.d.ts +3 -0
  532. package/dist/with-lookup/embeddings/ivf-flat.d.ts +93 -0
  533. package/dist/with-lookup/embeddings/vector-index.d.ts +73 -0
  534. package/dist/with-lookup/embeddings/vector-set.d.ts +94 -1
  535. package/dist/with-lookup/embeddings/with-vector-index.d.ts +67 -0
  536. package/dist/with-lookup/indexing/collection-facade.d.ts +86 -3
  537. package/dist/with-lookup/indexing/compound-indexes.d.ts +129 -0
  538. package/dist/with-lookup/indexing/eager-indexes.d.ts +170 -1
  539. package/dist/with-lookup/indexing/index-snapshot.d.ts +62 -0
  540. package/dist/with-lookup/indexing/lazy-builder.d.ts +33 -0
  541. package/dist/with-lookup/indexing/persisted-field-indexes.d.ts +104 -0
  542. package/dist/with-lookup/indexing/persisted-indexes.d.ts +12 -0
  543. package/dist/with-lookup/indexing/sorted-indexes.d.ts +117 -0
  544. package/dist/with-lookup/indexing/unique-constraints.d.ts +106 -23
  545. package/dist/with-lookup/reduce/active.d.ts +2 -24
  546. package/dist/with-lookup/reduce/group-core.d.ts +43 -0
  547. package/dist/with-lookup/reduce/groupby.d.ts +195 -36
  548. package/dist/with-lookup/reduce/incremental-group.d.ts +153 -0
  549. package/dist/with-lookup/reduce/index.d.ts +26 -5
  550. package/dist/with-lookup/reduce/reducers.d.ts +255 -1
  551. package/dist/with-lookup/reduce/reduction.d.ts +44 -13
  552. package/dist/with-lookup/reduce/strategy.d.ts +43 -3
  553. package/dist/with-lookup/reduce/window.d.ts +262 -0
  554. package/dist/with-lookup/search/collection-facade.d.ts +45 -9
  555. package/dist/with-lookup/search/index-store.d.ts +5 -3
  556. package/dist/with-lookup/search/index.d.ts +4 -2
  557. package/dist/with-lookup/search/inverted-index.d.ts +38 -2
  558. package/dist/with-lookup/search/persisted-index-store.d.ts +5 -2
  559. package/dist/with-lookup/search/phrase.d.ts +28 -0
  560. package/dist/with-lookup/search/retrieve-types.d.ts +57 -1
  561. package/dist/with-lookup/search/serialize.d.ts +29 -3
  562. package/dist/with-lookup/search/strategy.d.ts +2 -6
  563. package/dist/with-party/broker/index.d.ts +3 -3
  564. package/dist/with-party/directory/cover/index.d.ts +1 -1
  565. package/dist/with-party/directory/cover/storage.d.ts +1 -1
  566. package/dist/with-party/directory/cover/types.d.ts +1 -1
  567. package/dist/with-party/directory/index.d.ts +1 -1
  568. package/dist/with-party/directory/types.d.ts +1 -1
  569. package/dist/with-party/directory/user-envelope/api.d.ts +1 -1
  570. package/dist/with-party/directory/user-envelope/storage.d.ts +1 -1
  571. package/dist/with-party/policy/engine.d.ts +1 -1
  572. package/dist/with-party/policy/index.d.ts +1 -1
  573. package/dist/with-party/policy/presets.d.ts +1 -1
  574. package/dist/with-party/team/authenticators.d.ts +91 -1
  575. package/dist/with-party/team/delegation.d.ts +1 -1
  576. package/dist/with-party/team/echo-secret.d.ts +2 -2
  577. package/dist/with-party/team/index.d.ts +4 -3
  578. package/dist/with-party/team/keyring.d.ts +2 -2
  579. package/dist/with-party/team/magic-link-grant.d.ts +1 -1
  580. package/dist/with-party/team/managed-secret.d.ts +1 -1
  581. package/dist/with-party/team/noydb-facade.d.ts +12 -3
  582. package/dist/with-party/team/recovery.d.ts +1 -1
  583. package/dist/with-party/team/roster-tag.d.ts +1 -1
  584. package/dist/with-party/team/rotate-recover.d.ts +1 -1
  585. package/dist/with-party/team/wrapped-deks.d.ts +1 -1
  586. package/dist/with-pod/format.d.ts +1 -1
  587. package/dist/with-pod/index.d.ts +1 -1
  588. package/dist/with-pod/pod.d.ts +1 -1
  589. package/dist/with-shape/blobs/blob-compaction.d.ts +17 -1
  590. package/dist/with-shape/blobs/blob-intent.d.ts +1 -1
  591. package/dist/with-shape/blobs/blob-set.d.ts +23 -4
  592. package/dist/with-shape/blobs/legacy-sweep.d.ts +35 -0
  593. package/dist/with-shape/introspection/describe.d.ts +7 -1
  594. package/dist/with-shape/introspection/field-meta.d.ts +18 -0
  595. package/dist/with-shape/introspection/types.d.ts +57 -1
  596. package/dist/with-shape/introspection/walk.d.ts +1 -1
  597. package/dist/with-shape/links/lazy-handle.d.ts +1 -1
  598. package/dist/with-shape/links/link-set.d.ts +1 -1
  599. package/dist/with-shape/links/vault-facade.d.ts +1 -1
  600. package/dist/with-shape/manifest/derive.d.ts +1 -1
  601. package/dist/with-shape/manifest/storage.d.ts +1 -1
  602. package/dist/with-shape/persisted-schemas/register.d.ts +1 -1
  603. package/dist/with-shape/persisted-schemas/storage.d.ts +1 -1
  604. package/dist/with-shape/satellites/dead-filter.d.ts +1 -1
  605. package/dist/with-shape/satellites/declare.d.ts +1 -1
  606. package/dist/with-shape/satellites/marker.d.ts +1 -1
  607. package/dist/with-shape/satellites/post-register.d.ts +1 -1
  608. package/dist/with-store/partitioned/index.d.ts +337 -0
  609. package/dist/with-sync/change-broadcast.d.ts +153 -0
  610. package/dist/with-sync/presence.d.ts +5 -10
  611. package/dist/withdraw-accessible-HL7GACUE.js +27 -0
  612. package/dist/withdraw-accessible-HL7GACUE.js.map +1 -0
  613. package/package.json +48 -12
  614. package/dist/api-WYW4YEQG.js +0 -19
  615. package/dist/backup-XKCXVKV3.js.map +0 -1
  616. package/dist/chunk-2577DKXB.js.map +0 -1
  617. package/dist/chunk-2ENE6445.js.map +0 -1
  618. package/dist/chunk-2N5ML6HT.js.map +0 -1
  619. package/dist/chunk-334WSVOW.js.map +0 -1
  620. package/dist/chunk-3BVH633C.js.map +0 -1
  621. package/dist/chunk-3PGS7TYR.js.map +0 -1
  622. package/dist/chunk-3V4KWFX7.js.map +0 -1
  623. package/dist/chunk-453F654R.js.map +0 -1
  624. package/dist/chunk-4GFX6MPA.js.map +0 -1
  625. package/dist/chunk-4GVM6QZA.js.map +0 -1
  626. package/dist/chunk-4ZS56W5S.js.map +0 -1
  627. package/dist/chunk-5VCRVKOZ.js.map +0 -1
  628. package/dist/chunk-6YXCPL4T.js.map +0 -1
  629. package/dist/chunk-7APJ6CO6.js.map +0 -1
  630. package/dist/chunk-7MG2LHO5.js +0 -1616
  631. package/dist/chunk-7MG2LHO5.js.map +0 -1
  632. package/dist/chunk-7MG7SJT7.js.map +0 -1
  633. package/dist/chunk-7O3Y4PPD.js.map +0 -1
  634. package/dist/chunk-A2HKRLPV.js.map +0 -1
  635. package/dist/chunk-A66I4JOA.js.map +0 -1
  636. package/dist/chunk-ACAQ2DSG.js.map +0 -1
  637. package/dist/chunk-ATL3ZVXT.js +0 -151
  638. package/dist/chunk-ATL3ZVXT.js.map +0 -1
  639. package/dist/chunk-AYX7AINO.js.map +0 -1
  640. package/dist/chunk-BLN54W3L.js.map +0 -1
  641. package/dist/chunk-BRLKZUBT.js +0 -95
  642. package/dist/chunk-BRLKZUBT.js.map +0 -1
  643. package/dist/chunk-BTDR2PXY.js +0 -29
  644. package/dist/chunk-BTDR2PXY.js.map +0 -1
  645. package/dist/chunk-BVN6KXL2.js.map +0 -1
  646. package/dist/chunk-CHQCZZWC.js.map +0 -1
  647. package/dist/chunk-CUQPWYRX.js.map +0 -1
  648. package/dist/chunk-CUZLNGD5.js.map +0 -1
  649. package/dist/chunk-DFMWUOU5.js.map +0 -1
  650. package/dist/chunk-EIPVYUEP.js.map +0 -1
  651. package/dist/chunk-EQEYOJBM.js.map +0 -1
  652. package/dist/chunk-F3W6YMDC.js.map +0 -1
  653. package/dist/chunk-FET5XCAT.js.map +0 -1
  654. package/dist/chunk-G73UVHCA.js.map +0 -1
  655. package/dist/chunk-GPNTB4Y7.js.map +0 -1
  656. package/dist/chunk-GYGLAVCX.js.map +0 -1
  657. package/dist/chunk-HIWCKBEY.js.map +0 -1
  658. package/dist/chunk-HJUWN7JN.js.map +0 -1
  659. package/dist/chunk-HK67PX4J.js.map +0 -1
  660. package/dist/chunk-HPVZCW43.js +0 -479
  661. package/dist/chunk-HPVZCW43.js.map +0 -1
  662. package/dist/chunk-I3ISCYT7.js +0 -159
  663. package/dist/chunk-I3ISCYT7.js.map +0 -1
  664. package/dist/chunk-K23VKTN4.js.map +0 -1
  665. package/dist/chunk-KKEESNPE.js.map +0 -1
  666. package/dist/chunk-KTFRCC5C.js.map +0 -1
  667. package/dist/chunk-LH5A3ZPG.js.map +0 -1
  668. package/dist/chunk-LP7BEXCT.js +0 -32
  669. package/dist/chunk-LP7BEXCT.js.map +0 -1
  670. package/dist/chunk-M4YPHYEH.js.map +0 -1
  671. package/dist/chunk-NSITFOCJ.js +0 -99
  672. package/dist/chunk-NSITFOCJ.js.map +0 -1
  673. package/dist/chunk-OTQZ7ZWU.js.map +0 -1
  674. package/dist/chunk-P3MG6QCN.js.map +0 -1
  675. package/dist/chunk-PEOZ34EM.js.map +0 -1
  676. package/dist/chunk-PPTHY5QO.js.map +0 -1
  677. package/dist/chunk-Q2MPFCQ7.js.map +0 -1
  678. package/dist/chunk-Q7HZX3IF.js.map +0 -1
  679. package/dist/chunk-QPQUVOZ2.js.map +0 -1
  680. package/dist/chunk-QTQUH4DS.js.map +0 -1
  681. package/dist/chunk-R42NSZI6.js.map +0 -1
  682. package/dist/chunk-R7BX2NB3.js.map +0 -1
  683. package/dist/chunk-RSGLUIO6.js.map +0 -1
  684. package/dist/chunk-RTBJ5IOO.js +0 -87
  685. package/dist/chunk-RTBJ5IOO.js.map +0 -1
  686. package/dist/chunk-SGZAIJCV.js.map +0 -1
  687. package/dist/chunk-SKGMN35F.js.map +0 -1
  688. package/dist/chunk-SPYWXKJN.js.map +0 -1
  689. package/dist/chunk-SZJ3DLZA.js +0 -66
  690. package/dist/chunk-SZJ3DLZA.js.map +0 -1
  691. package/dist/chunk-TRGTKX5E.js.map +0 -1
  692. package/dist/chunk-UDHWDSRL.js.map +0 -1
  693. package/dist/chunk-UP4BECPY.js.map +0 -1
  694. package/dist/chunk-UXVWEX5L.js.map +0 -1
  695. package/dist/chunk-V7ZRRCRJ.js.map +0 -1
  696. package/dist/chunk-WQBG4SZS.js.map +0 -1
  697. package/dist/chunk-XKWGNJ26.js.map +0 -1
  698. package/dist/chunk-YMUFFJCO.js.map +0 -1
  699. package/dist/chunk-ZHKOPKE3.js.map +0 -1
  700. package/dist/chunk-ZN4FD4PE.js +0 -364
  701. package/dist/chunk-ZN4FD4PE.js.map +0 -1
  702. package/dist/chunk-ZORTV6NH.js.map +0 -1
  703. package/dist/chunk-ZYIYHJ5R.js.map +0 -1
  704. package/dist/classified-marker-BWOFVYAC.js.map +0 -1
  705. package/dist/collection-facade-JSJYIKS4.js +0 -45
  706. package/dist/dead-filter-PKQDLOT4.js.map +0 -1
  707. package/dist/delegation-DS5NRILW.js.map +0 -1
  708. package/dist/derive-E642AOUB.js +0 -21
  709. package/dist/dispatch-Q6MWLOJY.js.map +0 -1
  710. package/dist/executor-5NIMLSKZ.js +0 -8
  711. package/dist/executor-7UQ3BZ4F.js +0 -29
  712. package/dist/executor-AQVXV5GZ.js +0 -8
  713. package/dist/export-accessible-ORMKLA3E.js +0 -22
  714. package/dist/extract-partition-NKYO3WNG.js +0 -37
  715. package/dist/fanout-sidecar-S3QL53YX.js.map +0 -1
  716. package/dist/find-NOGJ25VX.js +0 -10
  717. package/dist/issue-3DTQ7VJJ.js +0 -18
  718. package/dist/json-schema-V3M5MUCM.js.map +0 -1
  719. package/dist/kernel/enclave/classify/compare.d.ts +0 -10
  720. package/dist/kernel/enclave/index.d.ts +0 -87
  721. package/dist/kernel/enclave/record-keys/lifecycle.d.ts +0 -124
  722. package/dist/kernel/enclave/record-keys/rekey-blob.d.ts +0 -88
  723. package/dist/kernel/enclave/record-keys/rekey.d.ts +0 -91
  724. package/dist/kernel/enclave/record-keys/sealed-slot.d.ts +0 -14
  725. package/dist/kernel/enclave/record-keys/sealed-slots.d.ts +0 -123
  726. package/dist/kernel/enclave/record-keys/sealing.d.ts +0 -70
  727. package/dist/kernel/query/join.d.ts +0 -232
  728. package/dist/liberate-V35QUHJP.js +0 -24
  729. package/dist/link-set-2TTM3IZC.js +0 -30
  730. package/dist/noydb-62MX4QUG.js +0 -90
  731. package/dist/pod-handle-ECVCDIXW.js.map +0 -1
  732. package/dist/post-register-3IPCSG6Q.js.map +0 -1
  733. package/dist/register-HHLXEQDN.js +0 -31
  734. package/dist/registry-23WF3TGH.js +0 -8
  735. package/dist/registry-4AYVUNXK.js +0 -8
  736. package/dist/registry-JS3YFQQM.js +0 -18
  737. package/dist/registry-XX2Z7B46.js +0 -32
  738. package/dist/request-withdrawal-CHPATE4G.js +0 -30
  739. package/dist/reveal-QZDHSGD4.js.map +0 -1
  740. package/dist/revoke-7M2VW4ON.js +0 -23
  741. package/dist/seed-X5CC22CQ.js.map +0 -1
  742. package/dist/signer-SJQJVSM6.js +0 -24
  743. package/dist/stale-BZS6H2RY.js +0 -29
  744. package/dist/storage-RW4QBS23.js +0 -22
  745. package/dist/store-coordination-provider-4WZAIRHC.js.map +0 -1
  746. package/dist/verify-6MDTIUEV.js.map +0 -1
  747. package/dist/walk-ZURCH6RZ.js +0 -21
  748. package/dist/withdraw-accessible-PXR4IXDX.js +0 -27
  749. /package/dist/{api-WYW4YEQG.js.map → api-OS747DS4.js.map} +0 -0
  750. /package/dist/{computed-VPOKQK4N.js.map → capsule/contract.js.map} +0 -0
  751. /package/dist/{kernel/enclave → capsule/enclave-aes}/broker/proof.d.ts +0 -0
  752. /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/bidx.d.ts +0 -0
  753. /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/digest.d.ts +0 -0
  754. /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/vdig.d.ts +0 -0
  755. /package/dist/{kernel/enclave/classify → capsule/plumbing}/kofn.d.ts +0 -0
  756. /package/dist/{kernel/enclave/classify → capsule/plumbing}/normalize.d.ts +0 -0
  757. /package/dist/{kernel/enclave → capsule/plumbing}/record-aad.d.ts +0 -0
  758. /package/dist/{collection-facade-JSJYIKS4.js.map → capsule-VOLX3QRQ.js.map} +0 -0
  759. /package/dist/{chunk-MVMXZYXT.js.map → chunk-2GHDLTPE.js.map} +0 -0
  760. /package/dist/{chunk-XLMEZIAJ.js.map → chunk-2ODVB6LZ.js.map} +0 -0
  761. /package/dist/{chunk-RMS3NEA3.js.map → chunk-4JPMZTJY.js.map} +0 -0
  762. /package/dist/{chunk-NQKIUNW5.js.map → chunk-52MGURXO.js.map} +0 -0
  763. /package/dist/{chunk-UGTBXF5U.js.map → chunk-7XMHMVTS.js.map} +0 -0
  764. /package/dist/{chunk-BZ3534YM.js.map → chunk-AUKKUPVB.js.map} +0 -0
  765. /package/dist/{derive-E642AOUB.js.map → chunk-BKT776R5.js.map} +0 -0
  766. /package/dist/{chunk-6LKOJBV6.js.map → chunk-BVCUTXE3.js.map} +0 -0
  767. /package/dist/{chunk-VTFVLCUH.js.map → chunk-DIZLQVAA.js.map} +0 -0
  768. /package/dist/{chunk-LWBCUYZW.js.map → chunk-E2N2T5ZO.js.map} +0 -0
  769. /package/dist/{chunk-JVIBCBC7.js.map → chunk-EJLV62NI.js.map} +0 -0
  770. /package/dist/{chunk-JMGDHKQF.js.map → chunk-FLPCETP6.js.map} +0 -0
  771. /package/dist/{chunk-DGOZ4UZD.js.map → chunk-FVH5QYY2.js.map} +0 -0
  772. /package/dist/{chunk-JBDFMYKQ.js.map → chunk-GZT3NQRA.js.map} +0 -0
  773. /package/dist/{chunk-TFR7DSOV.js.map → chunk-H427H63K.js.map} +0 -0
  774. /package/dist/{chunk-SMH6SRX7.js.map → chunk-JOSPH3E5.js.map} +0 -0
  775. /package/dist/{chunk-3BZZJJMQ.js.map → chunk-MILI22XQ.js.map} +0 -0
  776. /package/dist/{chunk-YYP7WSEB.js.map → chunk-O2IMQSNA.js.map} +0 -0
  777. /package/dist/{chunk-QIZPZMUI.js.map → chunk-Q4UHJ5SN.js.map} +0 -0
  778. /package/dist/{chunk-FAHMLERK.js.map → chunk-QBLT6POL.js.map} +0 -0
  779. /package/dist/{chunk-BUE2D7PX.js.map → chunk-SMV2HRDU.js.map} +0 -0
  780. /package/dist/{chunk-SFAWCTEM.js.map → chunk-TZZBXPZK.js.map} +0 -0
  781. /package/dist/{chunk-UHHPLO3I.js.map → chunk-V3RWOOSO.js.map} +0 -0
  782. /package/dist/{chunk-Q2PU57HC.js.map → chunk-VVOLDVIR.js.map} +0 -0
  783. /package/dist/{chunk-TUFM4UZP.js.map → chunk-XQRFSKYM.js.map} +0 -0
  784. /package/dist/{chunk-GY4WYNNG.js.map → chunk-Y2RKVFKR.js.map} +0 -0
  785. /package/dist/{chunk-4OZNXTO4.js.map → chunk-YRXFFWG4.js.map} +0 -0
  786. /package/dist/{enclave-55PAM4YO.js.map → collection-facade-CS7CA2XO.js.map} +0 -0
  787. /package/dist/{executor-5NIMLSKZ.js.map → computed-FAD7SED4.js.map} +0 -0
  788. /package/dist/{executor-7UQ3BZ4F.js.map → derive-XLOJVXPU.js.map} +0 -0
  789. /package/dist/{dispatch-IEPAVQUM.js.map → dispatch-H4HV32AM.js.map} +0 -0
  790. /package/dist/{executor-AQVXV5GZ.js.map → executor-FMPVN6DT.js.map} +0 -0
  791. /package/dist/{export-accessible-ORMKLA3E.js.map → executor-LBBBRTN5.js.map} +0 -0
  792. /package/dist/{extract-partition-NKYO3WNG.js.map → executor-OSRZST2U.js.map} +0 -0
  793. /package/dist/{find-NOGJ25VX.js.map → export-accessible-RAOJAAU5.js.map} +0 -0
  794. /package/dist/{issue-3DTQ7VJJ.js.map → extract-partition-JD5CUSTG.js.map} +0 -0
  795. /package/dist/{ledger-EDXFFZQL.js.map → find-JRN4RNQ5.js.map} +0 -0
  796. /package/dist/{liberate-V35QUHJP.js.map → issue-YIVBZUTH.js.map} +0 -0
  797. /package/dist/{link-set-2TTM3IZC.js.map → ledger-5ZMGE44K.js.map} +0 -0
  798. /package/dist/{managed-secret-NCWEMPUQ.js.map → liberate-WZSZM2W6.js.map} +0 -0
  799. /package/dist/{noydb-62MX4QUG.js.map → link-set-MFXC24VK.js.map} +0 -0
  800. /package/dist/{register-HHLXEQDN.js.map → managed-secret-MFTFT22X.js.map} +0 -0
  801. /package/dist/{migrate-cek-5ENH64AA.js.map → migrate-cek-DZRFFOHW.js.map} +0 -0
  802. /package/dist/{registry-23WF3TGH.js.map → noydb-ITIGNKUF.js.map} +0 -0
  803. /package/dist/{registry-4AYVUNXK.js.map → query/all/index.js.map} +0 -0
  804. /package/dist/{registry-JS3YFQQM.js.map → register-DT5HZ2LZ.js.map} +0 -0
  805. /package/dist/{registry-XX2Z7B46.js.map → registry-BHRZGZHF.js.map} +0 -0
  806. /package/dist/{request-withdrawal-CHPATE4G.js.map → registry-ET6ZFFWA.js.map} +0 -0
  807. /package/dist/{revoke-7M2VW4ON.js.map → registry-HXFGLGTG.js.map} +0 -0
  808. /package/dist/{signer-SJQJVSM6.js.map → registry-THCPDEOD.js.map} +0 -0
  809. /package/dist/{stale-BZS6H2RY.js.map → request-withdrawal-AV2MJJKY.js.map} +0 -0
  810. /package/dist/{storage-RW4QBS23.js.map → revoke-6DWIEOCV.js.map} +0 -0
  811. /package/dist/{walk-ZURCH6RZ.js.map → signer-MHGW3OIL.js.map} +0 -0
  812. /package/dist/{withdraw-accessible-PXR4IXDX.js.map → stale-6GCFMOOR.js.map} +0 -0
@@ -0,0 +1,122 @@
1
+ /** AES key size in bits. Shared: every capsule that derives an AES-GCM subkey
2
+ * from the digest group produces a 256-bit key, or the derivations diverge. */
3
+ export declare const KEY_BITS = 256;
4
+ export declare const IV_BYTES = 12;
5
+ /** The echo-secret typed parts. Encoding lives here with `encodeEchoParts`; the
6
+ * KEK derivation that consumes it stays in the capsule's `authenticate` group. */
7
+ export interface EchoSecretParts {
8
+ readonly prompt: string;
9
+ readonly echo: string;
10
+ readonly key: string;
11
+ }
12
+ /**
13
+ * AG-1 encoding: domain context + 4-byte big-endian length prefix per
14
+ * part. Two independent guarantees make a single typed string unable to
15
+ * derive an echo vault's KEK (spec AG-1):
16
+ *
17
+ * 1. The `0xFF` context prefix — UTF-8 never produces that byte, so the
18
+ * encoding is provably not the encoding of ANY string (not merely of
19
+ * no separator-joined form).
20
+ * 2. Structural length prefixes — part boundaries are key material, so
21
+ * re-splitting the same characters changes the derived KEK.
22
+ *
23
+ * @throws ValidationError when any part is not a string — the single
24
+ * chokepoint every echo KEK derivation and block mint passes through, so a
25
+ * malformed parts object cannot be `TextEncoder`-coerced into key material.
26
+ */
27
+ export declare function encodeEchoParts(parts: EchoSecretParts): Uint8Array;
28
+ /**
29
+ * SHA-256 hex digest of raw bytes. Used to derive content-addressed
30
+ * eTags for blob deduplication. Computed on plaintext bytes
31
+ * before compression and encryption so the eTag identifies content, not
32
+ * ciphertext, and survives re-encryption (key rotation, re-upload).
33
+ */
34
+ export declare function sha256Hex(data: Uint8Array): Promise<string>;
35
+ /** SHA-256 of raw bytes, as bytes. */
36
+ export declare function sha256Bytes(data: Uint8Array): Promise<Uint8Array>;
37
+ /**
38
+ * Derive the blob CONTENT-ADDRESSING key for one tier (#1126).
39
+ *
40
+ * The blob eTag is an HMAC over the plaintext. It used to be keyed by the
41
+ * `_blob` DEK — the very key `rotateKeys` replaces — so after any rotation
42
+ * `HMAC(live DEK, plaintext) !== storedETag` for every blob written before it,
43
+ * permanently. `decryptResponse()` checks that unconditionally, so the
44
+ * presigned-URL read path raised `TamperedError` on legitimate data forever;
45
+ * dedup also split, minting a second address for identical bytes.
46
+ *
47
+ * The fix is a `root` that rotation never touches (`_blob_addr`, refused by
48
+ * `rotateKeys` exactly as `_roster` is). Rotation then re-keys chunk BODIES
49
+ * while every address stays stable, which is what makes the AAD
50
+ * `{eTag}:{i}:{count}` and every `_blob_index` / `_blob_slots_*` /
51
+ * `_blob_versions_*` row survive it untouched.
52
+ *
53
+ * **Derived PER TIER, deliberately.** A single vault-wide address would make an
54
+ * elevated blob and a tier-0 blob with identical content share an eTag,
55
+ * leaking equality across a boundary the tier system exists to enforce — and
56
+ * `rehomeForTier` re-addresses on a tier move precisely because the address is
57
+ * tier-scoped today. Domain separation keeps that property while removing the
58
+ * rotation coupling: the two are independent axes, and only one of them was
59
+ * ever meant to change the address.
60
+ *
61
+ * Same HKDF idiom as `asKwKey`, with its own salt so the addressing key can
62
+ * never coincide with a wrapping or encryption key.
63
+ */
64
+ export declare function deriveBlobAddressKey(root: CryptoKey, tier: number): Promise<CryptoKey>;
65
+ /**
66
+ * HMAC-SHA-256(key, data) as hex.
67
+ *
68
+ * Keyed, unlike {@link sha256Hex}: blob eTags derived with this are opaque to
69
+ * the store, so an attacker with store access cannot pre-compute the address of
70
+ * a file they guess at. Dedup still works inside a vault, where the key is shared.
71
+ */
72
+ export declare function hmacSha256Hex(key: CryptoKey, data: Uint8Array): Promise<string>;
73
+ /**
74
+ * Derive an AES-256-GCM presence key from a collection DEK using HKDF-SHA256.
75
+ *
76
+ * The presence key is domain-separated from the data DEK by the fixed salt
77
+ * `'noydb-presence'` and the `info` = collection name. This means:
78
+ * - The adapter never sees the presence key.
79
+ * - Presence payloads rotate automatically when the collection DEK is rotated.
80
+ * - Revoked users cannot derive the new presence key after a DEK rotation.
81
+ *
82
+ * @param dek The collection's AES-256-GCM DEK (extractable).
83
+ * @param collectionName Used as the HKDF `info` parameter for domain separation.
84
+ * @returns A non-extractable AES-256-GCM key suitable for presence payload encryption.
85
+ */
86
+ export declare function derivePresenceKey(dek: CryptoKey, collectionName: string): Promise<CryptoKey>;
87
+ /**
88
+ * Derive the presence-TAG key from a collection DEK: a non-extractable,
89
+ * sign-only HMAC-SHA256 key, HKDF-separated from the presence PAYLOAD key
90
+ * ({@link derivePresenceKey}) by its own salt. The tag is the adapter-opaque
91
+ * record id for storage-polled presence; the adapter never sees the userId.
92
+ */
93
+ export declare function derivePresenceTagKey(dek: CryptoKey, collectionName: string): Promise<CryptoKey>;
94
+ /**
95
+ * HMAC-SHA256 hex with a key that IS an HMAC key (e.g. from
96
+ * {@link derivePresenceTagKey}). {@link hmacSha256Hex} takes an AES-GCM
97
+ * carrier and re-imports its raw bytes, which needs an extractable key;
98
+ * this one signs directly and works with non-extractable keys.
99
+ */
100
+ export declare function hmacSignHex(key: CryptoKey, data: Uint8Array): Promise<string>;
101
+ /**
102
+ * HKDF-SHA256 → non-extractable AES-256-GCM key from caller-supplied input
103
+ * key material. The magic-link content key derives here from
104
+ * `(serverSecret, SHA-256(token), info)`; `salt`/`info` are the caller's
105
+ * domain separation, this function adds none.
106
+ */
107
+ export declare function hkdfAesGcmKey(ikm: Uint8Array, salt: Uint8Array, info: Uint8Array): Promise<CryptoKey>;
108
+ /** Generate a random 12-byte IV for AES-GCM. */
109
+ export declare function generateIV(): Uint8Array;
110
+ /** Generate a random 32-byte salt for PBKDF2. */
111
+ export declare function generateSalt(): Uint8Array;
112
+ /**
113
+ * Mint a fresh recovery secret — the high-entropy value a recovery profile
114
+ * wraps the DEK set under and then hands out (Shamir splits it into shares;
115
+ * paper prints it). Not a salt: a salt is public, this is not, and a fork
116
+ * may size them differently. The reference enclave returns 32 bytes.
117
+ *
118
+ * Callers must zero the buffer once it has been wrapped and split.
119
+ */
120
+ export declare function generateRecoverySecret(): Uint8Array;
121
+ export declare function bufferToBase64(buffer: ArrayBuffer | Uint8Array): string;
122
+ export declare function base64ToBuffer(base64: string): Uint8Array<ArrayBuffer>;
@@ -5,7 +5,7 @@
5
5
  * `_v`, `_ts`, `_by`, `_source`, `_sourceTs`, `_tier`, `_elevatedBy`) and a
6
6
  * protected body (enclave-owned; `_iv`, `_data`, `_cek`, `_det`, `_sealed`,
7
7
  * `_debug`). The four helpers below are the ONLY sanctioned way for code
8
- * outside `kernel/enclave/**` to read or construct the protected body —
8
+ * outside `capsule/enclave-aes/**` to read or construct the protected body —
9
9
  * later migration batches move the ~121 direct `_iv`/`_data`/`_cek`/`_sealed`
10
10
  * access sites in `with-*` services onto these.
11
11
  *
@@ -13,41 +13,40 @@
13
13
  * per-function doc for its oracle call site) — this file introduces no new
14
14
  * crypto or semantics, only a narrower door onto what already runs.
15
15
  */
16
- import { type RecordIdentity, type RecordRef } from '../record-aad.js';
17
- import { type EnclaveKey } from '../crypto.js';
18
- import type { EncryptedEnvelope } from '../../types.js';
16
+ import { type RecordIdentity, type RecordRef } from './record-aad.js';
17
+ import type { CapsuleKey, CapsulePrimitives } from '../contract.js';
18
+ import type { EncryptedEnvelope } from '../../kernel/types.js';
19
19
  /**
20
- * Open an envelope's protected body to its JSON text.
20
+ * The sealed body, or a typed refusal (#15).
21
21
  *
22
- * Mirrors the dominant direct-decrypt call-site shape (e.g.
23
- * `with-audit/consent/consent.ts`'s `decryptEntry`):
24
- * - `opts.encrypted === false` (default `true`) plaintext collection;
25
- * returns `env._data` as-is, `key` untouched.
26
- * - `env._cek` present per-record-key envelope (mirrors
27
- * `record-codec.ts`'s `resolveEnvelopeCek`): unwrap the CEK under `key`
28
- * (the collection DEK), decrypt the body under the unwrapped CEK.
29
- * - `env._cek` absent legacy path, decrypt the body directly under `key`.
22
+ * Since `_iv`/`_data` became optional, every AES path that is about to call
23
+ * `decrypt()` needs this one narrowing. It is deliberately the ONLY place in
24
+ * the enclave that turns absence into an error: the alternative — a `!` or a
25
+ * `?? ''` at each of the two dozen decrypt sites — would have spelled the
26
+ * same decision twenty-four times and produced an AEAD failure (i.e. hub's
27
+ * tamper alert) instead of an honest one.
28
+ *
29
+ * Ask {@link hasSealedBody} FIRST when absence is a legitimate outcome; this
30
+ * helper is for the paths where it is not.
30
31
  */
31
- export declare function openEnvelopeJson(ref: RecordRef, env: EncryptedEnvelope, key: EnclaveKey, opts?: {
32
- encrypted?: boolean;
33
- }): Promise<string>;
32
+ export declare function requireSealedBody(env: Pick<EncryptedEnvelope, '_iv' | '_data'>, where: string): {
33
+ iv: string;
34
+ data: string;
35
+ };
34
36
  /**
35
- * Produce the protected-body fields (`_iv`/`_data`/`_cek`) for an envelope a
36
- * caller is assembling.
37
+ * {@link requireSealedBody} shaped for the `decrypt(iv, data, …)` argument
38
+ * list, so a narrowing can be spliced into an existing call without
39
+ * restructuring the statement around it:
40
+ *
41
+ * ```ts
42
+ * await decrypt(...sealedBodyArgs(env, 'rekeyRecord'), dek, aad)
43
+ * ```
37
44
  *
38
- * - `opts.encrypted === false` (default `true`) plaintext collection;
39
- * emits `{ _iv: '', _data: json }` (today's `buildPlaintextEnvelope`
40
- * shape), `key` untouched.
41
- * - `opts.perRecordKey === true` → mints a fresh per-record CEK, encrypts
42
- * the body under it, and AES-KW-wraps the CEK under `key` (mirrors
43
- * `encryptJsonString`'s `cek !== undefined` branch, except the CEK is
44
- * generated here rather than supplied by the caller).
45
- * - otherwise → legacy path, body encrypted directly under `key`.
45
+ * The tuple return type is load-bearing it is what lets the spread satisfy
46
+ * two fixed positional parameters. Widening it to `string[]` would compile
47
+ * here and fail at every call site.
46
48
  */
47
- export declare function writeEnvelopeBody(identity: RecordIdentity, json: string, key: EnclaveKey, opts?: {
48
- encrypted?: boolean;
49
- perRecordKey?: boolean;
50
- }): Promise<Pick<EncryptedEnvelope, '_iv' | '_data' | '_cek'>>;
49
+ export declare function sealedBodyArgs(env: Pick<EncryptedEnvelope, '_iv' | '_data'>, where: string): [string, string];
51
50
  /**
52
51
  * Approximate protected-body payload size for KPI/telemetry (#807's
53
52
  * period-scoped pull download counters): `_data` + `_iv` string length —
@@ -79,7 +78,7 @@ export declare function hasPerRecordKey(env: EncryptedEnvelope): boolean;
79
78
  *
80
79
  * Deliberately reimplements the two-key-object canonicalization inline
81
80
  * rather than importing `with-commit/history/ledger/entry.ts`'s general
82
- * `canonicalJson` — `kernel/enclave/**` may import only spine types (C3),
81
+ * `canonicalJson` — `capsule/enclave-aes/**` may import only spine types (C3),
83
82
  * never a `with-*` service. For this fixed `{ _data: string; _sealed:
84
83
  * Record<string, string> }` shape the two produce byte-identical output
85
84
  * (verified against that exact call site's oracle expression in
@@ -99,21 +98,18 @@ export declare function envelopeBodyForHash(env: EncryptedEnvelope): string;
99
98
  */
100
99
  export declare function hasSealedBody(env: Pick<EncryptedEnvelope, '_iv'>): boolean;
101
100
  /**
102
- * Does `env` authenticate at the identity `ref` claims, under `key`? (#1042)
103
- *
104
- * The merge's fail-closed check, living here because it is envelope surgery:
105
- * deciding "is there a sealed body at all" reads `_iv`, which
106
- * `enclave-body-only` reserves to this folder. An earlier draft did that test
107
- * in `kernel/noydb.ts` and the guard refused it — correctly, since a caller
108
- * outside the enclave inspecting protected fields is how envelope knowledge
109
- * leaks back out.
110
- *
111
- * Returns a boolean rather than throwing: `applyRemote` must be able to reject
112
- * one poisoned record without halting an entire sync, and a hostile store
113
- * would very much like the opposite.
114
- *
115
- * **A record with no sealed body is vacuously authentic** — a tombstone carries
116
- * none, and a plaintext collection has no AEAD to verify. Those are pass-through
117
- * by construction, not by omission.
101
+ * The cipher-dependent half: the three doors that actually reach the capsule's
102
+ * `encrypt`/`decrypt`. Everything above this line is cipher-FREE — it inspects
103
+ * envelope fields or derives hash input, so it stays a plain module export that
104
+ * both capsules share with nothing to bind.
118
105
  */
119
- export declare function verifyRecordIdentity(ref: RecordRef, env: EncryptedEnvelope, key: EnclaveKey): Promise<boolean>;
106
+ export declare function makeEnvelopeBody(p: CapsulePrimitives): {
107
+ openEnvelopeJson: (ref: RecordRef, env: EncryptedEnvelope, key: CapsuleKey, opts?: {
108
+ encrypted?: boolean;
109
+ }) => Promise<string>;
110
+ writeEnvelopeBody: (identity: RecordIdentity, json: string, key: CapsuleKey, opts?: {
111
+ encrypted?: boolean;
112
+ perRecordKey?: boolean;
113
+ }) => Promise<Pick<EncryptedEnvelope, "_iv" | "_data" | "_cek">>;
114
+ verifyRecordIdentity: (ref: RecordRef, env: EncryptedEnvelope, key: CapsuleKey) => Promise<boolean>;
115
+ };
@@ -0,0 +1,100 @@
1
+ /**
2
+ * `makeCapsule()` — hub's envelope plumbing, bound to one capsule's cipher.
3
+ *
4
+ * ⭐ WHY THIS EXISTS. `enclave-aes` is ~4,200 lines, but only ~1,200 touch
5
+ * `crypto.subtle`. The other ~3,000 — envelope assembly, record-identity AAD,
6
+ * tombstones, the record codec, sealed slots, rekeying — encode HUB'S ENVELOPE
7
+ * FORMAT, not anyone's cipher, so they are identical for every capsule. This
8
+ * module is the single copy; a capsule supplies {@link CapsulePrimitives} and
9
+ * gets the whole surface back.
10
+ *
11
+ * The alternative was copying the plumbing into each capsule. Rejected because
12
+ * nothing would fail when the copies drifted: a change to the tombstone shape
13
+ * or the AAD would have to be made twice, and the miss surfaces as an envelope
14
+ * one capsule writes and the other cannot read — at runtime, in a consumer.
15
+ *
16
+ * ⚠️ BINDING IS PER-CALL, NOT PER-PROCESS, and that is load-bearing. An
17
+ * earlier sketch bound primitives once into module state (`setPrimitives(p)`),
18
+ * which is simpler and wrong: the conformance kit runs two capsules in the
19
+ * same process, so a single global would make the second one silently inherit
20
+ * the first one's cipher — and both suites would still pass.
21
+ *
22
+ * Cipher-FREE helpers are NOT in here. They are plain exports of their own
23
+ * modules (`buildRecordAad`, `isTombstone`, `hasSealedBody`, …) because they
24
+ * inspect envelope fields and need nothing bound. Re-exported below so the
25
+ * capsule surface stays one import for consumers.
26
+ */
27
+ import type { CapsulePrimitives } from '../contract.js';
28
+ export { buildRecordAad, recordAadFor, type RecordIdentity, type RecordRef, } from './record-aad.js';
29
+ export { buildRecordEnvelope } from './record-envelope.js';
30
+ export { isTombstone, isTombstoneShape, buildTombstone, isDeleteMarker, buildDeleteMarker, } from './tombstone.js';
31
+ export { normalizeForVerify } from './normalize.js';
32
+ export { parseSealedSlot } from './sealed-slot.js';
33
+ export { requireSealedBody, sealedBodyArgs, envelopeBodySize, hasPerRecordKey, envelopeBodyForHash, hasSealedBody, } from './envelope-body.js';
34
+ /**
35
+ * Bind the plumbing to a capsule's primitives.
36
+ *
37
+ * Composition order is a real dependency order, not a style choice:
38
+ * `sealedSlot` feeds both `sealedSlots` and `sealing`; `sealedSlots` feeds the
39
+ * codec. Everything else depends only on `p`.
40
+ */
41
+ export declare function makeCapsule(p: CapsulePrimitives): {
42
+ findByDet: <T>(ctx: import("./deterministic.js").DeterministicContext<T>, field: string, value: unknown) => Promise<T | null>;
43
+ queryByDet: <T>(ctx: import("./deterministic.js").DeterministicContext<T>, field: string, value: unknown) => Promise<T[]>;
44
+ SEALED_CEK_NS: string;
45
+ sealRecordToHost: (ctx: import("./sealing.js").SealingContext, collection: string, id: string, hostSealer: import("../../index.js").RecipientSealer, opts: {
46
+ expiresAt: string;
47
+ }) => Promise<{
48
+ pid: string;
49
+ envelopeKey: string;
50
+ }>;
51
+ revokeSealedRecord: (ctx: import("./sealing.js").SealingContext, collection: string, id: string, pid: string, opts?: {
52
+ hard?: boolean;
53
+ }) => Promise<void>;
54
+ rotateRecordCek: (ctx: import("./sealing.js").SealingContext, collection: string, id: string) => Promise<void>;
55
+ rekeyBlobSet: (adapter: import("../../index.js").NoydbStore, vault: string, oldDek: import("../contract.js").CapsuleKey, newDek: import("../contract.js").CapsuleKey, otherDeks?: readonly import("../contract.js").CapsuleKey[]) => Promise<import("./rekey-blob.js").BlobRekeyReport>;
56
+ rekeyEnvelopeToDek: (ref: {
57
+ readonly collection: string;
58
+ readonly id: string;
59
+ }, envelope: import("../../index.js").EncryptedEnvelope, oldDek: import("../contract.js").CapsuleKey, newDek: import("../contract.js").CapsuleKey) => Promise<import("../../index.js").EncryptedEnvelope>;
60
+ rekeyEnvelopeIfNeeded: (ref: {
61
+ readonly collection: string;
62
+ readonly id: string;
63
+ }, envelope: import("../../index.js").EncryptedEnvelope, oldDek: import("../contract.js").CapsuleKey, newDek: import("../contract.js").CapsuleKey) => Promise<import("../../index.js").EncryptedEnvelope | null>;
64
+ envelopeOpensUnderAny: (ref: {
65
+ readonly collection: string;
66
+ readonly id: string;
67
+ }, envelope: import("../../index.js").EncryptedEnvelope, keys: readonly import("../contract.js").CapsuleKey[]) => Promise<boolean>;
68
+ resolveStableCek: (deps: import("./lifecycle.js").StableCekDeps, id: string) => Promise<import("../contract.js").CapsuleKey>;
69
+ rewrapBodyToDek: (from: import("./record-aad.js").RecordIdentity, to: import("./record-aad.js").RecordIdentity, envelope: Pick<import("../../index.js").EncryptedEnvelope, "_iv" | "_data" | "_cek" | "_tier" | "_by">, fromDek: import("../contract.js").CapsuleKey, toDek: import("../contract.js").CapsuleKey) => Promise<import("./lifecycle.js").RewrappedBody>;
70
+ applyRewrappedBody: (envelope: import("../../index.js").EncryptedEnvelope, body: import("./lifecycle.js").RewrappedBody) => import("../../index.js").EncryptedEnvelope;
71
+ rewrapEnvelope: (identity: import("./record-aad.js").RecordIdentity, envelope: import("../../index.js").EncryptedEnvelope, fromDek: import("../contract.js").CapsuleKey, toDek: import("../contract.js").CapsuleKey) => Promise<import("../../index.js").EncryptedEnvelope>;
72
+ isRewrappedUnder: (identity: import("./record-aad.js").RecordIdentity, envelope: Pick<import("../../index.js").EncryptedEnvelope, "_iv" | "_data" | "_cek">, dek: import("../contract.js").CapsuleKey) => Promise<boolean>;
73
+ RecordCodec: import("./record-codec.js").BoundRecordCodec;
74
+ sealFields: (record: Record<string, unknown>, sensitiveFields: ReadonlySet<string>, keyMaterial: import("./sealed-slots.js").SealKeyMaterial) => Promise<import("./sealed-slots.js").SealFieldsResult>;
75
+ unsealOneField: (field: string, blob: string, keyMaterial: import("./sealed-slots.js").SealKeyMaterial) => Promise<unknown>;
76
+ makeHandleProducer: (keyMaterial: import("./sealed-slots.js").SealKeyMaterial) => (field: string, blob: string) => import("../../index.js").SealedHandle<unknown>;
77
+ unsealFields: (record: Record<string, unknown>, sealed: Record<string, string>, keyMaterial: import("./sealed-slots.js").SealKeyMaterial, opts?: {
78
+ asHandles?: boolean;
79
+ }) => Promise<Record<string, unknown>>;
80
+ makeSealedSlotCapability: (ctx: import("./sealed-slots.js").SealedSlotCapabilityCtx, recordId: string, cek?: import("../contract.js").CapsuleKey) => import("../../kernel/via/index.js").ViaCryptoCtx["sealedSlots"];
81
+ makeReservedEnvelopes: (dekResolver: import("./sealed-slots.js").ReservedEnvelopeDekResolver, declaredPrefixes: readonly string[]) => import("../../kernel/via/index.js").ViaCryptoCtx["reservedEnvelopes"];
82
+ dualReadSealedSlot: (blob: string, field: string, collection: string, cek: CryptoKey | undefined, dek: CryptoKey) => Promise<string>;
83
+ openEnvelopeJson: (ref: import("./record-aad.js").RecordRef, env: import("../../index.js").EncryptedEnvelope, key: import("../contract.js").CapsuleKey, opts?: {
84
+ encrypted?: boolean;
85
+ }) => Promise<string>;
86
+ writeEnvelopeBody: (identity: import("./record-aad.js").RecordIdentity, json: string, key: import("../contract.js").CapsuleKey, opts?: {
87
+ encrypted?: boolean;
88
+ perRecordKey?: boolean;
89
+ }) => Promise<Pick<import("../../index.js").EncryptedEnvelope, "_iv" | "_data" | "_cek">>;
90
+ verifyRecordIdentity: (ref: import("./record-aad.js").RecordRef, env: import("../../index.js").EncryptedEnvelope, key: import("../contract.js").CapsuleKey) => Promise<boolean>;
91
+ };
92
+ /**
93
+ * `RecordCodec` as a TYPE is the module-level generic base class; as a VALUE
94
+ * it is the capsule-bound subclass `makeCapsule()` returns. Hub parameterises
95
+ * the type in six places, and an `InstanceType<…>` alias would have dropped
96
+ * `T` at every one of them without an error — see the note in
97
+ * `record-codec.ts`.
98
+ */
99
+ export type { RecordCodecBase as RecordCodec } from './record-codec.js';
100
+ export type Capsule = ReturnType<typeof makeCapsule>;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Per-record CEK lifecycle helpers for the WRITE path.
3
+ *
4
+ * These are the collection-coupled CEK operations, lifted off `Collection`
5
+ * behind narrow deps so the kernel file delegates instead of carrying the
6
+ * crypto inline:
7
+ *
8
+ * - {@link resolveStableCek} — the stable-CEK rule: an update or history
9
+ * snapshot reuses the record's existing CEK so a single CEK delete kills
10
+ * the whole version chain; a genuine insert (or legacy record being
11
+ * migrated) mints a fresh one.
12
+ * - {@link rewrapBodyToDek} — move a record body's wrapping from one DEK to
13
+ * another (tier elevate/demote, bundle re-key) WITHOUT changing the body
14
+ * key: unwrap the CEK under the source DEK, re-encrypt the body under the
15
+ * same CEK, re-wrap the CEK under the destination DEK. History-chain
16
+ * identity is preserved because the body key never changes.
17
+ *
18
+ * Both are pure functions over their deps — the `cekCache` ownership stays on
19
+ * the collection (its lifetime is tied to `load()`), so callers cache the
20
+ * returned key themselves.
21
+ */
22
+ import type { EncryptedEnvelope } from '../../kernel/types.js';
23
+ import { type RecordIdentity } from './record-aad.js';
24
+ import type { Lru } from '../../kernel/cache/index.js';
25
+ /** Dependencies {@link resolveStableCek} needs from its collection. */
26
+ import type { CapsuleKey, CapsulePrimitives } from '../contract.js';
27
+ export interface StableCekDeps {
28
+ /** The collection's per-record CEK cache (`null` → no caching). */
29
+ readonly cache: Lru<string, CapsuleKey> | null;
30
+ /** Read the record's live envelope (to recover an existing `_cek`). */
31
+ getLive(id: string): Promise<EncryptedEnvelope | null>;
32
+ /** The DEK the CEK is wrapped under (the collection DEK on the normal path). */
33
+ getDEK(): Promise<CapsuleKey>;
34
+ }
35
+ /** Re-wrapped body bytes + the (optional) CEK to cache. */
36
+ export interface RewrappedBody {
37
+ readonly _iv: string;
38
+ readonly _data: string;
39
+ /** Present iff the source envelope carried a CEK (per-record-key record). */
40
+ readonly _cek?: string;
41
+ /** The body key when one exists, so the caller can cache it; `null` for a legacy record. */
42
+ readonly cek: CapsuleKey | null;
43
+ }
44
+ export declare function makeLifecycle(p: CapsulePrimitives): {
45
+ resolveStableCek: (deps: StableCekDeps, id: string) => Promise<CapsuleKey>;
46
+ rewrapBodyToDek: (from: RecordIdentity, to: RecordIdentity, envelope: Pick<EncryptedEnvelope, "_iv" | "_data" | "_cek" | "_tier" | "_by">, fromDek: CapsuleKey, toDek: CapsuleKey) => Promise<RewrappedBody>;
47
+ applyRewrappedBody: (envelope: EncryptedEnvelope, body: RewrappedBody) => EncryptedEnvelope;
48
+ rewrapEnvelope: (identity: RecordIdentity, envelope: EncryptedEnvelope, fromDek: CapsuleKey, toDek: CapsuleKey) => Promise<EncryptedEnvelope>;
49
+ isRewrappedUnder: (identity: RecordIdentity, envelope: Pick<EncryptedEnvelope, "_iv" | "_data" | "_cek">, dek: CapsuleKey) => Promise<boolean>;
50
+ };
@@ -16,24 +16,33 @@
16
16
  *
17
17
  * Internal service — not exported as a `@noy-db/hub/*` subpath.
18
18
  */
19
- import { type EnclaveKey } from '../crypto.js';
20
- import { type EncryptedEnvelope, type CrdtMode, type CrdtStrategy, type VdigFieldPolicy, type SealedHandle } from '../../types.js';
21
- import { type RecordIdentity, type RecordRef } from '../record-aad.js';
22
- import { type StandardSchemaV1 } from '../../schema.js';
23
- import type { Lru } from '../../cache/index.js';
24
- import type { ViaCryptoCtx } from '../../via/index.js';
25
- import type { ViaPipeline } from '../../via/pipeline.js';
19
+ import { type EncryptedEnvelope, type CrdtMode, type CrdtStrategy, type VdigFieldPolicy, type SealedHandle } from '../../kernel/types.js';
20
+ import { type RecordIdentity, type RecordRef } from './record-aad.js';
21
+ import { type StandardSchemaV1 } from '../../kernel/schema.js';
22
+ import type { Lru } from '../../kernel/cache/index.js';
23
+ import type { ViaCryptoCtx } from '../../kernel/via/index.js';
24
+ import type { ViaPipeline } from '../../kernel/via/pipeline.js';
26
25
  /**
27
- * One classified per-slot verdict from {@link RecordCodec.classifySealedShred}.
26
+ * One classified per-slot verdict from {@link RecordCodecBase.classifySealedShred}.
28
27
  * `shreddable` — CEK-only, tombstone makes it undecryptable. `dekResidue` —
29
28
  * collection-DEK-keyed, survives in synced/backup copies. The third class is
30
29
  * BOTH: a `_bidx` blind-index tag is live-dropped by the tombstone yet retained
31
30
  * under the surviving DEK in any pre-forget backup (honest dual accounting).
32
31
  */
32
+ import type { CapsuleKey, CapsulePrimitives } from '../contract.js';
33
+ import type { makeSealedSlots } from './sealed-slots.js';
33
34
  export type SealedShredSlot = {
34
35
  readonly field: string;
35
36
  readonly class: 'shreddable' | 'dekResidue' | 'live-shreddable+dekResidue-in-backups';
36
37
  };
38
+ /**
39
+ * The record codec, bound to a capsule.
40
+ *
41
+ * ⚠️ `RecordCodec` is a CLASS declared inside this factory, so the NAME is no
42
+ * longer a module-level type. Hub names it in ~40 places as a type, which is
43
+ * why `plumbing/index.ts` re-exports an `InstanceType<…>` alias under the same
44
+ * name — the type keeps working unchanged for every existing consumer.
45
+ */
37
46
  /** Everything the moving crypto methods touched on `this.*`, as a flat context. */
38
47
  export interface RecordCodecContext<T> {
39
48
  /** Collection name — the crypto AAD scope and schema-error context. */
@@ -75,13 +84,13 @@ export interface RecordCodecContext<T> {
75
84
  * `_dict_status` collection) so a binding's at-rest hook can address a
76
85
  * different collection's DEK without ever holding the resolver itself.
77
86
  */
78
- getDEK(collection?: string): Promise<EnclaveKey>;
87
+ getDEK(collection?: string): Promise<CapsuleKey>;
79
88
  /**
80
89
  * The collection's per-record CEK cache (SHARED reference, not a copy).
81
90
  * Ownership/lifetime stays on Collection; codec reads+writes it in
82
91
  * resolveEnvelopeCek exactly as the inline code did. `null` → no caching.
83
92
  */
84
- readonly cekCache: Lru<string, EnclaveKey> | null;
93
+ readonly cekCache: Lru<string, CapsuleKey> | null;
85
94
  /**
86
95
  * Compiled Via pipeline (money, i18n, …), or undefined for a collection
87
96
  * with none declared. `encryptRecord`/`decryptRecord` consult
@@ -92,15 +101,45 @@ export interface RecordCodecContext<T> {
92
101
  *
93
102
  * Mutable (not `readonly`, #638 Task 3): `Collection.via` can be
94
103
  * reassigned post-construction (the taint overlay, `via/graph-wiring.ts#
95
- * applyTaintOverlay`) — `RecordCodec.setVia` below keeps this in sync so
104
+ * applyTaintOverlay`) — `RecordCodecBase.setVia` below keeps this in sync so
96
105
  * at-rest hooks read the LIVE pipeline, not a stale construction-time
97
106
  * snapshot.
98
107
  */
99
108
  via: ViaPipeline | undefined;
109
+ /**
110
+ * Read-coverage observer (#1363), resolved once per Collection from
111
+ * `strategies.coverage.observer(...)`. `undefined` for every un-opted-in
112
+ * deployment AND for every collection the sensor does not account for, so
113
+ * the decrypt path costs one `!== undefined` test.
114
+ *
115
+ * ⛔⛔ TELEMETRY, NOT A CONTROL: an insider holding the device and local keys
116
+ * holds the DEK, so this observes an extraction it cannot prevent. It exists
117
+ * to make one visible early, attributable and loud. It may never grow a
118
+ * return value — a decrypt is not gated on it, and nothing here may refuse.
119
+ */
120
+ readonly onDecrypt?: ((id: string) => void) | undefined;
100
121
  }
101
- export declare class RecordCodec<T> {
122
+ /**
123
+ * The codec's capsule-provided surface: the 15 primitives + sealed-slot helpers
124
+ * its methods call.
125
+ */
126
+ export type CapsuleBinding = CapsulePrimitives & ReturnType<typeof makeSealedSlots>;
127
+ /**
128
+ * ⚠️ MODULE-LEVEL AND GENERIC ON PURPOSE. The obvious shape — declaring the
129
+ * class inside `makeRecordCodec` and exporting `InstanceType<…>` — compiles and
130
+ * silently DROPS `T`: `RecordCodec<Invoice>` degrades to `RecordCodec<unknown>`
131
+ * at the six places hub parameterises it, turning typed records into `unknown`
132
+ * with no error anywhere.
133
+ *
134
+ * The other way to keep `T` would be a hand-written `interface RecordCodec<T>`
135
+ * that the class implements — i.e. a second declaration of 15 signatures that
136
+ * nothing checks against the first. That is exactly the drift #16 was, so it
137
+ * was not done twice. A base class has one declaration and cannot drift.
138
+ */
139
+ export declare class RecordCodecBase<T> {
140
+ protected readonly caps: CapsuleBinding;
102
141
  private readonly ctx;
103
- constructor(ctx: RecordCodecContext<T>);
142
+ constructor(caps: CapsuleBinding, ctx: RecordCodecContext<T>);
104
143
  /**
105
144
  * @internal Update the live Via pipeline this codec's at-rest hooks read
106
145
  * (#638 Task 3) — called by `via/graph-wiring.ts#applyTaintOverlay` right
@@ -183,7 +222,7 @@ export declare class RecordCodec<T> {
183
222
  * the choice must be made before AAD is switched on, not inferred from this
184
223
  * migration.
185
224
  */
186
- encryptJsonString(ref: RecordRef, json: string, version: number, cek?: EnclaveKey, source?: string, sourceTs?: string): Promise<EncryptedEnvelope>;
225
+ encryptJsonString(ref: RecordRef, json: string, version: number, cek?: CapsuleKey, source?: string, sourceTs?: string): Promise<EncryptedEnvelope>;
187
226
  /**
188
227
  * `ref` is FIRST and required (#1051). It was previously a trailing optional
189
228
  * `id?: string`, which TypeScript cannot promote to required because it sits
@@ -195,7 +234,7 @@ export declare class RecordCodec<T> {
195
234
  * compile on the hottest write path. Carries the collection too — see
196
235
  * {@link encryptJsonString} for why the codec must not assume its own.
197
236
  */
198
- encryptRecord(ref: RecordRef, record: T, version: number, cek?: EnclaveKey, source?: string, sourceTs?: string, vdig?: {
237
+ encryptRecord(ref: RecordRef, record: T, version: number, cek?: CapsuleKey, source?: string, sourceTs?: string, vdig?: {
199
238
  readonly id: string;
200
239
  readonly prev: EncryptedEnvelope | null;
201
240
  }): Promise<EncryptedEnvelope>;
@@ -207,7 +246,7 @@ export declare class RecordCodec<T> {
207
246
  * ({@link decryptJsonString}) and the sealed-field path ({@link decryptRecord}
208
247
  * / {@link toCacheRecord}) so both agree on the record's key.
209
248
  */
210
- resolveEnvelopeCek(envelope: EncryptedEnvelope, id?: string): Promise<EnclaveKey | undefined>;
249
+ resolveEnvelopeCek(envelope: EncryptedEnvelope, id?: string): Promise<CapsuleKey | undefined>;
211
250
  /**
212
251
  * Low-level: decrypt an envelope and return the raw JSON string.
213
252
  *
@@ -230,6 +269,19 @@ export declare class RecordCodec<T> {
230
269
  * perfectly good record (#1041).
231
270
  */
232
271
  decryptJsonString(ref: RecordRef, envelope: EncryptedEnvelope): Promise<string | null>;
272
+ /**
273
+ * Fire the read-coverage observer for a successful record decrypt (#1363).
274
+ *
275
+ * ⚠️ ONLY for this codec's OWN collection. `ref.collection` can be a storage
276
+ * identity that is not the live collection — a history/version address, the
277
+ * `_vec` vector sidecar, the `_ft` lexical index (#1041) — and their ids are
278
+ * not this corpus's ids, so counting them would corrupt the very estimate
279
+ * the sensor exists to produce. The cost is a deliberate UNDER-count: a
280
+ * principal reading the corpus through its history sidecar is not accounted.
281
+ * A sensor that under-counts is honest; one that inflates cries wolf and
282
+ * gets turned off. Recorded rather than papered over.
283
+ */
284
+ private observeDecrypt;
233
285
  /**
234
286
  * Unseal a single `_sealed[field]` slot to its plaintext value: derive the
235
287
  * per-field key off the collection DEK, AES-GCM-decrypt the `iv:data` blob,
@@ -237,7 +289,7 @@ export declare class RecordCodec<T> {
237
289
  * {@link Sealed} handle's `reveal()` — so the on-demand reveal and the eager
238
290
  * materialisation always agree byte-for-byte.
239
291
  */
240
- unsealField(field: string, blob: string, cek?: EnclaveKey): Promise<unknown>;
292
+ unsealField(field: string, blob: string, cek?: CapsuleKey): Promise<unknown>;
241
293
  /**
242
294
  * Build the `ViaCryptoCtx` for forget()'s per-ref via-erase fold (#629
243
295
  * Task 10) — resolves the live envelope's CEK exactly like
@@ -266,7 +318,7 @@ export declare class RecordCodec<T> {
266
318
  * may sit in the working-set cache (or be logged/serialised) without
267
319
  * exposing the value, which decrypts only on `reveal()`.
268
320
  */
269
- makeSealedHandle(field: string, blob: string, cek?: EnclaveKey): SealedHandle<unknown>;
321
+ makeSealedHandle(field: string, blob: string, cek?: CapsuleKey): SealedHandle<unknown>;
270
322
  /**
271
323
  * Replace every field the just-written envelope actually sealed with a
272
324
  * {@link Sealed} handle, leaving every other field as its plaintext value.
@@ -308,7 +360,7 @@ export declare class RecordCodec<T> {
308
360
  * never a tier DEK (tier writes don't seal fields; `_sealed` reaches a
309
361
  * tiered envelope only via a tier-0 write later elevated).
310
362
  */
311
- applySealedSlots(record: T, sealed: Record<string, string>, cek: EnclaveKey | undefined, opts?: {
363
+ applySealedSlots(record: T, sealed: Record<string, string>, cek: CapsuleKey | undefined, opts?: {
312
364
  id?: string;
313
365
  sealedAsHandles?: boolean;
314
366
  }): Promise<T>;
@@ -338,7 +390,7 @@ export declare class RecordCodec<T> {
338
390
  * output-recompute path, not the public per-record read surface schema
339
391
  * validation guards.
340
392
  */
341
- decryptRecordAtDek(ref: RecordRef, envelope: EncryptedEnvelope, dek: EnclaveKey): Promise<T | null>;
393
+ decryptRecordAtDek(ref: RecordRef, envelope: EncryptedEnvelope, dek: CapsuleKey): Promise<T | null>;
342
394
  /**
343
395
  * Decrypt an envelope into a record of type `T`.
344
396
  *
@@ -359,3 +411,11 @@ export declare class RecordCodec<T> {
359
411
  sealedAsHandles?: boolean;
360
412
  }): Promise<T | null>;
361
413
  }
414
+ /**
415
+ * The capsule-bound codec constructor: same shape callers have always used
416
+ * (`new RecordCodec(ctx)`), with the capsule already closed over.
417
+ */
418
+ export type BoundRecordCodec = (new <T>(ctx: RecordCodecContext<T>) => RecordCodecBase<T>) & Omit<typeof RecordCodecBase, never>;
419
+ export declare function makeRecordCodec(p: CapsulePrimitives, slots: ReturnType<typeof makeSealedSlots>): {
420
+ RecordCodec: BoundRecordCodec;
421
+ };
@@ -1,4 +1,4 @@
1
- import type { EncryptedEnvelope } from '../types.js';
1
+ import type { EncryptedEnvelope } from '../../kernel/types.js';
2
2
  import type { RecordIdentity } from './record-aad.js';
3
3
  /** The body an envelope carries, independent of who is writing it. */
4
4
  export interface RecordEnvelopeBody {
@@ -0,0 +1,33 @@
1
+ import type { NoydbStore } from '../../kernel/types.js';
2
+ /** Blob metadata envelopes, keyed by eTag. owner: with-shape/blobs/blob-set.ts */
3
+ import type { CapsuleKey, CapsulePrimitives } from '../contract.js';
4
+ /**
5
+ * What a rotation did to the blob set.
6
+ *
7
+ * Deliberately NOT on the enclave barrel: no caller outside this module binds
8
+ * it, and that surface is the fork-swap trust boundary, so exporting a type
9
+ * nobody consumes is pure widening.
10
+ *
11
+ * It is a return value rather than a log line because `foreign` and `blobs`
12
+ * are the only way to tell "left alone, correctly" from "left alone, because
13
+ * the caller passed a wrong `otherDeks` set". Both re-key nothing and both
14
+ * return successfully. `rotate-preserves-blobs.test.ts` asserts these counts
15
+ * against a direct call for exactly that reason.
16
+ */
17
+ export interface BlobRekeyReport {
18
+ /** Index envelopes moved onto the new DEK. */
19
+ readonly blobs: number;
20
+ /** Chunk envelopes re-encrypted under the new DEK. */
21
+ readonly chunks: number;
22
+ /**
23
+ * Index envelopes left alone because they open under a DEK the caller holds
24
+ * for a DIFFERENT slot — an elevated blob, sealed under `_blob#<tier>`. Those
25
+ * are that slot's rotation to do, not this one's.
26
+ */
27
+ readonly foreign: number;
28
+ /** Index envelopes already under the new DEK — a resumed rotation. */
29
+ readonly alreadyMoved: number;
30
+ }
31
+ export declare function makeRekeyBlob(p: CapsulePrimitives): {
32
+ rekeyBlobSet: (adapter: NoydbStore, vault: string, oldDek: CapsuleKey, newDek: CapsuleKey, otherDeks?: readonly CapsuleKey[]) => Promise<BlobRekeyReport>;
33
+ };