@noy-db/hub 0.2.0-pre.9 → 0.3.0-pre.10

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 (615) hide show
  1. package/README.md +129 -3
  2. package/dist/aggregate/index.d.ts +5 -2
  3. package/dist/aggregate/index.js +25 -16
  4. package/dist/aggregate/index.js.map +1 -1
  5. package/dist/api-TX2EX2FX.js +20 -0
  6. package/dist/as/index.d.ts +6 -0
  7. package/dist/as/index.js +30 -0
  8. package/dist/at/index.d.ts +4 -0
  9. package/dist/at/index.js +1 -0
  10. package/dist/attestation/index.d.ts +14 -47
  11. package/dist/attestation/index.js +60 -10
  12. package/dist/attestation/index.js.map +1 -1
  13. package/dist/backup-R7NTDFKY.js +225 -0
  14. package/dist/backup-R7NTDFKY.js.map +1 -0
  15. package/dist/blobs/index.d.ts +5 -8
  16. package/dist/blobs/index.js +25 -12
  17. package/dist/blobs/index.js.map +1 -1
  18. package/dist/bundle/index.d.ts +15 -70
  19. package/dist/bundle/index.js +45 -476
  20. package/dist/bundle/index.js.map +1 -1
  21. package/dist/{ulid-CJ8RzRrm.d.ts → bundle-D6GxiUfq.d.ts} +31 -86
  22. package/dist/by/index.d.ts +1 -0
  23. package/dist/by/index.js +11 -0
  24. package/dist/cargo/index.d.ts +7 -0
  25. package/dist/cargo/index.js +95 -0
  26. package/dist/chunk-2OV5NVE7.js +95 -0
  27. package/dist/chunk-2OV5NVE7.js.map +1 -0
  28. package/dist/chunk-2OZXVKVP.js +367 -0
  29. package/dist/chunk-2OZXVKVP.js.map +1 -0
  30. package/dist/{chunk-HNRHLRDC.js → chunk-2REPHKET.js} +6 -5
  31. package/dist/chunk-2REPHKET.js.map +1 -0
  32. package/dist/{chunk-PE2FR4J3.js → chunk-3JXPAHOZ.js} +17 -17
  33. package/dist/chunk-3JXPAHOZ.js.map +1 -0
  34. package/dist/{chunk-H2X3ISXG.js → chunk-3MATJ6O4.js} +7 -7
  35. package/dist/chunk-3MATJ6O4.js.map +1 -0
  36. package/dist/{chunk-PP6W64Y3.js → chunk-3OPY6MK2.js} +132 -3
  37. package/dist/chunk-3OPY6MK2.js.map +1 -0
  38. package/dist/{chunk-T7JEBOGN.js → chunk-3QSIU3UT.js} +49 -71
  39. package/dist/chunk-3QSIU3UT.js.map +1 -0
  40. package/dist/{chunk-ZYWZWG6G.js → chunk-4OMCIY6F.js} +32 -12
  41. package/dist/chunk-4OMCIY6F.js.map +1 -0
  42. package/dist/chunk-4Q6HSHHL.js +90 -0
  43. package/dist/chunk-4Q6HSHHL.js.map +1 -0
  44. package/dist/chunk-5I35DOHK.js +94 -0
  45. package/dist/chunk-5I35DOHK.js.map +1 -0
  46. package/dist/chunk-5VG4IJR7.js +235 -0
  47. package/dist/chunk-5VG4IJR7.js.map +1 -0
  48. package/dist/chunk-5YESYH2C.js +155 -0
  49. package/dist/chunk-5YESYH2C.js.map +1 -0
  50. package/dist/chunk-6G5ORS5D.js +202 -0
  51. package/dist/chunk-6G5ORS5D.js.map +1 -0
  52. package/dist/{chunk-VTKGMEPP.js → chunk-6P5XCKSD.js} +13 -3
  53. package/dist/chunk-6P5XCKSD.js.map +1 -0
  54. package/dist/{chunk-J66GRPNH.js → chunk-6S7T6WC4.js} +2 -2
  55. package/dist/chunk-6S7T6WC4.js.map +1 -0
  56. package/dist/{chunk-U26HQ6KJ.js → chunk-7BWJHO2A.js} +4 -4
  57. package/dist/chunk-7BWJHO2A.js.map +1 -0
  58. package/dist/chunk-7P2SDJG3.js +279 -0
  59. package/dist/chunk-7P2SDJG3.js.map +1 -0
  60. package/dist/chunk-ANB77BVV.js +150 -0
  61. package/dist/chunk-ANB77BVV.js.map +1 -0
  62. package/dist/chunk-AURFOK3D.js +35 -0
  63. package/dist/chunk-AURFOK3D.js.map +1 -0
  64. package/dist/chunk-BKARNZJN.js +382 -0
  65. package/dist/chunk-BKARNZJN.js.map +1 -0
  66. package/dist/{chunk-3BFJOWSU.js → chunk-BQISD5ZV.js} +35 -7
  67. package/dist/chunk-BQISD5ZV.js.map +1 -0
  68. package/dist/{chunk-2GLDA55J.js → chunk-BUAQ7YI3.js} +260 -135
  69. package/dist/chunk-BUAQ7YI3.js.map +1 -0
  70. package/dist/{chunk-2WUSG3IT.js → chunk-CB7CWSKW.js} +5 -5
  71. package/dist/chunk-CB7CWSKW.js.map +1 -0
  72. package/dist/chunk-CHFZDSE4.js +1 -0
  73. package/dist/{aggregate/index.cjs → chunk-DFVUTGT2.js} +206 -222
  74. package/dist/chunk-DFVUTGT2.js.map +1 -0
  75. package/dist/chunk-DJ7KIPLV.js +23 -0
  76. package/dist/chunk-DJ7KIPLV.js.map +1 -0
  77. package/dist/chunk-DSKDQP3G.js +14066 -0
  78. package/dist/chunk-DSKDQP3G.js.map +1 -0
  79. package/dist/{chunk-5T22KDPN.js → chunk-DV4HUP5G.js} +10 -8
  80. package/dist/chunk-DV4HUP5G.js.map +1 -0
  81. package/dist/chunk-EOXAAJTY.js +621 -0
  82. package/dist/chunk-EOXAAJTY.js.map +1 -0
  83. package/dist/chunk-ET67AY6B.js +74 -0
  84. package/dist/chunk-ET67AY6B.js.map +1 -0
  85. package/dist/chunk-F4CEK5YM.js +123 -0
  86. package/dist/chunk-F4CEK5YM.js.map +1 -0
  87. package/dist/chunk-FORYWFN6.js +130 -0
  88. package/dist/chunk-FORYWFN6.js.map +1 -0
  89. package/dist/{chunk-JWRVQKRZ.js → chunk-FRP6D2DM.js} +21 -20
  90. package/dist/chunk-FRP6D2DM.js.map +1 -0
  91. package/dist/chunk-FUOE7UUV.js +341 -0
  92. package/dist/chunk-FUOE7UUV.js.map +1 -0
  93. package/dist/chunk-G4JYND6L.js +42 -0
  94. package/dist/chunk-G4JYND6L.js.map +1 -0
  95. package/dist/{chunk-53XBRIRT.js → chunk-G6XV4H65.js} +9 -9
  96. package/dist/chunk-G6XV4H65.js.map +1 -0
  97. package/dist/chunk-GHVIKOHT.js +1 -0
  98. package/dist/{chunk-PX35GA7L.js → chunk-GNMXXTMN.js} +11 -9
  99. package/dist/chunk-GNMXXTMN.js.map +1 -0
  100. package/dist/chunk-GYGLAVCX.js +19 -0
  101. package/dist/chunk-GYGLAVCX.js.map +1 -0
  102. package/dist/chunk-HPWKV3YB.js +21 -0
  103. package/dist/chunk-HPWKV3YB.js.map +1 -0
  104. package/dist/chunk-HY3AUMFI.js +41 -0
  105. package/dist/chunk-HY3AUMFI.js.map +1 -0
  106. package/dist/chunk-HYR4WZZ3.js +69 -0
  107. package/dist/chunk-HYR4WZZ3.js.map +1 -0
  108. package/dist/chunk-I7FD46FF.js +9 -0
  109. package/dist/chunk-I7FD46FF.js.map +1 -0
  110. package/dist/{chunk-TFBP23BX.js → chunk-ICXIFFYZ.js} +66 -7
  111. package/dist/chunk-ICXIFFYZ.js.map +1 -0
  112. package/dist/{chunk-TV3YZ35S.js → chunk-IGJCYUT5.js} +17 -8
  113. package/dist/chunk-IGJCYUT5.js.map +1 -0
  114. package/dist/{chunk-F3GDRNUT.js → chunk-IVLTXX4W.js} +36 -68
  115. package/dist/chunk-IVLTXX4W.js.map +1 -0
  116. package/dist/{chunk-DONMZAD2.js → chunk-J4LPNIGK.js} +62 -169
  117. package/dist/chunk-J4LPNIGK.js.map +1 -0
  118. package/dist/chunk-JJZ2LW6T.js +36 -0
  119. package/dist/chunk-JJZ2LW6T.js.map +1 -0
  120. package/dist/chunk-JK733I5V.js +23 -0
  121. package/dist/chunk-JK733I5V.js.map +1 -0
  122. package/dist/{chunk-3YPCK6JX.js → chunk-KJ2BCBTL.js} +181 -422
  123. package/dist/chunk-KJ2BCBTL.js.map +1 -0
  124. package/dist/chunk-KNZB6JMR.js +129 -0
  125. package/dist/chunk-KNZB6JMR.js.map +1 -0
  126. package/dist/{chunk-OIF6LZUR.js → chunk-KPZS5QAQ.js} +30 -11
  127. package/dist/chunk-KPZS5QAQ.js.map +1 -0
  128. package/dist/chunk-LB7FD65R.js +163 -0
  129. package/dist/chunk-LB7FD65R.js.map +1 -0
  130. package/dist/{chunk-DO7C2TOG.js → chunk-LEJIKBBB.js} +3 -3
  131. package/dist/{chunk-DO7C2TOG.js.map → chunk-LEJIKBBB.js.map} +1 -1
  132. package/dist/{chunk-O3VZPBZG.js → chunk-LL2NIVUR.js} +56 -13
  133. package/dist/chunk-LL2NIVUR.js.map +1 -0
  134. package/dist/chunk-LP7BEXCT.js +32 -0
  135. package/dist/chunk-LP7BEXCT.js.map +1 -0
  136. package/dist/chunk-MCHVVJIA.js +968 -0
  137. package/dist/chunk-MCHVVJIA.js.map +1 -0
  138. package/dist/chunk-NO272T7Q.js +194 -0
  139. package/dist/chunk-NO272T7Q.js.map +1 -0
  140. package/dist/{chunk-22DWZL57.js → chunk-NUEQU36L.js} +70 -267
  141. package/dist/chunk-NUEQU36L.js.map +1 -0
  142. package/dist/chunk-O45M6LDB.js +38 -0
  143. package/dist/chunk-O45M6LDB.js.map +1 -0
  144. package/dist/chunk-OBKWYKYC.js +117 -0
  145. package/dist/chunk-OBKWYKYC.js.map +1 -0
  146. package/dist/{chunk-DJHHA6XH.js → chunk-OHHKHSJP.js} +50 -20
  147. package/dist/chunk-OHHKHSJP.js.map +1 -0
  148. package/dist/chunk-OT76OZL6.js +45 -0
  149. package/dist/chunk-OT76OZL6.js.map +1 -0
  150. package/dist/chunk-OVYRLHPE.js +150 -0
  151. package/dist/chunk-OVYRLHPE.js.map +1 -0
  152. package/dist/{chunk-ML236QKC.js → chunk-OXCSVM3B.js} +5 -5
  153. package/dist/chunk-OXCSVM3B.js.map +1 -0
  154. package/dist/chunk-P33LUIML.js +205 -0
  155. package/dist/chunk-P33LUIML.js.map +1 -0
  156. package/dist/{chunk-DL3HWOQ5.js → chunk-PLS64NCS.js} +10 -8
  157. package/dist/chunk-PLS64NCS.js.map +1 -0
  158. package/dist/{chunk-SYMWGEET.js → chunk-PS2NEWEX.js} +3 -3
  159. package/dist/chunk-PS2NEWEX.js.map +1 -0
  160. package/dist/chunk-PY4KJPYU.js +9 -0
  161. package/dist/chunk-PY4KJPYU.js.map +1 -0
  162. package/dist/chunk-PZ5AY32C.js +10 -0
  163. package/dist/chunk-QA2KUPCP.js +45 -0
  164. package/dist/chunk-QA2KUPCP.js.map +1 -0
  165. package/dist/chunk-QOC3VYL2.js +30 -0
  166. package/dist/chunk-QOC3VYL2.js.map +1 -0
  167. package/dist/{chunk-BVRYKATC.js → chunk-QSFOZUYL.js} +62 -34
  168. package/dist/chunk-QSFOZUYL.js.map +1 -0
  169. package/dist/chunk-RHK32N73.js +30 -0
  170. package/dist/chunk-RHK32N73.js.map +1 -0
  171. package/dist/{chunk-K3DK3NU5.js → chunk-RW3Y22MW.js} +20 -5
  172. package/dist/chunk-RW3Y22MW.js.map +1 -0
  173. package/dist/{chunk-B6PB7JLN.js → chunk-S7VFUQM2.js} +541 -6
  174. package/dist/chunk-S7VFUQM2.js.map +1 -0
  175. package/dist/chunk-SVLR4POP.js +64 -0
  176. package/dist/chunk-SVLR4POP.js.map +1 -0
  177. package/dist/chunk-T7WSLRAU.js +49 -0
  178. package/dist/chunk-T7WSLRAU.js.map +1 -0
  179. package/dist/{chunk-WPLVTJ5D.js → chunk-TAKWLZZX.js} +285 -63
  180. package/dist/chunk-TAKWLZZX.js.map +1 -0
  181. package/dist/chunk-THNJ3IKU.js +17 -0
  182. package/dist/chunk-THNJ3IKU.js.map +1 -0
  183. package/dist/{chunk-XJFLDA7A.js → chunk-TMBXVJKT.js} +9 -6
  184. package/dist/chunk-TMBXVJKT.js.map +1 -0
  185. package/dist/chunk-TWKKOM55.js +54 -0
  186. package/dist/chunk-TWKKOM55.js.map +1 -0
  187. package/dist/chunk-U3WZCU7E.js +14 -0
  188. package/dist/chunk-U3WZCU7E.js.map +1 -0
  189. package/dist/{chunk-Z6FNBOTC.js → chunk-UF362QVH.js} +15 -17
  190. package/dist/chunk-UF362QVH.js.map +1 -0
  191. package/dist/chunk-UN4FVIBH.js +135 -0
  192. package/dist/chunk-UN4FVIBH.js.map +1 -0
  193. package/dist/chunk-VEAVKDDB.js +29 -0
  194. package/dist/chunk-VEAVKDDB.js.map +1 -0
  195. package/dist/chunk-VEPTFUJY.js +29 -0
  196. package/dist/chunk-VEPTFUJY.js.map +1 -0
  197. package/dist/chunk-VJV7GKQK.js +662 -0
  198. package/dist/chunk-VJV7GKQK.js.map +1 -0
  199. package/dist/{chunk-2QR2PQTT.js → chunk-VQNJ7UZL.js} +5 -3
  200. package/dist/chunk-VQNJ7UZL.js.map +1 -0
  201. package/dist/chunk-VQRAIPYF.js +50 -0
  202. package/dist/chunk-VQRAIPYF.js.map +1 -0
  203. package/dist/{chunk-DFMLEQZB.js → chunk-VRIYFLBA.js} +5 -10
  204. package/dist/chunk-VRIYFLBA.js.map +1 -0
  205. package/dist/chunk-VWM3DAVB.js +265 -0
  206. package/dist/chunk-VWM3DAVB.js.map +1 -0
  207. package/dist/{chunk-NONAAENK.js → chunk-VWRRVE6D.js} +11 -4
  208. package/dist/chunk-VWRRVE6D.js.map +1 -0
  209. package/dist/chunk-VYYM3MEN.js +98 -0
  210. package/dist/chunk-VYYM3MEN.js.map +1 -0
  211. package/dist/chunk-WBJIQSLL.js +167 -0
  212. package/dist/chunk-WBJIQSLL.js.map +1 -0
  213. package/dist/chunk-WIGQB62E.js +164 -0
  214. package/dist/chunk-WIGQB62E.js.map +1 -0
  215. package/dist/{chunk-EMIGCR7X.js → chunk-WXSYDNBT.js} +2 -2
  216. package/dist/chunk-WXSYDNBT.js.map +1 -0
  217. package/dist/chunk-WZSCE6RM.js +466 -0
  218. package/dist/chunk-WZSCE6RM.js.map +1 -0
  219. package/dist/chunk-XGDAPN6M.js +255 -0
  220. package/dist/chunk-XGDAPN6M.js.map +1 -0
  221. package/dist/{chunk-QODLLGQ7.js → chunk-XH7XP3OL.js} +372 -37
  222. package/dist/chunk-XH7XP3OL.js.map +1 -0
  223. package/dist/chunk-XREOISSI.js +40 -0
  224. package/dist/chunk-XREOISSI.js.map +1 -0
  225. package/dist/chunk-XUBPSPKD.js +164 -0
  226. package/dist/chunk-XUBPSPKD.js.map +1 -0
  227. package/dist/chunk-Y3A5CB5G.js +247 -0
  228. package/dist/chunk-Y3A5CB5G.js.map +1 -0
  229. package/dist/{chunk-I5FOWO4J.js → chunk-YCXCR7VG.js} +52 -73
  230. package/dist/chunk-YCXCR7VG.js.map +1 -0
  231. package/dist/{chunk-A3JMGXPG.js → chunk-YMUGBZN2.js} +2 -2
  232. package/dist/chunk-YMUGBZN2.js.map +1 -0
  233. package/dist/chunk-YMVQD5Q5.js +453 -0
  234. package/dist/chunk-YMVQD5Q5.js.map +1 -0
  235. package/dist/chunk-YN5IAHN6.js +32 -0
  236. package/dist/chunk-YN5IAHN6.js.map +1 -0
  237. package/dist/{chunk-FZU343FL.js → chunk-ZJADGNYF.js} +2 -2
  238. package/dist/chunk-ZJADGNYF.js.map +1 -0
  239. package/dist/chunk-ZYJ55N7N.js +86 -0
  240. package/dist/chunk-ZYJ55N7N.js.map +1 -0
  241. package/dist/classified/index.d.ts +16 -0
  242. package/dist/classified/index.js +40 -0
  243. package/dist/classified-marker-H6YSHYNK.js +24 -0
  244. package/dist/classified-marker-H6YSHYNK.js.map +1 -0
  245. package/dist/collection-facade-LVD22JLM.js +39 -0
  246. package/dist/computed-EXDMQODG.js +11 -0
  247. package/dist/consent/index.d.ts +4 -7
  248. package/dist/consent/index.js +13 -5
  249. package/dist/consent/index.js.map +1 -1
  250. package/dist/crdt/index.d.ts +5 -2
  251. package/dist/crdt/index.js +3 -2
  252. package/dist/crdt/index.js.map +1 -1
  253. package/dist/dead-filter-HQIE2YG7.js +28 -0
  254. package/dist/dead-filter-HQIE2YG7.js.map +1 -0
  255. package/dist/decrypt-partition-IHtxEnTi.d.ts +21 -0
  256. package/dist/delegation-BJP73GAP.js +25 -0
  257. package/dist/derivations/index.d.ts +6 -9
  258. package/dist/derivations/index.js +18 -6
  259. package/dist/derive-BME7HDWO.js +21 -0
  260. package/dist/{dev-unlock-B4kDxep_.d.ts → dev-unlock-Bmm2pgJ0.d.ts} +1 -1
  261. package/dist/discriminant-BN9REW3o.d.ts +60 -0
  262. package/dist/enclave-NHORSWSF.js +125 -0
  263. package/dist/executor-FE6X4LFX.js +9 -0
  264. package/dist/executor-KSHKRJXP.js +25 -0
  265. package/dist/executor-ZHTJJICG.js +9 -0
  266. package/dist/export-accessible-DACHM5VT.js +23 -0
  267. package/dist/extract-partition-RNENZZ4T.js +36 -0
  268. package/dist/fanout-sidecar-OFWN3NM7.js +74 -0
  269. package/dist/fanout-sidecar-OFWN3NM7.js.map +1 -0
  270. package/dist/fence-watcher-DHQ775JB.js +69 -0
  271. package/dist/fence-watcher-DHQ775JB.js.map +1 -0
  272. package/dist/find-BNGBJNKP.js +11 -0
  273. package/dist/forget/index.d.ts +36 -0
  274. package/dist/forget/index.js +25 -0
  275. package/dist/forget/index.js.map +1 -0
  276. package/dist/guards/index.d.ts +12 -9
  277. package/dist/guards/index.js +12 -5
  278. package/dist/{hash-DdpVypUp.d.cts → hash-DAJjMsCE.d.ts} +10 -1
  279. package/dist/history/index.d.ts +5 -8
  280. package/dist/history/index.js +25 -12
  281. package/dist/history/index.js.map +1 -1
  282. package/dist/i18n/index.d.ts +25 -8
  283. package/dist/i18n/index.js +137 -29
  284. package/dist/i18n/index.js.map +1 -1
  285. package/dist/in/index.d.ts +4 -0
  286. package/dist/in/index.js +1 -0
  287. package/dist/in/index.js.map +1 -0
  288. package/dist/index-B9QdHytu.d.ts +123 -0
  289. package/dist/index-DjWbxsjb.d.ts +23579 -0
  290. package/dist/index-qwuNvO2B.d.ts +144 -0
  291. package/dist/index.d.ts +1179 -449
  292. package/dist/index.js +2524 -312
  293. package/dist/index.js.map +1 -1
  294. package/dist/indexing/index.d.ts +5 -3
  295. package/dist/indexing/index.js +6 -5
  296. package/dist/indexing/index.js.map +1 -1
  297. package/dist/issue-NDI4CVZU.js +19 -0
  298. package/dist/issue-NDI4CVZU.js.map +1 -0
  299. package/dist/json-schema-I22JCYCG.js +44 -0
  300. package/dist/json-schema-I22JCYCG.js.map +1 -0
  301. package/dist/lazy/index.d.ts +20 -0
  302. package/dist/lazy/index.js +12 -0
  303. package/dist/lazy/index.js.map +1 -0
  304. package/dist/ledger-6NDS2EO4.js +42 -0
  305. package/dist/ledger-6NDS2EO4.js.map +1 -0
  306. package/dist/liberate-HN3RIGIP.js +24 -0
  307. package/dist/liberate-HN3RIGIP.js.map +1 -0
  308. package/dist/link-set-SJB2MVJV.js +31 -0
  309. package/dist/link-set-SJB2MVJV.js.map +1 -0
  310. package/dist/materialized-views/index.d.ts +23 -20
  311. package/dist/materialized-views/index.js +26 -12
  312. package/dist/mime-magic-bBj5OgUC.d.ts +103 -0
  313. package/dist/noydb-BWF6EPIR.js +66 -0
  314. package/dist/noydb-BWF6EPIR.js.map +1 -0
  315. package/dist/on/index.d.ts +4 -0
  316. package/dist/on/index.js +17 -0
  317. package/dist/on/index.js.map +1 -0
  318. package/dist/overlay-views/index.d.ts +26 -11
  319. package/dist/overlay-views/index.js +7 -6
  320. package/dist/periods/index.d.ts +4 -7
  321. package/dist/periods/index.js +27 -9
  322. package/dist/pod/index.d.ts +62 -0
  323. package/dist/pod/index.js +67 -0
  324. package/dist/pod/index.js.map +1 -0
  325. package/dist/policy-WGNAG5H6.js +41 -0
  326. package/dist/policy-WGNAG5H6.js.map +1 -0
  327. package/dist/portability/index.d.ts +19 -0
  328. package/dist/portability/index.js +43 -0
  329. package/dist/portability/index.js.map +1 -0
  330. package/dist/post-register-CWKBQRC7.js +55 -0
  331. package/dist/post-register-CWKBQRC7.js.map +1 -0
  332. package/dist/{public-envelope-BW6OXORV.js → public-envelope-EJLVIFX7.js} +6 -5
  333. package/dist/public-envelope-EJLVIFX7.js.map +1 -0
  334. package/dist/query/index.d.ts +4 -3
  335. package/dist/query/index.js +24 -13
  336. package/dist/read-only-facade-CHCKSEPD.js +8 -0
  337. package/dist/read-only-facade-CHCKSEPD.js.map +1 -0
  338. package/dist/register-SBIX7TVV.js +23 -0
  339. package/dist/register-SBIX7TVV.js.map +1 -0
  340. package/dist/registry-3EQG6OOE.js +18 -0
  341. package/dist/registry-3EQG6OOE.js.map +1 -0
  342. package/dist/registry-CA327ACV.js +9 -0
  343. package/dist/registry-CA327ACV.js.map +1 -0
  344. package/dist/registry-E7OXOTSV.js +19 -0
  345. package/dist/registry-E7OXOTSV.js.map +1 -0
  346. package/dist/registry-VW6P6A3J.js +8 -0
  347. package/dist/registry-VW6P6A3J.js.map +1 -0
  348. package/dist/request-withdrawal-KAH2AAXC.js +31 -0
  349. package/dist/request-withdrawal-KAH2AAXC.js.map +1 -0
  350. package/dist/reveal-R3JLHMUF.js +38 -0
  351. package/dist/reveal-R3JLHMUF.js.map +1 -0
  352. package/dist/revoke-IXLOJ3IH.js +24 -0
  353. package/dist/revoke-IXLOJ3IH.js.map +1 -0
  354. package/dist/satellites/index.d.ts +4 -0
  355. package/dist/satellites/index.js +8 -0
  356. package/dist/satellites/index.js.map +1 -0
  357. package/dist/sealed-record/index.d.ts +68 -0
  358. package/dist/sealed-record/index.js +71 -0
  359. package/dist/sealed-record/index.js.map +1 -0
  360. package/dist/session/index.d.ts +5 -8
  361. package/dist/session/index.js +13 -5
  362. package/dist/session/index.js.map +1 -1
  363. package/dist/shadow/index.d.ts +4 -7
  364. package/dist/shadow/index.js +4 -3
  365. package/dist/shadow/index.js.map +1 -1
  366. package/dist/signer-Y46N2GJ3.js +25 -0
  367. package/dist/signer-Y46N2GJ3.js.map +1 -0
  368. package/dist/snapshots/index.d.ts +5 -8
  369. package/dist/snapshots/index.js +19 -11
  370. package/dist/snapshots/index.js.map +1 -1
  371. package/dist/{stale-6ZDBTQT7.js → stale-Z7IW6RIL.js} +3 -2
  372. package/dist/stale-Z7IW6RIL.js.map +1 -0
  373. package/dist/storage-ADNP2UWI.js +23 -0
  374. package/dist/storage-ADNP2UWI.js.map +1 -0
  375. package/dist/store-coordination-provider-DTDMI6VL.js +142 -0
  376. package/dist/store-coordination-provider-DTDMI6VL.js.map +1 -0
  377. package/dist/subject-index-CyOgGMJL.d.ts +380 -0
  378. package/dist/sync/index.d.ts +3 -6
  379. package/dist/sync/index.js +13 -6
  380. package/dist/sync/index.js.map +1 -1
  381. package/dist/team/index.d.ts +46 -10
  382. package/dist/team/index.js +35 -18
  383. package/dist/tiers/index.d.ts +4 -0
  384. package/dist/tiers/index.js +39 -0
  385. package/dist/tiers/index.js.map +1 -0
  386. package/dist/to/index.d.ts +4 -0
  387. package/dist/to/index.js +16 -0
  388. package/dist/to/index.js.map +1 -0
  389. package/dist/transition-guard-DI-krBsZ.d.ts +165 -0
  390. package/dist/tx/index.d.ts +22 -9
  391. package/dist/tx/index.js +13 -8
  392. package/dist/tx/index.js.map +1 -1
  393. package/dist/ui/index.d.ts +4 -0
  394. package/dist/ui/index.js +1 -0
  395. package/dist/ui/index.js.map +1 -0
  396. package/dist/ulid-DRH25k3y.d.ts +66 -0
  397. package/dist/ulid-PTAIMDG4.js +10 -0
  398. package/dist/ulid-PTAIMDG4.js.map +1 -0
  399. package/dist/util/index.d.ts +2 -0
  400. package/dist/util/index.js +7 -2
  401. package/dist/util/index.js.map +1 -1
  402. package/dist/validators-BUcli5Nh.d.ts +101 -0
  403. package/dist/vault-diff-Z2DUayMe.d.ts +147 -0
  404. package/dist/verify-JPF2YR5E.js +139 -0
  405. package/dist/verify-JPF2YR5E.js.map +1 -0
  406. package/dist/walk-XYA2O3LW.js +241 -0
  407. package/dist/walk-XYA2O3LW.js.map +1 -0
  408. package/dist/with/index.d.ts +37 -0
  409. package/dist/with/index.js +31 -0
  410. package/dist/with/index.js.map +1 -0
  411. package/dist/{with-materialized-view-BLkQxoQN.d.ts → with-materialized-view-BUmzlXue.d.ts} +1 -1
  412. package/dist/{with-overlayed-view-CRsSEwHR.d.ts → with-overlayed-view-m4FaXXTO.d.ts} +2 -3
  413. package/dist/with-rollup-DEKGI9vb.d.ts +47 -0
  414. package/dist/withdraw-accessible-WLV4MTEN.js +28 -0
  415. package/dist/withdraw-accessible-WLV4MTEN.js.map +1 -0
  416. package/dist/zod-HAJM7LMS.js +14763 -0
  417. package/dist/zod-HAJM7LMS.js.map +1 -0
  418. package/package.json +122 -202
  419. package/dist/aggregate/index.cjs.map +0 -1
  420. package/dist/aggregate/index.d.cts +0 -38
  421. package/dist/attestation/index.cjs +0 -305
  422. package/dist/attestation/index.cjs.map +0 -1
  423. package/dist/attestation/index.d.cts +0 -52
  424. package/dist/blobs/index.cjs +0 -1480
  425. package/dist/blobs/index.cjs.map +0 -1
  426. package/dist/blobs/index.d.cts +0 -46
  427. package/dist/bundle/index.cjs +0 -19264
  428. package/dist/bundle/index.cjs.map +0 -1
  429. package/dist/bundle/index.d.cts +0 -176
  430. package/dist/chunk-22DWZL57.js.map +0 -1
  431. package/dist/chunk-2GLDA55J.js.map +0 -1
  432. package/dist/chunk-2QR2PQTT.js.map +0 -1
  433. package/dist/chunk-2WUSG3IT.js.map +0 -1
  434. package/dist/chunk-3BFJOWSU.js.map +0 -1
  435. package/dist/chunk-3YPCK6JX.js.map +0 -1
  436. package/dist/chunk-53XBRIRT.js.map +0 -1
  437. package/dist/chunk-5T22KDPN.js.map +0 -1
  438. package/dist/chunk-5XHKQ56N.js +0 -340
  439. package/dist/chunk-5XHKQ56N.js.map +0 -1
  440. package/dist/chunk-6CME4UEK.js +0 -10329
  441. package/dist/chunk-6CME4UEK.js.map +0 -1
  442. package/dist/chunk-6STK5TQP.js +0 -139
  443. package/dist/chunk-6STK5TQP.js.map +0 -1
  444. package/dist/chunk-A3JMGXPG.js.map +0 -1
  445. package/dist/chunk-B6PB7JLN.js.map +0 -1
  446. package/dist/chunk-BVRYKATC.js.map +0 -1
  447. package/dist/chunk-DE6GKS6G.js +0 -79
  448. package/dist/chunk-DE6GKS6G.js.map +0 -1
  449. package/dist/chunk-DFMLEQZB.js.map +0 -1
  450. package/dist/chunk-DJHHA6XH.js.map +0 -1
  451. package/dist/chunk-DL3HWOQ5.js.map +0 -1
  452. package/dist/chunk-DONMZAD2.js.map +0 -1
  453. package/dist/chunk-EMIGCR7X.js.map +0 -1
  454. package/dist/chunk-F3GDRNUT.js.map +0 -1
  455. package/dist/chunk-FZU343FL.js.map +0 -1
  456. package/dist/chunk-H2X3ISXG.js.map +0 -1
  457. package/dist/chunk-HNRHLRDC.js.map +0 -1
  458. package/dist/chunk-I5FOWO4J.js.map +0 -1
  459. package/dist/chunk-J66GRPNH.js.map +0 -1
  460. package/dist/chunk-JWRVQKRZ.js.map +0 -1
  461. package/dist/chunk-K3DK3NU5.js.map +0 -1
  462. package/dist/chunk-ML236QKC.js.map +0 -1
  463. package/dist/chunk-NONAAENK.js.map +0 -1
  464. package/dist/chunk-O3VZPBZG.js.map +0 -1
  465. package/dist/chunk-OIF6LZUR.js.map +0 -1
  466. package/dist/chunk-OQ6PIGHA.js +0 -19
  467. package/dist/chunk-OQ6PIGHA.js.map +0 -1
  468. package/dist/chunk-PE2FR4J3.js.map +0 -1
  469. package/dist/chunk-PP6W64Y3.js.map +0 -1
  470. package/dist/chunk-PX35GA7L.js.map +0 -1
  471. package/dist/chunk-QEILDE6R.js +0 -793
  472. package/dist/chunk-QEILDE6R.js.map +0 -1
  473. package/dist/chunk-QODLLGQ7.js.map +0 -1
  474. package/dist/chunk-RAZ4OVLL.js +0 -51
  475. package/dist/chunk-RAZ4OVLL.js.map +0 -1
  476. package/dist/chunk-SYMWGEET.js.map +0 -1
  477. package/dist/chunk-T7JEBOGN.js.map +0 -1
  478. package/dist/chunk-TFBP23BX.js.map +0 -1
  479. package/dist/chunk-TV3YZ35S.js.map +0 -1
  480. package/dist/chunk-U26HQ6KJ.js.map +0 -1
  481. package/dist/chunk-UF3BUNQZ.js +0 -1
  482. package/dist/chunk-UMLVJTYV.js +0 -20
  483. package/dist/chunk-UMLVJTYV.js.map +0 -1
  484. package/dist/chunk-VTKGMEPP.js.map +0 -1
  485. package/dist/chunk-W6EQLGMB.js +0 -100
  486. package/dist/chunk-W6EQLGMB.js.map +0 -1
  487. package/dist/chunk-WIRRPTFH.js +0 -17
  488. package/dist/chunk-WIRRPTFH.js.map +0 -1
  489. package/dist/chunk-WPLVTJ5D.js.map +0 -1
  490. package/dist/chunk-XJFLDA7A.js.map +0 -1
  491. package/dist/chunk-Z6FNBOTC.js.map +0 -1
  492. package/dist/chunk-ZYWZWG6G.js.map +0 -1
  493. package/dist/consent/index.cjs +0 -204
  494. package/dist/consent/index.cjs.map +0 -1
  495. package/dist/consent/index.d.cts +0 -25
  496. package/dist/crdt/index.cjs +0 -152
  497. package/dist/crdt/index.cjs.map +0 -1
  498. package/dist/crdt/index.d.cts +0 -30
  499. package/dist/crypto-HTZ4FJOP.js +0 -44
  500. package/dist/delegation-RI54P6I5.js +0 -17
  501. package/dist/derivations/index.cjs +0 -351
  502. package/dist/derivations/index.cjs.map +0 -1
  503. package/dist/derivations/index.d.cts +0 -72
  504. package/dist/dev-unlock-BIoEFbwm.d.cts +0 -263
  505. package/dist/executor-5PNY7LGW.js +0 -8
  506. package/dist/executor-B4QIYGZX.js +0 -8
  507. package/dist/executor-BWXXDQ7K.js +0 -11
  508. package/dist/fanout-sidecar-OKPMMPLG.js +0 -51
  509. package/dist/fanout-sidecar-OKPMMPLG.js.map +0 -1
  510. package/dist/guards/index.cjs +0 -322
  511. package/dist/guards/index.cjs.map +0 -1
  512. package/dist/guards/index.d.cts +0 -31
  513. package/dist/hash-HJqD14vS.d.ts +0 -63
  514. package/dist/history/index.cjs +0 -1222
  515. package/dist/history/index.cjs.map +0 -1
  516. package/dist/history/index.d.cts +0 -63
  517. package/dist/i18n/index.cjs +0 -1100
  518. package/dist/i18n/index.cjs.map +0 -1
  519. package/dist/i18n/index.d.cts +0 -39
  520. package/dist/index-4fBVt8j9.d.cts +0 -2387
  521. package/dist/index-D8I_pyJD.d.ts +0 -2387
  522. package/dist/index.cjs +0 -24487
  523. package/dist/index.cjs.map +0 -1
  524. package/dist/index.d.cts +0 -776
  525. package/dist/indexing/index.cjs +0 -742
  526. package/dist/indexing/index.cjs.map +0 -1
  527. package/dist/indexing/index.d.cts +0 -36
  528. package/dist/issue-VGDPP4B5.js +0 -12
  529. package/dist/lazy-builder-7tIpFyWN.d.ts +0 -304
  530. package/dist/lazy-builder-wY4pMCEe.d.cts +0 -304
  531. package/dist/ledger-TMRZYNVJ.js +0 -33
  532. package/dist/materialized-views/index.cjs +0 -854
  533. package/dist/materialized-views/index.cjs.map +0 -1
  534. package/dist/materialized-views/index.d.cts +0 -186
  535. package/dist/mime-magic-CBBSOkjm.d.cts +0 -50
  536. package/dist/mime-magic-CBBSOkjm.d.ts +0 -50
  537. package/dist/noydb-G725ZSZG.js +0 -34
  538. package/dist/overlay-views/index.cjs +0 -359
  539. package/dist/overlay-views/index.cjs.map +0 -1
  540. package/dist/overlay-views/index.d.cts +0 -82
  541. package/dist/periods/index.cjs +0 -1041
  542. package/dist/periods/index.cjs.map +0 -1
  543. package/dist/periods/index.d.cts +0 -22
  544. package/dist/predicate-BSAGEyu5.d.cts +0 -209
  545. package/dist/predicate-BSAGEyu5.d.ts +0 -209
  546. package/dist/query/index.cjs +0 -2375
  547. package/dist/query/index.cjs.map +0 -1
  548. package/dist/query/index.d.cts +0 -3
  549. package/dist/read-only-facade-ITU6L7BL.js +0 -7
  550. package/dist/registry-3QP3YKQS.js +0 -8
  551. package/dist/registry-DKEXOJVO.js +0 -7
  552. package/dist/registry-OJIOSBV6.js +0 -10
  553. package/dist/registry-USRVT6YF.js +0 -8
  554. package/dist/revoke-JCC7N56X.js +0 -17
  555. package/dist/session/index.cjs +0 -495
  556. package/dist/session/index.cjs.map +0 -1
  557. package/dist/session/index.d.cts +0 -46
  558. package/dist/shadow/index.cjs +0 -133
  559. package/dist/shadow/index.cjs.map +0 -1
  560. package/dist/shadow/index.d.cts +0 -17
  561. package/dist/signer-72QAUSVW.js +0 -18
  562. package/dist/snapshots/index.cjs +0 -937
  563. package/dist/snapshots/index.cjs.map +0 -1
  564. package/dist/snapshots/index.d.cts +0 -28
  565. package/dist/store/index.cjs +0 -1083
  566. package/dist/store/index.cjs.map +0 -1
  567. package/dist/store/index.d.cts +0 -492
  568. package/dist/store/index.d.ts +0 -492
  569. package/dist/store/index.js +0 -37
  570. package/dist/strategy-BSxFXGzb.d.cts +0 -110
  571. package/dist/strategy-BSxFXGzb.d.ts +0 -110
  572. package/dist/strategy-DSTrsZ8t.d.cts +0 -601
  573. package/dist/strategy-DSTrsZ8t.d.ts +0 -601
  574. package/dist/sync/index.cjs +0 -1062
  575. package/dist/sync/index.cjs.map +0 -1
  576. package/dist/sync/index.d.cts +0 -43
  577. package/dist/team/index.cjs +0 -2798
  578. package/dist/team/index.cjs.map +0 -1
  579. package/dist/team/index.d.cts +0 -118
  580. package/dist/tx/index.cjs +0 -544
  581. package/dist/tx/index.cjs.map +0 -1
  582. package/dist/tx/index.d.cts +0 -21
  583. package/dist/types-Df28QFKb.d.ts +0 -12818
  584. package/dist/types-DyXYr8rE.d.cts +0 -12818
  585. package/dist/ulid-COREQ2RQ.js +0 -9
  586. package/dist/ulid-Drr7ykr6.d.cts +0 -603
  587. package/dist/util/index.cjs +0 -230
  588. package/dist/util/index.cjs.map +0 -1
  589. package/dist/util/index.d.cts +0 -77
  590. package/dist/with-derivation-DFnFByiQ.d.ts +0 -13
  591. package/dist/with-derivation-DU3Sjazm.d.cts +0 -13
  592. package/dist/with-guard-ByyxmEe7.d.cts +0 -18
  593. package/dist/with-guard-qube6BMI.d.ts +0 -18
  594. package/dist/with-materialized-view-BmEToIR1.d.cts +0 -27
  595. package/dist/with-overlayed-view-BMsQQbWm.d.cts +0 -13
  596. /package/dist/{chunk-UF3BUNQZ.js.map → api-TX2EX2FX.js.map} +0 -0
  597. /package/dist/{store → as}/index.js.map +0 -0
  598. /package/dist/{crypto-HTZ4FJOP.js.map → at/index.js.map} +0 -0
  599. /package/dist/{delegation-RI54P6I5.js.map → by/index.js.map} +0 -0
  600. /package/dist/{executor-5PNY7LGW.js.map → cargo/index.js.map} +0 -0
  601. /package/dist/{executor-B4QIYGZX.js.map → chunk-CHFZDSE4.js.map} +0 -0
  602. /package/dist/{executor-BWXXDQ7K.js.map → chunk-GHVIKOHT.js.map} +0 -0
  603. /package/dist/{issue-VGDPP4B5.js.map → chunk-PZ5AY32C.js.map} +0 -0
  604. /package/dist/{ledger-TMRZYNVJ.js.map → classified/index.js.map} +0 -0
  605. /package/dist/{noydb-G725ZSZG.js.map → collection-facade-LVD22JLM.js.map} +0 -0
  606. /package/dist/{public-envelope-BW6OXORV.js.map → computed-EXDMQODG.js.map} +0 -0
  607. /package/dist/{read-only-facade-ITU6L7BL.js.map → delegation-BJP73GAP.js.map} +0 -0
  608. /package/dist/{registry-3QP3YKQS.js.map → derive-BME7HDWO.js.map} +0 -0
  609. /package/dist/{registry-DKEXOJVO.js.map → enclave-NHORSWSF.js.map} +0 -0
  610. /package/dist/{registry-OJIOSBV6.js.map → executor-FE6X4LFX.js.map} +0 -0
  611. /package/dist/{registry-USRVT6YF.js.map → executor-KSHKRJXP.js.map} +0 -0
  612. /package/dist/{revoke-JCC7N56X.js.map → executor-ZHTJJICG.js.map} +0 -0
  613. /package/dist/{signer-72QAUSVW.js.map → export-accessible-DACHM5VT.js.map} +0 -0
  614. /package/dist/{stale-6ZDBTQT7.js.map → extract-partition-RNENZZ4T.js.map} +0 -0
  615. /package/dist/{ulid-COREQ2RQ.js.map → find-BNGBJNKP.js.map} +0 -0
@@ -1,22 +1,27 @@
1
1
  import {
2
- NOYDB_FORMAT_VERSION
3
- } from "./chunk-WIRRPTFH.js";
2
+ openEnvelopeJson
3
+ } from "./chunk-MCHVVJIA.js";
4
4
  import {
5
5
  base64ToBuffer,
6
6
  bufferToBase64,
7
- decrypt,
8
7
  decryptBytesWithAAD,
9
8
  encrypt,
10
9
  encryptBytesWithAAD,
10
+ generateDEK,
11
11
  hmacSha256Hex,
12
- sha256Hex
13
- } from "./chunk-PP6W64Y3.js";
12
+ sha256Hex,
13
+ unwrapCek,
14
+ wrapCek
15
+ } from "./chunk-3OPY6MK2.js";
16
+ import {
17
+ NOYDB_FORMAT_VERSION
18
+ } from "./chunk-YN5IAHN6.js";
14
19
  import {
15
20
  ConflictError,
16
21
  NotFoundError
17
- } from "./chunk-B6PB7JLN.js";
22
+ } from "./chunk-S7VFUQM2.js";
18
23
 
19
- // src/blobs/mime-magic.ts
24
+ // src/with-shape/blobs/mime-magic.ts
20
25
  function hex(s) {
21
26
  return new Uint8Array(s.split(" ").map((b) => parseInt(b, 16)));
22
27
  }
@@ -228,7 +233,7 @@ var PRE_COMPRESSED_MIMES = new Set(
228
233
  MAGIC_RULES.filter((r) => r.preCompressed).map((r) => r.mime)
229
234
  );
230
235
 
231
- // src/blobs/blob-set.ts
236
+ // src/with-shape/blobs/blob-set.ts
232
237
  var BLOB_COLLECTION = "_blob";
233
238
  var BLOB_INDEX_COLLECTION = "_blob_index";
234
239
  var BLOB_CHUNKS_COLLECTION = "_blob_chunks";
@@ -240,11 +245,8 @@ async function compressBytes(data) {
240
245
  if (typeof CompressionStream === "undefined") {
241
246
  return { bytes: data, algorithm: "none" };
242
247
  }
243
- const cs = new CompressionStream("gzip");
244
- const writer = cs.writable.getWriter();
245
- await writer.write(data);
246
- await writer.close();
247
- const buf = await new Response(cs.readable).arrayBuffer();
248
+ const piped = new Response(data).body.pipeThrough(new CompressionStream("gzip"));
249
+ const buf = await new Response(piped).arrayBuffer();
248
250
  return { bytes: new Uint8Array(buf), algorithm: "gzip" };
249
251
  }
250
252
  async function decompressBytes(data) {
@@ -253,11 +255,8 @@ async function decompressBytes(data) {
253
255
  "[noy-db] DecompressionStream not available \u2014 cannot decompress blob chunk"
254
256
  );
255
257
  }
256
- const ds = new DecompressionStream("gzip");
257
- const writer = ds.writable.getWriter();
258
- await writer.write(data);
259
- await writer.close();
260
- const buf = await new Response(ds.readable).arrayBuffer();
258
+ const piped = new Response(data).body.pipeThrough(new DecompressionStream("gzip"));
259
+ const buf = await new Response(piped).arrayBuffer();
261
260
  return new Uint8Array(buf);
262
261
  }
263
262
  function concatChunks(chunks) {
@@ -282,6 +281,10 @@ var BlobSet = class {
282
281
  encrypted;
283
282
  userId;
284
283
  maxBlobBytes;
284
+ erasableBlobs;
285
+ debugPlaintext;
286
+ objectStore;
287
+ blobFields;
285
288
  constructor(opts) {
286
289
  this.store = opts.store;
287
290
  this.vault = opts.vault;
@@ -291,6 +294,24 @@ var BlobSet = class {
291
294
  this.encrypted = opts.encrypted;
292
295
  this.userId = opts.userId;
293
296
  this.maxBlobBytes = opts.maxBlobBytes;
297
+ this.erasableBlobs = opts.erasableBlobs === true;
298
+ this.debugPlaintext = opts.debugPlaintext === true;
299
+ this.objectStore = opts.objectStore;
300
+ this.blobFields = opts.blobFields;
301
+ }
302
+ /**
303
+ * Resolve the key the blob's CHUNKS are encrypted under.
304
+ *
305
+ * - `_cek` present (erasable blob) → unwrap the per-blob content CEK under
306
+ * the `_blob` DEK. Deleting the BlobObject (at `refCount → 0`) makes this
307
+ * key unrecoverable → the chunks are crypto-shredded.
308
+ * - `_cek` absent (legacy) → the `_blob` DEK encrypts chunks directly.
309
+ * - unencrypted vault → `null` (chunks stored as plaintext base64).
310
+ */
311
+ async resolveChunkKey(blob) {
312
+ if (!this.encrypted) return null;
313
+ const blobDEK = await this.getDEK(BLOB_COLLECTION);
314
+ return blob._cek !== void 0 ? await unwrapCek(blob._cek, blobDEK) : blobDEK;
294
315
  }
295
316
  /** The internal collection that holds slot metadata for this collection's blobs. */
296
317
  get slotsCollection() {
@@ -311,7 +332,7 @@ var BlobSet = class {
311
332
  };
312
333
  }
313
334
  const dek = await this.getDEK(this.collection);
314
- const json = await decrypt(envelope._iv, envelope._data, dek);
335
+ const json = await openEnvelopeJson(envelope, dek);
315
336
  return {
316
337
  slots: JSON.parse(json),
317
338
  version: envelope._v
@@ -374,7 +395,7 @@ var BlobSet = class {
374
395
  return { blob: JSON.parse(envelope._data), version: envelope._v };
375
396
  }
376
397
  const dek = await this.getDEK(BLOB_COLLECTION);
377
- const json = await decrypt(envelope._iv, envelope._data, dek);
398
+ const json = await openEnvelopeJson(envelope, dek);
378
399
  return { blob: JSON.parse(json), version: envelope._v };
379
400
  }
380
401
  async writeBlobObject(blob, expectedVersion) {
@@ -408,12 +429,163 @@ var BlobSet = class {
408
429
  const updated = { ...blob, refCount: blob.refCount + delta };
409
430
  try {
410
431
  await this.writeBlobObject(updated, version);
432
+ return updated.refCount;
433
+ } catch (err) {
434
+ if (err instanceof ConflictError && attempt < MAX_CAS_RETRIES - 1) continue;
435
+ throw err;
436
+ }
437
+ }
438
+ throw new ConflictError(-1);
439
+ }
440
+ /**
441
+ * Release `n` references to a blob and reclaim it at refCount 0.
442
+ *
443
+ * The single reclaim choke point for every reference-drop path — slot
444
+ * delete/overwrite, published-version delete, and `forget()` shred — so the
445
+ * refCount-0 policy is uniform:
446
+ * - **erasable blob** (`_cek` present) → delete the `BlobObject` (the SOLE
447
+ * copy of the wrapped content CEK → chunks permanently undecryptable) and
448
+ * reclaim the chunks. The crypto-shred is EAGER on every path: GDPR erasure
449
+ * must not wait on orphan retention.
450
+ * - **legacy blob** (no `_cek`) → reclaimed only when `reclaimLegacy` (the
451
+ * `forget()` erasure path); otherwise left for deferred GC so the existing
452
+ * `BlobLifecyclePolicy.orphanRetentionDays` semantics are preserved.
453
+ *
454
+ * @returns `'shredded'` (erasable, refCount 0, chunks dead) · `'retainedShared'`
455
+ * (erasable, still referenced) · `'residue'` (legacy — not a crypto-shred).
456
+ */
457
+ async releaseRef(eTag, n, reclaimLegacy) {
458
+ const loaded = await this.loadBlobObject(eTag);
459
+ if (!loaded) return "shredded";
460
+ const erasable = loaded.blob._cek !== void 0;
461
+ const remaining = await this.casUpdateRefCount(eTag, -n);
462
+ if (remaining > 0) return erasable ? "retainedShared" : "residue";
463
+ if (erasable || reclaimLegacy) {
464
+ await this.store.delete(this.vault, BLOB_INDEX_COLLECTION, eTag);
465
+ for (let i = 0; i < loaded.blob.chunkCount; i++) {
466
+ await this.store.delete(this.vault, BLOB_CHUNKS_COLLECTION, `${eTag}_${i}`);
467
+ }
468
+ }
469
+ return erasable ? "shredded" : "residue";
470
+ }
471
+ /**
472
+ * Crypto-shred this record's blob attachments — called by
473
+ * `vault.forget()`.
474
+ *
475
+ * For each distinct eTag the record references (a record may attach the same
476
+ * content under several slot names → several refCount holds): decrement the
477
+ * blob's refCount by that many. When it reaches 0:
478
+ * - **erasable blob** (`_cek` present) → delete the `BlobObject` (the SOLE
479
+ * recoverable copy of the wrapped content CEK → chunks permanently
480
+ * undecryptable) and reclaim the chunk bytes. This is the crypto-shred.
481
+ * - **legacy blob** (no `_cek`) → chunks are under the shared `_blob` DEK and
482
+ * stay decryptable until byte-deleted; we delete the orphaned chunks +
483
+ * index but report it as residue, not a cryptographic erasure.
484
+ * When refCount stays > 0 the content legitimately persists for its other
485
+ * owner — reported as `retainedShared` (or `residue` if legacy).
486
+ *
487
+ * Finally drops the record's slot map, severing the subject's link.
488
+ */
489
+ async shredAllForRecord() {
490
+ const { slots } = await this.loadSlots();
491
+ const slotNames = Object.keys(slots);
492
+ const shredded = [];
493
+ const retainedShared = [];
494
+ const residue = [];
495
+ if (slotNames.length === 0) return { shredded, retainedShared, residue };
496
+ const holds = /* @__PURE__ */ new Map();
497
+ for (const name of slotNames) {
498
+ const eTag = slots[name].eTag;
499
+ holds.set(eTag, (holds.get(eTag) ?? 0) + 1);
500
+ }
501
+ for (const [eTag, n] of holds) {
502
+ const outcome = await this.releaseRef(eTag, n, true);
503
+ if (outcome === "shredded") shredded.push(eTag);
504
+ else if (outcome === "retainedShared") retainedShared.push(eTag);
505
+ else residue.push(eTag);
506
+ }
507
+ await this.store.delete(this.vault, this.slotsCollection, this.recordId);
508
+ return { shredded, retainedShared, residue };
509
+ }
510
+ /** CAS retry loop for an arbitrary BlobObject mutation. */
511
+ async casUpdateBlobObject(eTag, mutate) {
512
+ for (let attempt = 0; attempt < MAX_CAS_RETRIES; attempt++) {
513
+ const result = await this.loadBlobObject(eTag);
514
+ if (!result) throw new NotFoundError(`BlobObject ${eTag} not found`);
515
+ try {
516
+ await this.writeBlobObject(mutate(result.blob), result.version);
411
517
  return;
412
518
  } catch (err) {
413
519
  if (err instanceof ConflictError && attempt < MAX_CAS_RETRIES - 1) continue;
414
520
  throw err;
415
521
  }
416
522
  }
523
+ throw new ConflictError(-1);
524
+ }
525
+ /**
526
+ * Migrate this record's LEGACY blobs (no `_cek`, chunks under the shared
527
+ * `_blob` DEK) to per-blob content CEKs so they become crypto-shreddable.
528
+ * Returns the eTags migrated vs. already-erasable.
529
+ *
530
+ * **Explicit maintenance pass** (mirrors the record-CEK migration posture):
531
+ * re-encrypts the existing compressed chunks IN PLACE under a fresh content
532
+ * CEK — preserving the eTag, chunkCount, chunkSize, and compression — then
533
+ * flips the `_cek` discriminant. Crash-safe + idempotent via `_cekPending`:
534
+ * 1. persist the wrapped content CEK in `_cekPending` (readers ignore it →
535
+ * the blob stays readable under the `_blob` DEK; the key survives a crash);
536
+ * 2. re-encrypt each chunk under the content CEK (a resume reads an
537
+ * already-migrated chunk under the content CEK, else under the `_blob` DEK);
538
+ * 3. promote `_cekPending` → `_cek` (atomic flip). Reads now use the CEK.
539
+ * A re-run after a crash resumes from whichever phase was reached.
540
+ *
541
+ * Dedup-safe: migrating a shared blob (refCount > 1) re-keys it for every
542
+ * referencer at once; a non-erasable collection still reads it (it unwraps
543
+ * `_cek` under the `_blob` DEK it holds).
544
+ */
545
+ async migrate() {
546
+ const migrated = [];
547
+ const alreadyErasable = [];
548
+ if (!this.encrypted) return { migrated, alreadyErasable };
549
+ const blobDEK = await this.getDEK(BLOB_COLLECTION);
550
+ const { slots } = await this.loadSlots();
551
+ const eTags = new Set(Object.values(slots).map((s) => s.eTag));
552
+ for (const eTag of eTags) {
553
+ const loaded = await this.loadBlobObject(eTag);
554
+ if (!loaded) continue;
555
+ const blob = loaded.blob;
556
+ if (blob._cek !== void 0) {
557
+ alreadyErasable.push(eTag);
558
+ continue;
559
+ }
560
+ let contentCek;
561
+ if (blob._cekPending !== void 0) {
562
+ contentCek = await unwrapCek(blob._cekPending, blobDEK);
563
+ } else {
564
+ contentCek = await generateDEK();
565
+ const wrapped = await wrapCek(contentCek, blobDEK);
566
+ await this.casUpdateBlobObject(eTag, (b) => ({ ...b, _cekPending: wrapped }));
567
+ }
568
+ for (let i = 0; i < blob.chunkCount; i++) {
569
+ let raw;
570
+ try {
571
+ raw = await this.readChunk(eTag, i, blob.chunkCount, blobDEK);
572
+ } catch {
573
+ raw = await this.readChunk(eTag, i, blob.chunkCount, contentCek);
574
+ }
575
+ if (!raw) {
576
+ throw new NotFoundError(
577
+ `Blob chunk ${i}/${blob.chunkCount} missing for eTag "${eTag}" during migration`
578
+ );
579
+ }
580
+ await this.writeChunk(eTag, i, blob.chunkCount, raw, contentCek);
581
+ }
582
+ await this.casUpdateBlobObject(eTag, (b) => {
583
+ const { _cekPending, ...rest } = b;
584
+ return _cekPending === void 0 ? b : { ...rest, _cek: _cekPending };
585
+ });
586
+ migrated.push(eTag);
587
+ }
588
+ return { migrated, alreadyErasable };
417
589
  }
418
590
  // ─── Chunk I/O (with AAD binding) ─────────────────────────────────
419
591
  async writeChunk(eTag, index, chunkCount, chunk, dek) {
@@ -456,7 +628,7 @@ var BlobSet = class {
456
628
  return JSON.parse(envelope._data);
457
629
  }
458
630
  const dek = await this.getDEK(this.collection);
459
- const json = await decrypt(envelope._iv, envelope._data, dek);
631
+ const json = await openEnvelopeJson(envelope, dek);
460
632
  return JSON.parse(json);
461
633
  }
462
634
  async writeVersionRecord(slotName, record) {
@@ -485,10 +657,10 @@ var BlobSet = class {
485
657
  }
486
658
  // ─── Fetch all chunks for a blob ──────────────────────────────────
487
659
  async fetchAllChunks(blob) {
488
- const blobDEK = this.encrypted ? await this.getDEK(BLOB_COLLECTION) : null;
660
+ const chunkKey = await this.resolveChunkKey(blob);
489
661
  const chunks = [];
490
662
  for (let i = 0; i < blob.chunkCount; i++) {
491
- const chunk = await this.readChunk(blob.eTag, i, blob.chunkCount, blobDEK);
663
+ const chunk = await this.readChunk(blob.eTag, i, blob.chunkCount, chunkKey);
492
664
  if (!chunk) {
493
665
  throw new NotFoundError(
494
666
  `Blob chunk ${i}/${blob.chunkCount} missing for eTag "${blob.eTag}" on record "${this.recordId}"`
@@ -513,6 +685,49 @@ var BlobSet = class {
513
685
  * If overwriting an existing slot, decrements the old eTag's refCount.
514
686
  */
515
687
  async put(slotName, data, opts) {
688
+ if (this.objectStore && this.blobFields?.[slotName]?.external) {
689
+ const policy = this.blobFields[slotName];
690
+ let contentType = opts?.mimeType;
691
+ if (!contentType) {
692
+ const detected = detectMagic(data.subarray(0, 16));
693
+ contentType = detected?.mime ?? "application/octet-stream";
694
+ }
695
+ const key = `${this.collection}/${this.recordId}/${slotName}`;
696
+ const isPublic = policy.public === true;
697
+ const backlink = await this.buildBacklink(slotName, policy.backlink ?? "opaque-token");
698
+ await this.objectStore.putObject(key, data, {
699
+ contentType,
700
+ public: isPublic,
701
+ ...backlink.userMeta ? { userMeta: backlink.userMeta } : {}
702
+ });
703
+ const uploaderUserId2 = opts?.uploadedBy ?? this.userId;
704
+ let oldETag;
705
+ await this.casUpdateSlots((slots) => {
706
+ oldETag = slots[slotName]?.eTag || void 0;
707
+ const prevMeta = slots[slotName]?.external?.meta;
708
+ slots[slotName] = {
709
+ eTag: "",
710
+ external: {
711
+ key,
712
+ contentType,
713
+ ...isPublic ? { public: true } : {},
714
+ ...backlink.token ? { backlink: backlink.token } : {},
715
+ ...prevMeta ? { meta: prevMeta } : {}
716
+ },
717
+ filename: opts?.filename ?? slotName,
718
+ size: data.byteLength,
719
+ mimeType: contentType,
720
+ uploadedAt: (/* @__PURE__ */ new Date()).toISOString(),
721
+ ...uploaderUserId2 !== void 0 ? { uploadedBy: uploaderUserId2 } : {}
722
+ };
723
+ return slots;
724
+ });
725
+ if (oldETag) {
726
+ await this.releaseRef(oldETag, 1, false).catch(() => {
727
+ });
728
+ }
729
+ return;
730
+ }
516
731
  const blobDEK = this.encrypted ? await this.getDEK(BLOB_COLLECTION) : null;
517
732
  const eTag = blobDEK ? await hmacSha256Hex(blobDEK, data) : await plainSha256Hex(data);
518
733
  let mimeType = opts?.mimeType;
@@ -528,13 +743,21 @@ var BlobSet = class {
528
743
  } else {
529
744
  shouldCompress = true;
530
745
  }
746
+ if (this.debugPlaintext) shouldCompress = false;
531
747
  const existingBlob = await this.loadBlobObject(eTag);
532
748
  if (existingBlob) {
533
749
  await this.casUpdateRefCount(eTag, 1);
534
750
  } else {
535
751
  const { bytes: compressed, algorithm } = shouldCompress ? await compressBytes(data) : { bytes: data, algorithm: "none" };
536
- const chunkSize = this.effectiveChunkSize(opts);
752
+ const chunkSize = this.debugPlaintext ? Math.max(compressed.byteLength, 1) : this.effectiveChunkSize(opts);
537
753
  const chunkCount = Math.max(1, Math.ceil(compressed.byteLength / chunkSize));
754
+ let chunkKey = blobDEK;
755
+ let wrappedCek;
756
+ if (blobDEK && this.erasableBlobs) {
757
+ const contentCek = await generateDEK();
758
+ wrappedCek = await wrapCek(contentCek, blobDEK);
759
+ chunkKey = contentCek;
760
+ }
538
761
  for (let i = 0; i < chunkCount; i++) {
539
762
  const start = i * chunkSize;
540
763
  await this.writeChunk(
@@ -542,7 +765,7 @@ var BlobSet = class {
542
765
  i,
543
766
  chunkCount,
544
767
  compressed.subarray(start, start + chunkSize),
545
- blobDEK
768
+ chunkKey
546
769
  );
547
770
  }
548
771
  await this.writeBlobObject({
@@ -554,7 +777,8 @@ var BlobSet = class {
554
777
  chunkCount,
555
778
  ...mimeType !== void 0 ? { mimeType } : {},
556
779
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
557
- refCount: 1
780
+ refCount: 1,
781
+ ...wrappedCek !== void 0 ? { _cek: wrappedCek } : {}
558
782
  });
559
783
  }
560
784
  const uploaderUserId = opts?.uploadedBy ?? this.userId;
@@ -562,7 +786,7 @@ var BlobSet = class {
562
786
  const oldETag = slots[slotName]?.eTag;
563
787
  slots[slotName] = {
564
788
  eTag,
565
- filename: slotName,
789
+ filename: opts?.filename ?? slotName,
566
790
  size: data.byteLength,
567
791
  ...mimeType !== void 0 ? { mimeType } : {},
568
792
  uploadedAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -576,7 +800,7 @@ var BlobSet = class {
576
800
  if (this._deferredRefDecrement) {
577
801
  const oldETag = this._deferredRefDecrement;
578
802
  this._deferredRefDecrement = void 0;
579
- await this.casUpdateRefCount(oldETag, -1).catch(() => {
803
+ await this.releaseRef(oldETag, 1, false).catch(() => {
580
804
  });
581
805
  }
582
806
  }
@@ -590,10 +814,114 @@ var BlobSet = class {
590
814
  const { slots } = await this.loadSlots();
591
815
  const slot = slots[slotName];
592
816
  if (!slot) return null;
817
+ if (slot.external) {
818
+ if (!this.objectStore) {
819
+ throw new NotFoundError(`Blob slot "${slotName}" is external but no objectStore is configured`);
820
+ }
821
+ return this.objectStore.getObject(slot.external.key);
822
+ }
593
823
  const result = await this.loadBlobObject(slot.eTag);
594
824
  if (!result) return null;
595
825
  return this.fetchAllChunks(result.blob);
596
826
  }
827
+ /**
828
+ * A URL to fetch an `external` slot's object directly — presigned
829
+ * (time-limited) or public, per the projection. Returns `null` if the slot
830
+ * does not exist. Throws for a non-external slot (use `get()`/`response()`).
831
+ */
832
+ async url(slotName, opts) {
833
+ const { slots } = await this.loadSlots();
834
+ const slot = slots[slotName];
835
+ if (!slot) return null;
836
+ if (!slot.external) {
837
+ throw new NotFoundError(`Blob slot "${slotName}" is not external \u2014 url() is only for external fields`);
838
+ }
839
+ if (!this.objectStore) {
840
+ throw new NotFoundError(`Blob slot "${slotName}" is external but no objectStore is configured`);
841
+ }
842
+ return this.objectStore.objectUrl(slot.external.key, opts);
843
+ }
844
+ /**
845
+ * Build the backlink stamped onto an external object's metadata — the
846
+ * self-describing "secondary store" reference back to this record. See
847
+ * {@link BlobFieldPolicy.backlink}. Returns the `userMeta` to attach and, for
848
+ * `opaque-token`, the `token` to record on the slot.
849
+ */
850
+ async buildBacklink(slotName, mode) {
851
+ if (mode === "none") return {};
852
+ const ref = { vault: this.vault, collection: this.collection, record: this.recordId, field: slotName };
853
+ if (mode === "plain") {
854
+ return {
855
+ userMeta: {
856
+ "noydb-vault": ref.vault,
857
+ "noydb-collection": ref.collection,
858
+ "noydb-record": ref.record,
859
+ "noydb-field": ref.field
860
+ }
861
+ };
862
+ }
863
+ if (mode === "encrypted" && this.encrypted) {
864
+ const dek = await this.getDEK(BLOB_COLLECTION);
865
+ const { iv, data } = await encrypt(JSON.stringify(ref), dek);
866
+ return { userMeta: { "noydb-backlink-enc": `${iv}.${data}` } };
867
+ }
868
+ const bytes = globalThis.crypto.getRandomValues(new Uint8Array(16));
869
+ const token = Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
870
+ return { userMeta: { "noydb-backlink": token }, token };
871
+ }
872
+ /**
873
+ * Adopt an EXISTING object in the projection into this slot **without
874
+ * re-uploading** — used by import/bootstrap to anchor objects already in the
875
+ * bucket. Writes the external slot record (the catalog entry).
876
+ */
877
+ async adoptExternal(slotName, ref) {
878
+ const uploaderUserId = this.userId;
879
+ await this.casUpdateSlots((slots) => {
880
+ slots[slotName] = {
881
+ eTag: "",
882
+ external: {
883
+ key: ref.key,
884
+ ...ref.contentType ? { contentType: ref.contentType } : {},
885
+ ...ref.public ? { public: true } : {},
886
+ ...ref.backlink ? { backlink: ref.backlink } : {},
887
+ ...ref.meta ? { meta: ref.meta } : {}
888
+ },
889
+ filename: slotName,
890
+ size: ref.size ?? 0,
891
+ ...ref.contentType ? { mimeType: ref.contentType } : {},
892
+ uploadedAt: (/* @__PURE__ */ new Date()).toISOString(),
893
+ ...uploaderUserId !== void 0 ? { uploadedBy: uploaderUserId } : {}
894
+ };
895
+ return slots;
896
+ });
897
+ }
898
+ /**
899
+ * Merge derived metadata (video `duration`, image `width`/`height`, arbitrary
900
+ * metatags) into an external slot's secondary metadata store. Typically called
901
+ * from an AWS-side processing callback (MediaConvert / ffprobe / Rekognition)
902
+ * once it has probed the object. No-op for a missing or non-external slot.
903
+ */
904
+ async setExternalMeta(slotName, meta) {
905
+ await this.casUpdateSlots((slots) => {
906
+ const slot = slots[slotName];
907
+ if (!slot?.external) return null;
908
+ slots[slotName] = {
909
+ ...slot,
910
+ external: { ...slot.external, meta: { ...slot.external.meta, ...meta } }
911
+ };
912
+ return slots;
913
+ });
914
+ }
915
+ /**
916
+ * Read an external slot's synced derived metadata (the secondary store).
917
+ * Returns `null` for a missing or non-external slot, `{}` if none synced yet.
918
+ */
919
+ async externalMeta(slotName) {
920
+ const { slots } = await this.loadSlots();
921
+ const slot = slots[slotName];
922
+ if (!slot?.external) return null;
923
+ return slot.external.meta ?? {};
924
+ }
597
925
  /**
598
926
  * List all slot entries for this record.
599
927
  * Returns metadata only — no chunk data is loaded.
@@ -607,15 +935,22 @@ var BlobSet = class {
607
935
  * Decrements refCount on the blob. Chunks are GC'd by `vault.blobGC()`.
608
936
  */
609
937
  async delete(slotName) {
610
- let eTagToDecrement;
938
+ let eTagToRelease;
939
+ let externalKeyToDelete;
611
940
  await this.casUpdateSlots((slots) => {
612
941
  if (!(slotName in slots)) return null;
613
- eTagToDecrement = slots[slotName].eTag;
942
+ const slot = slots[slotName];
943
+ if (slot.external) externalKeyToDelete = slot.external.key;
944
+ else eTagToRelease = slot.eTag;
614
945
  delete slots[slotName];
615
946
  return slots;
616
947
  });
617
- if (eTagToDecrement) {
618
- await this.casUpdateRefCount(eTagToDecrement, -1).catch(() => {
948
+ if (externalKeyToDelete && this.objectStore) {
949
+ await this.objectStore.deleteObject(externalKeyToDelete).catch(() => {
950
+ });
951
+ }
952
+ if (eTagToRelease) {
953
+ await this.releaseRef(eTagToRelease, 1, false).catch(() => {
619
954
  });
620
955
  }
621
956
  }
@@ -698,7 +1033,7 @@ var BlobSet = class {
698
1033
  await this.writeVersionRecord(slotName, record);
699
1034
  await this.casUpdateRefCount(slot.eTag, 1);
700
1035
  if (existing && existing.eTag !== slot.eTag) {
701
- await this.casUpdateRefCount(existing.eTag, -1).catch(() => {
1036
+ await this.releaseRef(existing.eTag, 1, false).catch(() => {
702
1037
  });
703
1038
  }
704
1039
  }
@@ -728,7 +1063,7 @@ var BlobSet = class {
728
1063
  versions.push(JSON.parse(envelope._data));
729
1064
  } else {
730
1065
  const dek = await this.getDEK(this.collection);
731
- const json = await decrypt(envelope._iv, envelope._data, dek);
1066
+ const json = await openEnvelopeJson(envelope, dek);
732
1067
  versions.push(JSON.parse(json));
733
1068
  }
734
1069
  }
@@ -741,7 +1076,7 @@ var BlobSet = class {
741
1076
  const record = await this.loadVersionRecord(slotName, label);
742
1077
  if (!record) return;
743
1078
  await this.deleteVersionRecord(slotName, label);
744
- await this.casUpdateRefCount(record.eTag, -1).catch(() => {
1079
+ await this.releaseRef(record.eTag, 1, false).catch(() => {
745
1080
  });
746
1081
  }
747
1082
  /**
@@ -820,7 +1155,7 @@ var BlobSet = class {
820
1155
  return this.buildResponse(slot, result.blob, { inline: true });
821
1156
  }
822
1157
  const aad = chunkAAD(slot.eTag, 0, result.blob.chunkCount);
823
- const { decryptBytesWithAAD: decryptAAD } = await import("./crypto-HTZ4FJOP.js");
1158
+ const { decryptBytesWithAAD: decryptAAD } = await import("./enclave-NHORSWSF.js");
824
1159
  const decrypted = await decryptAAD(envelope._iv, envelope._data, blobDEK, aad);
825
1160
  const plaintext = result.blob.compression === "gzip" ? await decompressBytes(decrypted) : decrypted;
826
1161
  const body = new ReadableStream({
@@ -883,4 +1218,4 @@ export {
883
1218
  DEFAULT_CHUNK_SIZE,
884
1219
  BlobSet
885
1220
  };
886
- //# sourceMappingURL=chunk-QODLLGQ7.js.map
1221
+ //# sourceMappingURL=chunk-XH7XP3OL.js.map