@noy-db/hub 0.7.0 → 0.8.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 (616) hide show
  1. package/CHANGELOG.md +105 -14
  2. package/LICENSE +202 -21
  3. package/NOTICE +1 -0
  4. package/README.md +27 -10
  5. package/codemods/0.8.0-pre.json +61 -0
  6. package/dist/api-GVYEKSJE.js +19 -0
  7. package/dist/as/index.js +11 -11
  8. package/dist/at/index.js +9 -9
  9. package/dist/attestation/index.js +20 -20
  10. package/dist/{backup-IJTB4S4M.js → backup-7TFRVFLH.js} +21 -15
  11. package/dist/backup-7TFRVFLH.js.map +1 -0
  12. package/dist/blobs/index.js +13 -13
  13. package/dist/broker/index.js +12 -12
  14. package/dist/by/index.js +2 -2
  15. package/dist/cargo/index.js +39 -36
  16. package/dist/{chunk-7O3Y4PPD.js → chunk-244VXYPG.js} +140 -16
  17. package/dist/chunk-244VXYPG.js.map +1 -0
  18. package/dist/{chunk-BUE2D7PX.js → chunk-32YV3TJT.js} +2 -2
  19. package/dist/{chunk-3RCJJBNR.js → chunk-3ELRMVJK.js} +12 -12
  20. package/dist/{chunk-6GMZ7HEE.js → chunk-3F7GLNAE.js} +6 -6
  21. package/dist/{chunk-2Y4IMKA6.js → chunk-3H5KLDZN.js} +4 -4
  22. package/dist/{chunk-VTFVLCUH.js → chunk-3JWHAR6E.js} +2 -2
  23. package/dist/{chunk-YMUFFJCO.js → chunk-3TDUWVWB.js} +5 -2
  24. package/dist/chunk-3TDUWVWB.js.map +1 -0
  25. package/dist/{chunk-JBDFMYKQ.js → chunk-4AF3TUMP.js} +2 -2
  26. package/dist/{chunk-ZORTV6NH.js → chunk-4I522ERM.js} +88 -4
  27. package/dist/chunk-4I522ERM.js.map +1 -0
  28. package/dist/{chunk-MUM7IANK.js → chunk-4MXI3ODD.js} +4 -4
  29. package/dist/chunk-4MXI3ODD.js.map +1 -0
  30. package/dist/{chunk-BLN54W3L.js → chunk-5FDLC6G7.js} +56 -3
  31. package/dist/chunk-5FDLC6G7.js.map +1 -0
  32. package/dist/chunk-5O7D6ZTW.js +53 -0
  33. package/dist/chunk-5O7D6ZTW.js.map +1 -0
  34. package/dist/{chunk-J6FXAEUG.js → chunk-6B3VNR4P.js} +12 -12
  35. package/dist/{chunk-TUFM4UZP.js → chunk-6K7DPM7D.js} +2 -2
  36. package/dist/{chunk-K6LHRFBL.js → chunk-6LMQ5R26.js} +7 -7
  37. package/dist/{chunk-SPXXX5E4.js → chunk-6LNL42F5.js} +94 -32
  38. package/dist/chunk-6LNL42F5.js.map +1 -0
  39. package/dist/{chunk-XLMEZIAJ.js → chunk-6OWXYZK2.js} +2 -2
  40. package/dist/{chunk-BOWNCWZT.js → chunk-6QSQQLSE.js} +3 -3
  41. package/dist/chunk-7JE7BDYJ.js +1558 -0
  42. package/dist/chunk-7JE7BDYJ.js.map +1 -0
  43. package/dist/{chunk-KG7TZKZG.js → chunk-7VCXZDA4.js} +5 -5
  44. package/dist/chunk-7VCXZDA4.js.map +1 -0
  45. package/dist/{chunk-NQKIUNW5.js → chunk-A6IJU4TK.js} +2 -2
  46. package/dist/{chunk-BM5TWITZ.js → chunk-ANWPSTZU.js} +38 -9
  47. package/dist/chunk-ANWPSTZU.js.map +1 -0
  48. package/dist/{chunk-QIZPZMUI.js → chunk-AOWGXU6D.js} +2 -2
  49. package/dist/{chunk-CUZLNGD5.js → chunk-B2YY6WDD.js} +1 -1
  50. package/dist/chunk-B2YY6WDD.js.map +1 -0
  51. package/dist/{chunk-SFAWCTEM.js → chunk-B57AFBY2.js} +2 -2
  52. package/dist/{chunk-GPEQUXHL.js → chunk-B6SJIBQK.js} +4 -4
  53. package/dist/chunk-BJ2IXQ5Q.js +100 -0
  54. package/dist/chunk-BJ2IXQ5Q.js.map +1 -0
  55. package/dist/{chunk-Q2PU57HC.js → chunk-BK2HHQGN.js} +2 -2
  56. package/dist/chunk-BKT776R5.js +1 -0
  57. package/dist/{chunk-KUX3OB6D.js → chunk-BP6DARYA.js} +33 -5
  58. package/dist/chunk-BP6DARYA.js.map +1 -0
  59. package/dist/{chunk-FXBIP2WD.js → chunk-BUDAGWL5.js} +6 -6
  60. package/dist/chunk-CF5UU4S7.js +757 -0
  61. package/dist/chunk-CF5UU4S7.js.map +1 -0
  62. package/dist/{chunk-BOET4NA4.js → chunk-CKNGS5MH.js} +3 -3
  63. package/dist/chunk-CY2CYVWZ.js +41 -0
  64. package/dist/chunk-CY2CYVWZ.js.map +1 -0
  65. package/dist/{chunk-2577DKXB.js → chunk-DC5QVPV7.js} +2 -2
  66. package/dist/chunk-DC5QVPV7.js.map +1 -0
  67. package/dist/{chunk-YSRUYAVU.js → chunk-DE4DH2RZ.js} +2 -2
  68. package/dist/{chunk-6I2RQCET.js → chunk-DF73H4UN.js} +4 -4
  69. package/dist/{chunk-4GVM6QZA.js → chunk-ENAG3IY7.js} +2 -2
  70. package/dist/chunk-ENAG3IY7.js.map +1 -0
  71. package/dist/{chunk-K7NTTA6P.js → chunk-EOVMT6TB.js} +2 -2
  72. package/dist/chunk-F24ZZTHQ.js +193 -0
  73. package/dist/chunk-F24ZZTHQ.js.map +1 -0
  74. package/dist/chunk-F2TDU7MQ.js +456 -0
  75. package/dist/chunk-F2TDU7MQ.js.map +1 -0
  76. package/dist/chunk-F6NCB7KT.js +13 -0
  77. package/dist/chunk-F6NCB7KT.js.map +1 -0
  78. package/dist/{chunk-SPYWXKJN.js → chunk-F7XGHL5O.js} +3 -3
  79. package/dist/chunk-F7XGHL5O.js.map +1 -0
  80. package/dist/{chunk-XTXOCYOJ.js → chunk-FCKWQE2H.js} +5 -5
  81. package/dist/{chunk-U4FOQDY4.js → chunk-FH2L2E34.js} +4 -4
  82. package/dist/chunk-FH2L2E34.js.map +1 -0
  83. package/dist/{chunk-4OZNXTO4.js → chunk-FN5EBVTQ.js} +2 -2
  84. package/dist/chunk-FQ54DWUQ.js +270 -0
  85. package/dist/chunk-FQ54DWUQ.js.map +1 -0
  86. package/dist/{chunk-NKHRDYOR.js → chunk-FQ5VRHIB.js} +4 -4
  87. package/dist/{chunk-FAHMLERK.js → chunk-FW22ZCXT.js} +2 -2
  88. package/dist/chunk-FXQBGFOX.js +524 -0
  89. package/dist/chunk-FXQBGFOX.js.map +1 -0
  90. package/dist/{chunk-AO42KJO6.js → chunk-GF5BZ7D4.js} +45 -9
  91. package/dist/chunk-GF5BZ7D4.js.map +1 -0
  92. package/dist/{chunk-TRGTKX5E.js → chunk-GHLTDZRS.js} +5 -3
  93. package/dist/{chunk-TRGTKX5E.js.map → chunk-GHLTDZRS.js.map} +1 -1
  94. package/dist/{chunk-5WDXHNSW.js → chunk-HBPPGWUM.js} +5 -5
  95. package/dist/chunk-HBPPGWUM.js.map +1 -0
  96. package/dist/{chunk-KTFRCC5C.js → chunk-HBRLNOHL.js} +82 -8
  97. package/dist/chunk-HBRLNOHL.js.map +1 -0
  98. package/dist/chunk-HLEK5VAN.js +275 -0
  99. package/dist/chunk-HLEK5VAN.js.map +1 -0
  100. package/dist/{chunk-RMS3NEA3.js → chunk-HT2AHGQI.js} +2 -2
  101. package/dist/{chunk-CHJBLCOG.js → chunk-HVSCEIYL.js} +7 -7
  102. package/dist/{chunk-UXWB3FPF.js → chunk-I3JDRCMW.js} +150 -22
  103. package/dist/chunk-I3JDRCMW.js.map +1 -0
  104. package/dist/{chunk-GY4WYNNG.js → chunk-ID6Z6E66.js} +2 -2
  105. package/dist/{chunk-EYBQEIUY.js → chunk-IEX7NK2K.js} +3 -3
  106. package/dist/{chunk-KUJDV5QH.js → chunk-ISZQJBML.js} +5 -5
  107. package/dist/{chunk-LWBCUYZW.js → chunk-IT22PWKV.js} +2 -2
  108. package/dist/{chunk-EQEYOJBM.js → chunk-IUWCVHQ7.js} +3 -3
  109. package/dist/chunk-IUWCVHQ7.js.map +1 -0
  110. package/dist/{chunk-7V4TP3AF.js → chunk-J6UOHJY5.js} +4 -4
  111. package/dist/{chunk-JMGDHKQF.js → chunk-JCN44NCY.js} +2 -2
  112. package/dist/{chunk-CARABLSQ.js → chunk-K6W7BVZ6.js} +3 -3
  113. package/dist/{chunk-77K4PG6P.js → chunk-KJFW62P4.js} +29 -11
  114. package/dist/chunk-KJFW62P4.js.map +1 -0
  115. package/dist/{chunk-453F654R.js → chunk-L7DOS3TE.js} +2 -2
  116. package/dist/chunk-LGNDFRYC.js +23 -0
  117. package/dist/chunk-LGNDFRYC.js.map +1 -0
  118. package/dist/{chunk-WEQEYLCS.js → chunk-LGRLME4M.js} +7 -7
  119. package/dist/{chunk-RMF67KCG.js → chunk-LQ4ZHOKP.js} +2 -2
  120. package/dist/{chunk-ZVO4QVPD.js → chunk-M522UYZ2.js} +5 -5
  121. package/dist/{chunk-G56KBWFY.js → chunk-M7NI3IWE.js} +45 -12
  122. package/dist/chunk-M7NI3IWE.js.map +1 -0
  123. package/dist/chunk-MDWKM2XC.js +293 -0
  124. package/dist/chunk-MDWKM2XC.js.map +1 -0
  125. package/dist/chunk-MKXXMNJH.js +204 -0
  126. package/dist/chunk-MKXXMNJH.js.map +1 -0
  127. package/dist/{chunk-SKGMN35F.js → chunk-MLPHLJIQ.js} +3 -3
  128. package/dist/chunk-MLPHLJIQ.js.map +1 -0
  129. package/dist/{chunk-2N4GY74U.js → chunk-MTL7MXGR.js} +6 -6
  130. package/dist/{chunk-TFR7DSOV.js → chunk-MVZ2TPVP.js} +2 -2
  131. package/dist/{chunk-CPWQB3N5.js → chunk-N5DNADLQ.js} +7 -7
  132. package/dist/{chunk-ELNXJMGB.js → chunk-NNARWO72.js} +6 -6
  133. package/dist/{chunk-PT43Y56J.js → chunk-NRT6QZQB.js} +102 -16
  134. package/dist/chunk-NRT6QZQB.js.map +1 -0
  135. package/dist/{chunk-QIBVIOXO.js → chunk-NWHBJQAL.js} +99 -8
  136. package/dist/chunk-NWHBJQAL.js.map +1 -0
  137. package/dist/chunk-NYMLINRP.js +28 -0
  138. package/dist/chunk-NYMLINRP.js.map +1 -0
  139. package/dist/{chunk-7MG7SJT7.js → chunk-ODVPTDPK.js} +1 -1
  140. package/dist/chunk-ODVPTDPK.js.map +1 -0
  141. package/dist/chunk-ORDURZBU.js +461 -0
  142. package/dist/chunk-ORDURZBU.js.map +1 -0
  143. package/dist/{chunk-6YXCPL4T.js → chunk-PDCG6PR5.js} +2 -2
  144. package/dist/{chunk-REDOOY2Q.js → chunk-PSIV7CJV.js} +2 -2
  145. package/dist/{chunk-NA2NIJZI.js → chunk-QBBUZ3I3.js} +126 -19
  146. package/dist/chunk-QBBUZ3I3.js.map +1 -0
  147. package/dist/{chunk-5VCRVKOZ.js → chunk-QOOUUR4A.js} +6 -4
  148. package/dist/{chunk-5VCRVKOZ.js.map → chunk-QOOUUR4A.js.map} +1 -1
  149. package/dist/{chunk-ANATMFIO.js → chunk-QWFHIOD2.js} +5 -5
  150. package/dist/{chunk-X2DLENDQ.js → chunk-QWGU66MP.js} +3 -3
  151. package/dist/chunk-RHVMZSUU.js +7 -0
  152. package/dist/chunk-RHVMZSUU.js.map +1 -0
  153. package/dist/{chunk-BSFNRLK2.js → chunk-S57HTZ6X.js} +5 -5
  154. package/dist/{chunk-SZJ3DLZA.js → chunk-SEE332EV.js} +2 -2
  155. package/dist/{chunk-YYP7WSEB.js → chunk-SI3V7D4G.js} +2 -2
  156. package/dist/{chunk-UGTBXF5U.js → chunk-SOIQ4MM4.js} +3 -3
  157. package/dist/chunk-SUZKW6UR.js +25 -0
  158. package/dist/chunk-SUZKW6UR.js.map +1 -0
  159. package/dist/{chunk-VXGSWL6L.js → chunk-SYVZW77S.js} +6 -6
  160. package/dist/{chunk-6GOE5PGN.js → chunk-T2LBQ5DV.js} +883 -227
  161. package/dist/chunk-T2LBQ5DV.js.map +1 -0
  162. package/dist/chunk-T52GX4SA.js +215 -0
  163. package/dist/chunk-T52GX4SA.js.map +1 -0
  164. package/dist/{chunk-MVMXZYXT.js → chunk-TKUOEU2F.js} +2 -2
  165. package/dist/chunk-TOPYQ6GA.js +31 -0
  166. package/dist/chunk-TOPYQ6GA.js.map +1 -0
  167. package/dist/{chunk-SMH6SRX7.js → chunk-TROR3ALR.js} +2 -2
  168. package/dist/{chunk-2C3AQB46.js → chunk-UD5EVGZ7.js} +42 -389
  169. package/dist/chunk-UD5EVGZ7.js.map +1 -0
  170. package/dist/{chunk-KJIMGIWO.js → chunk-UPD5NWI5.js} +65 -17
  171. package/dist/chunk-UPD5NWI5.js.map +1 -0
  172. package/dist/{chunk-SL3JAAKN.js → chunk-UYB234ZR.js} +30 -2
  173. package/dist/chunk-UYB234ZR.js.map +1 -0
  174. package/dist/chunk-VHM7HCKB.js +220 -0
  175. package/dist/chunk-VHM7HCKB.js.map +1 -0
  176. package/dist/{chunk-DGOZ4UZD.js → chunk-VNNRUGMM.js} +2 -2
  177. package/dist/{chunk-HDOU6I2Y.js → chunk-VNPEWFPD.js} +4 -4
  178. package/dist/{chunk-L7CIOOBW.js → chunk-WNJ4AVGE.js} +2 -2
  179. package/dist/{chunk-FMZY5Q6L.js → chunk-WX5ADGTZ.js} +3 -3
  180. package/dist/{chunk-VXANTWBJ.js → chunk-WY2XXTET.js} +92 -6
  181. package/dist/{chunk-VXANTWBJ.js.map → chunk-WY2XXTET.js.map} +1 -1
  182. package/dist/{chunk-6X6SEMEE.js → chunk-X25NWUZB.js} +33 -8
  183. package/dist/chunk-X25NWUZB.js.map +1 -0
  184. package/dist/{chunk-Q7HZX3IF.js → chunk-X4773RBR.js} +2 -2
  185. package/dist/chunk-XBKH4FOC.js +195 -0
  186. package/dist/chunk-XBKH4FOC.js.map +1 -0
  187. package/dist/{chunk-ANSIZYEG.js → chunk-YNIUIERI.js} +3 -3
  188. package/dist/chunk-YSK2CU2Q.js +936 -0
  189. package/dist/chunk-YSK2CU2Q.js.map +1 -0
  190. package/dist/{chunk-UXVWEX5L.js → chunk-Z5HTYMMQ.js} +6 -2
  191. package/dist/chunk-Z5HTYMMQ.js.map +1 -0
  192. package/dist/{chunk-RRNRNANG.js → chunk-ZE4CHIED.js} +66 -75
  193. package/dist/chunk-ZE4CHIED.js.map +1 -0
  194. package/dist/chunk-ZSX4S5XB.js +1289 -0
  195. package/dist/chunk-ZSX4S5XB.js.map +1 -0
  196. package/dist/{chunk-BZ3534YM.js → chunk-ZUVBC32X.js} +2 -2
  197. package/dist/{chunk-L742JPKZ.js → chunk-ZXABPVM6.js} +6 -6
  198. package/dist/classified/index.js +5 -5
  199. package/dist/{classified-marker-LI2SF2E4.js → classified-marker-W3USLL5M.js} +3 -3
  200. package/dist/collection-facade-QU6IJBN3.js +48 -0
  201. package/dist/{computed-VPOKQK4N.js → computed-TPFBX7U4.js} +3 -3
  202. package/dist/consent/index.js +9 -9
  203. package/dist/cover/index.js +10 -10
  204. package/dist/coverage/index.js +306 -0
  205. package/dist/coverage/index.js.map +1 -0
  206. package/dist/custody/index.js +12 -12
  207. package/dist/{dead-filter-TSWZQRR5.js → dead-filter-U2UYKSZL.js} +2 -2
  208. package/dist/debug/index.js +1 -1
  209. package/dist/{delegation-OVIFFPG4.js → delegation-S3AEPW2T.js} +11 -11
  210. package/dist/derivations/index.js +25 -22
  211. package/dist/derive-OX7F6TGG.js +21 -0
  212. package/dist/directory/index.js +10 -10
  213. package/dist/{dispatch-WC6X2M6C.js → dispatch-3CQDJV5Q.js} +5 -5
  214. package/dist/{dispatch-S73TK3IY.js → dispatch-RH4LHKBH.js} +21 -21
  215. package/dist/{enclave-KJOTOH7X.js → enclave-27SMF6GF.js} +15 -9
  216. package/dist/executor-B6SRO2QS.js +36 -0
  217. package/dist/executor-BI5CHWRY.js +8 -0
  218. package/dist/executor-RBKM5W5K.js +8 -0
  219. package/dist/export-accessible-VMA3YM5V.js +22 -0
  220. package/dist/extract-partition-NF7PXGPP.js +37 -0
  221. package/dist/{fanout-sidecar-WUFXNYP4.js → fanout-sidecar-OT6RYLOL.js} +9 -9
  222. package/dist/find-LZMP26KF.js +10 -0
  223. package/dist/forget/index.js +9 -9
  224. package/dist/guards/index.js +4 -4
  225. package/dist/history/index.js +13 -13
  226. package/dist/i18n/index.js +14 -14
  227. package/dist/index.d.ts +29 -6
  228. package/dist/index.js +999 -191
  229. package/dist/index.js.map +1 -1
  230. package/dist/indexing/index.js +13 -5
  231. package/dist/indexing/index.js.map +1 -1
  232. package/dist/introspection/index.js +11 -11
  233. package/dist/issue-IHARXWW5.js +18 -0
  234. package/dist/ivf-flat-UZ6DQDLS.js +314 -0
  235. package/dist/ivf-flat-UZ6DQDLS.js.map +1 -0
  236. package/dist/{json-schema-V3M5MUCM.js → json-schema-3SHX72CC.js} +2 -1
  237. package/dist/json-schema-3SHX72CC.js.map +1 -0
  238. package/dist/kernel/collection-config.d.ts +4 -20
  239. package/dist/kernel/collection.d.ts +29 -8
  240. package/dist/kernel/enclave/crypto.d.ts +16 -0
  241. package/dist/kernel/enclave/index.d.ts +1 -1
  242. package/dist/kernel/enclave/record-keys/record-codec.d.ts +25 -0
  243. package/dist/kernel/errors.d.ts +227 -36
  244. package/dist/kernel/generation-map.d.ts +48 -0
  245. package/dist/kernel/memory-store.d.ts +35 -7
  246. package/dist/kernel/noydb.d.ts +6 -1
  247. package/dist/kernel/present-cache.d.ts +58 -0
  248. package/dist/kernel/query/all.d.ts +7 -0
  249. package/dist/kernel/query/builder.d.ts +601 -270
  250. package/dist/kernel/query/civil-date.d.ts +64 -0
  251. package/dist/kernel/query/cursor.d.ts +40 -0
  252. package/dist/kernel/query/distinct-key.d.ts +98 -0
  253. package/dist/kernel/query/hydration.d.ts +76 -0
  254. package/dist/kernel/query/index.d.ts +31 -15
  255. package/dist/kernel/query/internal/core.d.ts +30 -0
  256. package/dist/kernel/query/internal/hooks.d.ts +22 -0
  257. package/dist/kernel/query/internal/maintenance.d.ts +43 -0
  258. package/dist/kernel/query/live/incremental.d.ts +314 -0
  259. package/dist/kernel/query/live/index.d.ts +22 -0
  260. package/dist/kernel/query/live/install.d.ts +2 -0
  261. package/dist/kernel/query/{live.d.ts → live/live.d.ts} +39 -9
  262. package/dist/kernel/query/live/methods.d.ts +107 -0
  263. package/dist/kernel/query/predicate.d.ts +119 -1
  264. package/dist/kernel/query/reduce/date-trunc.d.ts +75 -0
  265. package/dist/kernel/query/reduce/index.d.ts +36 -0
  266. package/dist/kernel/query/reduce/install.d.ts +2 -0
  267. package/dist/kernel/query/reduce/methods.d.ts +259 -0
  268. package/dist/kernel/query/reduce/scan-methods.d.ts +121 -0
  269. package/dist/kernel/query/relate/explain.d.ts +199 -0
  270. package/dist/kernel/query/relate/index.d.ts +48 -0
  271. package/dist/kernel/query/relate/install.d.ts +2 -0
  272. package/dist/kernel/query/relate/join-on.d.ts +126 -0
  273. package/dist/kernel/query/relate/join-reduce.d.ts +16 -0
  274. package/dist/kernel/query/relate/join.d.ts +452 -0
  275. package/dist/kernel/query/relate/methods.d.ts +426 -0
  276. package/dist/kernel/query/relate/partition.d.ts +87 -0
  277. package/dist/kernel/query/relate/scan-methods.d.ts +163 -0
  278. package/dist/kernel/query/relate/traverse.d.ts +109 -0
  279. package/dist/kernel/query/scan-builder.d.ts +79 -176
  280. package/dist/kernel/query/sort-key.d.ts +52 -0
  281. package/dist/kernel/tx-write-gate.d.ts +77 -0
  282. package/dist/kernel/types.d.ts +71 -3
  283. package/dist/kernel/validation.d.ts +27 -10
  284. package/dist/kernel/vault.d.ts +9 -4
  285. package/dist/kernel/via/compose.d.ts +3 -0
  286. package/dist/kernel/via/index.d.ts +56 -0
  287. package/dist/kernel/via/pipeline.d.ts +48 -0
  288. package/dist/{ledger-F33ZVMTK.js → ledger-KZPCMVZY.js} +11 -11
  289. package/dist/liberate-GRLCZMW4.js +24 -0
  290. package/dist/link-set-JCMJ7ULP.js +30 -0
  291. package/dist/{managed-secret-PQYKSR6T.js → managed-secret-S3MQ6SH6.js} +10 -10
  292. package/dist/materialized-views/index.js +30 -23
  293. package/dist/{migrate-cek-5ENH64AA.js → migrate-cek-V7GKJZ7O.js} +2 -2
  294. package/dist/money/index.js +5 -5
  295. package/dist/noydb-SWQJ3MZS.js +97 -0
  296. package/dist/overlay-views/index.js +4 -4
  297. package/dist/periods/index.js +12 -12
  298. package/dist/pod/index.js +75 -68
  299. package/dist/{pod-handle-Q736KYON.js → pod-handle-WGDFB4C2.js} +9 -9
  300. package/dist/policy/index.js +10 -10
  301. package/dist/port/with/blob-strategy.d.ts +9 -0
  302. package/dist/port/with/collection-options.d.ts +5 -0
  303. package/dist/port/with/coverage-strategy.d.ts +83 -0
  304. package/dist/port/with/service-bus.d.ts +46 -0
  305. package/dist/port/with/strategies.d.ts +2 -0
  306. package/dist/portability/index.js +8 -8
  307. package/dist/{post-register-LNE2FE2A.js → post-register-SLSXIPBV.js} +6 -6
  308. package/dist/query/all/index.js +31 -0
  309. package/dist/query/index.js +20 -32
  310. package/dist/query/live/index.js +21 -0
  311. package/dist/query/live/index.js.map +1 -0
  312. package/dist/query/reduce/index.js +33 -0
  313. package/dist/query/reduce/index.js.map +1 -0
  314. package/dist/query/relate/index.js +56 -0
  315. package/dist/query/relate/index.js.map +1 -0
  316. package/dist/reduce/index.js +72 -18
  317. package/dist/reduce/index.js.map +1 -1
  318. package/dist/register-F3OYE7MJ.js +31 -0
  319. package/dist/registry-CILQFXFK.js +8 -0
  320. package/dist/registry-XNNYQVKV.js +8 -0
  321. package/dist/registry-YCDZV3VW.js +35 -0
  322. package/dist/registry-ZGYS33TE.js +24 -0
  323. package/dist/request-withdrawal-Z5NC6TXT.js +30 -0
  324. package/dist/{reveal-67RDQRIN.js → reveal-4BCKPEC2.js} +6 -6
  325. package/dist/revoke-ZL62WC2D.js +23 -0
  326. package/dist/satellites/index.js +1 -1
  327. package/dist/schema-update/index.js +2 -2
  328. package/dist/sealed-record/index.js +12 -12
  329. package/dist/search/index.js +11 -5
  330. package/dist/{seed-G42JYN56.js → seed-4JS2RJ4A.js} +12 -12
  331. package/dist/sequence/index.js +9 -9
  332. package/dist/session/index.js +9 -9
  333. package/dist/shadow/index.js +2 -2
  334. package/dist/signer-MBZZMXTC.js +24 -0
  335. package/dist/snapshots/index.js +10 -10
  336. package/dist/{stale-DDL7WQEZ.js → stale-TJ3DYZMQ.js} +10 -10
  337. package/dist/storage-SVMKRGCW.js +22 -0
  338. package/dist/{store-coordination-provider-MEQ2MJQG.js → store-coordination-provider-2O2VUHKW.js} +10 -10
  339. package/dist/sync/index.js +10 -10
  340. package/dist/team/index.js +17 -15
  341. package/dist/tiers/index.js +13 -11
  342. package/dist/to/index.js +2 -2
  343. package/dist/transactions/index.js +3 -3
  344. package/dist/util/index.js +1 -1
  345. package/dist/vault-head/index.js +8 -8
  346. package/dist/{verify-KOV2G5D6.js → verify-RVT67IMH.js} +5 -5
  347. package/dist/via/blob/index.d.ts +1 -0
  348. package/dist/via/geo/binding.d.ts +31 -0
  349. package/dist/via/geo/descriptor.d.ts +54 -0
  350. package/dist/via/geo/geohash.d.ts +95 -0
  351. package/dist/via/geo/index.d.ts +13 -0
  352. package/dist/via/geo/where.d.ts +50 -0
  353. package/dist/via/i18n/core.d.ts +1 -1
  354. package/dist/via/lookup/registry.d.ts +1 -1
  355. package/dist/via/lookup/snapshot.d.ts +3 -3
  356. package/dist/walk-HJ42EISE.js +21 -0
  357. package/dist/walk-HJ42EISE.js.map +1 -0
  358. package/dist/with-audit/coverage/accounting.d.ts +112 -0
  359. package/dist/with-audit/coverage/active.d.ts +29 -0
  360. package/dist/with-audit/coverage/index.d.ts +61 -0
  361. package/dist/with-audit/coverage/sketch.d.ts +75 -0
  362. package/dist/with-audit/periods/periods.d.ts +55 -7
  363. package/dist/with-audit/periods/reserved-collections.d.ts +3 -0
  364. package/dist/with-audit/periods/vault-facade.d.ts +17 -0
  365. package/dist/with-audit/tiers/index.d.ts +51 -0
  366. package/dist/with-audit/tiers/strategy.d.ts +8 -0
  367. package/dist/with-cargo/floor.d.ts +2 -2
  368. package/dist/with-commit/tx/invariants.d.ts +1 -1
  369. package/dist/with-commit/tx/transaction.d.ts +13 -3
  370. package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +4 -3
  371. package/dist/with-formula/materialized-views/emit-memo.d.ts +40 -0
  372. package/dist/with-formula/materialized-views/executor.d.ts +8 -0
  373. package/dist/with-formula/materialized-views/index.d.ts +1 -1
  374. package/dist/with-formula/materialized-views/registry.d.ts +15 -0
  375. package/dist/with-formula/materialized-views/types.d.ts +106 -14
  376. package/dist/with-formula/materialized-views/window-stage.d.ts +11 -0
  377. package/dist/with-formula/overlay-views/types.d.ts +1 -1
  378. package/dist/with-formula/overlay-views/virtual-collection.d.ts +13 -4
  379. package/dist/with-lookup/embeddings/chunks.d.ts +79 -0
  380. package/dist/with-lookup/embeddings/descriptor.d.ts +21 -0
  381. package/dist/with-lookup/embeddings/index.d.ts +3 -0
  382. package/dist/with-lookup/embeddings/ivf-flat.d.ts +93 -0
  383. package/dist/with-lookup/embeddings/vector-index.d.ts +73 -0
  384. package/dist/with-lookup/embeddings/vector-set.d.ts +94 -1
  385. package/dist/with-lookup/embeddings/with-vector-index.d.ts +67 -0
  386. package/dist/with-lookup/indexing/collection-facade.d.ts +85 -2
  387. package/dist/with-lookup/indexing/compound-indexes.d.ts +129 -0
  388. package/dist/with-lookup/indexing/eager-indexes.d.ts +170 -1
  389. package/dist/with-lookup/indexing/index-snapshot.d.ts +62 -0
  390. package/dist/with-lookup/indexing/lazy-builder.d.ts +33 -0
  391. package/dist/with-lookup/indexing/persisted-field-indexes.d.ts +104 -0
  392. package/dist/with-lookup/indexing/persisted-indexes.d.ts +12 -0
  393. package/dist/with-lookup/indexing/sorted-indexes.d.ts +117 -0
  394. package/dist/with-lookup/indexing/unique-constraints.d.ts +106 -23
  395. package/dist/with-lookup/reduce/active.d.ts +2 -24
  396. package/dist/with-lookup/reduce/group-core.d.ts +43 -0
  397. package/dist/with-lookup/reduce/groupby.d.ts +195 -36
  398. package/dist/with-lookup/reduce/incremental-group.d.ts +153 -0
  399. package/dist/with-lookup/reduce/index.d.ts +26 -5
  400. package/dist/with-lookup/reduce/reducers.d.ts +255 -1
  401. package/dist/with-lookup/reduce/reduction.d.ts +44 -13
  402. package/dist/with-lookup/reduce/strategy.d.ts +43 -3
  403. package/dist/with-lookup/reduce/window.d.ts +262 -0
  404. package/dist/with-lookup/search/collection-facade.d.ts +44 -8
  405. package/dist/with-lookup/search/index-store.d.ts +5 -3
  406. package/dist/with-lookup/search/index.d.ts +4 -2
  407. package/dist/with-lookup/search/inverted-index.d.ts +38 -2
  408. package/dist/with-lookup/search/persisted-index-store.d.ts +5 -2
  409. package/dist/with-lookup/search/phrase.d.ts +28 -0
  410. package/dist/with-lookup/search/retrieve-types.d.ts +57 -1
  411. package/dist/with-lookup/search/serialize.d.ts +29 -3
  412. package/dist/with-lookup/search/strategy.d.ts +2 -6
  413. package/dist/with-party/directory/cover/index.d.ts +1 -1
  414. package/dist/with-party/directory/cover/storage.d.ts +1 -1
  415. package/dist/with-party/directory/cover/types.d.ts +1 -1
  416. package/dist/with-party/directory/index.d.ts +1 -1
  417. package/dist/with-party/directory/types.d.ts +1 -1
  418. package/dist/with-party/directory/user-envelope/api.d.ts +1 -1
  419. package/dist/with-party/policy/engine.d.ts +1 -1
  420. package/dist/with-party/policy/index.d.ts +1 -1
  421. package/dist/with-party/policy/presets.d.ts +1 -1
  422. package/dist/with-party/team/authenticators.d.ts +91 -1
  423. package/dist/with-party/team/index.d.ts +3 -2
  424. package/dist/with-party/team/keyring.d.ts +13 -6
  425. package/dist/with-party/team/managed-secret.d.ts +1 -1
  426. package/dist/with-party/team/noydb-facade.d.ts +12 -3
  427. package/dist/with-party/team/wrapped-deks.d.ts +4 -4
  428. package/dist/with-pod/format.d.ts +1 -1
  429. package/dist/with-pod/pod.d.ts +5 -5
  430. package/dist/with-shape/blobs/blob-compaction.d.ts +16 -0
  431. package/dist/with-shape/blobs/blob-set.d.ts +21 -2
  432. package/dist/with-shape/blobs/legacy-sweep.d.ts +35 -0
  433. package/dist/with-shape/introspection/describe.d.ts +6 -0
  434. package/dist/with-shape/introspection/field-meta.d.ts +18 -0
  435. package/dist/with-shape/introspection/types.d.ts +57 -1
  436. package/dist/with-shape/links/vault-facade.d.ts +1 -1
  437. package/dist/with-store/partitioned/index.d.ts +337 -0
  438. package/dist/with-sync/change-broadcast.d.ts +153 -0
  439. package/dist/withdraw-accessible-5NZUPAVA.js +27 -0
  440. package/dist/withdraw-accessible-5NZUPAVA.js.map +1 -0
  441. package/package.json +37 -10
  442. package/dist/api-TXFOVOXX.js +0 -19
  443. package/dist/backup-IJTB4S4M.js.map +0 -1
  444. package/dist/chunk-2577DKXB.js.map +0 -1
  445. package/dist/chunk-2C3AQB46.js.map +0 -1
  446. package/dist/chunk-4GVM6QZA.js.map +0 -1
  447. package/dist/chunk-5WDXHNSW.js.map +0 -1
  448. package/dist/chunk-6GOE5PGN.js.map +0 -1
  449. package/dist/chunk-6X6SEMEE.js.map +0 -1
  450. package/dist/chunk-77K4PG6P.js.map +0 -1
  451. package/dist/chunk-7MG2LHO5.js +0 -1616
  452. package/dist/chunk-7MG2LHO5.js.map +0 -1
  453. package/dist/chunk-7MG7SJT7.js.map +0 -1
  454. package/dist/chunk-7O3Y4PPD.js.map +0 -1
  455. package/dist/chunk-AO42KJO6.js.map +0 -1
  456. package/dist/chunk-ATL3ZVXT.js +0 -151
  457. package/dist/chunk-ATL3ZVXT.js.map +0 -1
  458. package/dist/chunk-BLN54W3L.js.map +0 -1
  459. package/dist/chunk-BM5TWITZ.js.map +0 -1
  460. package/dist/chunk-CUZLNGD5.js.map +0 -1
  461. package/dist/chunk-EQEYOJBM.js.map +0 -1
  462. package/dist/chunk-G56KBWFY.js.map +0 -1
  463. package/dist/chunk-I3ISCYT7.js +0 -159
  464. package/dist/chunk-I3ISCYT7.js.map +0 -1
  465. package/dist/chunk-KG7TZKZG.js.map +0 -1
  466. package/dist/chunk-KJIMGIWO.js.map +0 -1
  467. package/dist/chunk-KTFRCC5C.js.map +0 -1
  468. package/dist/chunk-KUX3OB6D.js.map +0 -1
  469. package/dist/chunk-MUM7IANK.js.map +0 -1
  470. package/dist/chunk-NA2NIJZI.js.map +0 -1
  471. package/dist/chunk-NSITFOCJ.js +0 -99
  472. package/dist/chunk-NSITFOCJ.js.map +0 -1
  473. package/dist/chunk-PT43Y56J.js.map +0 -1
  474. package/dist/chunk-QIBVIOXO.js.map +0 -1
  475. package/dist/chunk-RRNRNANG.js.map +0 -1
  476. package/dist/chunk-RTBJ5IOO.js +0 -87
  477. package/dist/chunk-RTBJ5IOO.js.map +0 -1
  478. package/dist/chunk-SKGMN35F.js.map +0 -1
  479. package/dist/chunk-SL3JAAKN.js.map +0 -1
  480. package/dist/chunk-SPXXX5E4.js.map +0 -1
  481. package/dist/chunk-SPYWXKJN.js.map +0 -1
  482. package/dist/chunk-U4FOQDY4.js.map +0 -1
  483. package/dist/chunk-UXVWEX5L.js.map +0 -1
  484. package/dist/chunk-UXWB3FPF.js.map +0 -1
  485. package/dist/chunk-YMUFFJCO.js.map +0 -1
  486. package/dist/chunk-ZN4FD4PE.js +0 -364
  487. package/dist/chunk-ZN4FD4PE.js.map +0 -1
  488. package/dist/chunk-ZORTV6NH.js.map +0 -1
  489. package/dist/collection-facade-4GRREZ6C.js +0 -45
  490. package/dist/derive-6O5SWQKN.js +0 -21
  491. package/dist/executor-5NIMLSKZ.js +0 -8
  492. package/dist/executor-AQVXV5GZ.js +0 -8
  493. package/dist/executor-PUAO6AKJ.js +0 -29
  494. package/dist/export-accessible-72EQNBMR.js +0 -22
  495. package/dist/extract-partition-PUYNU3UF.js +0 -37
  496. package/dist/find-2ABFCZX4.js +0 -10
  497. package/dist/issue-SIDORTSZ.js +0 -18
  498. package/dist/json-schema-V3M5MUCM.js.map +0 -1
  499. package/dist/kernel/query/join.d.ts +0 -232
  500. package/dist/liberate-LCDPNAG2.js +0 -24
  501. package/dist/link-set-FKNWAYKS.js +0 -30
  502. package/dist/noydb-DUXZPKSN.js +0 -90
  503. package/dist/register-I2DZXGAR.js +0 -31
  504. package/dist/registry-23WF3TGH.js +0 -8
  505. package/dist/registry-4AYVUNXK.js +0 -8
  506. package/dist/registry-VSSQPIGF.js +0 -18
  507. package/dist/registry-YLEWMGAC.js +0 -32
  508. package/dist/request-withdrawal-KFQHEZ25.js +0 -30
  509. package/dist/revoke-DQDZAZZM.js +0 -23
  510. package/dist/signer-WAMDZHEN.js +0 -24
  511. package/dist/storage-FLR73HHF.js +0 -22
  512. package/dist/walk-3UQBRMDV.js +0 -21
  513. package/dist/withdraw-accessible-EL5GXZBS.js +0 -27
  514. /package/dist/{api-TXFOVOXX.js.map → api-GVYEKSJE.js.map} +0 -0
  515. /package/dist/{chunk-BUE2D7PX.js.map → chunk-32YV3TJT.js.map} +0 -0
  516. /package/dist/{chunk-3RCJJBNR.js.map → chunk-3ELRMVJK.js.map} +0 -0
  517. /package/dist/{chunk-6GMZ7HEE.js.map → chunk-3F7GLNAE.js.map} +0 -0
  518. /package/dist/{chunk-2Y4IMKA6.js.map → chunk-3H5KLDZN.js.map} +0 -0
  519. /package/dist/{chunk-VTFVLCUH.js.map → chunk-3JWHAR6E.js.map} +0 -0
  520. /package/dist/{chunk-JBDFMYKQ.js.map → chunk-4AF3TUMP.js.map} +0 -0
  521. /package/dist/{chunk-J6FXAEUG.js.map → chunk-6B3VNR4P.js.map} +0 -0
  522. /package/dist/{chunk-TUFM4UZP.js.map → chunk-6K7DPM7D.js.map} +0 -0
  523. /package/dist/{chunk-K6LHRFBL.js.map → chunk-6LMQ5R26.js.map} +0 -0
  524. /package/dist/{chunk-XLMEZIAJ.js.map → chunk-6OWXYZK2.js.map} +0 -0
  525. /package/dist/{chunk-BOWNCWZT.js.map → chunk-6QSQQLSE.js.map} +0 -0
  526. /package/dist/{chunk-NQKIUNW5.js.map → chunk-A6IJU4TK.js.map} +0 -0
  527. /package/dist/{chunk-QIZPZMUI.js.map → chunk-AOWGXU6D.js.map} +0 -0
  528. /package/dist/{chunk-SFAWCTEM.js.map → chunk-B57AFBY2.js.map} +0 -0
  529. /package/dist/{chunk-GPEQUXHL.js.map → chunk-B6SJIBQK.js.map} +0 -0
  530. /package/dist/{chunk-Q2PU57HC.js.map → chunk-BK2HHQGN.js.map} +0 -0
  531. /package/dist/{collection-facade-4GRREZ6C.js.map → chunk-BKT776R5.js.map} +0 -0
  532. /package/dist/{chunk-FXBIP2WD.js.map → chunk-BUDAGWL5.js.map} +0 -0
  533. /package/dist/{chunk-BOET4NA4.js.map → chunk-CKNGS5MH.js.map} +0 -0
  534. /package/dist/{chunk-YSRUYAVU.js.map → chunk-DE4DH2RZ.js.map} +0 -0
  535. /package/dist/{chunk-6I2RQCET.js.map → chunk-DF73H4UN.js.map} +0 -0
  536. /package/dist/{chunk-K7NTTA6P.js.map → chunk-EOVMT6TB.js.map} +0 -0
  537. /package/dist/{chunk-XTXOCYOJ.js.map → chunk-FCKWQE2H.js.map} +0 -0
  538. /package/dist/{chunk-4OZNXTO4.js.map → chunk-FN5EBVTQ.js.map} +0 -0
  539. /package/dist/{chunk-NKHRDYOR.js.map → chunk-FQ5VRHIB.js.map} +0 -0
  540. /package/dist/{chunk-FAHMLERK.js.map → chunk-FW22ZCXT.js.map} +0 -0
  541. /package/dist/{chunk-RMS3NEA3.js.map → chunk-HT2AHGQI.js.map} +0 -0
  542. /package/dist/{chunk-CHJBLCOG.js.map → chunk-HVSCEIYL.js.map} +0 -0
  543. /package/dist/{chunk-GY4WYNNG.js.map → chunk-ID6Z6E66.js.map} +0 -0
  544. /package/dist/{chunk-EYBQEIUY.js.map → chunk-IEX7NK2K.js.map} +0 -0
  545. /package/dist/{chunk-KUJDV5QH.js.map → chunk-ISZQJBML.js.map} +0 -0
  546. /package/dist/{chunk-LWBCUYZW.js.map → chunk-IT22PWKV.js.map} +0 -0
  547. /package/dist/{chunk-7V4TP3AF.js.map → chunk-J6UOHJY5.js.map} +0 -0
  548. /package/dist/{chunk-JMGDHKQF.js.map → chunk-JCN44NCY.js.map} +0 -0
  549. /package/dist/{chunk-CARABLSQ.js.map → chunk-K6W7BVZ6.js.map} +0 -0
  550. /package/dist/{chunk-453F654R.js.map → chunk-L7DOS3TE.js.map} +0 -0
  551. /package/dist/{chunk-WEQEYLCS.js.map → chunk-LGRLME4M.js.map} +0 -0
  552. /package/dist/{chunk-RMF67KCG.js.map → chunk-LQ4ZHOKP.js.map} +0 -0
  553. /package/dist/{chunk-ZVO4QVPD.js.map → chunk-M522UYZ2.js.map} +0 -0
  554. /package/dist/{chunk-2N4GY74U.js.map → chunk-MTL7MXGR.js.map} +0 -0
  555. /package/dist/{chunk-TFR7DSOV.js.map → chunk-MVZ2TPVP.js.map} +0 -0
  556. /package/dist/{chunk-CPWQB3N5.js.map → chunk-N5DNADLQ.js.map} +0 -0
  557. /package/dist/{chunk-ELNXJMGB.js.map → chunk-NNARWO72.js.map} +0 -0
  558. /package/dist/{chunk-6YXCPL4T.js.map → chunk-PDCG6PR5.js.map} +0 -0
  559. /package/dist/{chunk-REDOOY2Q.js.map → chunk-PSIV7CJV.js.map} +0 -0
  560. /package/dist/{chunk-ANATMFIO.js.map → chunk-QWFHIOD2.js.map} +0 -0
  561. /package/dist/{chunk-X2DLENDQ.js.map → chunk-QWGU66MP.js.map} +0 -0
  562. /package/dist/{chunk-BSFNRLK2.js.map → chunk-S57HTZ6X.js.map} +0 -0
  563. /package/dist/{chunk-SZJ3DLZA.js.map → chunk-SEE332EV.js.map} +0 -0
  564. /package/dist/{chunk-YYP7WSEB.js.map → chunk-SI3V7D4G.js.map} +0 -0
  565. /package/dist/{chunk-UGTBXF5U.js.map → chunk-SOIQ4MM4.js.map} +0 -0
  566. /package/dist/{chunk-VXGSWL6L.js.map → chunk-SYVZW77S.js.map} +0 -0
  567. /package/dist/{chunk-MVMXZYXT.js.map → chunk-TKUOEU2F.js.map} +0 -0
  568. /package/dist/{chunk-SMH6SRX7.js.map → chunk-TROR3ALR.js.map} +0 -0
  569. /package/dist/{chunk-DGOZ4UZD.js.map → chunk-VNNRUGMM.js.map} +0 -0
  570. /package/dist/{chunk-HDOU6I2Y.js.map → chunk-VNPEWFPD.js.map} +0 -0
  571. /package/dist/{chunk-L7CIOOBW.js.map → chunk-WNJ4AVGE.js.map} +0 -0
  572. /package/dist/{chunk-FMZY5Q6L.js.map → chunk-WX5ADGTZ.js.map} +0 -0
  573. /package/dist/{chunk-Q7HZX3IF.js.map → chunk-X4773RBR.js.map} +0 -0
  574. /package/dist/{chunk-ANSIZYEG.js.map → chunk-YNIUIERI.js.map} +0 -0
  575. /package/dist/{chunk-BZ3534YM.js.map → chunk-ZUVBC32X.js.map} +0 -0
  576. /package/dist/{chunk-L742JPKZ.js.map → chunk-ZXABPVM6.js.map} +0 -0
  577. /package/dist/{classified-marker-LI2SF2E4.js.map → classified-marker-W3USLL5M.js.map} +0 -0
  578. /package/dist/{computed-VPOKQK4N.js.map → collection-facade-QU6IJBN3.js.map} +0 -0
  579. /package/dist/{derive-6O5SWQKN.js.map → computed-TPFBX7U4.js.map} +0 -0
  580. /package/dist/{dead-filter-TSWZQRR5.js.map → dead-filter-U2UYKSZL.js.map} +0 -0
  581. /package/dist/{delegation-OVIFFPG4.js.map → delegation-S3AEPW2T.js.map} +0 -0
  582. /package/dist/{enclave-KJOTOH7X.js.map → derive-OX7F6TGG.js.map} +0 -0
  583. /package/dist/{dispatch-WC6X2M6C.js.map → dispatch-3CQDJV5Q.js.map} +0 -0
  584. /package/dist/{dispatch-S73TK3IY.js.map → dispatch-RH4LHKBH.js.map} +0 -0
  585. /package/dist/{executor-5NIMLSKZ.js.map → enclave-27SMF6GF.js.map} +0 -0
  586. /package/dist/{executor-AQVXV5GZ.js.map → executor-B6SRO2QS.js.map} +0 -0
  587. /package/dist/{executor-PUAO6AKJ.js.map → executor-BI5CHWRY.js.map} +0 -0
  588. /package/dist/{export-accessible-72EQNBMR.js.map → executor-RBKM5W5K.js.map} +0 -0
  589. /package/dist/{extract-partition-PUYNU3UF.js.map → export-accessible-VMA3YM5V.js.map} +0 -0
  590. /package/dist/{find-2ABFCZX4.js.map → extract-partition-NF7PXGPP.js.map} +0 -0
  591. /package/dist/{fanout-sidecar-WUFXNYP4.js.map → fanout-sidecar-OT6RYLOL.js.map} +0 -0
  592. /package/dist/{issue-SIDORTSZ.js.map → find-LZMP26KF.js.map} +0 -0
  593. /package/dist/{ledger-F33ZVMTK.js.map → issue-IHARXWW5.js.map} +0 -0
  594. /package/dist/{liberate-LCDPNAG2.js.map → ledger-KZPCMVZY.js.map} +0 -0
  595. /package/dist/{link-set-FKNWAYKS.js.map → liberate-GRLCZMW4.js.map} +0 -0
  596. /package/dist/{managed-secret-PQYKSR6T.js.map → link-set-JCMJ7ULP.js.map} +0 -0
  597. /package/dist/{noydb-DUXZPKSN.js.map → managed-secret-S3MQ6SH6.js.map} +0 -0
  598. /package/dist/{migrate-cek-5ENH64AA.js.map → migrate-cek-V7GKJZ7O.js.map} +0 -0
  599. /package/dist/{register-I2DZXGAR.js.map → noydb-SWQJ3MZS.js.map} +0 -0
  600. /package/dist/{pod-handle-Q736KYON.js.map → pod-handle-WGDFB4C2.js.map} +0 -0
  601. /package/dist/{post-register-LNE2FE2A.js.map → post-register-SLSXIPBV.js.map} +0 -0
  602. /package/dist/{registry-23WF3TGH.js.map → query/all/index.js.map} +0 -0
  603. /package/dist/{registry-4AYVUNXK.js.map → register-F3OYE7MJ.js.map} +0 -0
  604. /package/dist/{registry-VSSQPIGF.js.map → registry-CILQFXFK.js.map} +0 -0
  605. /package/dist/{registry-YLEWMGAC.js.map → registry-XNNYQVKV.js.map} +0 -0
  606. /package/dist/{request-withdrawal-KFQHEZ25.js.map → registry-YCDZV3VW.js.map} +0 -0
  607. /package/dist/{revoke-DQDZAZZM.js.map → registry-ZGYS33TE.js.map} +0 -0
  608. /package/dist/{signer-WAMDZHEN.js.map → request-withdrawal-Z5NC6TXT.js.map} +0 -0
  609. /package/dist/{reveal-67RDQRIN.js.map → reveal-4BCKPEC2.js.map} +0 -0
  610. /package/dist/{stale-DDL7WQEZ.js.map → revoke-ZL62WC2D.js.map} +0 -0
  611. /package/dist/{seed-G42JYN56.js.map → seed-4JS2RJ4A.js.map} +0 -0
  612. /package/dist/{storage-FLR73HHF.js.map → signer-MBZZMXTC.js.map} +0 -0
  613. /package/dist/{walk-3UQBRMDV.js.map → stale-TJ3DYZMQ.js.map} +0 -0
  614. /package/dist/{withdraw-accessible-EL5GXZBS.js.map → storage-SVMKRGCW.js.map} +0 -0
  615. /package/dist/{store-coordination-provider-MEQ2MJQG.js.map → store-coordination-provider-2O2VUHKW.js.map} +0 -0
  616. /package/dist/{verify-KOV2G5D6.js.map → verify-RVT67IMH.js.map} +0 -0
@@ -0,0 +1,95 @@
1
+ /**
2
+ * The geospatial primitives (#1355) — geohash encoding, great-circle
3
+ * distance, and the bounding-box → prefix-set cover that lets a `near()`
4
+ * query take the existing sorted index.
5
+ *
6
+ * ⭐ WHY A GEOHASH PREFIX AND NOT A COORDINATE. The store holds ciphertext
7
+ * and never runs a query, but a secondary index key is a value the hub
8
+ * itself keeps in a structure a persisted sidecar can carry (#1359). A raw
9
+ * `lat`/`lng` in that key space is a coordinate at full precision; a
10
+ * geohash PREFIX is a cell — deliberately lossy, and the coarser the query
11
+ * the less it says. That is the whole reason this module exists rather
12
+ * than a pair of numeric range indexes on `lat` and `lng`.
13
+ *
14
+ * ⛔ THE SUPERSET LAW. {@link coverPrefixes} must return a cover whose
15
+ * union CONTAINS every point of the box, and {@link boundingBox} a box
16
+ * that contains every point within the radius. A candidate set that is
17
+ * too big costs a haversine call per extra row; one that is too small is
18
+ * a WRONG ANSWER, and no post-filter can put a dropped record back.
19
+ * `__tests__/geo-superset.test.ts` is the property that pins it.
20
+ *
21
+ * Pure, portable, dependency-free — no Node built-ins, no npm math lib.
22
+ */
23
+ /** A WGS-84 point. Latitude in [-90, 90], longitude in [-180, 180]. */
24
+ export interface GeoPoint {
25
+ readonly lat: number;
26
+ readonly lng: number;
27
+ }
28
+ /** A latitude/longitude rectangle. Never wraps: {@link boundingBox} splits at the antimeridian instead. */
29
+ export interface GeoBox {
30
+ readonly minLat: number;
31
+ readonly maxLat: number;
32
+ readonly minLng: number;
33
+ readonly maxLng: number;
34
+ }
35
+ /** Mean Earth radius (IUGG), km — the same constant every reference haversine uses. */
36
+ export declare const EARTH_RADIUS_KM = 6371.0088;
37
+ /** Widest geohash precision this module encodes. 12 chars ≈ 3.7cm — past any GPS fix. */
38
+ export declare const MAX_PRECISION = 12;
39
+ /** True when `p` is a usable point. Rejects NaN, infinities and out-of-range values. */
40
+ export declare function isGeoPoint(p: unknown): p is GeoPoint;
41
+ /**
42
+ * Great-circle distance in kilometres.
43
+ *
44
+ * Haversine rather than the law of cosines: the two agree to metres at
45
+ * continental scale, but `acos` loses all its significant digits for
46
+ * nearby points (`cos d → 1`), which is exactly the regime a `near()`
47
+ * query lives in.
48
+ */
49
+ export declare function haversineKm(a: GeoPoint, b: GeoPoint): number;
50
+ /**
51
+ * Encode a point as a geohash of `precision` characters.
52
+ *
53
+ * Bits interleave longitude-first, which is what makes a shared prefix
54
+ * mean "the same cell" and therefore what makes the sorted index's
55
+ * `startsWith` slice a spatial answer.
56
+ */
57
+ export declare function encodeGeohash(point: GeoPoint, precision: number): string;
58
+ /** The cell a geohash names. Throws on a character outside the alphabet. */
59
+ export declare function decodeGeohashBox(hash: string): GeoBox;
60
+ /** How many latitude / longitude bits a `precision`-character hash spends. */
61
+ export declare function gridBits(precision: number): {
62
+ latBits: number;
63
+ lngBits: number;
64
+ };
65
+ /**
66
+ * The boxes enclosing every point within `radiusKm` of `center`.
67
+ *
68
+ * Returns TWO boxes when the circle crosses the antimeridian, and one
69
+ * spanning the full longitude range when it reaches a pole — a rectangle
70
+ * in lat/lng cannot express either case, and quietly clipping would
71
+ * violate the superset law at exactly the coordinates nobody tests by
72
+ * hand.
73
+ */
74
+ export declare function boundingBox(center: GeoPoint, radiusKm: number): GeoBox[];
75
+ /** Number of `precision`-cells the boxes touch — computed from grid indices, never by enumerating. */
76
+ export declare function coverSize(boxes: readonly GeoBox[], precision: number): number;
77
+ /**
78
+ * The geohash prefixes whose cells cover `boxes` at `precision`.
79
+ *
80
+ * Every returned prefix is exactly `precision` characters, so the set can
81
+ * be handed to the sorted index one `startsWith` at a time and unioned.
82
+ */
83
+ export declare function coverPrefixes(boxes: readonly GeoBox[], precision: number): string[];
84
+ /**
85
+ * The finest cover of `center`/`radiusKm` that stays within `maxCells`
86
+ * prefixes, capped at `maxPrecision`.
87
+ *
88
+ * Finer is better: the prefixes ARE the candidate set, so a coarser cover
89
+ * hands more rows to the haversine post-filter. The search always
90
+ * terminates — precision 1 is a 4×8 grid, so 32 cells cover the planet.
91
+ */
92
+ export declare function prefixesForRadius(center: GeoPoint, radiusKm: number, maxPrecision: number, maxCells: number): {
93
+ prefixes: string[];
94
+ precision: number;
95
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `@noy-db/hub` geospatial field descriptor (#1355) — `geo()` plus the
3
+ * pure primitives a consumer may want directly (`haversineKm` for a
4
+ * distance column, `encodeGeohash` for a cell label).
5
+ *
6
+ * @see ./descriptor for the public `geo()` factory.
7
+ * @see ./geohash for the superset law the prefix cover obeys.
8
+ */
9
+ export { geo, isGeoDescriptor, GeoPointError } from './descriptor.js';
10
+ export type { GeoDescriptor, GeoOptions } from './descriptor.js';
11
+ export { haversineKm, encodeGeohash, decodeGeohashBox, boundingBox, coverPrefixes, coverSize, prefixesForRadius, isGeoPoint, gridBits, EARTH_RADIUS_KM, MAX_PRECISION, } from './geohash.js';
12
+ export type { GeoPoint, GeoBox } from './geohash.js';
13
+ export type { NearOperand, GeoWhereOperand, GeoNearOperand, GeoPassthroughOperand } from './where.js';
@@ -0,0 +1,50 @@
1
+ import { type Operator } from '../../kernel/query/predicate.js';
2
+ import type { ViaPrefixProbe } from '../../kernel/via/index.js';
3
+ import type { GeoDescriptor } from './descriptor.js';
4
+ import { type GeoPoint } from './geohash.js';
5
+ /** The `near` operand: a centre and a radius in kilometres. */
6
+ export interface NearOperand extends GeoPoint {
7
+ readonly radiusKm: number;
8
+ }
9
+ /** A `near` clause: the centre, the radius, and the cover the index probes. */
10
+ export interface GeoNearOperand {
11
+ readonly kind: 'near';
12
+ readonly center: GeoPoint;
13
+ readonly radiusKm: number;
14
+ readonly prefixes: readonly string[];
15
+ /** Cover precision actually chosen — reported by `describeFragment()`, not used to match. */
16
+ readonly precision: number;
17
+ }
18
+ /** Any other operator over a geo field: claimed, un-probed, generically compared. */
19
+ export interface GeoPassthroughOperand {
20
+ readonly kind: 'passthrough';
21
+ readonly value: unknown;
22
+ }
23
+ /** The opaque payload `buildClause` produces and `evaluateClause` consumes. */
24
+ export type GeoWhereOperand = GeoNearOperand | GeoPassthroughOperand;
25
+ /**
26
+ * Build the payload for a clause over a geo field. A `near` operand is
27
+ * validated and covered here; every other operator is captured verbatim.
28
+ *
29
+ * A malformed `near` operand throws at the `where()` CALL SITE (money's
30
+ * precedent) — a silently-empty result set is the worst possible answer to
31
+ * a typo'd coordinate.
32
+ */
33
+ export declare function geoFieldClause(field: string, op: Operator, value: unknown, desc: GeoDescriptor): GeoWhereOperand;
34
+ /**
35
+ * Exact membership: the stored point is within `radiusKm` of the centre.
36
+ *
37
+ * A value that is not a point — absent, nullish, or written before the
38
+ * field was declared `geo()` — matches nothing. That is the same posture
39
+ * every other operator takes on a type mismatch, and it is what keeps the
40
+ * index sound: such a record has no geohash key either, so it is absent
41
+ * from the candidate set AND from the answer.
42
+ */
43
+ export declare function evaluateGeoClause(actual: unknown, op: string, payload: GeoWhereOperand): boolean;
44
+ /**
45
+ * The index operand: a prefix cover the sorted index can slice.
46
+ *
47
+ * `undefined` for any other operator, which sends the clause to the scan
48
+ * — the geo binding claims no fast path it cannot make sound.
49
+ */
50
+ export declare function geoIndexProbe(op: string, payload: GeoWhereOperand): ViaPrefixProbe | undefined;
@@ -246,7 +246,7 @@ export { getAtPath } from '../../kernel/paths.js';
246
246
  export declare function applyI18nLocale(record: Record<string, unknown>, i18nFields: Record<string, I18nTextDescriptor>, locale: string, fallback?: string | readonly string[], layer?: Layer): Record<string, unknown>;
247
247
  /**
248
248
  * Sync i18n-text-only present-for-join dressing — the exact `join`-layer
249
- * partial application `kernel/query/join.ts` used to import and call
249
+ * partial application `kernel/query/relate/join.ts` used to import and call
250
250
  * directly before #626's retirement (#650 Task 6): fixes `fallback`
251
251
  * `undefined` and `layer` `'join'`. `via/lookup/snapshot.ts`'s
252
252
  * `buildPresentForJoin` composes this with the lookup-label half to build
@@ -9,7 +9,7 @@
9
9
  * by `vault.collection()` and read by the backup path) and calls these
10
10
  * helpers through the `port/with/lookup-strategy.ts` seam.
11
11
  */
12
- import type { JoinableSource } from '../../kernel/query/index.js';
12
+ import type { JoinableSource } from '../../kernel/query/relate/join.js';
13
13
  import type { ViaGraph } from '../../kernel/via/graph.js';
14
14
  import type { StaticDictDescriptor } from '../../port/with/i18n-strategy.js';
15
15
  import { type LookupHandle } from './handle.js';
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The sync lookup snapshot + join/locale seam (#650 Task 6, spec §5 — "the
3
3
  * snapshot+locale seam"). Retires the #626 kernel→via grandfather:
4
- * `kernel/query/join.ts` no longer imports `via/i18n/core.js` directly
4
+ * `kernel/query/relate/join.ts` no longer imports `via/i18n/core.js` directly
5
5
  * — it calls the `presentForJoin` hook this file's `buildPresentForJoin`
6
6
  * builds instead (seam map Part 2 item 4, the #626 reviewer-spec'd shape:
7
7
  * a sync `presentI18nForJoin`-class hook on `JoinableSource`).
@@ -16,7 +16,7 @@
16
16
  * Serves (reserved AND matrix tier since #650 Task 7 — `registry.ts`'s
17
17
  * `buildLookupSnapshotRows` routes both; static tier is read straight off
18
18
  * `descriptor.table` by every consumer below, never through this cache):
19
- * - join dressing (`presentForJoin`, consumed by `kernel/query/join.ts`
19
+ * - join dressing (`presentForJoin`, consumed by `kernel/query/relate/join.ts`
20
20
  * via `JoinableSource.presentForJoin`)
21
21
  * - dimension sort (`compareForOrder`, consumed by
22
22
  * `via/lookup/binding.ts`'s `NoydbVia.compareForOrder` closure)
@@ -59,7 +59,7 @@ export declare function buildLookupSnapshot(dimension: string, rows: ReadonlyMap
59
59
  * `Collection` attaches to the `JoinableSource` it exposes
60
60
  * (`querySourceForJoin()`) — the i18n-text half (`presentI18nForJoin`, the
61
61
  * exact `applyI18nLocale(..., 'join')` partial application
62
- * `kernel/query/join.ts` used to call directly, #626) composed with the
62
+ * `kernel/query/relate/join.ts` used to call directly, #626) composed with the
63
63
  * lookup-label half above. `undefined` when the collection declares
64
64
  * neither — `JoinableSource.presentForJoin` then stays unset, matching
65
65
  * today's `i18nFields`-absent behavior exactly (#626 parity lock).
@@ -0,0 +1,21 @@
1
+ import {
2
+ dumpVaultSchema
3
+ } from "./chunk-BP6DARYA.js";
4
+ import "./chunk-RXLYKVTF.js";
5
+ import "./chunk-VYYM3MEN.js";
6
+ import "./chunk-PSIV7CJV.js";
7
+ import "./chunk-Y2NBBT6K.js";
8
+ import "./chunk-3H5KLDZN.js";
9
+ import "./chunk-KJFW62P4.js";
10
+ import "./chunk-SEE332EV.js";
11
+ import "./chunk-6QSQQLSE.js";
12
+ import "./chunk-DE4DH2RZ.js";
13
+ import "./chunk-LQ4ZHOKP.js";
14
+ import "./chunk-LP7BEXCT.js";
15
+ import "./chunk-UYB234ZR.js";
16
+ import "./chunk-ODVPTDPK.js";
17
+ import "./chunk-244VXYPG.js";
18
+ export {
19
+ dumpVaultSchema
20
+ };
21
+ //# sourceMappingURL=walk-HJ42EISE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Coverage accounting (#1363) — per `(principal, vault, collection)`.
3
+ *
4
+ * ⛔⛔ **TELEMETRY, NOT A CONTROL.** Against an insider holding the device and
5
+ * local keys this prevents nothing; it makes bulk extraction visible early,
6
+ * attributable and loud. Key custody (tiers, per-collection DEKs) is the
7
+ * remediation. Nothing in this module refuses a read, and nothing in it may
8
+ * ever grow the ability to (#1251 §3: a refusal is a threshold the reader can
9
+ * binary-search; a signal is not).
10
+ *
11
+ * What is accounted, and why each one:
12
+ *
13
+ * - **distinct ids ever decrypted** (HyperLogLog) — coverage is the protected
14
+ * quantity, not rate: patience lowers an extractor's rate and never their
15
+ * coverage. Monotonic, and the horizon is the life of the state, never a
16
+ * 30-day window that resets faster than the attack completes.
17
+ * - **novelty per window** (Bloom, cleared per window) — the discriminator
18
+ * that is orthogonal to speed. A legitimate operator re-reads a working
19
+ * subset (high volume, low novelty); an extractor reads new records.
20
+ * - **served** — decrypts, all time and per window.
21
+ * - **burstiness** — this window's served count over the running mean of the
22
+ * previous windows'. 1 while there is no history to compare against.
23
+ *
24
+ * @module
25
+ */
26
+ import type { CoverageEmitter, CoverageFieldMeta, CoverageObserver, CoverageStrategy } from '../../port/with/coverage-strategy.js';
27
+ /** Per-collection policy. Absent `corpusSize` ⇒ no coverage estimate, so no alert. */
28
+ export interface CoverageCollectionPolicy {
29
+ /**
30
+ * How many records the corpus holds. Coverage is `distinct / corpusSize`.
31
+ * Deliberately DECLARED rather than counted: counting means a store read on
32
+ * a sensor that must not touch the store, and a corpus size that moves with
33
+ * every write makes an alert threshold un-reproducible.
34
+ */
35
+ readonly corpusSize?: number;
36
+ /** Coverage fractions to alert at. Default `[0.6, 0.9]`. Each fires at most once. */
37
+ readonly alertAt?: readonly number[];
38
+ }
39
+ export interface WithCoverageOptions {
40
+ /**
41
+ * HyperLogLog precision — the register file is `2^precision` bytes per
42
+ * `(principal, vault, collection)`. Default 14 (16 KiB), chosen by
43
+ * measurement; the table is in `sketch.ts`.
44
+ */
45
+ readonly precision?: number;
46
+ /** Bloom width in bits, per key, per window. Default 16 384 (2 KiB). */
47
+ readonly bloomBits?: number;
48
+ /** Bloom hash count. Default 7. */
49
+ readonly bloomHashes?: number;
50
+ /** Novelty window length. Default one hour. NOT the coverage horizon — that never resets. */
51
+ readonly windowMs?: number;
52
+ /** Per-collection corpus size and alert thresholds. */
53
+ readonly collections?: Readonly<Record<string, CoverageCollectionPolicy>>;
54
+ /** Clock seam, for tests. */
55
+ readonly now?: () => number;
56
+ }
57
+ export interface CoverageStats {
58
+ readonly principal: string;
59
+ readonly vault: string;
60
+ readonly collection: string;
61
+ /** HLL estimate of distinct ids ever decrypted. */
62
+ readonly distinct: number;
63
+ readonly served: number;
64
+ readonly novelInWindow: number;
65
+ readonly servedInWindow: number;
66
+ readonly burstiness: number;
67
+ /** Absent when the collection declares no `corpusSize`. */
68
+ readonly coverage?: number;
69
+ readonly window: string;
70
+ }
71
+ /**
72
+ * Serializable coverage state.
73
+ *
74
+ * ⛔ SKETCHES ONLY — the invariant this module exists to hold. A structure
75
+ * that could name the records a principal has read would be a second copy of
76
+ * the sensitive set: the sensor built to notice bulk extraction would become
77
+ * the single best artefact to extract. Pinned by
78
+ * `__tests__/coverage/no-record-ids.test.ts`.
79
+ */
80
+ export interface CoverageSnapshot {
81
+ readonly _noydb_coverage: 1;
82
+ readonly entries: ReadonlyArray<{
83
+ readonly principal: string;
84
+ readonly vault: string;
85
+ readonly collection: string;
86
+ readonly hll: {
87
+ readonly p: number;
88
+ readonly r: string;
89
+ };
90
+ readonly served: number;
91
+ readonly windowStart: number;
92
+ }>;
93
+ }
94
+ export declare class CoverageRegistry implements CoverageStrategy {
95
+ #private;
96
+ constructor(opts?: WithCoverageOptions);
97
+ observer(vault: string, collection: string, principal: string, fieldMeta: () => CoverageFieldMeta | undefined, emitter: CoverageEmitter, eager: boolean): CoverageObserver | undefined;
98
+ /** Current accounting, for an operator surface. Estimates, never exact. */
99
+ stats(): readonly CoverageStats[];
100
+ /**
101
+ * Serializable state, for a deployment that wants coverage to survive a
102
+ * restart — the horizon must exceed tenure, and a process does not.
103
+ * ⛔ Sketches only. Never a record id: see {@link CoverageSnapshot}.
104
+ */
105
+ snapshot(): CoverageSnapshot;
106
+ /**
107
+ * Restore a snapshot. The novelty filter is deliberately NOT restored:
108
+ * novelty is a within-window notion and the window did not survive.
109
+ * Distinct-ever did, which is the quantity that must not reset.
110
+ */
111
+ restore(snapshot: CoverageSnapshot): void;
112
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `withCoverage()` — the opt-in read-coverage sensor (#1363).
3
+ *
4
+ * ⛔⛔ **Against an insider holding the device and local keys, this prevents
5
+ * nothing. It makes bulk extraction visible early, attributable and loud. It
6
+ * is telemetry.** The real remediation is key custody — tiers and
7
+ * per-collection DEKs — and this factory is not a substitute for one. Read the
8
+ * sentence again before wiring it into anything that describes itself as a
9
+ * control.
10
+ *
11
+ * @module
12
+ */
13
+ import { CoverageRegistry } from './accounting.js';
14
+ import type { WithCoverageOptions } from './accounting.js';
15
+ /**
16
+ * Enable coverage accounting for every collection that declares a
17
+ * `bulk: 'sensitive'` field (or that is named in `opts.collections`).
18
+ *
19
+ * ```ts
20
+ * const coverage = withCoverage({ collections: { clients: { corpusSize: 1200, alertAt: [0.6, 0.9] } } })
21
+ * const db = await createNoydb({ user: 'alice', secret, coverageStrategy: coverage })
22
+ * db.on('coverage:threshold', (e) => notifyOwner(e)) // a SIGNAL, never a refusal
23
+ * ```
24
+ *
25
+ * The returned registry is the strategy AND the read surface: `stats()` for a
26
+ * live view, `snapshot()`/`restore()` to carry the coverage horizon across a
27
+ * restart. Nothing it returns can name a record that was read.
28
+ */
29
+ export declare function withCoverage(opts?: WithCoverageOptions): CoverageRegistry;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * `@noy-db/hub/coverage` — read-coverage sensor (#1363, from the #1251 design).
3
+ *
4
+ * ⛔⛔ **Against an insider holding the device and local keys, this prevents
5
+ * nothing. It makes bulk extraction visible early, attributable and loud. It
6
+ * is telemetry.** The real remediation is key custody (tiers, per-collection
7
+ * DEKs); a coverage alert is a complement to a key boundary and a poor
8
+ * substitute for one.
9
+ *
10
+ * The reframe it implements: the protected quantity for "safe individually,
11
+ * sensitive in bulk" data is **coverage** — the fraction of a corpus a
12
+ * principal has *ever* decrypted — not rate. Rate limiting fails structurally
13
+ * against low-and-slow; patience lowers an extractor's rate and never their
14
+ * coverage. So this service accounts distinct-ever (HyperLogLog), novelty per
15
+ * window (Bloom), served count and burstiness per
16
+ * `(principal, vault, collection)`, and emits `'coverage:threshold'` when
17
+ * declared coverage thresholds are crossed.
18
+ *
19
+ * ⛔ It never refuses a read, and no option to do so may be added: a refusal
20
+ * at a boundary is a threshold the reader can binary-search.
21
+ * ⛔ It never persists a record id. Sketches are the only state.
22
+ * ⚠️ It accounts only LAZY collections (`prefetch: false`). An eager
23
+ * collection decrypts its whole corpus at hydration, which a decrypt-point
24
+ * sensor cannot tell from a read — see `accounting.ts#resolveAccounted`.
25
+ *
26
+ * ## Honeytoken recipe (prose — the cheapest high-signal sensor in the design)
27
+ *
28
+ * Coverage alerting tells you how much of a corpus a principal has seen.
29
+ * A honeytoken tells you, on the FIRST read, that someone is enumerating —
30
+ * and it is immune to rate shaping, because there is no legitimate rate at
31
+ * which a record nobody should open gets opened.
32
+ *
33
+ * 1. Seed a handful of records in the bulk-declared collection that no
34
+ * business process ever addresses: plausible-looking rows with ids no
35
+ * workflow can reach, never referenced by a ref, never in a report.
36
+ * 2. Keep the list of their ids OUTSIDE the vault — in the code or the
37
+ * operator's config. It must never become a queryable "honeytokens"
38
+ * collection: that is a lookup table telling an insider which rows to
39
+ * avoid, i.e. the same second-copy mistake the sketches exist to avoid.
40
+ * 3. Wrap the read path the app already owns and compare the id it is about
41
+ * to serve against that list. Any hit is a high-confidence signal — page
42
+ * the owner, and (with `withHistory()`) append a ledger entry so the
43
+ * detection itself is tamper-evident.
44
+ * 4. Do not refuse the read. Serving it keeps the reader unaware they tripped
45
+ * a sensor, which is the entire value; refusing turns the honeytoken into
46
+ * an oracle for finding the other honeytokens.
47
+ * 5. Rotate them when staff change. A honeytoken whose location has leaked is
48
+ * a honeytoken that reports nothing.
49
+ *
50
+ * ⚠️ Honeytokens detect ENUMERATION, not exfiltration of a known subset. They
51
+ * complement coverage alerting; neither prevents anything.
52
+ *
53
+ * @category capability
54
+ * @module
55
+ */
56
+ export { withCoverage } from './active.js';
57
+ export { CoverageRegistry } from './accounting.js';
58
+ export type { CoverageCollectionPolicy, CoverageSnapshot, CoverageStats, WithCoverageOptions, } from './accounting.js';
59
+ export { BloomFilter, HyperLogLog } from './sketch.js';
60
+ export type { CoverageEmitter, CoverageEvent, CoverageFieldMeta, CoverageObserver, CoverageStrategy, } from '../../port/with/coverage-strategy.js';
61
+ export { NO_COVERAGE } from '../../port/with/coverage-strategy.js';
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Bounded-size sketches for the coverage sensor (#1363).
3
+ *
4
+ * ⚠️ THE WHOLE POINT OF A SKETCH HERE IS WHAT IT CANNOT DO. Coverage state
5
+ * answers *"how much of this corpus has this principal seen"*, and the exact
6
+ * answer — the id set — is a SECOND COPY OF THE SENSITIVE SET. A sensor built
7
+ * to notice bulk extraction would then be the best single artefact to extract.
8
+ * So no structure in this module retains a record id, and none can be
9
+ * enumerated back into one: HyperLogLog keeps per-register leading-zero ranks,
10
+ * Bloom keeps bits. Both are lossy on purpose, and the accuracy that costs is
11
+ * the price of the property (`no-record-ids.test.ts` pins it).
12
+ *
13
+ * @module
14
+ */
15
+ /**
16
+ * HyperLogLog over `2^precision` one-byte registers.
17
+ *
18
+ * ⭐ SIZING IS THE OPEN QUESTION THIS FEATURE SHIPS WITH, not a settled
19
+ * default. At the scale the design anticipates (~1k records, ~30 principals)
20
+ * the estimator runs entirely in its LINEAR-COUNTING range, where accuracy is
21
+ * a function of load factor rather than of HLL's asymptotic 1.04/√m. So the
22
+ * default is chosen by MEASUREMENT, not theory — `__tests__/coverage/sketch.test.ts`
23
+ * pins the error band this implementation actually produces:
24
+ *
25
+ * | distinct ids | p=10 (1 KiB) | p=12 (4 KiB) | **p=14 (16 KiB, default)** |
26
+ * |---:|---:|---:|---:|
27
+ * | 100 | 3.00% | 1.00% | **0.00%** |
28
+ * | 1 000 | 2.90% | 0.50% | **0.40%** |
29
+ * | 10 000 | 2.34% | 5.62% | **0.96%** |
30
+ * | 50 000 | 2.31% | 1.70% | **1.52%** |
31
+ *
32
+ * (p=12's 5.62% at 10 000 is the linear-counting/raw-estimator crossover, and
33
+ * is exactly why the default is not chosen from the memory column.)
34
+ * 16 KiB is per `(principal, vault, collection)` — a ~30-principal deployment
35
+ * with a handful of bulk-declared collections stays in the low megabytes.
36
+ * `precision` is configurable for a deployment whose corpus is a different
37
+ * order of magnitude.
38
+ *
39
+ * ⛔ An exact per-collection bitmap would be smaller AND exact at that scale.
40
+ * It is not shipped because it leaks ids: bit *i* set means "record *i* was
41
+ * read", which is the second copy this module exists to avoid. Revisit only
42
+ * against a real dataset, and only with that trade stated.
43
+ */
44
+ export declare class HyperLogLog {
45
+ readonly precision: number;
46
+ private readonly registers;
47
+ constructor(precision?: number);
48
+ add(id: string): void;
49
+ /** Estimated distinct count. */
50
+ count(): number;
51
+ /** Serializable state — registers only. No id, no id-derived key. */
52
+ toJSON(): {
53
+ readonly p: number;
54
+ readonly r: string;
55
+ };
56
+ static fromJSON(state: {
57
+ readonly p: number;
58
+ readonly r: string;
59
+ }): HyperLogLog;
60
+ }
61
+ /**
62
+ * Bloom filter for *novelty per window* — "have I seen this id in this
63
+ * window?". False positives under-report novelty (a novel read is scored as a
64
+ * repeat), which is the safe direction for a sensor that must not cry wolf;
65
+ * false negatives are impossible.
66
+ */
67
+ export declare class BloomFilter {
68
+ readonly bits: number;
69
+ readonly hashes: number;
70
+ private readonly words;
71
+ constructor(bits?: number, hashes?: number);
72
+ /** Set the id's bits; returns true when the id was NOT already present. */
73
+ addIfAbsent(id: string): boolean;
74
+ clear(): void;
75
+ }
@@ -146,6 +146,7 @@
146
146
  */
147
147
  import type { NoydbStore, EncryptedEnvelope } from '../../kernel/types.js';
148
148
  import type { LedgerStore } from '../../with-commit/history/ledger/index.js';
149
+ import { ValidationError } from '../../kernel/errors.js';
149
150
  export { PERIODS_COLLECTION, PERIOD_FREEZES_COLLECTION, PERIOD_ARCHIVES_COLLECTION, PERIOD_TARGET_PURGES_COLLECTION, PERIOD_REOPENS_COLLECTION, periodExclusiveUpperBound, } from './window.js';
150
151
  /**
151
152
  * Companion record recording that a closed period was frozen (its delete
@@ -398,9 +399,25 @@ export interface ClosePeriodOptions {
398
399
  /** Human-readable name. Must not collide with an existing period. */
399
400
  readonly name: string;
400
401
  /**
401
- * Inclusive upper cutoff. A record is sealed when its
402
- * `record[dateField]` (or, if absent, the envelope `_ts`) is at or
403
- * before this ISO timestamp.
402
+ * Inclusive upper cutoff. With a `dateField`, a record is sealed when its
403
+ * `record[dateField]` is at or before this ISO timestamp; a record with
404
+ * NO value there (absent / `null`) carries no business date and belongs
405
+ * to no period, and a value that is neither an ISO string nor a `Date`
406
+ * is refused (#1455). Without a `dateField`, the envelope `_ts` of the
407
+ * stored record is compared instead.
408
+ *
409
+ * ⚠️ String comparison is lexicographic: keep `endDate` and the field in
410
+ * one ISO-8601 shape (`YYYY-MM-DD` against `YYYY-MM-DD`, or full
411
+ * timestamps against full timestamps).
412
+ *
413
+ * ⛔ **Zero-padding is now ENFORCED on both sides (#1459), because that
414
+ * warning was not enough.** `'2026-6-30'` names a real day and is refused
415
+ * anyway: as text it sorts BELOW every June date, so the close would seal
416
+ * nothing and report success — and symmetrically a record dated
417
+ * `'2026-6-15'` sorted ABOVE `'2026-06-30'` and was written into a sealed
418
+ * June. Both are `ValidationError` now, at the close and at the write,
419
+ * rather than a silent pass or a `PeriodClosedError` that fired for a reason
420
+ * unrelated to dates.
404
421
  */
405
422
  readonly endDate: string;
406
423
  /**
@@ -502,6 +519,17 @@ export interface ReadOnlyCollection<T> {
502
519
  * cache. Not part of the public API surface.
503
520
  */
504
521
  export declare function loadPeriods(adapter: NoydbStore, vault: string, decrypt: (id: string, envelope: EncryptedEnvelope) => Promise<PeriodRecord>): Promise<PeriodRecord[]>;
522
+ /** sha256(canonicalJson(record)) over the STORED shape of a period record. @internal */
523
+ export declare function hashStoredPeriod(period: PeriodRecord): Promise<string>;
524
+ /**
525
+ * #1454 — every record's `priorPeriodName` / `priorPeriodHash` must resolve to
526
+ * a stored predecessor in ITS timeline whose hash matches. Followed by name,
527
+ * not by sort position: two closes within one millisecond sort arbitrarily,
528
+ * and a deleted predecessor must read as a break, not as a new root.
529
+ *
530
+ * @internal
531
+ */
532
+ export declare function verifyPeriodChain(records: readonly PeriodRecord[]): Promise<void>;
505
533
  /**
506
534
  * Given the current ordered period list, pick the last entry that
507
535
  * belongs to the hash chain — used as the `priorPeriodHash` anchor
@@ -513,22 +541,42 @@ export declare function chainAnchor(records: readonly PeriodRecord[], partition?
513
541
  priorPeriodName?: string;
514
542
  priorPeriodHash: string;
515
543
  }>;
544
+ /**
545
+ * @internal #1459 — is `value` a business date that can be compared against an
546
+ * `endDate` and give the calendar's answer?
547
+ */
548
+ export declare function isOrderableBusinessDate(value: string): boolean;
549
+ /**
550
+ * @internal #1459 — the refusal, phrased once so the guard and `closePeriod()`
551
+ * cannot drift on what "malformed" means or on how they say it.
552
+ */
553
+ export declare function malformedBusinessDate(where: string, value: string): ValidationError;
516
554
  /**
517
555
  * Throw `PeriodClosedError` if the record being touched falls within
518
556
  * any closed period.
519
557
  *
520
- * Three signals, evaluated per period:
558
+ * Per period, per side (existing record / incoming record):
521
559
  *
522
560
  * 1. If the period declares a `dateField`, the guard reads
523
561
  * `record[dateField]` on BOTH the existing (prior) record AND the
524
- * incoming (new) record. Either comparing `<= endDate` triggers
525
- * the error — callers cannot slide a record into a closed period
526
- * by editing its date field.
562
+ * incoming (new) record, each under its OWN partition. Either comparing
563
+ * `<= endDate` triggers the error — callers cannot slide a record into a
564
+ * closed period by editing its date field.
565
+ * #1455 — value shapes: a string is compared as-is (ISO-8601 assumed —
566
+ * the comparison is lexicographic); a `Date` is compared as the ISO string
567
+ * it will be stored as; `undefined` / `null` means the record carries no
568
+ * business date and belongs to NO period; anything else is REFUSED with
569
+ * `ValidationError` — a date the gate cannot evaluate is not a permission.
527
570
  * 2. If the period has no `dateField`, the guard falls back to the
528
571
  * envelope `_ts` of the existing record. Fresh inserts (no
529
572
  * existing envelope) pass.
530
573
  * 3. For a delete, only the existing side is checked.
531
574
  *
575
+ * #1456 — a value is OWNED by the closed period in its timeline with the
576
+ * smallest `endDate` at or after it. When that owner is effectively reopened,
577
+ * no later close vetoes the value: reopening January frees January-dated
578
+ * rows even with February and March closed, and February's rows stay sealed.
579
+ *
532
580
  * @internal
533
581
  */
534
582
  export declare function assertTsWritable(existing: {
@@ -0,0 +1,3 @@
1
+ export declare const PERIODS_RESERVED_COLLECTIONS: ReadonlySet<string>;
2
+ /** True when `name` belongs to the periods family (#1454). */
3
+ export declare function isPeriodsReservedCollection(name: string): boolean;
@@ -166,6 +166,23 @@ export declare class VaultPeriods {
166
166
  private mergeReopenState;
167
167
  /** Resolve one period within the timeline named by `options` (vault-wide when absent). */
168
168
  private findPeriod;
169
+ /**
170
+ * #1439 — could a closed period govern this record? Synchronous, and
171
+ * deliberately a SUPERSET of what {@link assertTsWritable} would refuse.
172
+ *
173
+ * Exists so a caller can tell "the period gate is registered" from "the
174
+ * period gate can fire for this row". Those were conflated, and the cost was
175
+ * that installing `withPeriods()` disabled an unrelated optimisation for
176
+ * every collection in the vault — with no period closed and no collection
177
+ * registered as a subject (#1439, measured: 0 → 250 redundant MV writes per
178
+ * source write).
179
+ *
180
+ * ⛔ Answers `true` whenever it cannot rule the gate out: the cache is not
181
+ * loaded yet, a closed period has no `dateField` to test against, or no row
182
+ * was supplied. A predicate that exists to permit an optimisation must fail
183
+ * towards "the gate applies", never away from it.
184
+ */
185
+ couldGovern(record?: Record<string, unknown>): boolean;
169
186
  /** Called by the gate bus before put/delete. `collection` selects the subject mapping (#1005). */
170
187
  assertTsWritable(existing: {
171
188
  ts: string | null;