@noy-db/hub 0.6.0-pre.9 → 0.7.0-pre.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 (572) hide show
  1. package/CHANGELOG.md +7127 -0
  2. package/README.md +1 -1
  3. package/codemods/0.4.0-pre.json +24 -0
  4. package/codemods/0.6.0-pre.json +229 -0
  5. package/codemods/0.7.0-pre.json +258 -0
  6. package/dist/api-EQYRTZO2.js +20 -0
  7. package/dist/as/index.js +146 -0
  8. package/dist/as/index.js.map +1 -0
  9. package/dist/at/index.js +23 -0
  10. package/dist/attestation/index.js +19 -19
  11. package/dist/{backup-KULFZ2T4.js → backup-Z7ZBTAQ6.js} +36 -18
  12. package/dist/backup-Z7ZBTAQ6.js.map +1 -0
  13. package/dist/blobs/index.js +22 -20
  14. package/dist/blobs/index.js.map +1 -1
  15. package/dist/broker/index.js +12 -12
  16. package/dist/by/index.js +11 -0
  17. package/dist/cargo/index.js +40 -36
  18. package/dist/{chunk-YAWK6AWF.js → chunk-225O5CXQ.js} +2 -2
  19. package/dist/{chunk-MSWYQLMQ.js → chunk-2GXEQUEX.js} +2 -2
  20. package/dist/chunk-2GXEQUEX.js.map +1 -0
  21. package/dist/{chunk-3URQC7EH.js → chunk-2LPVI4PX.js} +355 -132
  22. package/dist/chunk-2LPVI4PX.js.map +1 -0
  23. package/dist/{chunk-JJNOLSG5.js → chunk-3L2MVE36.js} +15 -16
  24. package/dist/chunk-3L2MVE36.js.map +1 -0
  25. package/dist/{chunk-OF3L2SD6.js → chunk-3QARDAYW.js} +2 -2
  26. package/dist/{chunk-WLZ47GSL.js → chunk-467SKJ65.js} +12 -10
  27. package/dist/{chunk-WLZ47GSL.js.map → chunk-467SKJ65.js.map} +1 -1
  28. package/dist/{chunk-W3TVWF6N.js → chunk-4A4TYISP.js} +2 -2
  29. package/dist/{chunk-ZJADGNYF.js → chunk-4AOERLTV.js} +1 -1
  30. package/dist/chunk-4AOERLTV.js.map +1 -0
  31. package/dist/{chunk-CCZJJ4I2.js → chunk-4G25SDQL.js} +6 -6
  32. package/dist/{chunk-4I72F5DF.js → chunk-4LPF226H.js} +11 -14
  33. package/dist/chunk-4LPF226H.js.map +1 -0
  34. package/dist/{chunk-7F4DBNSP.js → chunk-4ZPE6SKS.js} +135 -18
  35. package/dist/chunk-4ZPE6SKS.js.map +1 -0
  36. package/dist/{chunk-7TSYBD3E.js → chunk-5263OEM3.js} +2 -2
  37. package/dist/{chunk-WFUIE565.js → chunk-57JTHWLQ.js} +17 -14
  38. package/dist/chunk-57JTHWLQ.js.map +1 -0
  39. package/dist/{chunk-FNSMZQS4.js → chunk-5ACAVJUI.js} +2 -2
  40. package/dist/{chunk-PDLLCOGD.js → chunk-5AFMP532.js} +20 -17
  41. package/dist/chunk-5AFMP532.js.map +1 -0
  42. package/dist/{chunk-JRKZTEZZ.js → chunk-5W7YXFV5.js} +444 -73
  43. package/dist/chunk-5W7YXFV5.js.map +1 -0
  44. package/dist/chunk-6EW2UCVF.js +190 -0
  45. package/dist/chunk-6EW2UCVF.js.map +1 -0
  46. package/dist/{chunk-4VUPLMZ6.js → chunk-6FOGTKBY.js} +68 -73
  47. package/dist/chunk-6FOGTKBY.js.map +1 -0
  48. package/dist/{chunk-VMCCGUQB.js → chunk-7LYUJNU3.js} +2 -2
  49. package/dist/{chunk-52JPHN5N.js → chunk-A2YW5EMU.js} +27 -149
  50. package/dist/chunk-A2YW5EMU.js.map +1 -0
  51. package/dist/{chunk-WLYIROCJ.js → chunk-AB5P32RE.js} +2 -2
  52. package/dist/{chunk-PL2GHSCM.js → chunk-ALB64CZM.js} +157 -90
  53. package/dist/chunk-ALB64CZM.js.map +1 -0
  54. package/dist/{chunk-SUFG5E73.js → chunk-ALUNQEBY.js} +2 -2
  55. package/dist/{chunk-CADUYBQD.js → chunk-ATL3ZVXT.js} +2 -2
  56. package/dist/{chunk-BWVKEOPE.js → chunk-ATV637J7.js} +7 -11
  57. package/dist/chunk-ATV637J7.js.map +1 -0
  58. package/dist/{chunk-DG27IUVI.js → chunk-CBRS2NEK.js} +2 -11
  59. package/dist/chunk-CBRS2NEK.js.map +1 -0
  60. package/dist/{chunk-7MNBICB5.js → chunk-CN6B5PEN.js} +16 -14
  61. package/dist/chunk-CN6B5PEN.js.map +1 -0
  62. package/dist/{chunk-6FJWSWFT.js → chunk-DBNYPLWY.js} +3 -3
  63. package/dist/{chunk-5JY5TSVY.js → chunk-DFAUMLD7.js} +25 -31
  64. package/dist/chunk-DFAUMLD7.js.map +1 -0
  65. package/dist/{chunk-FFDNKRCY.js → chunk-DKWPJOYH.js} +2 -2
  66. package/dist/chunk-DKWPJOYH.js.map +1 -0
  67. package/dist/{chunk-VJFMXYKP.js → chunk-E6YA6UAP.js} +2 -2
  68. package/dist/{chunk-WASHZV34.js → chunk-F23WQK3G.js} +65 -27
  69. package/dist/chunk-F23WQK3G.js.map +1 -0
  70. package/dist/{chunk-JIUVJ4M7.js → chunk-F7ZFRPGQ.js} +3 -3
  71. package/dist/{chunk-HXGUIPQB.js → chunk-FOG7YEJP.js} +3 -3
  72. package/dist/{chunk-QULVCV3M.js → chunk-GK4DRVUD.js} +6 -6
  73. package/dist/chunk-GK4DRVUD.js.map +1 -0
  74. package/dist/{chunk-BRVW2GS5.js → chunk-H36KSN6X.js} +87 -34
  75. package/dist/chunk-H36KSN6X.js.map +1 -0
  76. package/dist/{chunk-O2ERS4UJ.js → chunk-H4M7ADXY.js} +81 -52
  77. package/dist/chunk-H4M7ADXY.js.map +1 -0
  78. package/dist/{chunk-FZ6NYJ7L.js → chunk-H7HP56F6.js} +11 -8
  79. package/dist/chunk-H7HP56F6.js.map +1 -0
  80. package/dist/chunk-HK67PX4J.js +27 -0
  81. package/dist/chunk-HK67PX4J.js.map +1 -0
  82. package/dist/{chunk-X56RTUK3.js → chunk-HM4JSXX2.js} +3 -3
  83. package/dist/{chunk-AHLJSVRL.js → chunk-HTGRQZFB.js} +5 -7
  84. package/dist/chunk-HTGRQZFB.js.map +1 -0
  85. package/dist/{chunk-GQ3BX5EA.js → chunk-I3ISCYT7.js} +2 -2
  86. package/dist/{chunk-Q6TEJXBX.js → chunk-IESNYJXZ.js} +31 -49
  87. package/dist/chunk-IESNYJXZ.js.map +1 -0
  88. package/dist/{chunk-FUHKW252.js → chunk-J4MN6XIU.js} +2 -2
  89. package/dist/{chunk-ADW22QSB.js → chunk-J4UJ5FRV.js} +4 -4
  90. package/dist/{chunk-HNGSV2YC.js → chunk-JBIV4FLR.js} +67 -10
  91. package/dist/chunk-JBIV4FLR.js.map +1 -0
  92. package/dist/{chunk-HVQGCKY4.js → chunk-JVLSU7S2.js} +2 -2
  93. package/dist/{chunk-AR2JDFAE.js → chunk-KDJGJR7F.js} +2 -2
  94. package/dist/{chunk-NPP5R7FF.js → chunk-KN4W2OQ4.js} +22 -18
  95. package/dist/chunk-KN4W2OQ4.js.map +1 -0
  96. package/dist/{chunk-G6S5VVHP.js → chunk-L6GTLZRK.js} +10 -10
  97. package/dist/chunk-L6GTLZRK.js.map +1 -0
  98. package/dist/{chunk-2BMRJ6LQ.js → chunk-LF6DMX4C.js} +8 -11
  99. package/dist/{chunk-2BMRJ6LQ.js.map → chunk-LF6DMX4C.js.map} +1 -1
  100. package/dist/chunk-LFUID7OW.js +163 -0
  101. package/dist/chunk-LFUID7OW.js.map +1 -0
  102. package/dist/{chunk-747LRSOO.js → chunk-LKFKXS5K.js} +2 -2
  103. package/dist/{chunk-U5O6GIWZ.js → chunk-LR4Z47QD.js} +3 -3
  104. package/dist/{chunk-VZ3XFUQ7.js → chunk-MTBXJAS4.js} +16 -22
  105. package/dist/chunk-MTBXJAS4.js.map +1 -0
  106. package/dist/chunk-N4CNVSUF.js +66 -0
  107. package/dist/chunk-N4CNVSUF.js.map +1 -0
  108. package/dist/{chunk-RTAMLDWP.js → chunk-NLKLXXTO.js} +2 -2
  109. package/dist/{chunk-IGJCYUT5.js → chunk-NSITFOCJ.js} +1 -1
  110. package/dist/chunk-NSITFOCJ.js.map +1 -0
  111. package/dist/{chunk-FDX7OWWI.js → chunk-OPXR4PB2.js} +2 -2
  112. package/dist/{chunk-4GZ6XOVW.js → chunk-OWLVBOWO.js} +44 -42
  113. package/dist/chunk-OWLVBOWO.js.map +1 -0
  114. package/dist/{chunk-Z45YRGFO.js → chunk-P6ASQOZR.js} +2 -2
  115. package/dist/{chunk-5O5HRRTV.js → chunk-PCQDY6QN.js} +7 -7
  116. package/dist/{chunk-5O5HRRTV.js.map → chunk-PCQDY6QN.js.map} +1 -1
  117. package/dist/{chunk-BEFVYAR5.js → chunk-PGFKIOR3.js} +4 -4
  118. package/dist/chunk-PGFKIOR3.js.map +1 -0
  119. package/dist/{chunk-3FSX6LDG.js → chunk-POS53FG6.js} +18 -3
  120. package/dist/{chunk-3FSX6LDG.js.map → chunk-POS53FG6.js.map} +1 -1
  121. package/dist/{chunk-3IXIU6FP.js → chunk-PQ6Z2TAP.js} +7 -10
  122. package/dist/chunk-PQ6Z2TAP.js.map +1 -0
  123. package/dist/{chunk-CEJWMBXO.js → chunk-PUJTKLPL.js} +6 -2
  124. package/dist/chunk-PUJTKLPL.js.map +1 -0
  125. package/dist/{chunk-GAG7QOVO.js → chunk-QGJ4XIA7.js} +53 -18
  126. package/dist/chunk-QGJ4XIA7.js.map +1 -0
  127. package/dist/{chunk-2DHSSLOD.js → chunk-QHJKK77B.js} +13 -15
  128. package/dist/chunk-QHJKK77B.js.map +1 -0
  129. package/dist/{chunk-2Z3NCLNX.js → chunk-QI5NWLVW.js} +7 -7
  130. package/dist/{chunk-6SAFL5YE.js → chunk-RC4BROYR.js} +3 -3
  131. package/dist/{chunk-NJDQ4YSV.js → chunk-RDHUZ674.js} +4 -4
  132. package/dist/{chunk-YPYHVOXP.js → chunk-RK7N4OQ5.js} +2 -2
  133. package/dist/chunk-RK7N4OQ5.js.map +1 -0
  134. package/dist/{chunk-3737A6EA.js → chunk-S2VG3ABP.js} +127 -31
  135. package/dist/chunk-S2VG3ABP.js.map +1 -0
  136. package/dist/{chunk-3JVXVJ7L.js → chunk-S35S77YU.js} +10 -10
  137. package/dist/{chunk-KUDZVJKQ.js → chunk-SHILAQH5.js} +2 -2
  138. package/dist/{chunk-4UVDI4XE.js → chunk-T3PHCEN4.js} +4 -4
  139. package/dist/{chunk-55LKVALY.js → chunk-T7IR4N2S.js} +1 -3
  140. package/dist/chunk-T7IR4N2S.js.map +1 -0
  141. package/dist/{chunk-RXYYFSBB.js → chunk-TOV6VMHF.js} +6 -6
  142. package/dist/chunk-TOV6VMHF.js.map +1 -0
  143. package/dist/{chunk-W77KZHCW.js → chunk-TVIFAHZR.js} +16 -17
  144. package/dist/chunk-TVIFAHZR.js.map +1 -0
  145. package/dist/chunk-UBSFPGVJ.js +1 -0
  146. package/dist/{chunk-FAXZQ5UF.js → chunk-UCUALOSM.js} +2 -2
  147. package/dist/{chunk-4HDYQL3J.js → chunk-VAG47QHV.js} +2 -2
  148. package/dist/{chunk-35EBKWQU.js → chunk-VFIWDPXZ.js} +4 -4
  149. package/dist/{chunk-5ZKS6ZE2.js → chunk-VTG7327U.js} +4 -4
  150. package/dist/chunk-VTG7327U.js.map +1 -0
  151. package/dist/{chunk-VCETL77O.js → chunk-W5LHQXZU.js} +36 -7
  152. package/dist/chunk-W5LHQXZU.js.map +1 -0
  153. package/dist/{chunk-6NVPFKN3.js → chunk-WK5FSW7T.js} +92 -35
  154. package/dist/chunk-WK5FSW7T.js.map +1 -0
  155. package/dist/{chunk-HNHCQ556.js → chunk-WLLUM35R.js} +2 -2
  156. package/dist/{chunk-YJ6IONGA.js → chunk-X62MEF2O.js} +13 -5
  157. package/dist/chunk-X62MEF2O.js.map +1 -0
  158. package/dist/{chunk-7G6VDWXB.js → chunk-X67FCULK.js} +5 -5
  159. package/dist/chunk-X67FCULK.js.map +1 -0
  160. package/dist/{chunk-UHXCLPGC.js → chunk-XDVVBETV.js} +2 -2
  161. package/dist/chunk-XDVVBETV.js.map +1 -0
  162. package/dist/chunk-XJ3FEKEY.js +15 -0
  163. package/dist/chunk-XJ3FEKEY.js.map +1 -0
  164. package/dist/{chunk-E6427JU2.js → chunk-XSN63FUS.js} +19 -3
  165. package/dist/chunk-XSN63FUS.js.map +1 -0
  166. package/dist/{chunk-JRCYZEHU.js → chunk-XVU7J43V.js} +2 -2
  167. package/dist/{chunk-2GAJGUNM.js → chunk-Y3YLJORD.js} +408 -260
  168. package/dist/chunk-Y3YLJORD.js.map +1 -0
  169. package/dist/{chunk-6BU3L4UE.js → chunk-Y6GZ2P4M.js} +7 -10
  170. package/dist/chunk-Y6GZ2P4M.js.map +1 -0
  171. package/dist/{chunk-DMQCLZ4Z.js → chunk-YCSM3GZU.js} +2 -2
  172. package/dist/{chunk-RV3ARMPN.js → chunk-YKPGQJFU.js} +30 -180
  173. package/dist/chunk-YKPGQJFU.js.map +1 -0
  174. package/dist/{chunk-FMQJZH4R.js → chunk-YMLQBZFJ.js} +6 -6
  175. package/dist/{chunk-6HFM7EIT.js → chunk-YPSOHDNC.js} +2 -2
  176. package/dist/{chunk-CDB2HVQW.js → chunk-YXA2TCTZ.js} +14 -15
  177. package/dist/chunk-YXA2TCTZ.js.map +1 -0
  178. package/dist/{chunk-N35NC4JH.js → chunk-Z2PWOSCJ.js} +2 -2
  179. package/dist/{chunk-XWX7GL56.js → chunk-Z2WK53N6.js} +47 -23
  180. package/dist/chunk-Z2WK53N6.js.map +1 -0
  181. package/dist/{chunk-HPLWFNG4.js → chunk-Z7ZXZL6Y.js} +2 -2
  182. package/dist/{chunk-PNKHAKQ7.js → chunk-ZO252Q5S.js} +17 -10
  183. package/dist/chunk-ZO252Q5S.js.map +1 -0
  184. package/dist/classified/index.js +5 -5
  185. package/dist/{classified-marker-2KJAXRRO.js → classified-marker-BSQHU4JT.js} +3 -3
  186. package/dist/collection-facade-LG3NYZVB.js +45 -0
  187. package/dist/{computed-6G5M3UPH.js → computed-ASBNTLOK.js} +3 -3
  188. package/dist/consent/index.js +10 -10
  189. package/dist/cover/index.js +10 -3
  190. package/dist/custody/index.js +12 -11
  191. package/dist/{dead-filter-DCB62VWW.js → dead-filter-QKU56XTQ.js} +2 -2
  192. package/dist/debug/index.js +1 -1
  193. package/dist/{delegation-MO7YZYJS.js → delegation-XWRPYODW.js} +24 -23
  194. package/dist/delegation-XWRPYODW.js.map +1 -0
  195. package/dist/derivations/index.js +12 -12
  196. package/dist/derive-CXHCY46K.js +22 -0
  197. package/dist/directory/index.js +10 -10
  198. package/dist/{dispatch-MJ6SHB3Y.js → dispatch-4AP4PUZU.js} +18 -18
  199. package/dist/{dispatch-FZEAWKVM.js → dispatch-VR4LRXZ7.js} +9 -6
  200. package/dist/dispatch-VR4LRXZ7.js.map +1 -0
  201. package/dist/{enclave-JU4YIEPB.js → enclave-NYPT7WA7.js} +31 -9
  202. package/dist/executor-3KFRQETS.js +29 -0
  203. package/dist/executor-AFHQYRAU.js +9 -0
  204. package/dist/executor-YYDW6XQI.js +9 -0
  205. package/dist/export-accessible-BX2ILB4C.js +23 -0
  206. package/dist/extract-partition-UPOVITFI.js +38 -0
  207. package/dist/{fanout-sidecar-NNAJQXMX.js → fanout-sidecar-IWP3R4RC.js} +18 -27
  208. package/dist/fanout-sidecar-IWP3R4RC.js.map +1 -0
  209. package/dist/{fence-watcher-DHQ775JB.js → fence-watcher-ZVSMLKQD.js} +1 -1
  210. package/dist/fence-watcher-ZVSMLKQD.js.map +1 -0
  211. package/dist/find-SZBL2HPB.js +11 -0
  212. package/dist/forget/index.js +9 -9
  213. package/dist/guards/index.js +4 -4
  214. package/dist/history/index.js +23 -20
  215. package/dist/history/index.js.map +1 -1
  216. package/dist/i18n/index.js +14 -14
  217. package/dist/index.d.ts +35 -18
  218. package/dist/index.js +199 -204
  219. package/dist/index.js.map +1 -1
  220. package/dist/indexing/index.js +4 -4
  221. package/dist/introspection/index.js +12 -11
  222. package/dist/issue-G53NB6EW.js +19 -0
  223. package/dist/kernel/collection-config.d.ts +9 -9
  224. package/dist/kernel/collection.d.ts +9 -3
  225. package/dist/kernel/constants.d.ts +36 -0
  226. package/dist/kernel/enclave/crypto.d.ts +52 -4
  227. package/dist/kernel/enclave/index.d.ts +10 -3
  228. package/dist/kernel/enclave/record-aad.d.ts +131 -0
  229. package/dist/kernel/enclave/record-envelope.d.ts +76 -0
  230. package/dist/kernel/enclave/record-keys/envelope-body.d.ts +34 -2
  231. package/dist/kernel/enclave/record-keys/lifecycle.d.ts +22 -5
  232. package/dist/kernel/enclave/record-keys/record-codec.d.ts +47 -14
  233. package/dist/kernel/enclave/record-keys/rekey-blob.d.ts +88 -0
  234. package/dist/kernel/enclave/record-keys/rekey.d.ts +91 -0
  235. package/dist/kernel/enclave/record-keys/tombstone.d.ts +3 -2
  236. package/dist/kernel/errors.d.ts +134 -14
  237. package/dist/kernel/merge-authority.d.ts +25 -0
  238. package/dist/kernel/noydb.d.ts +33 -10
  239. package/dist/kernel/query/builder.d.ts +51 -4
  240. package/dist/kernel/query/join.d.ts +27 -0
  241. package/dist/kernel/query/live.d.ts +31 -9
  242. package/dist/kernel/query/predicate.d.ts +9 -0
  243. package/dist/kernel/refs.d.ts +3 -1
  244. package/dist/kernel/secret-mode.d.ts +1 -1
  245. package/dist/kernel/sync-policy.d.ts +0 -2
  246. package/dist/kernel/tier-visibility.d.ts +34 -0
  247. package/dist/kernel/types.d.ts +145 -28
  248. package/dist/kernel/vault.d.ts +16 -7
  249. package/dist/kernel/via/compose.d.ts +3 -3
  250. package/dist/kernel/via/index.d.ts +15 -6
  251. package/dist/kernel/via/pipeline.d.ts +6 -6
  252. package/dist/kernel/via/reconcile.d.ts +14 -2
  253. package/dist/kernel/via/taint-binding.d.ts +3 -3
  254. package/dist/{ledger-AETNF4OM.js → ledger-T5K4P2D7.js} +11 -11
  255. package/dist/liberate-VEOZRESE.js +25 -0
  256. package/dist/{link-set-E5HNY67I.js → link-set-76JZ6YB4.js} +11 -11
  257. package/dist/{managed-secret-CWQ6PND5.js → managed-secret-6YC32VXG.js} +13 -5
  258. package/dist/materialized-views/index.js +27 -27
  259. package/dist/migrate-cek-LBRKYUZZ.js +19 -0
  260. package/dist/migrate-cek-LBRKYUZZ.js.map +1 -0
  261. package/dist/money/index.js +5 -5
  262. package/dist/noydb-EDJA4JNJ.js +86 -0
  263. package/dist/on/index.js +1 -0
  264. package/dist/overlay-views/index.js +4 -4
  265. package/dist/periods/index.js +12 -12
  266. package/dist/pod/index.js +79 -88
  267. package/dist/pod-handle-P6DPBM5U.js +41 -0
  268. package/dist/pod-handle-P6DPBM5U.js.map +1 -0
  269. package/dist/policy/index.js +11 -4
  270. package/dist/port/as/active.d.ts +10 -0
  271. package/dist/port/as/index.d.ts +32 -0
  272. package/dist/port/as/types.d.ts +113 -0
  273. package/dist/port/at/index.d.ts +37 -0
  274. package/dist/port/by/default-provider.d.ts +3 -3
  275. package/dist/port/by/index.d.ts +32 -10
  276. package/dist/port/by/types.d.ts +29 -11
  277. package/dist/port/on/index.d.ts +50 -0
  278. package/dist/port/to/index.d.ts +4 -4
  279. package/dist/port/to/locator.d.ts +54 -8
  280. package/dist/port/with/computed-strategy.d.ts +1 -1
  281. package/dist/port/with/device-seal-strategy.d.ts +2 -2
  282. package/dist/port/with/formats-strategy.d.ts +76 -0
  283. package/dist/port/with/i18n-strategy.d.ts +4 -1
  284. package/dist/port/with/lookup-strategy.d.ts +4 -1
  285. package/dist/port/with/merge-authority.d.ts +52 -0
  286. package/dist/port/with/service-bus.d.ts +0 -4
  287. package/dist/port/with/strategies.d.ts +13 -5
  288. package/dist/port/with/team-strategy.d.ts +5 -1
  289. package/dist/portability/index.js +8 -8
  290. package/dist/{post-register-2XSSMGEQ.js → post-register-53O7AJRZ.js} +6 -6
  291. package/dist/query/index.js +6 -6
  292. package/dist/reduce/index.js +6 -6
  293. package/dist/register-6TCBR6XD.js +32 -0
  294. package/dist/registry-DH2L4O2V.js +18 -0
  295. package/dist/registry-IWFMXCHX.js +9 -0
  296. package/dist/registry-Q3FG3OAX.js +9 -0
  297. package/dist/registry-YC3IFG3A.js +19 -0
  298. package/dist/request-withdrawal-NM5VYR6F.js +31 -0
  299. package/dist/{reveal-BW36KCOQ.js → reveal-XBIMHAXR.js} +6 -6
  300. package/dist/revoke-MJNYWO72.js +24 -0
  301. package/dist/satellites/index.js +1 -1
  302. package/dist/schema-update/index.js +2 -2
  303. package/dist/sealed-record/index.js +20 -13
  304. package/dist/sealed-record/index.js.map +1 -1
  305. package/dist/search/index.js +4 -4
  306. package/dist/{seed-GDV5PT4R.js → seed-NSNIGYXE.js} +20 -22
  307. package/dist/seed-NSNIGYXE.js.map +1 -0
  308. package/dist/sequence/index.js +9 -9
  309. package/dist/session/index.js +10 -10
  310. package/dist/shadow/index.js +2 -2
  311. package/dist/share-link/index.js +1 -1
  312. package/dist/signer-6XVS2AU3.js +25 -0
  313. package/dist/snapshots/index.js +10 -10
  314. package/dist/snapshots/index.js.map +1 -1
  315. package/dist/{stale-ARHFVL5U.js → stale-MCS46TFO.js} +10 -10
  316. package/dist/storage-ZXUT476I.js +23 -0
  317. package/dist/storage-ZXUT476I.js.map +1 -0
  318. package/dist/{store-coordination-provider-GFCUOBR6.js → store-coordination-provider-6FM26VQM.js} +22 -15
  319. package/dist/store-coordination-provider-6FM26VQM.js.map +1 -0
  320. package/dist/sync/index.js +11 -11
  321. package/dist/team/index.js +17 -16
  322. package/dist/tiers/index.js +11 -10
  323. package/dist/to/index.js +17 -9
  324. package/dist/to/index.js.map +1 -1
  325. package/dist/transactions/index.js +4 -4
  326. package/dist/{ulid-PTAIMDG4.js → ulid-VQW6ERQN.js} +2 -2
  327. package/dist/ulid-VQW6ERQN.js.map +1 -0
  328. package/dist/util/index.js +1 -1
  329. package/dist/vault-diff-FE5J35NJ.js +9 -0
  330. package/dist/vault-diff-FE5J35NJ.js.map +1 -0
  331. package/dist/vault-head/index.js +115 -0
  332. package/dist/vault-head/index.js.map +1 -0
  333. package/dist/{verify-RO5RTZOJ.js → verify-WYOFLSNA.js} +5 -5
  334. package/dist/via/blob/binding.d.ts +6 -6
  335. package/dist/via/blob/index.d.ts +3 -0
  336. package/dist/via/classified/binding.d.ts +9 -9
  337. package/dist/via/computed/binding.d.ts +2 -2
  338. package/dist/via/i18n/binding.d.ts +4 -4
  339. package/dist/via/lookup/binding.d.ts +5 -5
  340. package/dist/via/lookup/handle.d.ts +4 -1
  341. package/dist/via/lookup/index.d.ts +1 -1
  342. package/dist/via/lookup/snapshot.d.ts +1 -1
  343. package/dist/via/money/binding.d.ts +3 -3
  344. package/dist/via/money/normalize.d.ts +1 -1
  345. package/dist/via/money/where.d.ts +3 -3
  346. package/dist/walk-JNEOYCAU.js +21 -0
  347. package/dist/walk-JNEOYCAU.js.map +1 -0
  348. package/dist/with-audit/periods/periods.d.ts +1 -1
  349. package/dist/with-audit/periods/strategy.d.ts +1 -1
  350. package/dist/with-audit/sealed-record/index.d.ts +13 -0
  351. package/dist/with-audit/tiers/index.d.ts +17 -2
  352. package/dist/with-cargo/adopt-partition.d.ts +7 -7
  353. package/dist/with-cargo/extract-partition.d.ts +1 -1
  354. package/dist/with-cargo/floor.d.ts +1 -1
  355. package/dist/with-cargo/index.d.ts +2 -2
  356. package/dist/with-commit/history/history.d.ts +26 -0
  357. package/dist/with-commit/history/index.d.ts +2 -1
  358. package/dist/with-commit/history/ledger/store.d.ts +7 -1
  359. package/dist/with-commit/history/strategy.d.ts +11 -1
  360. package/dist/with-commit/numbering/index.d.ts +0 -5
  361. package/dist/with-commit/vault-head/active.d.ts +2 -0
  362. package/dist/with-commit/vault-head/head.d.ts +28 -0
  363. package/dist/with-commit/vault-head/index.d.ts +10 -0
  364. package/dist/with-commit/vault-head/strategy.d.ts +127 -0
  365. package/dist/with-commit/vault-head/verify.d.ts +90 -0
  366. package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +4 -0
  367. package/dist/with-formula/materialized-views/projection-legs.d.ts +59 -0
  368. package/dist/with-formula/materialized-views/registry.d.ts +50 -0
  369. package/dist/with-formula/materialized-views/types.d.ts +68 -10
  370. package/dist/with-party/directory/cover/storage.d.ts +0 -8
  371. package/dist/with-party/directory/storage.d.ts +0 -11
  372. package/dist/with-party/directory/visibility.d.ts +0 -21
  373. package/dist/with-party/policy/storage.d.ts +0 -10
  374. package/dist/with-party/team/deed.d.ts +4 -4
  375. package/dist/with-party/team/device-seal.d.ts +5 -5
  376. package/dist/with-party/team/echo-ceremony.d.ts +2 -2
  377. package/dist/with-party/team/echo-secret.d.ts +4 -4
  378. package/dist/with-party/team/index.d.ts +3 -3
  379. package/dist/with-party/team/keyring.d.ts +141 -4
  380. package/dist/with-party/team/managed-secret.d.ts +21 -11
  381. package/dist/with-party/team/noydb-facade.d.ts +7 -3
  382. package/dist/with-party/team/{shamir-recovery-provider.d.ts → noydb-shamir.d.ts} +1 -1
  383. package/dist/with-party/team/recovery.d.ts +3 -3
  384. package/dist/with-party/team/roster-tag.d.ts +101 -0
  385. package/dist/with-party/team/rotate-recover.d.ts +5 -5
  386. package/dist/with-party/team/tiers.d.ts +2 -1
  387. package/dist/with-pod/format.d.ts +11 -13
  388. package/dist/with-pod/index.d.ts +10 -10
  389. package/dist/with-pod/open.d.ts +2 -2
  390. package/dist/with-pod/pod-handle.d.ts +19 -0
  391. package/dist/with-pod/pod-store.d.ts +0 -8
  392. package/dist/with-pod/{bundle.d.ts → pod.d.ts} +17 -25
  393. package/dist/with-pod/ulid.d.ts +1 -1
  394. package/dist/with-shape/blobs/blob-compaction.d.ts +13 -0
  395. package/dist/with-shape/blobs/blob-set.d.ts +83 -11
  396. package/dist/with-shape/blobs/orphan-report.d.ts +62 -0
  397. package/dist/with-shape/introspection/describe.d.ts +2 -2
  398. package/dist/with-shape/schema-update/fence-controller.d.ts +4 -4
  399. package/dist/with-shape/schema-update/fence-watcher.d.ts +4 -4
  400. package/dist/with-shape/schema-update/store-coordination-provider.d.ts +7 -6
  401. package/dist/with-sync/engine.d.ts +54 -5
  402. package/dist/with-sync/strategy.d.ts +3 -0
  403. package/dist/withdraw-accessible-ILTSXTIE.js +28 -0
  404. package/dist/withdraw-accessible-ILTSXTIE.js.map +1 -0
  405. package/package.json +29 -5
  406. package/dist/api-RXUMEKT3.js +0 -20
  407. package/dist/backup-KULFZ2T4.js.map +0 -1
  408. package/dist/bundle-handle-GFNHT52M.js +0 -36
  409. package/dist/bundle-handle-GFNHT52M.js.map +0 -1
  410. package/dist/chunk-2DHSSLOD.js.map +0 -1
  411. package/dist/chunk-2GAJGUNM.js.map +0 -1
  412. package/dist/chunk-3737A6EA.js.map +0 -1
  413. package/dist/chunk-3IXIU6FP.js.map +0 -1
  414. package/dist/chunk-3URQC7EH.js.map +0 -1
  415. package/dist/chunk-4GZ6XOVW.js.map +0 -1
  416. package/dist/chunk-4I72F5DF.js.map +0 -1
  417. package/dist/chunk-4VUPLMZ6.js.map +0 -1
  418. package/dist/chunk-52JPHN5N.js.map +0 -1
  419. package/dist/chunk-55LKVALY.js.map +0 -1
  420. package/dist/chunk-5JY5TSVY.js.map +0 -1
  421. package/dist/chunk-5ZKS6ZE2.js.map +0 -1
  422. package/dist/chunk-6BU3L4UE.js.map +0 -1
  423. package/dist/chunk-6NVPFKN3.js.map +0 -1
  424. package/dist/chunk-7F4DBNSP.js.map +0 -1
  425. package/dist/chunk-7G6VDWXB.js.map +0 -1
  426. package/dist/chunk-7H73RIE3.js +0 -45
  427. package/dist/chunk-7H73RIE3.js.map +0 -1
  428. package/dist/chunk-7MNBICB5.js.map +0 -1
  429. package/dist/chunk-AFHQATY4.js +0 -47
  430. package/dist/chunk-AFHQATY4.js.map +0 -1
  431. package/dist/chunk-AHLJSVRL.js.map +0 -1
  432. package/dist/chunk-BEFVYAR5.js.map +0 -1
  433. package/dist/chunk-BRVW2GS5.js.map +0 -1
  434. package/dist/chunk-BWVKEOPE.js.map +0 -1
  435. package/dist/chunk-CDB2HVQW.js.map +0 -1
  436. package/dist/chunk-CEJWMBXO.js.map +0 -1
  437. package/dist/chunk-DG27IUVI.js.map +0 -1
  438. package/dist/chunk-E6427JU2.js.map +0 -1
  439. package/dist/chunk-FFDNKRCY.js.map +0 -1
  440. package/dist/chunk-FZ6NYJ7L.js.map +0 -1
  441. package/dist/chunk-G6S5VVHP.js.map +0 -1
  442. package/dist/chunk-GAG7QOVO.js.map +0 -1
  443. package/dist/chunk-HNGSV2YC.js.map +0 -1
  444. package/dist/chunk-IGJCYUT5.js.map +0 -1
  445. package/dist/chunk-JJNOLSG5.js.map +0 -1
  446. package/dist/chunk-JRKZTEZZ.js.map +0 -1
  447. package/dist/chunk-MSWYQLMQ.js.map +0 -1
  448. package/dist/chunk-NPP5R7FF.js.map +0 -1
  449. package/dist/chunk-O2ERS4UJ.js.map +0 -1
  450. package/dist/chunk-PDLLCOGD.js.map +0 -1
  451. package/dist/chunk-PL2GHSCM.js.map +0 -1
  452. package/dist/chunk-PNKHAKQ7.js.map +0 -1
  453. package/dist/chunk-Q6TEJXBX.js.map +0 -1
  454. package/dist/chunk-QULVCV3M.js.map +0 -1
  455. package/dist/chunk-RV3ARMPN.js.map +0 -1
  456. package/dist/chunk-RXYYFSBB.js.map +0 -1
  457. package/dist/chunk-UHXCLPGC.js.map +0 -1
  458. package/dist/chunk-VCETL77O.js.map +0 -1
  459. package/dist/chunk-VZ3XFUQ7.js.map +0 -1
  460. package/dist/chunk-W77KZHCW.js.map +0 -1
  461. package/dist/chunk-WASHZV34.js.map +0 -1
  462. package/dist/chunk-WFUIE565.js.map +0 -1
  463. package/dist/chunk-XWX7GL56.js.map +0 -1
  464. package/dist/chunk-YJ6IONGA.js.map +0 -1
  465. package/dist/chunk-YPYHVOXP.js.map +0 -1
  466. package/dist/chunk-ZJADGNYF.js.map +0 -1
  467. package/dist/collection-facade-QEJIM6BC.js +0 -45
  468. package/dist/delegation-MO7YZYJS.js.map +0 -1
  469. package/dist/derive-IUA6JFLB.js +0 -22
  470. package/dist/dispatch-FZEAWKVM.js.map +0 -1
  471. package/dist/executor-CYJQLKKI.js +0 -9
  472. package/dist/executor-S4QIKEHW.js +0 -9
  473. package/dist/executor-YIQB2S6N.js +0 -29
  474. package/dist/export-accessible-4S36PQNR.js +0 -23
  475. package/dist/extract-partition-IO7FDZ2P.js +0 -38
  476. package/dist/fanout-sidecar-NNAJQXMX.js.map +0 -1
  477. package/dist/fence-watcher-DHQ775JB.js.map +0 -1
  478. package/dist/find-RBBYKXI7.js +0 -11
  479. package/dist/issue-RIVHSY2S.js +0 -19
  480. package/dist/liberate-GFN4C7RR.js +0 -24
  481. package/dist/noydb-ASEXNJS6.js +0 -83
  482. package/dist/register-4EFJCVYD.js +0 -32
  483. package/dist/registry-4SDHHOJ7.js +0 -18
  484. package/dist/registry-CZVINVQH.js +0 -9
  485. package/dist/registry-IKUR2MXD.js +0 -9
  486. package/dist/registry-OYTFGWVK.js +0 -19
  487. package/dist/request-withdrawal-KGXGDPVQ.js +0 -31
  488. package/dist/revoke-JFN773KF.js +0 -24
  489. package/dist/seed-GDV5PT4R.js.map +0 -1
  490. package/dist/signer-TA55QB6R.js +0 -25
  491. package/dist/storage-V7MTFAQJ.js +0 -23
  492. package/dist/store-coordination-provider-GFCUOBR6.js.map +0 -1
  493. package/dist/walk-3ZECBFDA.js +0 -21
  494. package/dist/with-pod/bundle-handle.d.ts +0 -9
  495. package/dist/withdraw-accessible-7PG4DYQK.js +0 -28
  496. /package/dist/{api-RXUMEKT3.js.map → api-EQYRTZO2.js.map} +0 -0
  497. /package/dist/{collection-facade-QEJIM6BC.js.map → at/index.js.map} +0 -0
  498. /package/dist/{computed-6G5M3UPH.js.map → by/index.js.map} +0 -0
  499. /package/dist/{chunk-YAWK6AWF.js.map → chunk-225O5CXQ.js.map} +0 -0
  500. /package/dist/{chunk-OF3L2SD6.js.map → chunk-3QARDAYW.js.map} +0 -0
  501. /package/dist/{chunk-W3TVWF6N.js.map → chunk-4A4TYISP.js.map} +0 -0
  502. /package/dist/{chunk-CCZJJ4I2.js.map → chunk-4G25SDQL.js.map} +0 -0
  503. /package/dist/{chunk-7TSYBD3E.js.map → chunk-5263OEM3.js.map} +0 -0
  504. /package/dist/{chunk-FNSMZQS4.js.map → chunk-5ACAVJUI.js.map} +0 -0
  505. /package/dist/{chunk-VMCCGUQB.js.map → chunk-7LYUJNU3.js.map} +0 -0
  506. /package/dist/{chunk-WLYIROCJ.js.map → chunk-AB5P32RE.js.map} +0 -0
  507. /package/dist/{chunk-SUFG5E73.js.map → chunk-ALUNQEBY.js.map} +0 -0
  508. /package/dist/{chunk-CADUYBQD.js.map → chunk-ATL3ZVXT.js.map} +0 -0
  509. /package/dist/{chunk-6FJWSWFT.js.map → chunk-DBNYPLWY.js.map} +0 -0
  510. /package/dist/{chunk-VJFMXYKP.js.map → chunk-E6YA6UAP.js.map} +0 -0
  511. /package/dist/{chunk-JIUVJ4M7.js.map → chunk-F7ZFRPGQ.js.map} +0 -0
  512. /package/dist/{chunk-HXGUIPQB.js.map → chunk-FOG7YEJP.js.map} +0 -0
  513. /package/dist/{chunk-X56RTUK3.js.map → chunk-HM4JSXX2.js.map} +0 -0
  514. /package/dist/{chunk-GQ3BX5EA.js.map → chunk-I3ISCYT7.js.map} +0 -0
  515. /package/dist/{chunk-FUHKW252.js.map → chunk-J4MN6XIU.js.map} +0 -0
  516. /package/dist/{chunk-ADW22QSB.js.map → chunk-J4UJ5FRV.js.map} +0 -0
  517. /package/dist/{chunk-HVQGCKY4.js.map → chunk-JVLSU7S2.js.map} +0 -0
  518. /package/dist/{chunk-AR2JDFAE.js.map → chunk-KDJGJR7F.js.map} +0 -0
  519. /package/dist/{chunk-747LRSOO.js.map → chunk-LKFKXS5K.js.map} +0 -0
  520. /package/dist/{chunk-U5O6GIWZ.js.map → chunk-LR4Z47QD.js.map} +0 -0
  521. /package/dist/{chunk-RTAMLDWP.js.map → chunk-NLKLXXTO.js.map} +0 -0
  522. /package/dist/{chunk-FDX7OWWI.js.map → chunk-OPXR4PB2.js.map} +0 -0
  523. /package/dist/{chunk-Z45YRGFO.js.map → chunk-P6ASQOZR.js.map} +0 -0
  524. /package/dist/{chunk-2Z3NCLNX.js.map → chunk-QI5NWLVW.js.map} +0 -0
  525. /package/dist/{chunk-6SAFL5YE.js.map → chunk-RC4BROYR.js.map} +0 -0
  526. /package/dist/{chunk-NJDQ4YSV.js.map → chunk-RDHUZ674.js.map} +0 -0
  527. /package/dist/{chunk-3JVXVJ7L.js.map → chunk-S35S77YU.js.map} +0 -0
  528. /package/dist/{chunk-KUDZVJKQ.js.map → chunk-SHILAQH5.js.map} +0 -0
  529. /package/dist/{chunk-4UVDI4XE.js.map → chunk-T3PHCEN4.js.map} +0 -0
  530. /package/dist/{derive-IUA6JFLB.js.map → chunk-UBSFPGVJ.js.map} +0 -0
  531. /package/dist/{chunk-FAXZQ5UF.js.map → chunk-UCUALOSM.js.map} +0 -0
  532. /package/dist/{chunk-4HDYQL3J.js.map → chunk-VAG47QHV.js.map} +0 -0
  533. /package/dist/{chunk-35EBKWQU.js.map → chunk-VFIWDPXZ.js.map} +0 -0
  534. /package/dist/{chunk-HNHCQ556.js.map → chunk-WLLUM35R.js.map} +0 -0
  535. /package/dist/{chunk-JRCYZEHU.js.map → chunk-XVU7J43V.js.map} +0 -0
  536. /package/dist/{chunk-DMQCLZ4Z.js.map → chunk-YCSM3GZU.js.map} +0 -0
  537. /package/dist/{chunk-FMQJZH4R.js.map → chunk-YMLQBZFJ.js.map} +0 -0
  538. /package/dist/{chunk-6HFM7EIT.js.map → chunk-YPSOHDNC.js.map} +0 -0
  539. /package/dist/{chunk-N35NC4JH.js.map → chunk-Z2PWOSCJ.js.map} +0 -0
  540. /package/dist/{chunk-HPLWFNG4.js.map → chunk-Z7ZXZL6Y.js.map} +0 -0
  541. /package/dist/{classified-marker-2KJAXRRO.js.map → classified-marker-BSQHU4JT.js.map} +0 -0
  542. /package/dist/{enclave-JU4YIEPB.js.map → collection-facade-LG3NYZVB.js.map} +0 -0
  543. /package/dist/{executor-CYJQLKKI.js.map → computed-ASBNTLOK.js.map} +0 -0
  544. /package/dist/{dead-filter-DCB62VWW.js.map → dead-filter-QKU56XTQ.js.map} +0 -0
  545. /package/dist/{executor-S4QIKEHW.js.map → derive-CXHCY46K.js.map} +0 -0
  546. /package/dist/{dispatch-MJ6SHB3Y.js.map → dispatch-4AP4PUZU.js.map} +0 -0
  547. /package/dist/{executor-YIQB2S6N.js.map → enclave-NYPT7WA7.js.map} +0 -0
  548. /package/dist/{export-accessible-4S36PQNR.js.map → executor-3KFRQETS.js.map} +0 -0
  549. /package/dist/{extract-partition-IO7FDZ2P.js.map → executor-AFHQYRAU.js.map} +0 -0
  550. /package/dist/{find-RBBYKXI7.js.map → executor-YYDW6XQI.js.map} +0 -0
  551. /package/dist/{issue-RIVHSY2S.js.map → export-accessible-BX2ILB4C.js.map} +0 -0
  552. /package/dist/{ledger-AETNF4OM.js.map → extract-partition-UPOVITFI.js.map} +0 -0
  553. /package/dist/{liberate-GFN4C7RR.js.map → find-SZBL2HPB.js.map} +0 -0
  554. /package/dist/{link-set-E5HNY67I.js.map → issue-G53NB6EW.js.map} +0 -0
  555. /package/dist/{managed-secret-CWQ6PND5.js.map → ledger-T5K4P2D7.js.map} +0 -0
  556. /package/dist/{noydb-ASEXNJS6.js.map → liberate-VEOZRESE.js.map} +0 -0
  557. /package/dist/{register-4EFJCVYD.js.map → link-set-76JZ6YB4.js.map} +0 -0
  558. /package/dist/{registry-4SDHHOJ7.js.map → managed-secret-6YC32VXG.js.map} +0 -0
  559. /package/dist/{registry-CZVINVQH.js.map → noydb-EDJA4JNJ.js.map} +0 -0
  560. /package/dist/{registry-IKUR2MXD.js.map → on/index.js.map} +0 -0
  561. /package/dist/{post-register-2XSSMGEQ.js.map → post-register-53O7AJRZ.js.map} +0 -0
  562. /package/dist/{registry-OYTFGWVK.js.map → register-6TCBR6XD.js.map} +0 -0
  563. /package/dist/{request-withdrawal-KGXGDPVQ.js.map → registry-DH2L4O2V.js.map} +0 -0
  564. /package/dist/{revoke-JFN773KF.js.map → registry-IWFMXCHX.js.map} +0 -0
  565. /package/dist/{signer-TA55QB6R.js.map → registry-Q3FG3OAX.js.map} +0 -0
  566. /package/dist/{stale-ARHFVL5U.js.map → registry-YC3IFG3A.js.map} +0 -0
  567. /package/dist/{storage-V7MTFAQJ.js.map → request-withdrawal-NM5VYR6F.js.map} +0 -0
  568. /package/dist/{reveal-BW36KCOQ.js.map → reveal-XBIMHAXR.js.map} +0 -0
  569. /package/dist/{ulid-PTAIMDG4.js.map → revoke-MJNYWO72.js.map} +0 -0
  570. /package/dist/{walk-3ZECBFDA.js.map → signer-6XVS2AU3.js.map} +0 -0
  571. /package/dist/{withdraw-accessible-7PG4DYQK.js.map → stale-MCS46TFO.js.map} +0 -0
  572. /package/dist/{verify-RO5RTZOJ.js.map → verify-WYOFLSNA.js.map} +0 -0
@@ -18,7 +18,8 @@
18
18
  */
19
19
  import type { UnlockedKeyring } from './keyring.js';
20
20
  /** Canonical DEK key for a given collection + tier. Tier 0 → bare name. */
21
- export declare function dekKey(collection: string, tier: number): string;
21
+ import { dekKey } from '../../kernel/tier-visibility.js';
22
+ export { dekKey };
22
23
  /**
23
24
  * Returns the user's effective clearance for a given collection: the
24
25
  * maximum tier for which their keyring holds a DEK. Falls back to 0
@@ -47,14 +47,14 @@
47
47
  */
48
48
  import type { Cover } from '../with-party/directory/cover/types.js';
49
49
  import type { Redirect } from './redirect.js';
50
- /** Magic bytes 'NDB1' (ASCII), identifying a NOYDB bundle. */
51
- export declare const NOYDB_BUNDLE_MAGIC: Uint8Array<ArrayBuffer>;
50
+ /** Magic bytes 'NDB1' (ASCII) — `NoyDB 1` — identifying a NOYDB pod (`.noydb` container). */
51
+ export declare const NOYDB_POD_MAGIC: Uint8Array<ArrayBuffer>;
52
52
  /** Total fixed prefix before the header JSON: 4+1+1+4 bytes. */
53
- export declare const NOYDB_BUNDLE_PREFIX_BYTES = 10;
53
+ export declare const NOYDB_POD_PREFIX_BYTES = 10;
54
54
  /** Current bundle format version. Bumped on layout changes. Default for unsigned pods. */
55
- export declare const NOYDB_BUNDLE_FORMAT_VERSION = 1;
55
+ export declare const NOYDB_POD_FORMAT_VERSION = 1;
56
56
  /** Format version for pods carrying a header signature (`sig`/`keyId`/`sigAlg`). */
57
- export declare const NOYDB_BUNDLE_FORMAT_VERSION_SIGNED = 2;
57
+ export declare const NOYDB_POD_FORMAT_VERSION_SIGNED = 2;
58
58
  /**
59
59
  * Bitfield interpretation of the flags byte.
60
60
  *
@@ -85,7 +85,7 @@ export type CompressionAlgo = 0 | 1 | 2;
85
85
  *
86
86
  * **Minimum-disclosure rules:** these are the ONLY allowed keys.
87
87
  * Any other key in a parsed header causes
88
- * `validateBundleHeader` to throw. The set is kept short to
88
+ * `validatePodHeaderFields` to throw. The set is kept short to
89
89
  * minimize attack surface from cloud-storage metadata indexing —
90
90
  * see the file-level doc comment for the rationale.
91
91
  *
@@ -132,7 +132,7 @@ export interface NoydbPodHeader {
132
132
  * Auto-unlock material indicator. When present, the bundle
133
133
  * body wraps the dump JSON in a structure carrying per-user
134
134
  * secrets — either plaintext (`'unsealed'`, public-by-design)
135
- * or sealed under a `SealingKeyProvider` (`'sealed'`, requires
135
+ * or sealed under a `NoydbSealer` (`'sealed'`, requires
136
136
  * matching provider on the recipient side).
137
137
  *
138
138
  * Visible pre-decompression so cloud listing UIs can warn before
@@ -249,8 +249,6 @@ export interface NoydbPodHeader {
249
249
  * family (see `unlockMethods` doc comment on `NoydbPodHeader`).
250
250
  */
251
251
  export type UnlockMethod = 'password' | 'webauthn' | 'oidc' | 'totp' | 'email-otp' | 'magic-link' | 'pin' | 'recovery' | 'shamir';
252
- /** @deprecated Use `NoydbPodHeader`. */
253
- export type NoydbBundleHeader = NoydbPodHeader;
254
252
  /**
255
253
  * Validate a parsed bundle header. Throws on any deviation from
256
254
  * the minimum-disclosure schema:
@@ -266,18 +264,18 @@ export type NoydbBundleHeader = NoydbPodHeader;
266
264
  * The error messages name the offending field so consumers can
267
265
  * fix the producer rather than the reader.
268
266
  */
269
- export declare function validateBundleHeader(parsed: unknown): asserts parsed is NoydbPodHeader;
267
+ export declare function validatePodHeaderFields(parsed: unknown): asserts parsed is NoydbPodHeader;
270
268
  /**
271
269
  * Encode a header object to UTF-8 JSON bytes after validating
272
270
  * minimum disclosure. Used by the writer to serialize the header
273
271
  * region of the container.
274
272
  */
275
- export declare function encodeBundleHeader(header: NoydbPodHeader): Uint8Array;
273
+ export declare function encodePodHeader(header: NoydbPodHeader): Uint8Array;
276
274
  /**
277
275
  * Parse a bundle header from its UTF-8 JSON bytes. Throws on
278
276
  * invalid JSON or any minimum-disclosure violation.
279
277
  */
280
- export declare function decodeBundleHeader(bytes: Uint8Array): NoydbPodHeader;
278
+ export declare function decodePodHeader(bytes: Uint8Array): NoydbPodHeader;
281
279
  /**
282
280
  * Read a uint32 from `bytes` at `offset` in big-endian byte order.
283
281
  * No bounds check — callers must guarantee `offset + 4 <= bytes.length`.
@@ -295,4 +293,4 @@ export declare function writeUint32BE(bytes: Uint8Array, offset: number, value:
295
293
  * 4 bytes match `NDB1`. Used by readers as a fast file-type check
296
294
  * before any further parsing.
297
295
  */
298
- export declare function hasNoydbBundleMagic(bytes: Uint8Array): boolean;
296
+ export declare function hasNoydbPodMagic(bytes: Uint8Array): boolean;
@@ -11,19 +11,19 @@
11
11
  * omit this subpath and save ~805 LOC of format code + Brotli/gzip
12
12
  * wiring.
13
13
  */
14
- export { writePod, readPod, readPodHeader, readPodCover, writeNoydbBundle, readNoydbBundle, readNoydbBundleHeader, resetBrotliSupportCache, } from './bundle.js';
14
+ export { writePod, readPod, readPodHeader, readPodCover, resetBrotliSupportCache, } from './pod.js';
15
15
  export type { Cover } from '../with-party/directory/cover/types.js';
16
- export type { WritePodOptions, WriteNoydbBundleOptions, ReadNoydbBundleOptions, NoydbBundleReadResult, } from './bundle.js';
17
- export { verifyPodHeader } from './bundle.js';
18
- export type { PodVerifyResult } from './bundle.js';
16
+ export type { WritePodOptions, ReadPodOptions, PodReadResult, } from './pod.js';
17
+ export { verifyPodHeader } from './pod.js';
18
+ export type { PodVerifyResult } from './pod.js';
19
19
  export { signRecord, verifyRecord, signedBytes, POD_SIG_ALG } from './signature.js';
20
- export { NOYDB_BUNDLE_MAGIC, NOYDB_BUNDLE_PREFIX_BYTES, NOYDB_BUNDLE_FORMAT_VERSION, FLAG_COMPRESSED, FLAG_HAS_INTEGRITY_HASH, COMPRESSION_NONE, COMPRESSION_GZIP, COMPRESSION_BROTLI, validateBundleHeader, encodeBundleHeader, hasNoydbBundleMagic, } from './format.js';
21
- export type { CompressionAlgo, NoydbPodHeader, NoydbBundleHeader, UnlockMethod, } from './format.js';
20
+ export { NOYDB_POD_MAGIC, NOYDB_POD_PREFIX_BYTES, NOYDB_POD_FORMAT_VERSION, FLAG_COMPRESSED, FLAG_HAS_INTEGRITY_HASH, COMPRESSION_NONE, COMPRESSION_GZIP, COMPRESSION_BROTLI, validatePodHeaderFields, encodePodHeader, hasNoydbPodMagic, } from './format.js';
21
+ export type { CompressionAlgo, NoydbPodHeader, UnlockMethod, } from './format.js';
22
22
  export { generateULID, isULID } from './ulid.js';
23
- export { wrapPodStore, createPodStore, wrapBundleStore, createBundleStore } from './pod-store.js';
24
- export type { WrappedPodNoydbStore, WrapPodStoreOptions, WrappedBundleNoydbStore, WrapBundleStoreOptions, } from './pod-store.js';
25
- export { BundleIntegrityError, BundleSealMismatchError, PodVersionConflictError, BundleVersionConflictError, BackupLedgerError, BackupCorruptedError, } from '../kernel/errors.js';
26
- export { readPodRedirect } from './bundle.js';
23
+ export { wrapPodStore, createPodStore } from './pod-store.js';
24
+ export type { WrappedPodNoydbStore, WrapPodStoreOptions, } from './pod-store.js';
25
+ export { PodIntegrityError, PodSealMismatchError, PodVersionConflictError, BackupLedgerError, BackupCorruptedError, } from '../kernel/errors.js';
26
+ export { readPodRedirect } from './pod.js';
27
27
  export { signRedirect, verifyRedirect, followRedirects } from './redirect.js';
28
28
  export type { Redirect, RedirectHop, FollowRedirectsResult } from './redirect.js';
29
29
  export type { DocSigner } from '../with-audit/attestation/signer.js';
@@ -6,7 +6,7 @@
6
6
  * reachable through published seams). Composes, in order:
7
7
  *
8
8
  * 1. `readPod` — parse + integrity-check the container (throws
9
- * `BundleIntegrityError` on a corrupted/truncated pod).
9
+ * `PodIntegrityError` on a corrupted/truncated pod).
10
10
  * 2. `verifyPodHeader` — only when `opts.trustedKeys` is supplied.
11
11
  * `'unsigned'` is benign (legacy pod, or `writePod({ sign: false })`)
12
12
  * and open() proceeds; `'untrusted'` / `'tampered'` are fail-closed —
@@ -63,7 +63,7 @@
63
63
  * @module
64
64
  */
65
65
  import type { NoydbPodHeader } from './format.js';
66
- import type { PodVerifyResult } from './bundle.js';
66
+ import type { PodVerifyResult } from './pod.js';
67
67
  import type { Noydb } from '../kernel/noydb.js';
68
68
  import type { Vault } from '../kernel/vault.js';
69
69
  import type { NoydbOptions, NoydbStore, EchoSecretParts } from '../kernel/types.js';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Vault bundle handle — the stable opaque ULID identifying a vault
3
+ * across `.noydb` exports.
4
+ *
5
+ * Behaviour is byte-identical to the inline `Vault.getPodHandle`
6
+ * method this function replaced. `Vault` keeps the public method as
7
+ * a thin delegator.
8
+ *
9
+ * Internal — reached through `vault.getPodHandle()`.
10
+ */
11
+ import type { NoydbStore } from '../kernel/types.js';
12
+ /**
13
+ * Return the stable opaque bundle handle for the given vault adapter,
14
+ * generating and persisting a fresh ULID on first call.
15
+ *
16
+ * See {@link import('../kernel/vault.js').Vault.getPodHandle} for
17
+ * the full rationale and storage-path documentation.
18
+ */
19
+ export declare function buildPodHandle(adapter: NoydbStore, name: string): Promise<string>;
@@ -44,11 +44,3 @@ export declare function wrapPodStore(bundle: NoydbPodStore, options?: WrapPodSto
44
44
  * analogous to `createStore` for KV stores.
45
45
  */
46
46
  export declare function createPodStore<TOptions>(factory: (options: TOptions) => NoydbPodStore): (options: TOptions) => NoydbPodStore;
47
- /** @deprecated Use wrapPodStore. */
48
- export declare const wrapBundleStore: typeof wrapPodStore;
49
- /** @deprecated Use createPodStore. */
50
- export declare const createBundleStore: typeof createPodStore;
51
- /** @deprecated Use WrappedPodNoydbStore. */
52
- export type WrappedBundleNoydbStore = WrappedPodNoydbStore;
53
- /** @deprecated Use WrapPodStoreOptions. */
54
- export type WrapBundleStoreOptions = WrapPodStoreOptions;
@@ -36,9 +36,9 @@ import { type NoydbPodHeader, type UnlockMethod } from './format.js';
36
36
  import type { Redirect } from './redirect.js';
37
37
  import type { DocSigner } from '../with-audit/attestation/signer.js';
38
38
  import type { Vault } from '../kernel/vault.js';
39
- import type { BundleRecipient } from '../with-party/team/keyring.js';
39
+ import type { PodRecipient } from '../with-party/team/keyring.js';
40
40
  import type { Cover } from '../with-party/directory/cover/types.js';
41
- import type { SealingKeyProvider, RecipientSealer, RecipientHint } from '../with-party/team/managed-secret.js';
41
+ import type { NoydbSealer, RecipientSealer, RecipientHint } from '../with-party/team/managed-secret.js';
42
42
  /**
43
43
  * The credential kinds that can be bundled for auto-unlock.
44
44
  * WebAuthn is intentionally excluded — it is hardware-bound and
@@ -128,7 +128,7 @@ export interface WritePodOptions {
128
128
  * the bundle inherits the source keyring as-is (today's behaviour,
129
129
  * suited to personal backup-and-restore).
130
130
  */
131
- readonly recipients?: readonly BundleRecipient[];
131
+ readonly recipients?: readonly PodRecipient[];
132
132
  /**
133
133
  * Auto-unlock — unsealed per-user credentials.
134
134
  *
@@ -152,7 +152,7 @@ export interface WritePodOptions {
152
152
  };
153
153
  /**
154
154
  * Auto-unlock — per-user credentials sealed under a
155
- * {@link SealingKeyProvider}.
155
+ * {@link NoydbSealer}.
156
156
  *
157
157
  * Generalises `sealedSecrets` to support any bundleable
158
158
  * credential kind (`secret` | `password` | `pin`).
@@ -177,7 +177,7 @@ export interface WritePodOptions {
177
177
  */
178
178
  readonly sealedCredentials?: {
179
179
  readonly mode: 'self-target';
180
- readonly provider: SealingKeyProvider;
180
+ readonly provider: NoydbSealer;
181
181
  readonly perUser: Record<string, AutoCredential>;
182
182
  } | {
183
183
  readonly mode: 'recipient-target';
@@ -211,7 +211,7 @@ export interface WritePodOptions {
211
211
  * @deprecated Use `sealedCredentials` instead.
212
212
  *
213
213
  * Auto-unlock — per-user secrets sealed under a
214
- * {@link SealingKeyProvider} (self-target only).
214
+ * {@link NoydbSealer} (self-target only).
215
215
  *
216
216
  * The hub seals each user's plaintext secret under `provider`
217
217
  * and embeds the resulting sealed envelopes in the bundle. The
@@ -229,7 +229,7 @@ export interface WritePodOptions {
229
229
  */
230
230
  readonly sealedSecrets?: {
231
231
  readonly mode: 'self-target';
232
- readonly provider: SealingKeyProvider;
232
+ readonly provider: NoydbSealer;
233
233
  readonly perUser: Record<string, string>;
234
234
  };
235
235
  /**
@@ -266,8 +266,6 @@ export interface WritePodOptions {
266
266
  */
267
267
  readonly redirect?: Redirect;
268
268
  }
269
- /** @deprecated Use `WritePodOptions`. */
270
- export type WriteNoydbBundleOptions = WritePodOptions;
271
269
  /**
272
270
  * Every key `writePod` reads, in declaration order (#991).
273
271
  *
@@ -289,7 +287,7 @@ export declare const WRITE_POD_OPTION_KEYS: readonly ["compression", "collection
289
287
  * actually restore a vault. Splitting the layers keeps the
290
288
  * bundle module free of crypto concerns — see file-level docs.
291
289
  */
292
- export interface NoydbBundleReadResult {
290
+ export interface PodReadResult {
293
291
  readonly header: NoydbPodHeader;
294
292
  readonly dumpJson: string;
295
293
  /**
@@ -317,7 +315,7 @@ export interface NoydbBundleReadResult {
317
315
  * auto-unlock paths. Without these the reader behaves exactly as before
318
316
  * (header parsed; body returned as `dumpJson`).
319
317
  */
320
- export interface ReadNoydbBundleOptions {
318
+ export interface ReadPodOptions {
321
319
  /**
322
320
  * Recipient-side sealing providers used to unseal entries from
323
321
  * `sealedSecrets`. The reader picks the one whose `.id`
@@ -328,7 +326,7 @@ export interface ReadNoydbBundleOptions {
328
326
  * `autoUnlock.perUser` map remains the SEALED entries unmodified
329
327
  * — callers can inspect them or unseal elsewhere.
330
328
  */
331
- readonly sealingProviders?: readonly SealingKeyProvider[];
329
+ readonly sealingProviders?: readonly NoydbSealer[];
332
330
  /**
333
331
  * Opt-in trial mode for unsealing — when an entry's `pid` doesn't
334
332
  * match a registered provider, try each provider whose alg
@@ -373,7 +371,7 @@ export declare function resetBrotliSupportCache(): void;
373
371
  *
374
372
  * Pipeline:
375
373
  * 1. Resolve or create the compartment's stable bundle handle
376
- * via `vault.getBundleHandle()` — same handle on
374
+ * via `vault.getPodHandle()` — same handle on
377
375
  * every export from the same vault instance, so cloud
378
376
  * adapters can use it as a primary key.
379
377
  * 2. `vault.dump()` → JSON string with encrypted records
@@ -398,7 +396,7 @@ export declare function resetBrotliSupportCache(): void;
398
396
  *
399
397
  * @internal
400
398
  */
401
- export declare function assembleBundleContainer(opts: {
399
+ export declare function assemblePodContainer(opts: {
402
400
  handle: string;
403
401
  bodyJsonStr: string;
404
402
  compression: WritePodOptions['compression'];
@@ -413,8 +411,6 @@ export declare function assembleBundleContainer(opts: {
413
411
  signer?: DocSigner;
414
412
  }): Promise<Uint8Array>;
415
413
  export declare function writePod(vault: Vault, opts?: WritePodOptions): Promise<Uint8Array>;
416
- /** @deprecated Use `writePod`. */
417
- export declare const writeNoydbBundle: typeof writePod;
418
414
  /**
419
415
  * Read just the bundle header — no body decompression, no
420
416
  * integrity verification. Intended for cloud-listing UIs that want
@@ -430,8 +426,6 @@ export declare const writeNoydbBundle: typeof writePod;
430
426
  * range requests against bundles that may carry icons.
431
427
  */
432
428
  export declare function readPodHeader(bytes: Uint8Array): NoydbPodHeader;
433
- /** @deprecated Use `readPodHeader`. */
434
- export declare const readNoydbBundleHeader: typeof readPodHeader;
435
429
  /**
436
430
  * Outcome of {@link verifyPodHeader}.
437
431
  *
@@ -457,7 +451,7 @@ export interface PodVerifyResult {
457
451
  * (`keyId → publicKeyB64` the caller already trusts), it reports whether the
458
452
  * header was signed by a trusted document signer.
459
453
  *
460
- * Pairs with the signing half in `assembleBundleContainer`/`writePod`: the
454
+ * Pairs with the signing half in `assemblePodContainer`/`writePod`: the
461
455
  * signed payload is the final wire header with `sig` removed, so verification
462
456
  * reconstructs it by stripping EXACTLY the `sig` field — `keyId`, `sigAlg`,
463
457
  * and every other header field stay in the verified payload.
@@ -469,7 +463,7 @@ export interface PodVerifyResult {
469
463
  * header (which includes the *claimed* `bodySha256`) is signed by a trusted
470
464
  * key; it does NOT prove the body matches that hash. To trust the pod's
471
465
  * BODY you MUST also confirm the body hashes to `header.bodySha256` — call
472
- * `readPod`, which throws `BundleIntegrityError` on mismatch. A `verified`
466
+ * `readPod`, which throws `PodIntegrityError` on mismatch. A `verified`
473
467
  * header paired with a swapped body is caught only by that integrity check.
474
468
  * This function stays body-free by design so a static page can authenticate a
475
469
  * header without decompressing the body; composing the two checks is the
@@ -498,7 +492,7 @@ export declare function readPodCover(bytes: Uint8Array, opts?: {
498
492
  * the header's `redirect` field or `undefined` if the bundle was written
499
493
  * without one.
500
494
  *
501
- * The record is returned UNVERIFIED: `validateBundleHeader` only checks
495
+ * The record is returned UNVERIFIED: `validatePodHeaderFields` only checks
502
496
  * its shape at parse time (a parser has no `trustedKeys`). Callers that
503
497
  * intend to follow the redirect MUST separately call `verifyRedirect`
504
498
  * (`redirect.js`) before trusting `target`.
@@ -510,7 +504,7 @@ export declare function readPodRedirect(bytes: Uint8Array): Redirect | undefined
510
504
  * original `vault.dump()` JSON string ready to pass to
511
505
  * `vault.load()`.
512
506
  *
513
- * Throws `BundleIntegrityError` if the body's actual SHA-256 does
507
+ * Throws `PodIntegrityError` if the body's actual SHA-256 does
514
508
  * not match the value declared in the header. Distinct from a
515
509
  * format error so consumers can pattern-match in catch blocks
516
510
  * (corrupted-in-transit vs malformed-by-producer).
@@ -522,6 +516,4 @@ export declare function readPodRedirect(bytes: Uint8Array): Redirect | undefined
522
516
  * free of crypto concerns and lets the same code feed format
523
517
  * inspectors that never decrypt anything.
524
518
  */
525
- export declare function readPod(bytes: Uint8Array, opts?: ReadNoydbBundleOptions): Promise<NoydbBundleReadResult>;
526
- /** @deprecated Use `readPod`. */
527
- export declare const readNoydbBundle: typeof readPod;
519
+ export declare function readPod(bytes: Uint8Array, opts?: ReadPodOptions): Promise<PodReadResult>;
@@ -39,7 +39,7 @@
39
39
  *
40
40
  * If a future use case needs timestamp-free handles, a v2 of the
41
41
  * format could specify "use the random portion only" without a
42
- * format break — `validateBundleHeader` only checks the regex
42
+ * format break — `validatePodHeaderFields` only checks the regex
43
43
  * shape, not the encoded timestamp.
44
44
  */
45
45
  /**
@@ -30,6 +30,7 @@
30
30
  */
31
31
  import type { NoydbStore, SlotInfo } from '../../kernel/types.js';
32
32
  import { type EnclaveKey } from '../../kernel/enclave/index.js';
33
+ import { type OrphanChunkReport } from './orphan-report.js';
33
34
  export interface BlobFieldPolicy<T = unknown> {
34
35
  /**
35
36
  * Via port brand marker — lets a `BlobFieldPolicy` satisfy the kernel's
@@ -145,6 +146,18 @@ export interface CompactionResult {
145
146
  records: number;
146
147
  evicted: number;
147
148
  }>;
149
+ /**
150
+ * #1133 — chunk rows in `_blob_chunks` with no surviving `_blob_index` entry.
151
+ * Pre-#1127 residue: unreachable by every reader AND by rotation, so for a
152
+ * legacy blob the bytes stay openable under a retired `_blob` DEK.
153
+ *
154
+ * REPORTED, never reclaimed — deciding "orphaned" means trusting the store's
155
+ * `list`, and a store that withholds one index row would have us destroy a
156
+ * LIVE blob's chunks. See `orphan-report.ts` for the full argument. A vault
157
+ * that has run `migrate()` has no legacy chunks to strand, and `chunks: 0`
158
+ * is the expected reading everywhere else.
159
+ */
160
+ readonly orphanBlobChunks: OrphanChunkReport;
148
161
  }
149
162
  export interface CompactRunOptions {
150
163
  /** Override "now" for deterministic testing. */
@@ -13,7 +13,7 @@ export declare const BLOB_COLLECTION = "_blob";
13
13
  /** Stores `BlobObject` metadata envelopes, keyed by eTag. */
14
14
  export declare const BLOB_INDEX_COLLECTION = "_blob_index";
15
15
  /**
16
- * Stores encrypted chunk envelopes, keyed by `{eTag}/{chunkIndex}`.
16
+ * Stores encrypted chunk envelopes, keyed by `{eTag}_{chunkIndex}`.
17
17
  * NOT loaded into the in-memory query layer. Fetched on demand by
18
18
  * `BlobSet.get()` / `BlobSet.response()`.
19
19
  */
@@ -39,14 +39,14 @@ export declare const DEFAULT_CHUNK_SIZE: number;
39
39
  *
40
40
  * ```
41
41
  * _blob_index/{eTag} BlobObject metadata (vault-shared DEK)
42
- * _blob_chunks/{eTag}/{chunkIndex} Encrypted chunk data (vault-shared DEK + AAD)
42
+ * _blob_chunks/{eTag}_{chunkIndex} Encrypted chunk data (vault-shared DEK + AAD)
43
43
  * _blob_slots_{collection}/{recordId} Slot map (parent collection DEK)
44
44
  * _blob_versions_{collection}/{recordId}/{slot}/{label} Published versions (parent collection DEK)
45
45
  * ```
46
46
  *
47
47
  * ## Deduplication
48
48
  *
49
- * `put()` computes `eTag = HMAC-SHA-256(blobDEK, plaintext)` — keyed so the
49
+ * `put()` computes `eTag = HMAC-SHA-256(addressKey(tier), plaintext)` — keyed so the
50
50
  * store cannot predict eTags for known content. If another record already
51
51
  * uploaded the same bytes, the chunks are reused and `refCount` is incremented.
52
52
  *
@@ -179,6 +179,24 @@ export declare class BlobSet {
179
179
  * write throws an AEAD decrypt error rather than silently writing under
180
180
  * the wrong key.
181
181
  */
182
+ /**
183
+ * The content-addressing key for `tier` (#1126).
184
+ *
185
+ * Derived from `_blob_addr`, a vault-lifetime keyring slot `rotateKeys`
186
+ * refuses to touch — so a rotation re-keys chunk BODIES while every stored
187
+ * eTag, and therefore every chunk AAD and every `_blob_index` /
188
+ * `_blob_slots_*` / `_blob_versions_*` row, survives it unchanged.
189
+ *
190
+ * Before this the address was keyed by the `_blob` DEK itself, so after any
191
+ * rotation `HMAC(live DEK, plaintext) !== storedETag` permanently, for every
192
+ * blob written earlier: `decryptResponse()` raised `TamperedError` on the
193
+ * presigned-URL path forever, and dedup split.
194
+ *
195
+ * Still derived PER TIER, because the address is meant to be tier-scoped —
196
+ * `rehomeForTier` re-addresses on a tier move for exactly that reason. Only
197
+ * the ROTATION coupling was ever wrong.
198
+ */
199
+ private addressKey;
182
200
  private ownerTier;
183
201
  /**
184
202
  * The sanctioned cleared-read path to an elevated record's blobs (#749).
@@ -424,16 +442,70 @@ export declare class BlobSet {
424
442
  * - not yet stamped → apply via `casUpdateRefCountStamped`, then proceed
425
443
  * exactly like the unstamped path below.
426
444
  *
427
- * A crash can also land AFTER the index row is deleted but BEFORE every
428
- * chunk is — `loadBlobObject` then returns null (indistinguishable from
429
- * "never existed") and the object's `chunkCount` is gone with it. A
430
- * stamped caller who knows the true count (the journal marker's captured
431
- * `holds`, once that plumbing lands) supplies it via `chunkCountHint` so
432
- * this call can still finish the chunk deletion; without it, an
433
- * already-index-gone eTag is reported `'shredded'` same as today (best
445
+ * A crash can also land part-way through the deletion itself. Since #1127
446
+ * that deletion runs CHUNKS FIRST (see `deleteChunksThenIndex`), so what
447
+ * survives is an index row with some chunks already gone — a reachable,
448
+ * re-runnable state rather than chunks nothing can ever address again.
449
+ *
450
+ * An eTag whose index row is ALREADY absent on entry is therefore either
451
+ * pre-#1127 residue or a completed deletion. `loadBlobObject` returns null
452
+ * (indistinguishable from "never existed") and the object's `chunkCount` is
453
+ * gone with it. A stamped caller who knows the true count (the journal
454
+ * marker's captured `holds`, once that plumbing lands) supplies it via
455
+ * `chunkCountHint` so this call can still finish the chunk deletion; without
456
+ * it, an already-index-gone eTag is reported `'shredded'` same as today (best
434
457
  * effort — nothing left to key the cleanup off of).
435
458
  */
436
459
  private releaseRef;
460
+ /**
461
+ * Delete a blob's chunks, THEN its index row. The order is the whole point
462
+ * (#1127).
463
+ *
464
+ * Both deletions used to run index-first, which meant a crash in between
465
+ * stranded chunks with no index row. Nothing can ever reach those again:
466
+ * `loadBlobObject` returns null, so no reader addresses them — and
467
+ * `rekeyBlobSet` derives its chunk ids from each index entry's `chunkCount`,
468
+ * so a rotation never visits them either. For a LEGACY blob (bytes under the
469
+ * `_blob` DEK itself rather than a per-blob content CEK) the bodies then stay
470
+ * openable under the retired `_blob` DEK — precisely the key a revoked member
471
+ * walked away with. Crash during `forget()`, revoke later, and real blob
472
+ * content sits readable indefinitely, with no error on either side.
473
+ *
474
+ * Reversing it removes the class rather than cleaning up after it: every
475
+ * chunk that still exists has an index row, so every chunk is reachable by
476
+ * `rekeyBlobSet` and gets re-keyed. There is no orphan to sweep because none
477
+ * is produced.
478
+ *
479
+ * The residue this ordering leaves instead is an index row whose chunks are
480
+ * partly gone. That state is better, but it is NOT free — it cost one reader
481
+ * correction (`resolveRehomedVersionETag`, which read an old blob's bytes
482
+ * while resuming a rehome and now checks `refCount <= 0` instead of relying
483
+ * on the row having vanished). An earlier draft of this comment called the
484
+ * new state "strictly better"; the full suite disproved that, and any future
485
+ * path that reads a blob by index needs the same care. What is true of it:
486
+ * - it is REACHABLE, so a re-run of `releaseRef` completes the deletion
487
+ * idempotently (both `store.delete` calls are void on an absent key);
488
+ * - `rekeyBlobSet` already tolerates it — a missing chunk hits its
489
+ * `if (!chunkEnv || !chunkEnv._iv) continue`, so a rotation still
490
+ * succeeds and still re-keys every chunk that remains;
491
+ * - it cannot leak, because the bytes that survive are the ones still
492
+ * covered by rotation.
493
+ *
494
+ * This also makes one ordering rule true across the blob subsystem rather
495
+ * than two opposite ones: `kernel/enclave/record-keys/rekey-blob.ts` already
496
+ * re-encrypts chunks before re-sealing their index entry, and documents that
497
+ * order as its resume property.
498
+ *
499
+ * Deliberately NOT paired with a sweep that deletes pre-existing orphans:
500
+ * such a sweep must decide "orphaned" from `store.list(_blob_index)`, and the
501
+ * store is untrusted. A store that withholds one index row could make a LIVE
502
+ * blob's chunks look orphaned and have us destroy them — turning withholding,
503
+ * which is reversible, into permanent loss. Reporting them is safe; deleting
504
+ * them on the store's word is not. The report half shipped as
505
+ * `reportOrphanBlobChunks` (#1133), surfaced through `vault.compact()`; a
506
+ * reclaim pass remains deliberately unbuilt for the reason above.
507
+ */
508
+ private deleteChunksThenIndex;
437
509
  /**
438
510
  * Crypto-shred this record's blob attachments — called by
439
511
  * `vault.forget()`.
@@ -986,7 +1058,7 @@ export declare class BlobSet {
986
1058
  * attacker-controlled content pulled from the same forged row and would
987
1059
  * make the check tautological). After assembling the plaintext, we
988
1060
  * recompute the SAME content address every write path mints
989
- * (`hmacSha256Hex(flatBlobDEK, plaintext)` — `writeBlobContent`'s Step 1,
1061
+ * (`hmacSha256Hex(addressKey(tier), plaintext)` — `writeBlobContent`'s Step 1,
990
1062
  * unconditional on `_cek`) and compare it to that requested eTag. A
991
1063
  * forged row can produce valid ciphertext under the flat DEK, but can't
992
1064
  * produce plaintext that re-hashes to an address it doesn't control.
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Orphan blob-chunk REPORT (#1133) — the read-only half of the residue #1127
3
+ * stopped producing.
4
+ *
5
+ * Before #1127, `releaseRef` deleted a blob's index row BEFORE its chunks, so a
6
+ * crash in between stranded chunk bodies nothing can ever reach: `loadBlobObject`
7
+ * returns null so no reader addresses them, and `rekeyBlobSet` derives its chunk
8
+ * ids from each index entry's `chunkCount` so a rotation never visits them. For a
9
+ * LEGACY blob (bytes under the shared `_blob` DEK rather than a per-blob content
10
+ * CEK) those bodies then stay openable under the retired DEK indefinitely.
11
+ *
12
+ * #1127 reversed the order, which removes the class at the source. It does
13
+ * nothing for orphans created before the fix, and this module does not delete
14
+ * them either. It counts them.
15
+ *
16
+ * ## Why this REPORTS and does not RECLAIM
17
+ *
18
+ * Deciding "orphaned" requires `store.list(_blob_index)`, and the store is
19
+ * untrusted — that is the premise of the product, not a caveat on it. A store
20
+ * that withholds a single index row makes a LIVE blob's chunks look orphaned. A
21
+ * reclaim pass acting on that would convert **withholding**, which is reversible
22
+ * the moment the store stops lying, into **permanent destruction** — handing an
23
+ * untrusted store a data-loss primitive it does not currently have, in order to
24
+ * tidy up residue.
25
+ *
26
+ * Reporting inverts the risk to something harmless: a lying store can only
27
+ * inflate this count. Nothing is deleted on its word, so the worst outcome is an
28
+ * operator investigating residue that turns out not to exist.
29
+ *
30
+ * Re-keying is not an alternative either: the chunk AAD is
31
+ * `{eTag}:{chunkIndex}:{chunkCount}`, and `chunkCount` lives only in the index
32
+ * row that is already gone — an orphan's AAD is unreconstructable, so it cannot
33
+ * be decrypted-and-re-encrypted at all.
34
+ */
35
+ import type { NoydbStore } from '../../kernel/types.js';
36
+ export interface OrphanChunkReport {
37
+ /** Chunk rows whose eTag has no `_blob_index` entry. */
38
+ readonly chunks: number;
39
+ /** Distinct eTags those chunks belong to. */
40
+ readonly eTags: number;
41
+ /**
42
+ * Up to {@link SAMPLE_LIMIT} of those eTags, so an operator can inspect a real
43
+ * one rather than only a count. Deterministic (store list order), not random.
44
+ */
45
+ readonly sampleETags: readonly string[];
46
+ /**
47
+ * Chunk ids that do not match the `{eTag}_{index}` grammar at all. Counted
48
+ * rather than skipped: an id this module cannot parse is a thing it cannot
49
+ * classify either way, and reporting zero orphans while silently dropping
50
+ * such ids would be the reassuring-but-wrong answer.
51
+ */
52
+ readonly unparseable: number;
53
+ }
54
+ /**
55
+ * Count chunk rows with no surviving index row. Read-only: two `list` calls and
56
+ * no `get`, no `delete`, and no decryption — an orphan cannot be opened anyway.
57
+ *
58
+ * A store that cannot list either collection yields an empty report rather than
59
+ * throwing: this is a diagnostic riding along with a maintenance pass, and it
60
+ * must not be able to fail one.
61
+ */
62
+ export declare function reportOrphanBlobChunks(adapter: NoydbStore, vault: string): Promise<OrphanChunkReport>;
@@ -71,7 +71,7 @@ export interface DescribedField {
71
71
  };
72
72
  /**
73
73
  * Normalized lookup metadata (#650 Task 7 — the first-ever
74
- * `ViaBinding.describeFragment` consumer; sourced from the `'lookup'`
74
+ * `NoydbVia.describeFragment` consumer; sourced from the `'lookup'`
75
75
  * binding's fragment, NOT from config directly — see `buildDescription`).
76
76
  * Present for every `lookup()`/`enumOf()`/`dict()` field, ALONGSIDE the
77
77
  * pre-existing `dict` block above (kept byte-stable for the
@@ -245,7 +245,7 @@ export interface BuildDescriptionInput {
245
245
  } | undefined;
246
246
  /**
247
247
  * Per-binding `describeFragment()` output, keyed by binding brand (#650
248
- * Task 7 — first-ever consumer of `ViaBinding.describeFragment`,
248
+ * Task 7 — first-ever consumer of `NoydbVia.describeFragment`,
249
249
  * `via/index.ts:136`). `Collection.describe()`/`describeAsync()` build this
250
250
  * from `this.via?.describeFragments()`. The `'lookup'` brand's fragment
251
251
  * feeds the `lookup` block below; `'blob'`'s feeds the `blob` block
@@ -7,14 +7,14 @@
7
7
  * migrator waits for the active client set (registry heartbeats) to ack
8
8
  * the draining generation before transforming. No leader election.
9
9
  *
10
- * The transport is the injected {@link CoordinationProvider} port: the
11
- * default {@link StoreCoordinationProvider} maps it onto today's
10
+ * The transport is the injected {@link NoydbMesh} port: the
11
+ * default {@link StoreMesh} maps it onto today's
12
12
  * `_meta/schema-fence` store ops, so behavior is byte-for-byte the same;
13
13
  * `by-tabs` / `by-peer` swap in real-time push transports.
14
14
  */
15
15
  import { type FenceState } from './fence.js';
16
16
  import type { TransformFn } from './types.js';
17
- import { type CoordinationProvider } from '../../port/by/index.js';
17
+ import { type NoydbMesh } from '../../port/by/index.js';
18
18
  /** Runs one collection's transform; supplied by the Vault (binds to a Collection). */
19
19
  export type RunTransform = (collection: string, transform: TransformFn) => Promise<void>;
20
20
  /** Structural (no static import — kernel-spine port-layering carve-out, same rationale as
@@ -51,7 +51,7 @@ export declare function schemaBumpAuditHook(getLedger: () => AuditLedgerLike | n
51
51
  export declare class SchemaFenceController {
52
52
  #private;
53
53
  constructor(opts: {
54
- coordination: CoordinationProvider;
54
+ coordination: NoydbMesh;
55
55
  vault: string;
56
56
  onFlush: () => Promise<void>;
57
57
  /** Stable per-instance id; the migrator excludes itself from the barrier. */