@noy-db/hub 0.7.1-pre.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (812) hide show
  1. package/CHANGELOG.md +147 -14
  2. package/LICENSE +202 -21
  3. package/NOTICE +1 -0
  4. package/README.md +5 -5
  5. package/codemods/0.8.0-pre.json +61 -0
  6. package/dist/api-OS747DS4.js +18 -0
  7. package/dist/as/index.js +11 -12
  8. package/dist/as/index.js.map +1 -1
  9. package/dist/at/index.js +9 -10
  10. package/dist/attestation/index.js +37 -26
  11. package/dist/attestation/index.js.map +1 -1
  12. package/dist/{backup-XKCXVKV3.js → backup-YE2VQ26S.js} +15 -16
  13. package/dist/backup-YE2VQ26S.js.map +1 -0
  14. package/dist/blobs/index.js +13 -14
  15. package/dist/blobs/index.js.map +1 -1
  16. package/dist/broker/index.js +12 -13
  17. package/dist/broker/index.js.map +1 -1
  18. package/dist/by/index.js +2 -2
  19. package/dist/capsule/contract.d.ts +159 -0
  20. package/dist/capsule/contract.js +95 -0
  21. package/dist/capsule/enclave-aes/bound.d.ts +52 -0
  22. package/dist/capsule/enclave-aes/capabilities.d.ts +2 -0
  23. package/dist/capsule/enclave-aes/classify/compare.d.ts +20 -0
  24. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/find.d.ts +1 -1
  25. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/reveal.d.ts +1 -1
  26. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/verify.d.ts +2 -2
  27. package/dist/{kernel/enclave → capsule/enclave-aes}/classify/write.d.ts +1 -1
  28. package/dist/{kernel/enclave → capsule/enclave-aes}/crypto.d.ts +33 -129
  29. package/dist/capsule/enclave-aes/index.d.ts +113 -0
  30. package/dist/capsule/enclave-aes/index.js +335 -0
  31. package/dist/capsule/enclave-aes/index.js.map +1 -0
  32. package/dist/capsule/enclave-aes/primitives.d.ts +29 -0
  33. package/dist/capsule/index.d.ts +27 -0
  34. package/dist/capsule/plumbing/ct-equal.d.ts +11 -0
  35. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/deterministic.d.ts +8 -21
  36. package/dist/capsule/plumbing/digest.d.ts +122 -0
  37. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/envelope-body.d.ts +44 -48
  38. package/dist/capsule/plumbing/index.d.ts +100 -0
  39. package/dist/capsule/plumbing/lifecycle.d.ts +50 -0
  40. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/record-codec.d.ts +80 -20
  41. package/dist/{kernel/enclave → capsule/plumbing}/record-envelope.d.ts +1 -1
  42. package/dist/capsule/plumbing/rekey-blob.d.ts +33 -0
  43. package/dist/capsule/plumbing/rekey.d.ts +44 -0
  44. package/dist/capsule/plumbing/sealed-slot.d.ts +22 -0
  45. package/dist/capsule/plumbing/sealed-slots.d.ts +37 -0
  46. package/dist/capsule/plumbing/sealing.d.ts +29 -0
  47. package/dist/capsule/plumbing/sign.d.ts +9 -0
  48. package/dist/{kernel/enclave/record-keys → capsule/plumbing}/tombstone.d.ts +2 -2
  49. package/dist/capsule-VOLX3QRQ.js +209 -0
  50. package/dist/cargo/index.js +39 -36
  51. package/dist/{chunk-Q2MPFCQ7.js → chunk-23D6M6VM.js} +5 -5
  52. package/dist/chunk-23D6M6VM.js.map +1 -0
  53. package/dist/{chunk-R7BX2NB3.js → chunk-244QBK7Z.js} +4 -4
  54. package/dist/chunk-244QBK7Z.js.map +1 -0
  55. package/dist/chunk-2AFX33YA.js +936 -0
  56. package/dist/chunk-2AFX33YA.js.map +1 -0
  57. package/dist/{chunk-MVMXZYXT.js → chunk-2GHDLTPE.js} +2 -2
  58. package/dist/{chunk-GYGLAVCX.js → chunk-2MG3SW7Q.js} +6 -2
  59. package/dist/chunk-2MG3SW7Q.js.map +1 -0
  60. package/dist/{chunk-XLMEZIAJ.js → chunk-2ODVB6LZ.js} +2 -2
  61. package/dist/{chunk-HJUWN7JN.js → chunk-2PVXF5CS.js} +33 -8
  62. package/dist/chunk-2PVXF5CS.js.map +1 -0
  63. package/dist/{chunk-YJRT5UQM.js → chunk-2RH777HH.js} +21 -20
  64. package/dist/{chunk-YJRT5UQM.js.map → chunk-2RH777HH.js.map} +1 -1
  65. package/dist/{chunk-7O3Y4PPD.js → chunk-37EPTBBR.js} +153 -16
  66. package/dist/chunk-37EPTBBR.js.map +1 -0
  67. package/dist/{chunk-2ENE6445.js → chunk-3A5DUZ56.js} +102 -16
  68. package/dist/chunk-3A5DUZ56.js.map +1 -0
  69. package/dist/chunk-3EWS67C7.js +461 -0
  70. package/dist/chunk-3EWS67C7.js.map +1 -0
  71. package/dist/{chunk-SGZAIJCV.js → chunk-3L2NBKDR.js} +4 -8
  72. package/dist/chunk-3L2NBKDR.js.map +1 -0
  73. package/dist/{chunk-YMUFFJCO.js → chunk-3TDUWVWB.js} +5 -2
  74. package/dist/chunk-3TDUWVWB.js.map +1 -0
  75. package/dist/{chunk-4GVM6QZA.js → chunk-3XJQBBZD.js} +26 -28
  76. package/dist/chunk-3XJQBBZD.js.map +1 -0
  77. package/dist/{chunk-4ZS56W5S.js → chunk-42ALPZ2B.js} +672 -664
  78. package/dist/chunk-42ALPZ2B.js.map +1 -0
  79. package/dist/chunk-4CIQDWRB.js +524 -0
  80. package/dist/chunk-4CIQDWRB.js.map +1 -0
  81. package/dist/{chunk-RMS3NEA3.js → chunk-4JPMZTJY.js} +2 -2
  82. package/dist/{chunk-P3MG6QCN.js → chunk-4T3SE27M.js} +5 -9
  83. package/dist/chunk-4T3SE27M.js.map +1 -0
  84. package/dist/chunk-4V3Q35WG.js +204 -0
  85. package/dist/chunk-4V3Q35WG.js.map +1 -0
  86. package/dist/{chunk-NQKIUNW5.js → chunk-52MGURXO.js} +2 -2
  87. package/dist/{chunk-EQEYOJBM.js → chunk-5A4345TG.js} +4 -4
  88. package/dist/chunk-5A4345TG.js.map +1 -0
  89. package/dist/{chunk-334WSVOW.js → chunk-5FE75J4S.js} +6 -6
  90. package/dist/chunk-5FE75J4S.js.map +1 -0
  91. package/dist/chunk-5KC7QYEC.js +565 -0
  92. package/dist/chunk-5KC7QYEC.js.map +1 -0
  93. package/dist/{chunk-RSGLUIO6.js → chunk-5UMK7GRI.js} +13 -12
  94. package/dist/chunk-5UMK7GRI.js.map +1 -0
  95. package/dist/chunk-5WWDGFOS.js +275 -0
  96. package/dist/chunk-5WWDGFOS.js.map +1 -0
  97. package/dist/{chunk-QPQUVOZ2.js → chunk-6QVKPHBF.js} +3 -5
  98. package/dist/chunk-6QVKPHBF.js.map +1 -0
  99. package/dist/{chunk-ACAQ2DSG.js → chunk-747G6CT3.js} +2 -2
  100. package/dist/chunk-747G6CT3.js.map +1 -0
  101. package/dist/{chunk-QTQUH4DS.js → chunk-7R2Q7CPL.js} +16 -16
  102. package/dist/chunk-7R2Q7CPL.js.map +1 -0
  103. package/dist/{chunk-UGTBXF5U.js → chunk-7XMHMVTS.js} +3 -3
  104. package/dist/{chunk-YJX7EOJD.js → chunk-A4XMIZT3.js} +6 -6
  105. package/dist/{chunk-YJX7EOJD.js.map → chunk-A4XMIZT3.js.map} +1 -1
  106. package/dist/{chunk-A66I4JOA.js → chunk-AEQGFRU4.js} +4 -4
  107. package/dist/chunk-AEQGFRU4.js.map +1 -0
  108. package/dist/chunk-AL6ML4LA.js +1558 -0
  109. package/dist/chunk-AL6ML4LA.js.map +1 -0
  110. package/dist/{chunk-BZ3534YM.js → chunk-AUKKUPVB.js} +2 -2
  111. package/dist/{chunk-CUZLNGD5.js → chunk-B2YY6WDD.js} +1 -1
  112. package/dist/chunk-B2YY6WDD.js.map +1 -0
  113. package/dist/chunk-BKT776R5.js +1 -0
  114. package/dist/chunk-BNWA3WG5.js +22 -0
  115. package/dist/chunk-BNWA3WG5.js.map +1 -0
  116. package/dist/{chunk-VXANTWBJ.js → chunk-BPWYQ25R.js} +92 -6
  117. package/dist/{chunk-VXANTWBJ.js.map → chunk-BPWYQ25R.js.map} +1 -1
  118. package/dist/{chunk-6LKOJBV6.js → chunk-BVCUTXE3.js} +2 -2
  119. package/dist/chunk-CY2CYVWZ.js +41 -0
  120. package/dist/chunk-CY2CYVWZ.js.map +1 -0
  121. package/dist/{chunk-M4YPHYEH.js → chunk-DHHGL42E.js} +70 -25
  122. package/dist/chunk-DHHGL42E.js.map +1 -0
  123. package/dist/{chunk-VTFVLCUH.js → chunk-DIZLQVAA.js} +2 -2
  124. package/dist/{chunk-G73UVHCA.js → chunk-DLD5LGDS.js} +11 -12
  125. package/dist/chunk-DLD5LGDS.js.map +1 -0
  126. package/dist/{chunk-WQBG4SZS.js → chunk-DQESF6RP.js} +60 -49
  127. package/dist/chunk-DQESF6RP.js.map +1 -0
  128. package/dist/{chunk-LWBCUYZW.js → chunk-E2N2T5ZO.js} +2 -2
  129. package/dist/{chunk-3PGS7TYR.js → chunk-EGVJ7TM4.js} +29 -32
  130. package/dist/chunk-EGVJ7TM4.js.map +1 -0
  131. package/dist/{chunk-JVIBCBC7.js → chunk-EJLV62NI.js} +2 -2
  132. package/dist/{chunk-KKEESNPE.js → chunk-EYG2CY2X.js} +126 -19
  133. package/dist/chunk-EYG2CY2X.js.map +1 -0
  134. package/dist/{enclave-55PAM4YO.js → chunk-EZGV6F47.js} +83 -56
  135. package/dist/chunk-EZGV6F47.js.map +1 -0
  136. package/dist/{chunk-CHQCZZWC.js → chunk-EZOAKKTB.js} +36 -27
  137. package/dist/chunk-EZOAKKTB.js.map +1 -0
  138. package/dist/chunk-F6NCB7KT.js +13 -0
  139. package/dist/chunk-F6NCB7KT.js.map +1 -0
  140. package/dist/chunk-FFJFE4T7.js +100 -0
  141. package/dist/chunk-FFJFE4T7.js.map +1 -0
  142. package/dist/{chunk-JMGDHKQF.js → chunk-FLPCETP6.js} +2 -2
  143. package/dist/chunk-FOEDQATO.js +53 -0
  144. package/dist/chunk-FOEDQATO.js.map +1 -0
  145. package/dist/{chunk-DGOZ4UZD.js → chunk-FVH5QYY2.js} +2 -2
  146. package/dist/{chunk-HIWCKBEY.js → chunk-G2MVBDFP.js} +54 -28
  147. package/dist/chunk-G2MVBDFP.js.map +1 -0
  148. package/dist/chunk-GMKGGY7V.js +234 -0
  149. package/dist/chunk-GMKGGY7V.js.map +1 -0
  150. package/dist/{chunk-EIPVYUEP.js → chunk-GQ4MF3CM.js} +3 -3
  151. package/dist/chunk-GQ4MF3CM.js.map +1 -0
  152. package/dist/{chunk-PEOZ34EM.js → chunk-GSAK56VF.js} +1 -1
  153. package/dist/chunk-GSAK56VF.js.map +1 -0
  154. package/dist/{chunk-5VCRVKOZ.js → chunk-GUZET4SG.js} +12 -4
  155. package/dist/chunk-GUZET4SG.js.map +1 -0
  156. package/dist/{chunk-JBDFMYKQ.js → chunk-GZT3NQRA.js} +2 -2
  157. package/dist/{chunk-K23VKTN4.js → chunk-H23XHRTT.js} +19 -34
  158. package/dist/chunk-H23XHRTT.js.map +1 -0
  159. package/dist/{chunk-TFR7DSOV.js → chunk-H427H63K.js} +2 -2
  160. package/dist/{chunk-DFMWUOU5.js → chunk-H7JBY4P7.js} +23 -32
  161. package/dist/chunk-H7JBY4P7.js.map +1 -0
  162. package/dist/{chunk-SKGMN35F.js → chunk-HS554XAF.js} +3 -3
  163. package/dist/chunk-HS554XAF.js.map +1 -0
  164. package/dist/{chunk-HK67PX4J.js → chunk-HW7CMKUG.js} +1 -1
  165. package/dist/chunk-HW7CMKUG.js.map +1 -0
  166. package/dist/{chunk-3BVH633C.js → chunk-IMQKWR46.js} +5 -7
  167. package/dist/chunk-IMQKWR46.js.map +1 -0
  168. package/dist/{chunk-R42NSZI6.js → chunk-IUBMZPHM.js} +7 -7
  169. package/dist/chunk-IUBMZPHM.js.map +1 -0
  170. package/dist/{chunk-CUQPWYRX.js → chunk-IUT3GWP3.js} +75 -386
  171. package/dist/chunk-IUT3GWP3.js.map +1 -0
  172. package/dist/{chunk-RF6D3Y5E.js → chunk-JDEYF3PJ.js} +4 -8
  173. package/dist/{chunk-RF6D3Y5E.js.map → chunk-JDEYF3PJ.js.map} +1 -1
  174. package/dist/{chunk-PPTHY5QO.js → chunk-JIBUPZHA.js} +99 -8
  175. package/dist/chunk-JIBUPZHA.js.map +1 -0
  176. package/dist/{chunk-SMH6SRX7.js → chunk-JOSPH3E5.js} +2 -2
  177. package/dist/chunk-JQYKPKG6.js +193 -0
  178. package/dist/chunk-JQYKPKG6.js.map +1 -0
  179. package/dist/{chunk-7APJ6CO6.js → chunk-JSMTXZR3.js} +45 -13
  180. package/dist/chunk-JSMTXZR3.js.map +1 -0
  181. package/dist/chunk-JWWYRR4Q.js +12 -0
  182. package/dist/chunk-JWWYRR4Q.js.map +1 -0
  183. package/dist/{chunk-BVN6KXL2.js → chunk-KZXDLBY6.js} +14 -9
  184. package/dist/chunk-KZXDLBY6.js.map +1 -0
  185. package/dist/chunk-LGNDFRYC.js +23 -0
  186. package/dist/chunk-LGNDFRYC.js.map +1 -0
  187. package/dist/{chunk-XKWGNJ26.js → chunk-LIOVX5TJ.js} +7 -11
  188. package/dist/chunk-LIOVX5TJ.js.map +1 -0
  189. package/dist/{chunk-AYX7AINO.js → chunk-LNSVGRHO.js} +5 -7
  190. package/dist/chunk-LNSVGRHO.js.map +1 -0
  191. package/dist/chunk-M5B2W6YY.js +293 -0
  192. package/dist/chunk-M5B2W6YY.js.map +1 -0
  193. package/dist/chunk-MBMTND6D.js +456 -0
  194. package/dist/chunk-MBMTND6D.js.map +1 -0
  195. package/dist/{chunk-3BZZJJMQ.js → chunk-MILI22XQ.js} +3 -3
  196. package/dist/{chunk-A2HKRLPV.js → chunk-MXKI4ABF.js} +18 -59
  197. package/dist/chunk-MXKI4ABF.js.map +1 -0
  198. package/dist/{chunk-ZYIYHJ5R.js → chunk-MXOQ5JCG.js} +869 -238
  199. package/dist/chunk-MXOQ5JCG.js.map +1 -0
  200. package/dist/{chunk-V7ZRRCRJ.js → chunk-N7EVQD5S.js} +9 -13
  201. package/dist/chunk-N7EVQD5S.js.map +1 -0
  202. package/dist/chunk-N7UDP5VU.js +757 -0
  203. package/dist/chunk-N7UDP5VU.js.map +1 -0
  204. package/dist/chunk-NBQ3KK6X.js +270 -0
  205. package/dist/chunk-NBQ3KK6X.js.map +1 -0
  206. package/dist/{chunk-ZORTV6NH.js → chunk-NCO25JZO.js} +88 -4
  207. package/dist/chunk-NCO25JZO.js.map +1 -0
  208. package/dist/chunk-NH2UOV3B.js +18 -0
  209. package/dist/chunk-NH2UOV3B.js.map +1 -0
  210. package/dist/chunk-NYMLINRP.js +28 -0
  211. package/dist/chunk-NYMLINRP.js.map +1 -0
  212. package/dist/{chunk-YYP7WSEB.js → chunk-O2IMQSNA.js} +2 -2
  213. package/dist/chunk-O46CHQT7.js +215 -0
  214. package/dist/chunk-O46CHQT7.js.map +1 -0
  215. package/dist/chunk-OIEO4WDL.js +27 -0
  216. package/dist/chunk-OIEO4WDL.js.map +1 -0
  217. package/dist/{chunk-TRGTKX5E.js → chunk-OKSTSITU.js} +27 -4
  218. package/dist/chunk-OKSTSITU.js.map +1 -0
  219. package/dist/chunk-OYW3I5M4.js +31 -0
  220. package/dist/chunk-OYW3I5M4.js.map +1 -0
  221. package/dist/{chunk-Q7HZX3IF.js → chunk-PD64727P.js} +2 -2
  222. package/dist/chunk-PD64727P.js.map +1 -0
  223. package/dist/{chunk-FET5XCAT.js → chunk-PP3K67AJ.js} +34 -6
  224. package/dist/chunk-PP3K67AJ.js.map +1 -0
  225. package/dist/chunk-Q2XRFWOI.js +40 -0
  226. package/dist/chunk-Q2XRFWOI.js.map +1 -0
  227. package/dist/{chunk-QIZPZMUI.js → chunk-Q4UHJ5SN.js} +2 -2
  228. package/dist/{chunk-FAHMLERK.js → chunk-QBLT6POL.js} +2 -2
  229. package/dist/chunk-QMWY2FDS.js +157 -0
  230. package/dist/chunk-QMWY2FDS.js.map +1 -0
  231. package/dist/{chunk-LH5A3ZPG.js → chunk-RB4DOPGZ.js} +150 -22
  232. package/dist/chunk-RB4DOPGZ.js.map +1 -0
  233. package/dist/chunk-RHVMZSUU.js +7 -0
  234. package/dist/chunk-RHVMZSUU.js.map +1 -0
  235. package/dist/{chunk-BUE2D7PX.js → chunk-SMV2HRDU.js} +2 -2
  236. package/dist/chunk-SUZKW6UR.js +25 -0
  237. package/dist/chunk-SUZKW6UR.js.map +1 -0
  238. package/dist/{chunk-7MG7SJT7.js → chunk-SV2PM2OY.js} +1 -1
  239. package/dist/chunk-SV2PM2OY.js.map +1 -0
  240. package/dist/{chunk-UXVWEX5L.js → chunk-SYNY3VB5.js} +6 -2
  241. package/dist/chunk-SYNY3VB5.js.map +1 -0
  242. package/dist/{chunk-4GFX6MPA.js → chunk-TEHHROZL.js} +6 -8
  243. package/dist/chunk-TEHHROZL.js.map +1 -0
  244. package/dist/chunk-TKVUE4JF.js +1289 -0
  245. package/dist/chunk-TKVUE4JF.js.map +1 -0
  246. package/dist/{chunk-SFAWCTEM.js → chunk-TZZBXPZK.js} +2 -2
  247. package/dist/{chunk-F3W6YMDC.js → chunk-U2FZNEWJ.js} +4 -4
  248. package/dist/chunk-U2FZNEWJ.js.map +1 -0
  249. package/dist/{chunk-BLN54W3L.js → chunk-UA372JHH.js} +56 -3
  250. package/dist/chunk-UA372JHH.js.map +1 -0
  251. package/dist/{chunk-6YXCPL4T.js → chunk-UEFOQH74.js} +2 -2
  252. package/dist/chunk-UEFOQH74.js.map +1 -0
  253. package/dist/{chunk-2N5ML6HT.js → chunk-UIYESRD6.js} +9 -11
  254. package/dist/chunk-UIYESRD6.js.map +1 -0
  255. package/dist/{chunk-UHHPLO3I.js → chunk-V3RWOOSO.js} +4 -4
  256. package/dist/{chunk-KTFRCC5C.js → chunk-V7ADQF5O.js} +82 -8
  257. package/dist/chunk-V7ADQF5O.js.map +1 -0
  258. package/dist/{chunk-453F654R.js → chunk-VAORSCSU.js} +3 -3
  259. package/dist/chunk-VAORSCSU.js.map +1 -0
  260. package/dist/{chunk-GPNTB4Y7.js → chunk-VFHCKG5M.js} +6 -10
  261. package/dist/chunk-VFHCKG5M.js.map +1 -0
  262. package/dist/{chunk-2577DKXB.js → chunk-VHBKYN2J.js} +3 -3
  263. package/dist/chunk-VHBKYN2J.js.map +1 -0
  264. package/dist/chunk-VHM7HCKB.js +220 -0
  265. package/dist/chunk-VHM7HCKB.js.map +1 -0
  266. package/dist/{chunk-ZHKOPKE3.js → chunk-VKI2EB3N.js} +3 -3
  267. package/dist/chunk-VKI2EB3N.js.map +1 -0
  268. package/dist/{chunk-UDHWDSRL.js → chunk-VMV5SBE4.js} +16 -17
  269. package/dist/chunk-VMV5SBE4.js.map +1 -0
  270. package/dist/{chunk-SPYWXKJN.js → chunk-VQDZYB2B.js} +3 -3
  271. package/dist/chunk-VQDZYB2B.js.map +1 -0
  272. package/dist/{chunk-Q2PU57HC.js → chunk-VVOLDVIR.js} +2 -2
  273. package/dist/{chunk-3VF3WQ4F.js → chunk-WPOYWFSE.js} +7 -7
  274. package/dist/{chunk-3VF3WQ4F.js.map → chunk-WPOYWFSE.js.map} +1 -1
  275. package/dist/{chunk-OTQZ7ZWU.js → chunk-WXE4W2U6.js} +7 -11
  276. package/dist/chunk-WXE4W2U6.js.map +1 -0
  277. package/dist/chunk-XBKH4FOC.js +195 -0
  278. package/dist/chunk-XBKH4FOC.js.map +1 -0
  279. package/dist/{chunk-TUFM4UZP.js → chunk-XQRFSKYM.js} +2 -2
  280. package/dist/{chunk-3V4KWFX7.js → chunk-XSPFDUDG.js} +58 -53
  281. package/dist/chunk-XSPFDUDG.js.map +1 -0
  282. package/dist/{chunk-GY4WYNNG.js → chunk-Y2RKVFKR.js} +2 -2
  283. package/dist/{chunk-UP4BECPY.js → chunk-Y3LPTBG7.js} +89 -27
  284. package/dist/chunk-Y3LPTBG7.js.map +1 -0
  285. package/dist/{chunk-4OZNXTO4.js → chunk-YRXFFWG4.js} +2 -2
  286. package/dist/classified/index.js +5 -5
  287. package/dist/{classified-marker-BWOFVYAC.js → classified-marker-SIYKUU5L.js} +3 -3
  288. package/dist/classified-marker-SIYKUU5L.js.map +1 -0
  289. package/dist/collection-facade-CS7CA2XO.js +47 -0
  290. package/dist/{computed-VPOKQK4N.js → computed-FAD7SED4.js} +3 -3
  291. package/dist/consent/index.js +10 -11
  292. package/dist/consent/index.js.map +1 -1
  293. package/dist/cover/index.js +10 -11
  294. package/dist/coverage/index.js +306 -0
  295. package/dist/coverage/index.js.map +1 -0
  296. package/dist/custody/index.js +12 -13
  297. package/dist/{dead-filter-PKQDLOT4.js → dead-filter-4F3LWYKH.js} +11 -3
  298. package/dist/dead-filter-4F3LWYKH.js.map +1 -0
  299. package/dist/debug/index.js +11 -2
  300. package/dist/debug/index.js.map +1 -1
  301. package/dist/{delegation-DS5NRILW.js → delegation-NANZDG4N.js} +13 -16
  302. package/dist/delegation-NANZDG4N.js.map +1 -0
  303. package/dist/derivations/index.js +25 -23
  304. package/dist/derive-XLOJVXPU.js +20 -0
  305. package/dist/directory/index.js +10 -11
  306. package/dist/{dispatch-IEPAVQUM.js → dispatch-H4HV32AM.js} +5 -5
  307. package/dist/{dispatch-Q6MWLOJY.js → dispatch-JDZNGEB3.js} +20 -21
  308. package/dist/dispatch-JDZNGEB3.js.map +1 -0
  309. package/dist/executor-FMPVN6DT.js +35 -0
  310. package/dist/executor-LBBBRTN5.js +8 -0
  311. package/dist/executor-OSRZST2U.js +8 -0
  312. package/dist/export-accessible-RAOJAAU5.js +22 -0
  313. package/dist/extract-partition-JD5CUSTG.js +37 -0
  314. package/dist/{fanout-sidecar-S3QL53YX.js → fanout-sidecar-L7NHPIOC.js} +13 -15
  315. package/dist/fanout-sidecar-L7NHPIOC.js.map +1 -0
  316. package/dist/find-JRN4RNQ5.js +10 -0
  317. package/dist/forget/index.js +9 -10
  318. package/dist/forget/index.js.map +1 -1
  319. package/dist/guards/index.js +4 -4
  320. package/dist/history/index.js +13 -14
  321. package/dist/history/index.js.map +1 -1
  322. package/dist/i18n/index.js +14 -15
  323. package/dist/i18n/index.js.map +1 -1
  324. package/dist/index.d.ts +36 -14
  325. package/dist/index.js +970 -163
  326. package/dist/index.js.map +1 -1
  327. package/dist/indexing/index.js +13 -5
  328. package/dist/indexing/index.js.map +1 -1
  329. package/dist/introspection/index.js +11 -12
  330. package/dist/issue-YIVBZUTH.js +19 -0
  331. package/dist/ivf-flat-UZ6DQDLS.js +314 -0
  332. package/dist/ivf-flat-UZ6DQDLS.js.map +1 -0
  333. package/dist/{json-schema-V3M5MUCM.js → json-schema-3SHX72CC.js} +2 -1
  334. package/dist/json-schema-3SHX72CC.js.map +1 -0
  335. package/dist/kernel/attestation-types.d.ts +62 -0
  336. package/dist/kernel/collection-config.d.ts +5 -68
  337. package/dist/kernel/collection.d.ts +30 -9
  338. package/dist/kernel/cutover-transform.d.ts +1 -1
  339. package/dist/kernel/errors.d.ts +257 -38
  340. package/dist/kernel/generation-map.d.ts +48 -0
  341. package/dist/kernel/merge-authority.d.ts +1 -1
  342. package/dist/kernel/noydb.d.ts +6 -1
  343. package/dist/kernel/paths.d.ts +29 -5
  344. package/dist/kernel/prepared-write.d.ts +1 -1
  345. package/dist/kernel/present-cache.d.ts +58 -0
  346. package/dist/kernel/query/all.d.ts +7 -0
  347. package/dist/kernel/query/builder.d.ts +601 -270
  348. package/dist/kernel/query/civil-date.d.ts +64 -0
  349. package/dist/kernel/query/cursor.d.ts +40 -0
  350. package/dist/kernel/query/distinct-key.d.ts +98 -0
  351. package/dist/kernel/query/hydration.d.ts +76 -0
  352. package/dist/kernel/query/index.d.ts +31 -15
  353. package/dist/kernel/query/internal/core.d.ts +30 -0
  354. package/dist/kernel/query/internal/hooks.d.ts +22 -0
  355. package/dist/kernel/query/internal/maintenance.d.ts +43 -0
  356. package/dist/kernel/query/live/incremental.d.ts +314 -0
  357. package/dist/kernel/query/live/index.d.ts +22 -0
  358. package/dist/kernel/query/live/install.d.ts +2 -0
  359. package/dist/kernel/query/{live.d.ts → live/live.d.ts} +39 -9
  360. package/dist/kernel/query/live/methods.d.ts +107 -0
  361. package/dist/kernel/query/predicate.d.ts +119 -1
  362. package/dist/kernel/query/reduce/date-trunc.d.ts +75 -0
  363. package/dist/kernel/query/reduce/index.d.ts +36 -0
  364. package/dist/kernel/query/reduce/install.d.ts +2 -0
  365. package/dist/kernel/query/reduce/methods.d.ts +259 -0
  366. package/dist/kernel/query/reduce/scan-methods.d.ts +121 -0
  367. package/dist/kernel/query/relate/explain.d.ts +199 -0
  368. package/dist/kernel/query/relate/index.d.ts +48 -0
  369. package/dist/kernel/query/relate/install.d.ts +2 -0
  370. package/dist/kernel/query/relate/join-on.d.ts +126 -0
  371. package/dist/kernel/query/relate/join-reduce.d.ts +16 -0
  372. package/dist/kernel/query/relate/join.d.ts +452 -0
  373. package/dist/kernel/query/relate/methods.d.ts +426 -0
  374. package/dist/kernel/query/relate/partition.d.ts +87 -0
  375. package/dist/kernel/query/relate/scan-methods.d.ts +163 -0
  376. package/dist/kernel/query/relate/traverse.d.ts +109 -0
  377. package/dist/kernel/query/scan-builder.d.ts +79 -176
  378. package/dist/kernel/query/sort-key.d.ts +52 -0
  379. package/dist/kernel/secret-mode.d.ts +1 -1
  380. package/dist/kernel/tx-write-gate.d.ts +77 -0
  381. package/dist/kernel/types.d.ts +113 -8
  382. package/dist/kernel/validation.d.ts +27 -10
  383. package/dist/kernel/vault.d.ts +11 -6
  384. package/dist/kernel/via/compose.d.ts +3 -0
  385. package/dist/kernel/via/index.d.ts +56 -0
  386. package/dist/kernel/via/pipeline.d.ts +48 -0
  387. package/dist/kernel/write-queue.d.ts +17 -0
  388. package/dist/{ledger-EDXFFZQL.js → ledger-5ZMGE44K.js} +11 -12
  389. package/dist/liberate-WZSZM2W6.js +24 -0
  390. package/dist/link-set-MFXC24VK.js +29 -0
  391. package/dist/{managed-secret-NCWEMPUQ.js → managed-secret-MFTFT22X.js} +10 -11
  392. package/dist/materialized-views/index.js +30 -24
  393. package/dist/{migrate-cek-5ENH64AA.js → migrate-cek-DZRFFOHW.js} +2 -2
  394. package/dist/money/index.js +5 -5
  395. package/dist/noydb-ITIGNKUF.js +96 -0
  396. package/dist/overlay-views/index.js +4 -4
  397. package/dist/periods/index.js +12 -13
  398. package/dist/pod/index.js +74 -67
  399. package/dist/{pod-handle-ECVCDIXW.js → pod-handle-A3LET7NO.js} +10 -11
  400. package/dist/pod-handle-A3LET7NO.js.map +1 -0
  401. package/dist/policy/index.js +10 -11
  402. package/dist/port/on/index.d.ts +1 -1
  403. package/dist/port/to/index.d.ts +1 -1
  404. package/dist/port/with/blob-strategy.d.ts +10 -1
  405. package/dist/port/with/classified-strategy.d.ts +1 -1
  406. package/dist/port/with/collection-options.d.ts +6 -1
  407. package/dist/port/with/collection-registries.d.ts +1 -1
  408. package/dist/port/with/coverage-strategy.d.ts +83 -0
  409. package/dist/port/with/lookup-strategy.d.ts +2 -2
  410. package/dist/port/with/service-bus.d.ts +46 -0
  411. package/dist/port/with/strategies.d.ts +2 -0
  412. package/dist/portability/index.js +8 -8
  413. package/dist/{post-register-3IPCSG6Q.js → post-register-7ND27CF2.js} +6 -6
  414. package/dist/post-register-7ND27CF2.js.map +1 -0
  415. package/dist/query/all/index.js +31 -0
  416. package/dist/query/index.js +20 -32
  417. package/dist/query/live/index.js +21 -0
  418. package/dist/query/live/index.js.map +1 -0
  419. package/dist/query/reduce/index.js +33 -0
  420. package/dist/query/reduce/index.js.map +1 -0
  421. package/dist/query/relate/index.js +56 -0
  422. package/dist/query/relate/index.js.map +1 -0
  423. package/dist/reduce/index.js +72 -18
  424. package/dist/reduce/index.js.map +1 -1
  425. package/dist/register-DT5HZ2LZ.js +30 -0
  426. package/dist/registry-BHRZGZHF.js +8 -0
  427. package/dist/registry-ET6ZFFWA.js +34 -0
  428. package/dist/registry-HXFGLGTG.js +8 -0
  429. package/dist/registry-THCPDEOD.js +23 -0
  430. package/dist/request-withdrawal-AV2MJJKY.js +30 -0
  431. package/dist/{reveal-QZDHSGD4.js → reveal-B2TLP4JQ.js} +10 -9
  432. package/dist/reveal-B2TLP4JQ.js.map +1 -0
  433. package/dist/revoke-6DWIEOCV.js +24 -0
  434. package/dist/satellites/index.js +1 -1
  435. package/dist/schema-update/index.js +2 -2
  436. package/dist/sealed-record/index.js +16 -18
  437. package/dist/sealed-record/index.js.map +1 -1
  438. package/dist/search/index.js +11 -5
  439. package/dist/{seed-X5CC22CQ.js → seed-XNSE4U3S.js} +15 -18
  440. package/dist/seed-XNSE4U3S.js.map +1 -0
  441. package/dist/sequence/index.js +9 -10
  442. package/dist/session/index.js +9 -10
  443. package/dist/session/index.js.map +1 -1
  444. package/dist/shadow/index.js +2 -2
  445. package/dist/signer-MHGW3OIL.js +23 -0
  446. package/dist/snapshots/index.js +11 -11
  447. package/dist/stale-6GCFMOOR.js +28 -0
  448. package/dist/storage-BYN5LO6Z.js +21 -0
  449. package/dist/storage-BYN5LO6Z.js.map +1 -0
  450. package/dist/store/index.js +1 -1
  451. package/dist/{store-coordination-provider-4WZAIRHC.js → store-coordination-provider-C4BPT5XF.js} +11 -12
  452. package/dist/store-coordination-provider-C4BPT5XF.js.map +1 -0
  453. package/dist/sync/index.js +10 -11
  454. package/dist/sync/index.js.map +1 -1
  455. package/dist/team/index.js +17 -16
  456. package/dist/tiers/index.js +13 -12
  457. package/dist/to/index.js +2 -2
  458. package/dist/transactions/index.js +3 -3
  459. package/dist/util/index.js +1 -1
  460. package/dist/vault-head/index.js +11 -14
  461. package/dist/vault-head/index.js.map +1 -1
  462. package/dist/{verify-6MDTIUEV.js → verify-UKALW7C2.js} +14 -12
  463. package/dist/verify-UKALW7C2.js.map +1 -0
  464. package/dist/via/blob/index.d.ts +1 -0
  465. package/dist/via/classified/binding.d.ts +2 -2
  466. package/dist/via/classified/config-drift.d.ts +2 -2
  467. package/dist/via/classified/errors.d.ts +1 -1
  468. package/dist/via/geo/binding.d.ts +31 -0
  469. package/dist/via/geo/descriptor.d.ts +54 -0
  470. package/dist/via/geo/geohash.d.ts +95 -0
  471. package/dist/via/geo/index.d.ts +13 -0
  472. package/dist/via/geo/where.d.ts +50 -0
  473. package/dist/via/i18n/core.d.ts +1 -1
  474. package/dist/via/lookup/handle.d.ts +4 -4
  475. package/dist/via/lookup/registry.d.ts +1 -1
  476. package/dist/via/lookup/snapshot.d.ts +3 -3
  477. package/dist/walk-4VPK7AS4.js +20 -0
  478. package/dist/walk-4VPK7AS4.js.map +1 -0
  479. package/dist/with-audit/attestation/index.d.ts +2 -1
  480. package/dist/with-audit/attestation/issue.d.ts +2 -2
  481. package/dist/with-audit/attestation/revoke.d.ts +2 -2
  482. package/dist/with-audit/attestation/scheme.d.ts +7 -0
  483. package/dist/with-audit/attestation/signer.d.ts +1 -1
  484. package/dist/with-audit/attestation/strategy.d.ts +2 -2
  485. package/dist/with-audit/attestation/types.d.ts +10 -0
  486. package/dist/with-audit/attestation/vault-facade.d.ts +2 -2
  487. package/dist/with-audit/attestation/verifier.d.ts +6 -0
  488. package/dist/with-audit/consent/consent.d.ts +1 -1
  489. package/dist/with-audit/consent/strategy.d.ts +1 -1
  490. package/dist/with-audit/coverage/accounting.d.ts +112 -0
  491. package/dist/with-audit/coverage/active.d.ts +29 -0
  492. package/dist/with-audit/coverage/index.d.ts +61 -0
  493. package/dist/with-audit/coverage/sketch.d.ts +75 -0
  494. package/dist/with-audit/forget/subject-index.d.ts +1 -1
  495. package/dist/with-audit/periods/periods.d.ts +55 -7
  496. package/dist/with-audit/periods/reserved-collections.d.ts +3 -0
  497. package/dist/with-audit/periods/vault-facade.d.ts +18 -1
  498. package/dist/with-audit/sealed-record/index.d.ts +2 -2
  499. package/dist/with-audit/sealed-record/strategy.d.ts +1 -1
  500. package/dist/with-audit/tiers/index.d.ts +53 -2
  501. package/dist/with-audit/tiers/strategy.d.ts +8 -0
  502. package/dist/with-cargo/adopt-partition.d.ts +1 -1
  503. package/dist/with-cargo/extract-partition.d.ts +1 -1
  504. package/dist/with-cargo/floor.d.ts +3 -3
  505. package/dist/with-commit/history/history.d.ts +2 -2
  506. package/dist/with-commit/history/index.d.ts +1 -1
  507. package/dist/with-commit/history/ledger/store.d.ts +1 -1
  508. package/dist/with-commit/history/strategy.d.ts +1 -1
  509. package/dist/with-commit/history/time-machine.d.ts +1 -1
  510. package/dist/with-commit/numbering/index.d.ts +1 -1
  511. package/dist/with-commit/sequence/index.d.ts +1 -1
  512. package/dist/with-commit/tx/invariants.d.ts +1 -1
  513. package/dist/with-commit/tx/transaction.d.ts +13 -3
  514. package/dist/with-commit/vault-head/head.d.ts +1 -1
  515. package/dist/with-commit/vault-head/index.d.ts +1 -1
  516. package/dist/with-commit/vault-head/strategy.d.ts +1 -1
  517. package/dist/with-commit/vault-head/verify.d.ts +1 -1
  518. package/dist/with-formula/derivations/dispatch.d.ts +1 -1
  519. package/dist/with-formula/derivations/fanout-sidecar.d.ts +1 -1
  520. package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +4 -3
  521. package/dist/with-formula/materialized-views/emit-memo.d.ts +40 -0
  522. package/dist/with-formula/materialized-views/executor.d.ts +8 -0
  523. package/dist/with-formula/materialized-views/index.d.ts +1 -1
  524. package/dist/with-formula/materialized-views/registry.d.ts +15 -0
  525. package/dist/with-formula/materialized-views/types.d.ts +106 -14
  526. package/dist/with-formula/materialized-views/window-stage.d.ts +11 -0
  527. package/dist/with-formula/overlay-views/types.d.ts +1 -1
  528. package/dist/with-formula/overlay-views/virtual-collection.d.ts +13 -4
  529. package/dist/with-lookup/embeddings/chunks.d.ts +79 -0
  530. package/dist/with-lookup/embeddings/descriptor.d.ts +21 -0
  531. package/dist/with-lookup/embeddings/index.d.ts +3 -0
  532. package/dist/with-lookup/embeddings/ivf-flat.d.ts +93 -0
  533. package/dist/with-lookup/embeddings/vector-index.d.ts +73 -0
  534. package/dist/with-lookup/embeddings/vector-set.d.ts +94 -1
  535. package/dist/with-lookup/embeddings/with-vector-index.d.ts +67 -0
  536. package/dist/with-lookup/indexing/collection-facade.d.ts +86 -3
  537. package/dist/with-lookup/indexing/compound-indexes.d.ts +129 -0
  538. package/dist/with-lookup/indexing/eager-indexes.d.ts +170 -1
  539. package/dist/with-lookup/indexing/index-snapshot.d.ts +62 -0
  540. package/dist/with-lookup/indexing/lazy-builder.d.ts +33 -0
  541. package/dist/with-lookup/indexing/persisted-field-indexes.d.ts +104 -0
  542. package/dist/with-lookup/indexing/persisted-indexes.d.ts +12 -0
  543. package/dist/with-lookup/indexing/sorted-indexes.d.ts +117 -0
  544. package/dist/with-lookup/indexing/unique-constraints.d.ts +106 -23
  545. package/dist/with-lookup/reduce/active.d.ts +2 -24
  546. package/dist/with-lookup/reduce/group-core.d.ts +43 -0
  547. package/dist/with-lookup/reduce/groupby.d.ts +195 -36
  548. package/dist/with-lookup/reduce/incremental-group.d.ts +153 -0
  549. package/dist/with-lookup/reduce/index.d.ts +26 -5
  550. package/dist/with-lookup/reduce/reducers.d.ts +255 -1
  551. package/dist/with-lookup/reduce/reduction.d.ts +44 -13
  552. package/dist/with-lookup/reduce/strategy.d.ts +43 -3
  553. package/dist/with-lookup/reduce/window.d.ts +262 -0
  554. package/dist/with-lookup/search/collection-facade.d.ts +45 -9
  555. package/dist/with-lookup/search/index-store.d.ts +5 -3
  556. package/dist/with-lookup/search/index.d.ts +4 -2
  557. package/dist/with-lookup/search/inverted-index.d.ts +38 -2
  558. package/dist/with-lookup/search/persisted-index-store.d.ts +5 -2
  559. package/dist/with-lookup/search/phrase.d.ts +28 -0
  560. package/dist/with-lookup/search/retrieve-types.d.ts +57 -1
  561. package/dist/with-lookup/search/serialize.d.ts +29 -3
  562. package/dist/with-lookup/search/strategy.d.ts +2 -6
  563. package/dist/with-party/broker/index.d.ts +3 -3
  564. package/dist/with-party/directory/cover/index.d.ts +1 -1
  565. package/dist/with-party/directory/cover/storage.d.ts +1 -1
  566. package/dist/with-party/directory/cover/types.d.ts +1 -1
  567. package/dist/with-party/directory/index.d.ts +1 -1
  568. package/dist/with-party/directory/types.d.ts +1 -1
  569. package/dist/with-party/directory/user-envelope/api.d.ts +1 -1
  570. package/dist/with-party/directory/user-envelope/storage.d.ts +1 -1
  571. package/dist/with-party/policy/engine.d.ts +1 -1
  572. package/dist/with-party/policy/index.d.ts +1 -1
  573. package/dist/with-party/policy/presets.d.ts +1 -1
  574. package/dist/with-party/team/authenticators.d.ts +91 -1
  575. package/dist/with-party/team/delegation.d.ts +1 -1
  576. package/dist/with-party/team/echo-secret.d.ts +2 -2
  577. package/dist/with-party/team/index.d.ts +4 -3
  578. package/dist/with-party/team/keyring.d.ts +2 -2
  579. package/dist/with-party/team/magic-link-grant.d.ts +1 -1
  580. package/dist/with-party/team/managed-secret.d.ts +1 -1
  581. package/dist/with-party/team/noydb-facade.d.ts +12 -3
  582. package/dist/with-party/team/recovery.d.ts +1 -1
  583. package/dist/with-party/team/roster-tag.d.ts +1 -1
  584. package/dist/with-party/team/rotate-recover.d.ts +1 -1
  585. package/dist/with-party/team/wrapped-deks.d.ts +1 -1
  586. package/dist/with-pod/format.d.ts +1 -1
  587. package/dist/with-pod/index.d.ts +1 -1
  588. package/dist/with-pod/pod.d.ts +1 -1
  589. package/dist/with-shape/blobs/blob-compaction.d.ts +17 -1
  590. package/dist/with-shape/blobs/blob-intent.d.ts +1 -1
  591. package/dist/with-shape/blobs/blob-set.d.ts +23 -4
  592. package/dist/with-shape/blobs/legacy-sweep.d.ts +35 -0
  593. package/dist/with-shape/introspection/describe.d.ts +7 -1
  594. package/dist/with-shape/introspection/field-meta.d.ts +18 -0
  595. package/dist/with-shape/introspection/types.d.ts +57 -1
  596. package/dist/with-shape/introspection/walk.d.ts +1 -1
  597. package/dist/with-shape/links/lazy-handle.d.ts +1 -1
  598. package/dist/with-shape/links/link-set.d.ts +1 -1
  599. package/dist/with-shape/links/vault-facade.d.ts +1 -1
  600. package/dist/with-shape/manifest/derive.d.ts +1 -1
  601. package/dist/with-shape/manifest/storage.d.ts +1 -1
  602. package/dist/with-shape/persisted-schemas/register.d.ts +1 -1
  603. package/dist/with-shape/persisted-schemas/storage.d.ts +1 -1
  604. package/dist/with-shape/satellites/dead-filter.d.ts +1 -1
  605. package/dist/with-shape/satellites/declare.d.ts +1 -1
  606. package/dist/with-shape/satellites/marker.d.ts +1 -1
  607. package/dist/with-shape/satellites/post-register.d.ts +1 -1
  608. package/dist/with-store/partitioned/index.d.ts +337 -0
  609. package/dist/with-sync/change-broadcast.d.ts +153 -0
  610. package/dist/with-sync/presence.d.ts +5 -10
  611. package/dist/withdraw-accessible-HL7GACUE.js +27 -0
  612. package/dist/withdraw-accessible-HL7GACUE.js.map +1 -0
  613. package/package.json +48 -12
  614. package/dist/api-WYW4YEQG.js +0 -19
  615. package/dist/backup-XKCXVKV3.js.map +0 -1
  616. package/dist/chunk-2577DKXB.js.map +0 -1
  617. package/dist/chunk-2ENE6445.js.map +0 -1
  618. package/dist/chunk-2N5ML6HT.js.map +0 -1
  619. package/dist/chunk-334WSVOW.js.map +0 -1
  620. package/dist/chunk-3BVH633C.js.map +0 -1
  621. package/dist/chunk-3PGS7TYR.js.map +0 -1
  622. package/dist/chunk-3V4KWFX7.js.map +0 -1
  623. package/dist/chunk-453F654R.js.map +0 -1
  624. package/dist/chunk-4GFX6MPA.js.map +0 -1
  625. package/dist/chunk-4GVM6QZA.js.map +0 -1
  626. package/dist/chunk-4ZS56W5S.js.map +0 -1
  627. package/dist/chunk-5VCRVKOZ.js.map +0 -1
  628. package/dist/chunk-6YXCPL4T.js.map +0 -1
  629. package/dist/chunk-7APJ6CO6.js.map +0 -1
  630. package/dist/chunk-7MG2LHO5.js +0 -1616
  631. package/dist/chunk-7MG2LHO5.js.map +0 -1
  632. package/dist/chunk-7MG7SJT7.js.map +0 -1
  633. package/dist/chunk-7O3Y4PPD.js.map +0 -1
  634. package/dist/chunk-A2HKRLPV.js.map +0 -1
  635. package/dist/chunk-A66I4JOA.js.map +0 -1
  636. package/dist/chunk-ACAQ2DSG.js.map +0 -1
  637. package/dist/chunk-ATL3ZVXT.js +0 -151
  638. package/dist/chunk-ATL3ZVXT.js.map +0 -1
  639. package/dist/chunk-AYX7AINO.js.map +0 -1
  640. package/dist/chunk-BLN54W3L.js.map +0 -1
  641. package/dist/chunk-BRLKZUBT.js +0 -95
  642. package/dist/chunk-BRLKZUBT.js.map +0 -1
  643. package/dist/chunk-BTDR2PXY.js +0 -29
  644. package/dist/chunk-BTDR2PXY.js.map +0 -1
  645. package/dist/chunk-BVN6KXL2.js.map +0 -1
  646. package/dist/chunk-CHQCZZWC.js.map +0 -1
  647. package/dist/chunk-CUQPWYRX.js.map +0 -1
  648. package/dist/chunk-CUZLNGD5.js.map +0 -1
  649. package/dist/chunk-DFMWUOU5.js.map +0 -1
  650. package/dist/chunk-EIPVYUEP.js.map +0 -1
  651. package/dist/chunk-EQEYOJBM.js.map +0 -1
  652. package/dist/chunk-F3W6YMDC.js.map +0 -1
  653. package/dist/chunk-FET5XCAT.js.map +0 -1
  654. package/dist/chunk-G73UVHCA.js.map +0 -1
  655. package/dist/chunk-GPNTB4Y7.js.map +0 -1
  656. package/dist/chunk-GYGLAVCX.js.map +0 -1
  657. package/dist/chunk-HIWCKBEY.js.map +0 -1
  658. package/dist/chunk-HJUWN7JN.js.map +0 -1
  659. package/dist/chunk-HK67PX4J.js.map +0 -1
  660. package/dist/chunk-HPVZCW43.js +0 -479
  661. package/dist/chunk-HPVZCW43.js.map +0 -1
  662. package/dist/chunk-I3ISCYT7.js +0 -159
  663. package/dist/chunk-I3ISCYT7.js.map +0 -1
  664. package/dist/chunk-K23VKTN4.js.map +0 -1
  665. package/dist/chunk-KKEESNPE.js.map +0 -1
  666. package/dist/chunk-KTFRCC5C.js.map +0 -1
  667. package/dist/chunk-LH5A3ZPG.js.map +0 -1
  668. package/dist/chunk-LP7BEXCT.js +0 -32
  669. package/dist/chunk-LP7BEXCT.js.map +0 -1
  670. package/dist/chunk-M4YPHYEH.js.map +0 -1
  671. package/dist/chunk-NSITFOCJ.js +0 -99
  672. package/dist/chunk-NSITFOCJ.js.map +0 -1
  673. package/dist/chunk-OTQZ7ZWU.js.map +0 -1
  674. package/dist/chunk-P3MG6QCN.js.map +0 -1
  675. package/dist/chunk-PEOZ34EM.js.map +0 -1
  676. package/dist/chunk-PPTHY5QO.js.map +0 -1
  677. package/dist/chunk-Q2MPFCQ7.js.map +0 -1
  678. package/dist/chunk-Q7HZX3IF.js.map +0 -1
  679. package/dist/chunk-QPQUVOZ2.js.map +0 -1
  680. package/dist/chunk-QTQUH4DS.js.map +0 -1
  681. package/dist/chunk-R42NSZI6.js.map +0 -1
  682. package/dist/chunk-R7BX2NB3.js.map +0 -1
  683. package/dist/chunk-RSGLUIO6.js.map +0 -1
  684. package/dist/chunk-RTBJ5IOO.js +0 -87
  685. package/dist/chunk-RTBJ5IOO.js.map +0 -1
  686. package/dist/chunk-SGZAIJCV.js.map +0 -1
  687. package/dist/chunk-SKGMN35F.js.map +0 -1
  688. package/dist/chunk-SPYWXKJN.js.map +0 -1
  689. package/dist/chunk-SZJ3DLZA.js +0 -66
  690. package/dist/chunk-SZJ3DLZA.js.map +0 -1
  691. package/dist/chunk-TRGTKX5E.js.map +0 -1
  692. package/dist/chunk-UDHWDSRL.js.map +0 -1
  693. package/dist/chunk-UP4BECPY.js.map +0 -1
  694. package/dist/chunk-UXVWEX5L.js.map +0 -1
  695. package/dist/chunk-V7ZRRCRJ.js.map +0 -1
  696. package/dist/chunk-WQBG4SZS.js.map +0 -1
  697. package/dist/chunk-XKWGNJ26.js.map +0 -1
  698. package/dist/chunk-YMUFFJCO.js.map +0 -1
  699. package/dist/chunk-ZHKOPKE3.js.map +0 -1
  700. package/dist/chunk-ZN4FD4PE.js +0 -364
  701. package/dist/chunk-ZN4FD4PE.js.map +0 -1
  702. package/dist/chunk-ZORTV6NH.js.map +0 -1
  703. package/dist/chunk-ZYIYHJ5R.js.map +0 -1
  704. package/dist/classified-marker-BWOFVYAC.js.map +0 -1
  705. package/dist/collection-facade-JSJYIKS4.js +0 -45
  706. package/dist/dead-filter-PKQDLOT4.js.map +0 -1
  707. package/dist/delegation-DS5NRILW.js.map +0 -1
  708. package/dist/derive-E642AOUB.js +0 -21
  709. package/dist/dispatch-Q6MWLOJY.js.map +0 -1
  710. package/dist/executor-5NIMLSKZ.js +0 -8
  711. package/dist/executor-7UQ3BZ4F.js +0 -29
  712. package/dist/executor-AQVXV5GZ.js +0 -8
  713. package/dist/export-accessible-ORMKLA3E.js +0 -22
  714. package/dist/extract-partition-NKYO3WNG.js +0 -37
  715. package/dist/fanout-sidecar-S3QL53YX.js.map +0 -1
  716. package/dist/find-NOGJ25VX.js +0 -10
  717. package/dist/issue-3DTQ7VJJ.js +0 -18
  718. package/dist/json-schema-V3M5MUCM.js.map +0 -1
  719. package/dist/kernel/enclave/classify/compare.d.ts +0 -10
  720. package/dist/kernel/enclave/index.d.ts +0 -87
  721. package/dist/kernel/enclave/record-keys/lifecycle.d.ts +0 -124
  722. package/dist/kernel/enclave/record-keys/rekey-blob.d.ts +0 -88
  723. package/dist/kernel/enclave/record-keys/rekey.d.ts +0 -91
  724. package/dist/kernel/enclave/record-keys/sealed-slot.d.ts +0 -14
  725. package/dist/kernel/enclave/record-keys/sealed-slots.d.ts +0 -123
  726. package/dist/kernel/enclave/record-keys/sealing.d.ts +0 -70
  727. package/dist/kernel/query/join.d.ts +0 -232
  728. package/dist/liberate-V35QUHJP.js +0 -24
  729. package/dist/link-set-2TTM3IZC.js +0 -30
  730. package/dist/noydb-62MX4QUG.js +0 -90
  731. package/dist/pod-handle-ECVCDIXW.js.map +0 -1
  732. package/dist/post-register-3IPCSG6Q.js.map +0 -1
  733. package/dist/register-HHLXEQDN.js +0 -31
  734. package/dist/registry-23WF3TGH.js +0 -8
  735. package/dist/registry-4AYVUNXK.js +0 -8
  736. package/dist/registry-JS3YFQQM.js +0 -18
  737. package/dist/registry-XX2Z7B46.js +0 -32
  738. package/dist/request-withdrawal-CHPATE4G.js +0 -30
  739. package/dist/reveal-QZDHSGD4.js.map +0 -1
  740. package/dist/revoke-7M2VW4ON.js +0 -23
  741. package/dist/seed-X5CC22CQ.js.map +0 -1
  742. package/dist/signer-SJQJVSM6.js +0 -24
  743. package/dist/stale-BZS6H2RY.js +0 -29
  744. package/dist/storage-RW4QBS23.js +0 -22
  745. package/dist/store-coordination-provider-4WZAIRHC.js.map +0 -1
  746. package/dist/verify-6MDTIUEV.js.map +0 -1
  747. package/dist/walk-ZURCH6RZ.js +0 -21
  748. package/dist/withdraw-accessible-PXR4IXDX.js +0 -27
  749. /package/dist/{api-WYW4YEQG.js.map → api-OS747DS4.js.map} +0 -0
  750. /package/dist/{computed-VPOKQK4N.js.map → capsule/contract.js.map} +0 -0
  751. /package/dist/{kernel/enclave → capsule/enclave-aes}/broker/proof.d.ts +0 -0
  752. /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/bidx.d.ts +0 -0
  753. /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/digest.d.ts +0 -0
  754. /package/dist/{kernel/enclave → capsule/enclave-aes}/classify/vdig.d.ts +0 -0
  755. /package/dist/{kernel/enclave/classify → capsule/plumbing}/kofn.d.ts +0 -0
  756. /package/dist/{kernel/enclave/classify → capsule/plumbing}/normalize.d.ts +0 -0
  757. /package/dist/{kernel/enclave → capsule/plumbing}/record-aad.d.ts +0 -0
  758. /package/dist/{collection-facade-JSJYIKS4.js.map → capsule-VOLX3QRQ.js.map} +0 -0
  759. /package/dist/{chunk-MVMXZYXT.js.map → chunk-2GHDLTPE.js.map} +0 -0
  760. /package/dist/{chunk-XLMEZIAJ.js.map → chunk-2ODVB6LZ.js.map} +0 -0
  761. /package/dist/{chunk-RMS3NEA3.js.map → chunk-4JPMZTJY.js.map} +0 -0
  762. /package/dist/{chunk-NQKIUNW5.js.map → chunk-52MGURXO.js.map} +0 -0
  763. /package/dist/{chunk-UGTBXF5U.js.map → chunk-7XMHMVTS.js.map} +0 -0
  764. /package/dist/{chunk-BZ3534YM.js.map → chunk-AUKKUPVB.js.map} +0 -0
  765. /package/dist/{derive-E642AOUB.js.map → chunk-BKT776R5.js.map} +0 -0
  766. /package/dist/{chunk-6LKOJBV6.js.map → chunk-BVCUTXE3.js.map} +0 -0
  767. /package/dist/{chunk-VTFVLCUH.js.map → chunk-DIZLQVAA.js.map} +0 -0
  768. /package/dist/{chunk-LWBCUYZW.js.map → chunk-E2N2T5ZO.js.map} +0 -0
  769. /package/dist/{chunk-JVIBCBC7.js.map → chunk-EJLV62NI.js.map} +0 -0
  770. /package/dist/{chunk-JMGDHKQF.js.map → chunk-FLPCETP6.js.map} +0 -0
  771. /package/dist/{chunk-DGOZ4UZD.js.map → chunk-FVH5QYY2.js.map} +0 -0
  772. /package/dist/{chunk-JBDFMYKQ.js.map → chunk-GZT3NQRA.js.map} +0 -0
  773. /package/dist/{chunk-TFR7DSOV.js.map → chunk-H427H63K.js.map} +0 -0
  774. /package/dist/{chunk-SMH6SRX7.js.map → chunk-JOSPH3E5.js.map} +0 -0
  775. /package/dist/{chunk-3BZZJJMQ.js.map → chunk-MILI22XQ.js.map} +0 -0
  776. /package/dist/{chunk-YYP7WSEB.js.map → chunk-O2IMQSNA.js.map} +0 -0
  777. /package/dist/{chunk-QIZPZMUI.js.map → chunk-Q4UHJ5SN.js.map} +0 -0
  778. /package/dist/{chunk-FAHMLERK.js.map → chunk-QBLT6POL.js.map} +0 -0
  779. /package/dist/{chunk-BUE2D7PX.js.map → chunk-SMV2HRDU.js.map} +0 -0
  780. /package/dist/{chunk-SFAWCTEM.js.map → chunk-TZZBXPZK.js.map} +0 -0
  781. /package/dist/{chunk-UHHPLO3I.js.map → chunk-V3RWOOSO.js.map} +0 -0
  782. /package/dist/{chunk-Q2PU57HC.js.map → chunk-VVOLDVIR.js.map} +0 -0
  783. /package/dist/{chunk-TUFM4UZP.js.map → chunk-XQRFSKYM.js.map} +0 -0
  784. /package/dist/{chunk-GY4WYNNG.js.map → chunk-Y2RKVFKR.js.map} +0 -0
  785. /package/dist/{chunk-4OZNXTO4.js.map → chunk-YRXFFWG4.js.map} +0 -0
  786. /package/dist/{enclave-55PAM4YO.js.map → collection-facade-CS7CA2XO.js.map} +0 -0
  787. /package/dist/{executor-5NIMLSKZ.js.map → computed-FAD7SED4.js.map} +0 -0
  788. /package/dist/{executor-7UQ3BZ4F.js.map → derive-XLOJVXPU.js.map} +0 -0
  789. /package/dist/{dispatch-IEPAVQUM.js.map → dispatch-H4HV32AM.js.map} +0 -0
  790. /package/dist/{executor-AQVXV5GZ.js.map → executor-FMPVN6DT.js.map} +0 -0
  791. /package/dist/{export-accessible-ORMKLA3E.js.map → executor-LBBBRTN5.js.map} +0 -0
  792. /package/dist/{extract-partition-NKYO3WNG.js.map → executor-OSRZST2U.js.map} +0 -0
  793. /package/dist/{find-NOGJ25VX.js.map → export-accessible-RAOJAAU5.js.map} +0 -0
  794. /package/dist/{issue-3DTQ7VJJ.js.map → extract-partition-JD5CUSTG.js.map} +0 -0
  795. /package/dist/{ledger-EDXFFZQL.js.map → find-JRN4RNQ5.js.map} +0 -0
  796. /package/dist/{liberate-V35QUHJP.js.map → issue-YIVBZUTH.js.map} +0 -0
  797. /package/dist/{link-set-2TTM3IZC.js.map → ledger-5ZMGE44K.js.map} +0 -0
  798. /package/dist/{managed-secret-NCWEMPUQ.js.map → liberate-WZSZM2W6.js.map} +0 -0
  799. /package/dist/{noydb-62MX4QUG.js.map → link-set-MFXC24VK.js.map} +0 -0
  800. /package/dist/{register-HHLXEQDN.js.map → managed-secret-MFTFT22X.js.map} +0 -0
  801. /package/dist/{migrate-cek-5ENH64AA.js.map → migrate-cek-DZRFFOHW.js.map} +0 -0
  802. /package/dist/{registry-23WF3TGH.js.map → noydb-ITIGNKUF.js.map} +0 -0
  803. /package/dist/{registry-4AYVUNXK.js.map → query/all/index.js.map} +0 -0
  804. /package/dist/{registry-JS3YFQQM.js.map → register-DT5HZ2LZ.js.map} +0 -0
  805. /package/dist/{registry-XX2Z7B46.js.map → registry-BHRZGZHF.js.map} +0 -0
  806. /package/dist/{request-withdrawal-CHPATE4G.js.map → registry-ET6ZFFWA.js.map} +0 -0
  807. /package/dist/{revoke-7M2VW4ON.js.map → registry-HXFGLGTG.js.map} +0 -0
  808. /package/dist/{signer-SJQJVSM6.js.map → registry-THCPDEOD.js.map} +0 -0
  809. /package/dist/{stale-BZS6H2RY.js.map → request-withdrawal-AV2MJJKY.js.map} +0 -0
  810. /package/dist/{storage-RW4QBS23.js.map → revoke-6DWIEOCV.js.map} +0 -0
  811. /package/dist/{walk-ZURCH6RZ.js.map → signer-MHGW3OIL.js.map} +0 -0
  812. /package/dist/{withdraw-accessible-PXR4IXDX.js.map → stale-6GCFMOOR.js.map} +0 -0
@@ -0,0 +1,19 @@
1
+ import {
2
+ issueAttestationCore
3
+ } from "./chunk-VMV5SBE4.js";
4
+ import "./chunk-JWWYRR4Q.js";
5
+ import "./chunk-DLD5LGDS.js";
6
+ import "./chunk-GMKGGY7V.js";
7
+ import "./chunk-4AOERLTV.js";
8
+ import "./chunk-EZGV6F47.js";
9
+ import "./chunk-OIEO4WDL.js";
10
+ import "./chunk-Q2XRFWOI.js";
11
+ import "./chunk-NH2UOV3B.js";
12
+ import "./chunk-42ALPZ2B.js";
13
+ import "./chunk-QMWY2FDS.js";
14
+ import "./chunk-SV2PM2OY.js";
15
+ import "./chunk-37EPTBBR.js";
16
+ export {
17
+ issueAttestationCore
18
+ };
19
+ //# sourceMappingURL=issue-YIVBZUTH.js.map
@@ -0,0 +1,314 @@
1
+ // src/with-lookup/embeddings/ivf-flat.ts
2
+ function defaultNlist(n) {
3
+ return Math.max(4, Math.min(256, Math.round(Math.sqrt(n) / 4)));
4
+ }
5
+ function mulberry32(seed) {
6
+ let a = seed >>> 0;
7
+ return () => {
8
+ a = a + 1831565813 >>> 0;
9
+ let t = a;
10
+ t = Math.imul(t ^ t >>> 15, t | 1);
11
+ t ^= t + Math.imul(t ^ t >>> 7, t | 61);
12
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
13
+ };
14
+ }
15
+ function dot(a, b) {
16
+ let s = 0;
17
+ for (let i = 0; i < a.length; i++) s += a[i] * b[i];
18
+ return s;
19
+ }
20
+ function invNorm(v) {
21
+ let n = 0;
22
+ for (let i = 0; i < v.length; i++) n += v[i] * v[i];
23
+ return n === 0 ? 0 : 1 / Math.sqrt(n);
24
+ }
25
+ var IVF_DEFAULTS = {
26
+ nlist: void 0,
27
+ nprobe: 8,
28
+ sampleSize: 4096,
29
+ iterations: 6,
30
+ seed: 2654435769
31
+ };
32
+ var IvfFlatIndex = class {
33
+ params;
34
+ /** Unit-length partition representatives, `nlist` of them. */
35
+ centroids = [];
36
+ /** `lists[c]` = point slots assigned to centroid `c`. */
37
+ lists = [];
38
+ // Points, as parallel arrays. A "point" is one vector: a whole-record vector
39
+ // or one chunk of a chunked record. Parallel arrays rather than an object
40
+ // per point because at the gating scale there are hundreds of thousands of
41
+ // them and per-object overhead would dwarf the payload we deliberately
42
+ // refused to copy.
43
+ pVec = [];
44
+ pInv = [];
45
+ pRecord = [];
46
+ pChunk = [];
47
+ /** Owning list, or -1 for a free slot. */
48
+ pList = [];
49
+ recordIds = [];
50
+ slotOfRecord = /* @__PURE__ */ new Map();
51
+ pointsOfRecord = /* @__PURE__ */ new Map();
52
+ freeSlots = [];
53
+ live = 0;
54
+ builtAt = 0;
55
+ /**
56
+ * Points actually scored by the last {@link search} — the deterministic
57
+ * measure of what the index bought.
58
+ *
59
+ * Wall-clock speedup is not reproducible on a loaded machine (measured: the
60
+ * same cell varied 100x across reps while other work ran), but the fraction
61
+ * of the corpus a query touches is exact arithmetic and identical on every
62
+ * machine. The benchmark reports both and treats this as the primary number;
63
+ * latency follows from it and the brute-force table's µs-per-vector.
64
+ */
65
+ lastProbedPoints = 0;
66
+ constructor(params = {}) {
67
+ this.params = { ...IVF_DEFAULTS, ...params };
68
+ }
69
+ get size() {
70
+ return this.live;
71
+ }
72
+ get nlist() {
73
+ return this.centroids.length;
74
+ }
75
+ /**
76
+ * Rebuild when the corpus has doubled or halved since the fit. Incremental
77
+ * upserts assign to EXISTING centroids, so a set that grew 10x around new
78
+ * topics is partitioned by a map of the old ones — recall decays silently,
79
+ * which is the failure mode this flag exists to stop.
80
+ */
81
+ get stale() {
82
+ if (this.centroids.length === 0) return true;
83
+ return this.live > this.builtAt * 2 || this.live * 2 < this.builtAt;
84
+ }
85
+ build(vectors) {
86
+ this.centroids = [];
87
+ this.lists = [];
88
+ this.pVec = [];
89
+ this.pInv = [];
90
+ this.pRecord = [];
91
+ this.pChunk = [];
92
+ this.pList = [];
93
+ this.recordIds = [];
94
+ this.slotOfRecord = /* @__PURE__ */ new Map();
95
+ this.pointsOfRecord = /* @__PURE__ */ new Map();
96
+ this.freeSlots = [];
97
+ this.live = 0;
98
+ for (const v of vectors) this.addPoints(v, -1);
99
+ this.builtAt = this.live;
100
+ const dim = this.firstDim();
101
+ if (dim === 0) return;
102
+ const k = Math.max(1, Math.min(this.params.nlist ?? defaultNlist(this.live), this.live));
103
+ this.centroids = fitCentroids(this.sampleUnitVectors(dim), k, this.params);
104
+ if (this.centroids.length === 0) return;
105
+ this.lists = Array.from({ length: this.centroids.length }, () => []);
106
+ for (let p = 0; p < this.pVec.length; p++) {
107
+ if (this.pVec[p] === void 0) continue;
108
+ this.assign(p);
109
+ }
110
+ }
111
+ upsert(vector) {
112
+ this.remove(vector.id);
113
+ this.addPoints(vector, -1);
114
+ if (this.centroids.length === 0) return;
115
+ for (const p of this.pointsOfRecord.get(vector.id) ?? []) if (this.pList[p] === -1) this.assign(p);
116
+ }
117
+ remove(recordId) {
118
+ const pts = this.pointsOfRecord.get(recordId);
119
+ if (!pts) return;
120
+ for (const p of pts) {
121
+ const l = this.pList[p];
122
+ if (l >= 0) {
123
+ const list = this.lists[l];
124
+ const at = list.indexOf(p);
125
+ if (at >= 0) {
126
+ list[at] = list[list.length - 1];
127
+ list.pop();
128
+ }
129
+ }
130
+ this.pVec[p] = void 0;
131
+ this.pChunk[p] = void 0;
132
+ this.pList[p] = -1;
133
+ this.freeSlots.push(p);
134
+ this.live--;
135
+ }
136
+ this.pointsOfRecord.delete(recordId);
137
+ }
138
+ search(query, k, opts = {}) {
139
+ if (k <= 0 || this.centroids.length === 0) return [];
140
+ const qi = invNorm(query);
141
+ const minScore = opts.minScore ?? -Infinity;
142
+ if (qi === 0) return [];
143
+ const qn = new Float32Array(query.length);
144
+ for (let i = 0; i < query.length; i++) qn[i] = query[i] * qi;
145
+ const nprobe = Math.max(1, Math.min(opts.nprobe ?? this.params.nprobe, this.centroids.length));
146
+ const probes = this.topCentroids(qn, nprobe);
147
+ this.lastProbedPoints = 0;
148
+ const best = /* @__PURE__ */ new Map();
149
+ for (const c of probes) {
150
+ this.lastProbedPoints += this.lists[c].length;
151
+ for (const p of this.lists[c]) {
152
+ const v = this.pVec[p];
153
+ if (v === void 0 || v.length !== qn.length) continue;
154
+ const score = dot(qn, v) * this.pInv[p];
155
+ const r = this.pRecord[p];
156
+ const cur = best.get(r);
157
+ if (cur === void 0 || score > cur.score) best.set(r, { score, chunk: this.pChunk[p] });
158
+ }
159
+ }
160
+ const hits = [];
161
+ for (const [r, b] of best) {
162
+ if (b.score < minScore) continue;
163
+ hits.push(b.chunk ? { id: this.recordIds[r], score: b.score, chunk: b.chunk } : { id: this.recordIds[r], score: b.score });
164
+ }
165
+ hits.sort((a, b) => b.score - a.score);
166
+ return hits.slice(0, k);
167
+ }
168
+ /**
169
+ * A deterministic fixed-stride sample of the corpus, unit-normalised — the
170
+ * only place the index materialises normalised copies, and it is bounded by
171
+ * `sampleSize` rather than by `n`. A stride (not a random draw) so the fit
172
+ * is reproducible without spending the PRNG, which is saved for k-means++
173
+ * seeding where it actually buys recall.
174
+ */
175
+ sampleUnitVectors(dim) {
176
+ const slots = this.pVec.length;
177
+ const want = Math.min(slots, this.params.sampleSize);
178
+ const stride = Math.max(1, Math.floor(slots / Math.max(1, want)));
179
+ const sample = [];
180
+ for (let p = 0; p < slots && sample.length < want; p += stride) {
181
+ const v = this.pVec[p];
182
+ const inv = this.pInv[p];
183
+ if (v === void 0 || inv === 0 || v.length !== dim) continue;
184
+ const u = new Float32Array(dim);
185
+ for (let i = 0; i < dim; i++) u[i] = v[i] * inv;
186
+ sample.push(u);
187
+ }
188
+ return sample;
189
+ }
190
+ firstDim() {
191
+ for (const v of this.pVec) if (v !== void 0 && v.length > 0) return v.length;
192
+ return 0;
193
+ }
194
+ topCentroids(qn, nprobe) {
195
+ const scores = new Float64Array(this.centroids.length);
196
+ for (let c = 0; c < this.centroids.length; c++) {
197
+ const cv = this.centroids[c];
198
+ scores[c] = cv.length === qn.length ? dot(qn, cv) : -Infinity;
199
+ }
200
+ const order = [];
201
+ for (let c = 0; c < scores.length; c++) order.push(c);
202
+ order.sort((a, b) => scores[b] - scores[a]);
203
+ return order.slice(0, nprobe);
204
+ }
205
+ assign(p) {
206
+ const v = this.pVec[p];
207
+ if (v === void 0 || this.centroids.length === 0) return;
208
+ let bestC = 0;
209
+ let bestS = -Infinity;
210
+ const inv = this.pInv[p];
211
+ for (let c = 0; c < this.centroids.length; c++) {
212
+ const cv = this.centroids[c];
213
+ if (cv.length !== v.length) continue;
214
+ const s = dot(cv, v) * inv;
215
+ if (s > bestS) {
216
+ bestS = s;
217
+ bestC = c;
218
+ }
219
+ }
220
+ this.pList[p] = bestC;
221
+ this.lists[bestC].push(p);
222
+ }
223
+ recordSlot(id) {
224
+ const existing = this.slotOfRecord.get(id);
225
+ if (existing !== void 0) return existing;
226
+ const slot = this.recordIds.length;
227
+ this.recordIds.push(id);
228
+ this.slotOfRecord.set(id, slot);
229
+ return slot;
230
+ }
231
+ /** Materialise one record's points into free slots. `list` -1 = unassigned. */
232
+ addPoints(v, list) {
233
+ const r = this.recordSlot(v.id);
234
+ const pts = [];
235
+ const push = (vec, chunk) => {
236
+ const p = this.freeSlots.pop() ?? this.pVec.length;
237
+ this.pVec[p] = vec;
238
+ this.pInv[p] = invNorm(vec);
239
+ this.pRecord[p] = r;
240
+ this.pChunk[p] = chunk;
241
+ this.pList[p] = list;
242
+ pts.push(p);
243
+ this.live++;
244
+ };
245
+ if (v.chunks && v.chunks.length > 0) {
246
+ for (const c of v.chunks) push(c.vec, { id: c.id, start: c.start, end: c.end });
247
+ } else if (v.vec) {
248
+ push(v.vec, void 0);
249
+ }
250
+ if (pts.length > 0) this.pointsOfRecord.set(v.id, pts);
251
+ }
252
+ };
253
+ function fitCentroids(sample, k, params) {
254
+ if (sample.length === 0) return [];
255
+ const dim = sample[0].length;
256
+ const kk = Math.min(k, sample.length);
257
+ const rand = mulberry32(params.seed);
258
+ const centroids = [sample[Math.floor(rand() * sample.length)].slice()];
259
+ const best = new Float64Array(sample.length).fill(Infinity);
260
+ while (centroids.length < kk) {
261
+ const last = centroids[centroids.length - 1];
262
+ let total = 0;
263
+ for (let i = 0; i < sample.length; i++) {
264
+ const d = 1 - dot(sample[i], last);
265
+ const w = d * d;
266
+ if (w < best[i]) best[i] = w;
267
+ total += best[i];
268
+ }
269
+ if (total === 0) break;
270
+ let target = rand() * total;
271
+ let pick = sample.length - 1;
272
+ for (let i = 0; i < sample.length; i++) {
273
+ target -= best[i];
274
+ if (target <= 0) {
275
+ pick = i;
276
+ break;
277
+ }
278
+ }
279
+ centroids.push(sample[pick].slice());
280
+ }
281
+ for (let it = 0; it < params.iterations; it++) {
282
+ const sums = Array.from({ length: centroids.length }, () => new Float64Array(dim));
283
+ const counts = new Int32Array(centroids.length);
284
+ for (const u of sample) {
285
+ let bc = 0, bs = -Infinity;
286
+ for (let c = 0; c < centroids.length; c++) {
287
+ const s = dot(u, centroids[c]);
288
+ if (s > bs) {
289
+ bs = s;
290
+ bc = c;
291
+ }
292
+ }
293
+ const acc = sums[bc];
294
+ for (let i = 0; i < dim; i++) acc[i] += u[i];
295
+ counts[bc]++;
296
+ }
297
+ for (let c = 0; c < centroids.length; c++) {
298
+ if (counts[c] === 0) continue;
299
+ const acc = sums[c];
300
+ let n = 0;
301
+ for (let i = 0; i < dim; i++) n += acc[i] * acc[i];
302
+ if (n === 0) continue;
303
+ const inv = 1 / Math.sqrt(n);
304
+ const cv = centroids[c];
305
+ for (let i = 0; i < dim; i++) cv[i] = acc[i] * inv;
306
+ }
307
+ }
308
+ return centroids;
309
+ }
310
+ export {
311
+ IvfFlatIndex,
312
+ defaultNlist
313
+ };
314
+ //# sourceMappingURL=ivf-flat-UZ6DQDLS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/with-lookup/embeddings/ivf-flat.ts"],"sourcesContent":["/**\n * IVF-flat — the approximate vector index (#1360 part 2).\n *\n * ## Why IVF-flat and not HNSW\n *\n * The choice is a build-cost argument, not a taste one, and the numbers are in\n * `test-harnesses/benchmarks/src/vector-ann-index.bench.ts`.\n *\n * Every index here is paid for **once per session**: the vector set is loaded\n * from the encrypted `_vec` sidecars into memory, so an index built over it\n * dies with the process. There is no persisted index to amortise against —\n * `_vec` holds vectors, never a graph — so the only question that matters is\n * *how many queries does the build cost, and how many does it save?*\n *\n * - **IVF-flat** builds in `n · nlist` dot products = exactly `nlist`\n * brute-force queries, and `nlist` is a knob we choose. At the defaults it is\n * tens of query-equivalents, and one query then costs ~`(nlist + nprobe ·\n * n/nlist)/n` of a brute-force scan.\n * - **HNSW** builds in `n · log n · efConstruction` distance computations —\n * hundreds to thousands of query-equivalents at the same corpus — and its\n * deletes need tombstones plus periodic graph repair. It wins on\n * queries-per-second at *very* large n with a *persisted* graph. Neither\n * condition holds here.\n *\n * The deciding property is that a noy-db collection is mutable: `put()` and\n * `forget()` run constantly, and IVF handles both in `O(nlist)` (assign to the\n * nearest centroid / splice out of one list) with no graph to repair.\n *\n * ## The scoring identity — why this is exact arithmetic on an approximate set\n *\n * Cosine is scale-invariant, so with a unit-normalised query `q̂`:\n *\n * cosine(q, v) = dot(q̂, v) · (1/‖v‖)\n *\n * The index therefore stores the **caller's own `Float32Array` by reference**\n * plus one scalar `1/‖v‖` per point, and never a normalised copy. That is the\n * difference between `O(n)` and `O(n·d)` of index memory: at 100k × 768 a\n * normalised copy would be another ~300 MB. Scores this class returns are the\n * same numbers `cosine()` returns, bit for bit up to float association order —\n * so a hit's score is comparable with an exact hit's score, and `minScore`\n * means the same thing on both paths.\n *\n * ## What is approximate, and where recall goes\n *\n * Only the CANDIDATE SET is approximate: a true neighbour whose point sits in\n * an unprobed list is missed. `nprobe` is the dial; recall is measured, not\n * assumed (`__tests__/embeddings-ivf-recall.test.ts` and the benchmark).\n *\n * ⭐ Chunking interacts here: a record is scored by its best chunk *among the\n * probed lists*. A record whose best chunk is unprobed can still be returned\n * via a weaker chunk, with a lower score than exact search would give it. That\n * is a score difference, not only a membership difference, and it is why the\n * recall test compares folded RECORD results rather than raw points.\n *\n * ⚠️ **Ties do not order identically to the exact path**, even at `nprobe =\n * nlist`. Both sort by score with a stable sort, but over different scan\n * orders, so two records holding the SAME score can swap places. Neither path\n * ever promised a tie-break order. A real embedding corpus has no exact ties;\n * a test with a toy encoder is full of them, so compare by score there.\n */\nimport type { EmbeddingChunk } from './chunks.js'\nimport type { StoredVector, VectorHit } from './vector-set.js'\nimport type { VectorIndex, VectorIndexSearchOptions } from './vector-index.js'\n\n/**\n * Default partition count for a corpus of `n` points.\n *\n * Build cost is `nlist` brute-force-query-equivalents and query cost is\n * roughly `(nlist + nprobe·n/nlist)/n` of one, so `nlist` trades build against\n * query *linearly in opposite directions*.\n *\n * MEASURED (768d, 100,000 vectors, `nprobe: 8`; full table in\n * `test-harnesses/benchmarks/src/vector-ann-index.bench.ts`):\n *\n * | nlist | scan | speedup | recall@10 | build |\n * |-------------|-------|---------|-----------|---------------|\n * | 79 = √n/4 | 10.3% | 9.7x | 0.895 | 56 queries |\n * | 316 = √n | 3.0% | 33.8x | 0.813 | 288 queries |\n *\n * √n is the better index and the worse DEFAULT. This index is per-session —\n * it is rebuilt from the decrypted sidecars every time the process starts and\n * is never persisted — so a build has only this session's queries to amortise\n * against, and 288 query-equivalents is a bad opening bid for a consumer who\n * runs a dozen searches. `√n/4` costs ~56 and still cuts the scan by 10x.\n * A long-lived query-heavy session should override it; that is what the knob\n * is for. The CAP (256) matters as much as the formula: it bounds the build at\n * the top end, where an uncapped √n grows without limit.\n */\nexport function defaultNlist(n: number): number {\n return Math.max(4, Math.min(256, Math.round(Math.sqrt(n) / 4)))\n}\n\n/** Deterministic PRNG — the index must be identical across runs for a given corpus. */\nfunction mulberry32(seed: number): () => number {\n let a = seed >>> 0\n return () => {\n a = (a + 0x6d2b79f5) >>> 0\n let t = a\n t = Math.imul(t ^ (t >>> 15), t | 1)\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61)\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296\n }\n}\n\nfunction dot(a: Float32Array, b: Float32Array): number {\n let s = 0\n for (let i = 0; i < a.length; i++) s += a[i]! * b[i]!\n return s\n}\n\n/** `1/‖v‖`, or 0 for a zero vector — which makes its score 0, exactly as `cosine()` does. */\nfunction invNorm(v: Float32Array): number {\n let n = 0\n for (let i = 0; i < v.length; i++) n += v[i]! * v[i]!\n return n === 0 ? 0 : 1 / Math.sqrt(n)\n}\n\ninterface IvfParams {\n readonly nlist: number | undefined\n readonly nprobe: number\n readonly sampleSize: number\n readonly iterations: number\n readonly seed: number\n}\n\nconst IVF_DEFAULTS: IvfParams = {\n nlist: undefined,\n nprobe: 8,\n sampleSize: 4096,\n iterations: 6,\n seed: 0x9e3779b9,\n}\n\nexport class IvfFlatIndex implements VectorIndex {\n private readonly params: IvfParams\n\n /** Unit-length partition representatives, `nlist` of them. */\n private centroids: Float32Array[] = []\n /** `lists[c]` = point slots assigned to centroid `c`. */\n private lists: number[][] = []\n\n // Points, as parallel arrays. A \"point\" is one vector: a whole-record vector\n // or one chunk of a chunked record. Parallel arrays rather than an object\n // per point because at the gating scale there are hundreds of thousands of\n // them and per-object overhead would dwarf the payload we deliberately\n // refused to copy.\n private pVec: (Float32Array | undefined)[] = []\n private pInv: number[] = []\n private pRecord: number[] = []\n private pChunk: (EmbeddingChunk | undefined)[] = []\n /** Owning list, or -1 for a free slot. */\n private pList: number[] = []\n\n private recordIds: string[] = []\n private slotOfRecord = new Map<string, number>()\n private pointsOfRecord = new Map<string, number[]>()\n private freeSlots: number[] = []\n private live = 0\n private builtAt = 0\n /**\n * Points actually scored by the last {@link search} — the deterministic\n * measure of what the index bought.\n *\n * Wall-clock speedup is not reproducible on a loaded machine (measured: the\n * same cell varied 100x across reps while other work ran), but the fraction\n * of the corpus a query touches is exact arithmetic and identical on every\n * machine. The benchmark reports both and treats this as the primary number;\n * latency follows from it and the brute-force table's µs-per-vector.\n */\n lastProbedPoints = 0\n\n constructor(params: Partial<IvfParams> = {}) {\n this.params = { ...IVF_DEFAULTS, ...params }\n }\n\n get size(): number { return this.live }\n get nlist(): number { return this.centroids.length }\n\n /**\n * Rebuild when the corpus has doubled or halved since the fit. Incremental\n * upserts assign to EXISTING centroids, so a set that grew 10x around new\n * topics is partitioned by a map of the old ones — recall decays silently,\n * which is the failure mode this flag exists to stop.\n */\n get stale(): boolean {\n if (this.centroids.length === 0) return true\n return this.live > this.builtAt * 2 || this.live * 2 < this.builtAt\n }\n\n build(vectors: readonly StoredVector[]): void {\n this.centroids = []\n this.lists = []\n this.pVec = []; this.pInv = []; this.pRecord = []; this.pChunk = []; this.pList = []\n this.recordIds = []\n this.slotOfRecord = new Map()\n this.pointsOfRecord = new Map()\n this.freeSlots = []\n this.live = 0\n\n // Materialise the points first (unassigned), then fit, then assign.\n for (const v of vectors) this.addPoints(v, -1)\n this.builtAt = this.live\n\n const dim = this.firstDim()\n if (dim === 0) return\n const k = Math.max(1, Math.min(this.params.nlist ?? defaultNlist(this.live), this.live))\n this.centroids = fitCentroids(this.sampleUnitVectors(dim), k, this.params)\n // No centroids means no usable vector to fit on — every point was\n // zero-norm or off-dimension. Leave the points unassigned; `nlist === 0`\n // is the signal `VectorSet` reads to fall back to the exact scan, which\n // scores those vectors 0 rather than dropping them.\n if (this.centroids.length === 0) return\n this.lists = Array.from({ length: this.centroids.length }, () => [] as number[])\n for (let p = 0; p < this.pVec.length; p++) {\n if (this.pVec[p] === undefined) continue\n this.assign(p)\n }\n }\n\n upsert(vector: StoredVector): void {\n this.remove(vector.id)\n this.addPoints(vector, -1)\n if (this.centroids.length === 0) return\n for (const p of this.pointsOfRecord.get(vector.id) ?? []) if (this.pList[p] === -1) this.assign(p)\n }\n\n remove(recordId: string): void {\n const pts = this.pointsOfRecord.get(recordId)\n if (!pts) return\n for (const p of pts) {\n const l = this.pList[p]!\n if (l >= 0) {\n const list = this.lists[l]!\n const at = list.indexOf(p)\n if (at >= 0) { list[at] = list[list.length - 1]!; list.pop() }\n }\n this.pVec[p] = undefined\n this.pChunk[p] = undefined\n this.pList[p] = -1\n this.freeSlots.push(p)\n this.live--\n }\n this.pointsOfRecord.delete(recordId)\n // The record's SLOT is deliberately kept. `put()` on an existing id is\n // remove-then-add, and freeing the slot there would mint a new one on\n // every write — unbounded growth on the hottest path. A slot is 8 bytes\n // and one string; a re-put reuses it.\n }\n\n search(query: Float32Array, k: number, opts: VectorIndexSearchOptions = {}): VectorHit[] {\n if (k <= 0 || this.centroids.length === 0) return []\n const qi = invNorm(query)\n const minScore = opts.minScore ?? -Infinity\n // A zero-norm query scores 0 against everything (cosine's contract). There\n // is no meaningful ranking to approximate, so answer exactly rather than\n // returning whichever list the arbitrary probe order happened to pick.\n if (qi === 0) return []\n const qn = new Float32Array(query.length)\n for (let i = 0; i < query.length; i++) qn[i] = query[i]! * qi\n\n const nprobe = Math.max(1, Math.min(opts.nprobe ?? this.params.nprobe, this.centroids.length))\n const probes = this.topCentroids(qn, nprobe)\n this.lastProbedPoints = 0\n\n // Fold to one hit per RECORD by best chunk, exactly as the exact path does\n // — `k` counts records, never fragments.\n const best = new Map<number, { score: number; chunk: EmbeddingChunk | undefined }>()\n for (const c of probes) {\n this.lastProbedPoints += this.lists[c]!.length\n for (const p of this.lists[c]!) {\n const v = this.pVec[p]\n if (v === undefined || v.length !== qn.length) continue\n const score = dot(qn, v) * this.pInv[p]!\n const r = this.pRecord[p]!\n const cur = best.get(r)\n if (cur === undefined || score > cur.score) best.set(r, { score, chunk: this.pChunk[p] })\n }\n }\n const hits: VectorHit[] = []\n for (const [r, b] of best) {\n if (b.score < minScore) continue\n hits.push(b.chunk ? { id: this.recordIds[r]!, score: b.score, chunk: b.chunk } : { id: this.recordIds[r]!, score: b.score })\n }\n hits.sort((a, b) => b.score - a.score)\n return hits.slice(0, k)\n }\n\n /**\n * A deterministic fixed-stride sample of the corpus, unit-normalised — the\n * only place the index materialises normalised copies, and it is bounded by\n * `sampleSize` rather than by `n`. A stride (not a random draw) so the fit\n * is reproducible without spending the PRNG, which is saved for k-means++\n * seeding where it actually buys recall.\n */\n private sampleUnitVectors(dim: number): Float32Array[] {\n const slots = this.pVec.length\n const want = Math.min(slots, this.params.sampleSize)\n const stride = Math.max(1, Math.floor(slots / Math.max(1, want)))\n const sample: Float32Array[] = []\n for (let p = 0; p < slots && sample.length < want; p += stride) {\n const v = this.pVec[p]\n const inv = this.pInv[p]!\n if (v === undefined || inv === 0 || v.length !== dim) continue\n const u = new Float32Array(dim)\n for (let i = 0; i < dim; i++) u[i] = v[i]! * inv\n sample.push(u)\n }\n return sample\n }\n\n private firstDim(): number {\n for (const v of this.pVec) if (v !== undefined && v.length > 0) return v.length\n return 0\n }\n\n private topCentroids(qn: Float32Array, nprobe: number): number[] {\n // nlist is capped at 256, so a full scan + partial selection is cheaper\n // than any heap — and it is a rounding error next to the list scan.\n const scores = new Float64Array(this.centroids.length)\n for (let c = 0; c < this.centroids.length; c++) {\n const cv = this.centroids[c]!\n scores[c] = cv.length === qn.length ? dot(qn, cv) : -Infinity\n }\n const order: number[] = []\n for (let c = 0; c < scores.length; c++) order.push(c)\n order.sort((a, b) => scores[b]! - scores[a]!)\n return order.slice(0, nprobe)\n }\n\n private assign(p: number): void {\n const v = this.pVec[p]\n if (v === undefined || this.centroids.length === 0) return\n let bestC = 0\n let bestS = -Infinity\n const inv = this.pInv[p]!\n for (let c = 0; c < this.centroids.length; c++) {\n const cv = this.centroids[c]!\n if (cv.length !== v.length) continue\n const s = dot(cv, v) * inv\n if (s > bestS) { bestS = s; bestC = c }\n }\n this.pList[p] = bestC\n this.lists[bestC]!.push(p)\n }\n\n private recordSlot(id: string): number {\n const existing = this.slotOfRecord.get(id)\n if (existing !== undefined) return existing\n const slot = this.recordIds.length\n this.recordIds.push(id)\n this.slotOfRecord.set(id, slot)\n return slot\n }\n\n /** Materialise one record's points into free slots. `list` -1 = unassigned. */\n private addPoints(v: StoredVector, list: number): void {\n const r = this.recordSlot(v.id)\n const pts: number[] = []\n const push = (vec: Float32Array, chunk: EmbeddingChunk | undefined): void => {\n const p = this.freeSlots.pop() ?? this.pVec.length\n this.pVec[p] = vec\n this.pInv[p] = invNorm(vec)\n this.pRecord[p] = r\n this.pChunk[p] = chunk\n this.pList[p] = list\n pts.push(p)\n this.live++\n }\n if (v.chunks && v.chunks.length > 0) {\n for (const c of v.chunks) push(c.vec, { id: c.id, start: c.start, end: c.end })\n } else if (v.vec) {\n push(v.vec, undefined)\n }\n if (pts.length > 0) this.pointsOfRecord.set(v.id, pts)\n }\n}\n\n/**\n * Spherical k-means over a deterministic SAMPLE, not the corpus.\n *\n * Clustering all `n` points would cost `iterations · n · k · d`; assigning\n * them once costs `n · k · d`. Fitting on a sample makes the iterations free\n * relative to the single unavoidable assignment pass, which is the whole\n * reason IVF's build stays affordable at the #1360 gating scale.\n */\nfunction fitCentroids(sample: readonly Float32Array[], k: number, params: IvfParams): Float32Array[] {\n if (sample.length === 0) return []\n const dim = sample[0]!.length\n const kk = Math.min(k, sample.length)\n\n // k-means++ seeding on unit vectors, weighting by squared cosine distance.\n const rand = mulberry32(params.seed)\n const centroids: Float32Array[] = [sample[Math.floor(rand() * sample.length)]!.slice()]\n const best = new Float64Array(sample.length).fill(Infinity)\n while (centroids.length < kk) {\n const last = centroids[centroids.length - 1]!\n let total = 0\n for (let i = 0; i < sample.length; i++) {\n const d = 1 - dot(sample[i]!, last)\n const w = d * d\n if (w < best[i]!) best[i] = w\n total += best[i]!\n }\n if (total === 0) break\n let target = rand() * total\n let pick = sample.length - 1\n for (let i = 0; i < sample.length; i++) { target -= best[i]!; if (target <= 0) { pick = i; break } }\n centroids.push(sample[pick]!.slice())\n }\n\n // Lloyd, spherical: mean, then re-normalise. An empty cluster KEEPS its\n // previous centroid rather than being re-seeded — a dead list costs one\n // wasted centroid comparison per query, whereas re-seeding mid-fit makes the\n // result depend on the iteration count in a way nothing else here does.\n for (let it = 0; it < params.iterations; it++) {\n const sums = Array.from({ length: centroids.length }, () => new Float64Array(dim))\n const counts = new Int32Array(centroids.length)\n for (const u of sample) {\n let bc = 0, bs = -Infinity\n for (let c = 0; c < centroids.length; c++) {\n const s = dot(u, centroids[c]!)\n if (s > bs) { bs = s; bc = c }\n }\n const acc = sums[bc]!\n for (let i = 0; i < dim; i++) acc[i]! += u[i]!\n counts[bc]!++\n }\n for (let c = 0; c < centroids.length; c++) {\n if (counts[c] === 0) continue\n const acc = sums[c]!\n let n = 0\n for (let i = 0; i < dim; i++) n += acc[i]! * acc[i]!\n if (n === 0) continue\n const inv = 1 / Math.sqrt(n)\n const cv = centroids[c]!\n for (let i = 0; i < dim; i++) cv[i] = acc[i]! * inv\n }\n }\n return centroids\n}\n"],"mappings":";AAwFO,SAAS,aAAa,GAAmB;AAC9C,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE;AAGA,SAAS,WAAW,MAA4B;AAC9C,MAAI,IAAI,SAAS;AACjB,SAAO,MAAM;AACX,QAAK,IAAI,eAAgB;AACzB,QAAI,IAAI;AACR,QAAI,KAAK,KAAK,IAAK,MAAM,IAAK,IAAI,CAAC;AACnC,SAAK,IAAI,KAAK,KAAK,IAAK,MAAM,GAAI,IAAI,EAAE;AACxC,aAAS,IAAK,MAAM,QAAS,KAAK;AAAA,EACpC;AACF;AAEA,SAAS,IAAI,GAAiB,GAAyB;AACrD,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,IAAK,MAAK,EAAE,CAAC,IAAK,EAAE,CAAC;AACnD,SAAO;AACT;AAGA,SAAS,QAAQ,GAAyB;AACxC,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,IAAK,MAAK,EAAE,CAAC,IAAK,EAAE,CAAC;AACnD,SAAO,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC;AACtC;AAUA,IAAM,eAA0B;AAAA,EAC9B,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,MAAM;AACR;AAEO,IAAM,eAAN,MAA0C;AAAA,EAC9B;AAAA;AAAA,EAGT,YAA4B,CAAC;AAAA;AAAA,EAE7B,QAAoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOrB,OAAqC,CAAC;AAAA,EACtC,OAAiB,CAAC;AAAA,EAClB,UAAoB,CAAC;AAAA,EACrB,SAAyC,CAAC;AAAA;AAAA,EAE1C,QAAkB,CAAC;AAAA,EAEnB,YAAsB,CAAC;AAAA,EACvB,eAAe,oBAAI,IAAoB;AAAA,EACvC,iBAAiB,oBAAI,IAAsB;AAAA,EAC3C,YAAsB,CAAC;AAAA,EACvB,OAAO;AAAA,EACP,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWlB,mBAAmB;AAAA,EAEnB,YAAY,SAA6B,CAAC,GAAG;AAC3C,SAAK,SAAS,EAAE,GAAG,cAAc,GAAG,OAAO;AAAA,EAC7C;AAAA,EAEA,IAAI,OAAe;AAAE,WAAO,KAAK;AAAA,EAAK;AAAA,EACtC,IAAI,QAAgB;AAAE,WAAO,KAAK,UAAU;AAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQnD,IAAI,QAAiB;AACnB,QAAI,KAAK,UAAU,WAAW,EAAG,QAAO;AACxC,WAAO,KAAK,OAAO,KAAK,UAAU,KAAK,KAAK,OAAO,IAAI,KAAK;AAAA,EAC9D;AAAA,EAEA,MAAM,SAAwC;AAC5C,SAAK,YAAY,CAAC;AAClB,SAAK,QAAQ,CAAC;AACd,SAAK,OAAO,CAAC;AAAG,SAAK,OAAO,CAAC;AAAG,SAAK,UAAU,CAAC;AAAG,SAAK,SAAS,CAAC;AAAG,SAAK,QAAQ,CAAC;AACnF,SAAK,YAAY,CAAC;AAClB,SAAK,eAAe,oBAAI,IAAI;AAC5B,SAAK,iBAAiB,oBAAI,IAAI;AAC9B,SAAK,YAAY,CAAC;AAClB,SAAK,OAAO;AAGZ,eAAW,KAAK,QAAS,MAAK,UAAU,GAAG,EAAE;AAC7C,SAAK,UAAU,KAAK;AAEpB,UAAM,MAAM,KAAK,SAAS;AAC1B,QAAI,QAAQ,EAAG;AACf,UAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC;AACvF,SAAK,YAAY,aAAa,KAAK,kBAAkB,GAAG,GAAG,GAAG,KAAK,MAAM;AAKzE,QAAI,KAAK,UAAU,WAAW,EAAG;AACjC,SAAK,QAAQ,MAAM,KAAK,EAAE,QAAQ,KAAK,UAAU,OAAO,GAAG,MAAM,CAAC,CAAa;AAC/E,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACzC,UAAI,KAAK,KAAK,CAAC,MAAM,OAAW;AAChC,WAAK,OAAO,CAAC;AAAA,IACf;AAAA,EACF;AAAA,EAEA,OAAO,QAA4B;AACjC,SAAK,OAAO,OAAO,EAAE;AACrB,SAAK,UAAU,QAAQ,EAAE;AACzB,QAAI,KAAK,UAAU,WAAW,EAAG;AACjC,eAAW,KAAK,KAAK,eAAe,IAAI,OAAO,EAAE,KAAK,CAAC,EAAG,KAAI,KAAK,MAAM,CAAC,MAAM,GAAI,MAAK,OAAO,CAAC;AAAA,EACnG;AAAA,EAEA,OAAO,UAAwB;AAC7B,UAAM,MAAM,KAAK,eAAe,IAAI,QAAQ;AAC5C,QAAI,CAAC,IAAK;AACV,eAAW,KAAK,KAAK;AACnB,YAAM,IAAI,KAAK,MAAM,CAAC;AACtB,UAAI,KAAK,GAAG;AACV,cAAM,OAAO,KAAK,MAAM,CAAC;AACzB,cAAM,KAAK,KAAK,QAAQ,CAAC;AACzB,YAAI,MAAM,GAAG;AAAE,eAAK,EAAE,IAAI,KAAK,KAAK,SAAS,CAAC;AAAI,eAAK,IAAI;AAAA,QAAE;AAAA,MAC/D;AACA,WAAK,KAAK,CAAC,IAAI;AACf,WAAK,OAAO,CAAC,IAAI;AACjB,WAAK,MAAM,CAAC,IAAI;AAChB,WAAK,UAAU,KAAK,CAAC;AACrB,WAAK;AAAA,IACP;AACA,SAAK,eAAe,OAAO,QAAQ;AAAA,EAKrC;AAAA,EAEA,OAAO,OAAqB,GAAW,OAAiC,CAAC,GAAgB;AACvF,QAAI,KAAK,KAAK,KAAK,UAAU,WAAW,EAAG,QAAO,CAAC;AACnD,UAAM,KAAK,QAAQ,KAAK;AACxB,UAAM,WAAW,KAAK,YAAY;AAIlC,QAAI,OAAO,EAAG,QAAO,CAAC;AACtB,UAAM,KAAK,IAAI,aAAa,MAAM,MAAM;AACxC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAK,IAAG,CAAC,IAAI,MAAM,CAAC,IAAK;AAE3D,UAAM,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,UAAU,KAAK,OAAO,QAAQ,KAAK,UAAU,MAAM,CAAC;AAC7F,UAAM,SAAS,KAAK,aAAa,IAAI,MAAM;AAC3C,SAAK,mBAAmB;AAIxB,UAAM,OAAO,oBAAI,IAAkE;AACnF,eAAW,KAAK,QAAQ;AACtB,WAAK,oBAAoB,KAAK,MAAM,CAAC,EAAG;AACxC,iBAAW,KAAK,KAAK,MAAM,CAAC,GAAI;AAC9B,cAAM,IAAI,KAAK,KAAK,CAAC;AACrB,YAAI,MAAM,UAAa,EAAE,WAAW,GAAG,OAAQ;AAC/C,cAAM,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC;AACtC,cAAM,IAAI,KAAK,QAAQ,CAAC;AACxB,cAAM,MAAM,KAAK,IAAI,CAAC;AACtB,YAAI,QAAQ,UAAa,QAAQ,IAAI,MAAO,MAAK,IAAI,GAAG,EAAE,OAAO,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC;AAAA,MAC1F;AAAA,IACF;AACA,UAAM,OAAoB,CAAC;AAC3B,eAAW,CAAC,GAAG,CAAC,KAAK,MAAM;AACzB,UAAI,EAAE,QAAQ,SAAU;AACxB,WAAK,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,UAAU,CAAC,GAAI,OAAO,EAAE,OAAO,OAAO,EAAE,MAAM,IAAI,EAAE,IAAI,KAAK,UAAU,CAAC,GAAI,OAAO,EAAE,MAAM,CAAC;AAAA,IAC7H;AACA,SAAK,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACrC,WAAO,KAAK,MAAM,GAAG,CAAC;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,kBAAkB,KAA6B;AACrD,UAAM,QAAQ,KAAK,KAAK;AACxB,UAAM,OAAO,KAAK,IAAI,OAAO,KAAK,OAAO,UAAU;AACnD,UAAM,SAAS,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAChE,UAAM,SAAyB,CAAC;AAChC,aAAS,IAAI,GAAG,IAAI,SAAS,OAAO,SAAS,MAAM,KAAK,QAAQ;AAC9D,YAAM,IAAI,KAAK,KAAK,CAAC;AACrB,YAAM,MAAM,KAAK,KAAK,CAAC;AACvB,UAAI,MAAM,UAAa,QAAQ,KAAK,EAAE,WAAW,IAAK;AACtD,YAAM,IAAI,IAAI,aAAa,GAAG;AAC9B,eAAS,IAAI,GAAG,IAAI,KAAK,IAAK,GAAE,CAAC,IAAI,EAAE,CAAC,IAAK;AAC7C,aAAO,KAAK,CAAC;AAAA,IACf;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,WAAmB;AACzB,eAAW,KAAK,KAAK,KAAM,KAAI,MAAM,UAAa,EAAE,SAAS,EAAG,QAAO,EAAE;AACzE,WAAO;AAAA,EACT;AAAA,EAEQ,aAAa,IAAkB,QAA0B;AAG/D,UAAM,SAAS,IAAI,aAAa,KAAK,UAAU,MAAM;AACrD,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC9C,YAAM,KAAK,KAAK,UAAU,CAAC;AAC3B,aAAO,CAAC,IAAI,GAAG,WAAW,GAAG,SAAS,IAAI,IAAI,EAAE,IAAI;AAAA,IACtD;AACA,UAAM,QAAkB,CAAC;AACzB,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAK,OAAM,KAAK,CAAC;AACpD,UAAM,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,IAAK,OAAO,CAAC,CAAE;AAC5C,WAAO,MAAM,MAAM,GAAG,MAAM;AAAA,EAC9B;AAAA,EAEQ,OAAO,GAAiB;AAC9B,UAAM,IAAI,KAAK,KAAK,CAAC;AACrB,QAAI,MAAM,UAAa,KAAK,UAAU,WAAW,EAAG;AACpD,QAAI,QAAQ;AACZ,QAAI,QAAQ;AACZ,UAAM,MAAM,KAAK,KAAK,CAAC;AACvB,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC9C,YAAM,KAAK,KAAK,UAAU,CAAC;AAC3B,UAAI,GAAG,WAAW,EAAE,OAAQ;AAC5B,YAAM,IAAI,IAAI,IAAI,CAAC,IAAI;AACvB,UAAI,IAAI,OAAO;AAAE,gBAAQ;AAAG,gBAAQ;AAAA,MAAE;AAAA,IACxC;AACA,SAAK,MAAM,CAAC,IAAI;AAChB,SAAK,MAAM,KAAK,EAAG,KAAK,CAAC;AAAA,EAC3B;AAAA,EAEQ,WAAW,IAAoB;AACrC,UAAM,WAAW,KAAK,aAAa,IAAI,EAAE;AACzC,QAAI,aAAa,OAAW,QAAO;AACnC,UAAM,OAAO,KAAK,UAAU;AAC5B,SAAK,UAAU,KAAK,EAAE;AACtB,SAAK,aAAa,IAAI,IAAI,IAAI;AAC9B,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,UAAU,GAAiB,MAAoB;AACrD,UAAM,IAAI,KAAK,WAAW,EAAE,EAAE;AAC9B,UAAM,MAAgB,CAAC;AACvB,UAAM,OAAO,CAAC,KAAmB,UAA4C;AAC3E,YAAM,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,KAAK;AAC5C,WAAK,KAAK,CAAC,IAAI;AACf,WAAK,KAAK,CAAC,IAAI,QAAQ,GAAG;AAC1B,WAAK,QAAQ,CAAC,IAAI;AAClB,WAAK,OAAO,CAAC,IAAI;AACjB,WAAK,MAAM,CAAC,IAAI;AAChB,UAAI,KAAK,CAAC;AACV,WAAK;AAAA,IACP;AACA,QAAI,EAAE,UAAU,EAAE,OAAO,SAAS,GAAG;AACnC,iBAAW,KAAK,EAAE,OAAQ,MAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,OAAO,KAAK,EAAE,IAAI,CAAC;AAAA,IAChF,WAAW,EAAE,KAAK;AAChB,WAAK,EAAE,KAAK,MAAS;AAAA,IACvB;AACA,QAAI,IAAI,SAAS,EAAG,MAAK,eAAe,IAAI,EAAE,IAAI,GAAG;AAAA,EACvD;AACF;AAUA,SAAS,aAAa,QAAiC,GAAW,QAAmC;AACnG,MAAI,OAAO,WAAW,EAAG,QAAO,CAAC;AACjC,QAAM,MAAM,OAAO,CAAC,EAAG;AACvB,QAAM,KAAK,KAAK,IAAI,GAAG,OAAO,MAAM;AAGpC,QAAM,OAAO,WAAW,OAAO,IAAI;AACnC,QAAM,YAA4B,CAAC,OAAO,KAAK,MAAM,KAAK,IAAI,OAAO,MAAM,CAAC,EAAG,MAAM,CAAC;AACtF,QAAM,OAAO,IAAI,aAAa,OAAO,MAAM,EAAE,KAAK,QAAQ;AAC1D,SAAO,UAAU,SAAS,IAAI;AAC5B,UAAM,OAAO,UAAU,UAAU,SAAS,CAAC;AAC3C,QAAI,QAAQ;AACZ,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,IAAI,IAAI,IAAI,OAAO,CAAC,GAAI,IAAI;AAClC,YAAM,IAAI,IAAI;AACd,UAAI,IAAI,KAAK,CAAC,EAAI,MAAK,CAAC,IAAI;AAC5B,eAAS,KAAK,CAAC;AAAA,IACjB;AACA,QAAI,UAAU,EAAG;AACjB,QAAI,SAAS,KAAK,IAAI;AACtB,QAAI,OAAO,OAAO,SAAS;AAC3B,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAAE,gBAAU,KAAK,CAAC;AAAI,UAAI,UAAU,GAAG;AAAE,eAAO;AAAG;AAAA,MAAM;AAAA,IAAE;AACnG,cAAU,KAAK,OAAO,IAAI,EAAG,MAAM,CAAC;AAAA,EACtC;AAMA,WAAS,KAAK,GAAG,KAAK,OAAO,YAAY,MAAM;AAC7C,UAAM,OAAO,MAAM,KAAK,EAAE,QAAQ,UAAU,OAAO,GAAG,MAAM,IAAI,aAAa,GAAG,CAAC;AACjF,UAAM,SAAS,IAAI,WAAW,UAAU,MAAM;AAC9C,eAAW,KAAK,QAAQ;AACtB,UAAI,KAAK,GAAG,KAAK;AACjB,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,cAAM,IAAI,IAAI,GAAG,UAAU,CAAC,CAAE;AAC9B,YAAI,IAAI,IAAI;AAAE,eAAK;AAAG,eAAK;AAAA,QAAE;AAAA,MAC/B;AACA,YAAM,MAAM,KAAK,EAAE;AACnB,eAAS,IAAI,GAAG,IAAI,KAAK,IAAK,KAAI,CAAC,KAAM,EAAE,CAAC;AAC5C,aAAO,EAAE;AAAA,IACX;AACA,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAI,OAAO,CAAC,MAAM,EAAG;AACrB,YAAM,MAAM,KAAK,CAAC;AAClB,UAAI,IAAI;AACR,eAAS,IAAI,GAAG,IAAI,KAAK,IAAK,MAAK,IAAI,CAAC,IAAK,IAAI,CAAC;AAClD,UAAI,MAAM,EAAG;AACb,YAAM,MAAM,IAAI,KAAK,KAAK,CAAC;AAC3B,YAAM,KAAK,UAAU,CAAC;AACtB,eAAS,IAAI,GAAG,IAAI,KAAK,IAAK,IAAG,CAAC,IAAI,IAAI,CAAC,IAAK;AAAA,IAClD;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -22,6 +22,7 @@ function buildJsonSchema(desc, base) {
22
22
  if (f.unit !== void 0) prop["x-unit"] = f.unit;
23
23
  if (f.semanticType !== void 0) prop["x-semanticType"] = f.semanticType;
24
24
  if (f.sensitivity !== void 0) prop["x-sensitivity"] = f.sensitivity;
25
+ if (f.bulk !== void 0) prop["x-bulk"] = f.bulk;
25
26
  if (f.widget !== void 0) prop["x-widget"] = f.widget;
26
27
  if (f.editable === false) prop["x-readonly"] = true;
27
28
  if (f.money !== void 0) prop["x-money"] = f.money;
@@ -39,4 +40,4 @@ function buildJsonSchema(desc, base) {
39
40
  export {
40
41
  buildJsonSchema
41
42
  };
42
- //# sourceMappingURL=json-schema-V3M5MUCM.js.map
43
+ //# sourceMappingURL=json-schema-3SHX72CC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/with-shape/introspection/json-schema.ts"],"sourcesContent":["/**\n * `buildJsonSchema` — pure overlay that merges describe() metadata onto a\n * base JSON Schema (from derivePersistedSchema) as `x-` extension keys.\n *\n * When no base JSON Schema is available (non-zod / unknown validator),\n * builds a minimal `{ type:'object', properties }` from describe()'s field\n * type tags. No static `import 'zod'` — validator derivation stays lazy.\n *\n * @module\n */\n\nimport type { CollectionDescription } from './describe.js'\n\n/** Map a DescribedField's type tag to a JSON-Schema `type`. */\nfunction jsonType(t: string): string {\n switch (t) {\n case 'number': return 'number'\n case 'boolean': return 'boolean'\n case 'array': return 'array'\n case 'object': return 'object'\n default: return 'string'\n }\n}\n\n/** Overlay describe() metadata onto a base JSON Schema (or build a minimal one). */\nexport function buildJsonSchema(desc: CollectionDescription, base?: Record<string, unknown> | null): object {\n const baseProps = (base?.['properties'] as Record<string, Record<string, unknown>> | undefined) ?? {}\n const properties: Record<string, Record<string, unknown>> = {}\n for (const f of desc.fields) {\n const prop: Record<string, unknown> = { ...(baseProps[f.key] ?? { type: jsonType(f.type) }) }\n prop['x-label'] = f.label\n if (f.unit !== undefined) prop['x-unit'] = f.unit\n if (f.semanticType !== undefined) prop['x-semanticType'] = f.semanticType\n if (f.sensitivity !== undefined) prop['x-sensitivity'] = f.sensitivity\n // Read-shape sensitivity (#1363). Orthogonal to x-sensitivity: a field can\n // be 'public' and still belong to a corpus whose coverage is protected.\n if (f.bulk !== undefined) prop['x-bulk'] = f.bulk\n if (f.widget !== undefined) prop['x-widget'] = f.widget\n if (f.editable === false) prop['x-readonly'] = true\n if (f.money !== undefined) prop['x-money'] = f.money\n if (f.ref !== undefined) prop['x-ref'] = f.ref.target\n if (f.dict?.values) {\n const labels: Record<string, string> = {}\n for (const v of f.dict.values) if (v.label !== undefined) labels[v.value] = v.label\n if (Object.keys(labels).length) prop['x-enumLabels'] = labels\n }\n // `x-classified` carries the whole classified block, incl. `equatable` when\n // set — emitted ungated (boundary note on DescribedField.classified): a\n // deployment wanting it gated can gate this behind its value-bearing door.\n if (f.classified !== undefined) prop['x-classified'] = f.classified\n properties[f.key] = prop\n }\n return base != null && typeof base === 'object'\n ? { ...base, properties }\n : { type: 'object', properties }\n}\n"],"mappings":";AAcA,SAAS,SAAS,GAAmB;AACnC,UAAQ,GAAG;AAAA,IACT,KAAK;AAAU,aAAO;AAAA,IACtB,KAAK;AAAW,aAAO;AAAA,IACvB,KAAK;AAAS,aAAO;AAAA,IACrB,KAAK;AAAU,aAAO;AAAA,IACtB;AAAS,aAAO;AAAA,EAClB;AACF;AAGO,SAAS,gBAAgB,MAA6B,MAA+C;AAC1G,QAAM,YAAa,OAAO,YAAY,KAA6D,CAAC;AACpG,QAAM,aAAsD,CAAC;AAC7D,aAAW,KAAK,KAAK,QAAQ;AAC3B,UAAM,OAAgC,EAAE,GAAI,UAAU,EAAE,GAAG,KAAK,EAAE,MAAM,SAAS,EAAE,IAAI,EAAE,EAAG;AAC5F,SAAK,SAAS,IAAI,EAAE;AACpB,QAAI,EAAE,SAAS,OAAW,MAAK,QAAQ,IAAI,EAAE;AAC7C,QAAI,EAAE,iBAAiB,OAAW,MAAK,gBAAgB,IAAI,EAAE;AAC7D,QAAI,EAAE,gBAAgB,OAAW,MAAK,eAAe,IAAI,EAAE;AAG3D,QAAI,EAAE,SAAS,OAAW,MAAK,QAAQ,IAAI,EAAE;AAC7C,QAAI,EAAE,WAAW,OAAW,MAAK,UAAU,IAAI,EAAE;AACjD,QAAI,EAAE,aAAa,MAAO,MAAK,YAAY,IAAI;AAC/C,QAAI,EAAE,UAAU,OAAW,MAAK,SAAS,IAAI,EAAE;AAC/C,QAAI,EAAE,QAAQ,OAAW,MAAK,OAAO,IAAI,EAAE,IAAI;AAC/C,QAAI,EAAE,MAAM,QAAQ;AAClB,YAAM,SAAiC,CAAC;AACxC,iBAAW,KAAK,EAAE,KAAK,OAAQ,KAAI,EAAE,UAAU,OAAW,QAAO,EAAE,KAAK,IAAI,EAAE;AAC9E,UAAI,OAAO,KAAK,MAAM,EAAE,OAAQ,MAAK,cAAc,IAAI;AAAA,IACzD;AAIA,QAAI,EAAE,eAAe,OAAW,MAAK,cAAc,IAAI,EAAE;AACzD,eAAW,EAAE,GAAG,IAAI;AAAA,EACtB;AACA,SAAO,QAAQ,QAAQ,OAAO,SAAS,WACnC,EAAE,GAAG,MAAM,WAAW,IACtB,EAAE,MAAM,UAAU,WAAW;AACnC;","names":[]}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Hub-owned copies of the attestation types. `@noy-db/attestation` is
3
+ * BUNDLED into hub (tsup `noExternal`), so hub's emitted `.d.ts` must not
4
+ * name the package — a consumer would otherwise need it installed to
5
+ * typecheck. The shapes are structurally identical; the `_Pins` block in
6
+ * `__tests__/no-runtime-dependencies.test.ts` asserts mutual assignability,
7
+ * so drift fails typecheck rather than surfacing at a consumer.
8
+ */
9
+ type Normalizer = 'trim' | 'lower' | 'upper' | 'alnum-upper' | 'digits' | 'cents' | 'iso-date';
10
+ interface AttestationFieldSpec {
11
+ readonly path: string;
12
+ readonly normalize: Normalizer;
13
+ }
14
+ export interface AttestationFieldSchema {
15
+ readonly fields: readonly AttestationFieldSpec[];
16
+ }
17
+ export interface QrPayload {
18
+ readonly v: 1;
19
+ readonly docId: string;
20
+ readonly salt: string;
21
+ readonly alg: 'ed25519';
22
+ readonly keyId: string;
23
+ readonly fieldHashes: readonly string[];
24
+ readonly sig: string;
25
+ }
26
+ export interface RevocationList {
27
+ readonly v: 1;
28
+ readonly revokedDocIds: readonly string[];
29
+ readonly asOf: string;
30
+ readonly keyId: string;
31
+ readonly sig: string;
32
+ }
33
+ export interface VerifyInput {
34
+ readonly qr: string;
35
+ readonly claimedFields: Record<string, unknown>;
36
+ readonly fieldSchema: AttestationFieldSchema;
37
+ readonly publicKeys: Readonly<Record<string, string>>;
38
+ readonly revocation?: {
39
+ list: RevocationList;
40
+ };
41
+ }
42
+ export interface VerifyResult {
43
+ readonly valid: boolean;
44
+ readonly signatureValid: boolean;
45
+ readonly perField: ReadonlyArray<{
46
+ path: string;
47
+ match: boolean;
48
+ }>;
49
+ readonly revoked: boolean | null;
50
+ readonly reason?: string;
51
+ }
52
+ /**
53
+ * The signature primitive attestation signs and verifies with. Hub declares
54
+ * its own copy for the same reason as the rest of this file: `ENCLAVE_SCHEME`
55
+ * is typed by it, so naming attestation here would put the package back in
56
+ * hub's `.d.ts`.
57
+ */
58
+ export interface SignatureScheme {
59
+ sign(privateKeyPkcs8B64: string, message: Uint8Array): Promise<string>;
60
+ verify(publicKeyB64: string, sigB64url: string, message: Uint8Array): Promise<boolean>;
61
+ }
62
+ export {};
@@ -1,25 +1,6 @@
1
- /**
2
- * Collection construction config — the PURE half of the `Collection`
3
- * constructor.
4
- *
5
- * `resolveCollectionConfig` takes the raw `CollectionOpts` the Vault threads in
6
- * and resolves every `?? default`, every normalized/derived field, and runs the
7
- * pure construction-time validations (embeddings-on-CRDT, money-field paths,
8
- * deterministic-risk acknowledgement). It holds **no `this`** and performs no
9
- * external side effect — the only objects it allocates (`Set`s, `VectorSet`,
10
- * the CEK `Lru`) are the same instances the collection then owns by reference.
11
- *
12
- * The `this`-dependent construction (the search-index store whose persisted
13
- * callback closes over `this.searchContext()`, the `RecordCodec`, and the
14
- * SyncEngine conflict-resolver registration) stays in the constructor — those
15
- * genuinely capture the live instance (and the conflict-resolver closures close
16
- * over `conflictPolicy: ConflictPolicy<T>`, whose invariant-in-T custom-merge
17
- * signature can't be exposed via a method without breaking `Collection<T>`
18
- * assignability to `Collection<unknown>`).
19
- */
20
1
  import type { StrategyBag } from '../port/with/strategies.js';
21
2
  import type { NoydbStore, ConflictPolicy, CollectionConflictResolver, HistoryConfig, TierMode, CrossTierAccessEvent, VdigFieldPolicy } from './types.js';
22
- import type { EnclaveKey } from './enclave/index.js';
3
+ import type { EnclaveKey } from '../capsule/index.js';
23
4
  import type { UnlockedKeyring } from '../with-party/team/keyring.js';
24
5
  import type { NoydbEventEmitter } from './events.js';
25
6
  import type { WriteQueueTracker } from './write-queue.js';
@@ -43,7 +24,7 @@ import type { FieldRef, Grain } from './via/graph.js';
43
24
  import type { FieldMeta } from '../with-shape/introspection/field-meta.js';
44
25
  import type { CollectionMeta } from '../with-shape/introspection/meta.js';
45
26
  import type { RefDescriptor } from './refs.js';
46
- import type { JoinableSource } from './query/index.js';
27
+ import type { JoinableSource } from './query/relate/join.js';
47
28
  import { VectorSet, type EmbeddingDescriptor } from '../with-lookup/embeddings/index.js';
48
29
  import { Lru } from './cache/index.js';
49
30
  import type { ReadOnlyVaultFacade } from '../with-audit/guards/types.js';
@@ -210,6 +191,8 @@ export interface CollectionOpts<T> {
210
191
  embeddings?: EmbeddingDescriptor | undefined;
211
192
  /** — string fields exposed to client-side `retrieve()`. */
212
193
  textIndexes?: readonly string[] | undefined;
194
+ /** — subset of `textIndexes` recording token positions (phrase / proximity, #1354). */
195
+ textIndexPositions?: readonly string[] | undefined;
213
196
  /** — pre-build the lexical index on open (eager-only). */
214
197
  warmIndexOnOpen?: boolean | undefined;
215
198
  /** — persist the lexical index as an opaque encrypted blob at `_ftindex/<name>`. */
@@ -513,53 +496,6 @@ export declare function matchTargetFieldNames(opts: {
513
496
  readonly declared: readonly string[];
514
497
  readonly virtual: readonly string[];
515
498
  };
516
- /**
517
- * Compile a collection's declared config into the ordered list of `NoydbVia`s
518
- * for its `ViaPipeline`.
519
- *
520
- * money then i18n then lookup then classified then blob then computed — order
521
- * pinned for pipeline parity with the hand-wired baseline this replaces: money
522
- * encode ran before the i18n write stages, and money decode ran before i18n
523
- * locale/dict-label resolution on read. Lookup compiles right after i18n
524
- * (#650 Task 2) — a separate binding for native lookup()/enumOf()/dict()
525
- * fields (`dictKeyFields`/`dictKey()`/`staticDict()` stay on the i18n
526
- * binding above, unchanged); its `present` hook only adds `<field>Label`,
527
- * same shape of read-time addition as i18n's own dict-label dressing, and
528
- * declares no write-pipeline hooks yet (Task 3 adds `ingest`/`enforceWrite`).
529
- * Classified compiles after those (#629 Task 6): its
530
- * `encodeAtRest`/`decodeAtRest` hooks make the pipeline's `hasAtRestHooks`
531
- * true, retiring the codec's inline `sensitiveFields` seal path
532
- * (record-codec.ts) for any collection that declares `classifiedFields` —
533
- * `classifiedGuardCtx` is the SAME `ClassifiedGuardCtx`
534
- * `resolveCollectionConfig` already built for door 1's
535
- * `guardClassifiedCompat` call, threaded in by its one caller below. Blob
536
- * compiles next (#629 Task 7) but its position is inert: the blob binding
537
- * declares NO write/read pipeline hooks (blob content is out-of-band
538
- * `BlobSet` side-collections — it must never flip `hasAtRestHooks`), only
539
- * `erase`/`describeFragment`. Computed compiles LAST (#638 Task 7) — its
540
- * `present` hook must run AFTER money's own `present` so a virtual field's
541
- * `deps` read the decoded (quantized) amount, not the raw stored form; at
542
- * present-time i18n/lookup's DRESSING now runs AFTER computed instead (#665
543
- * `_presentOrder`, `via/pipeline.ts` — compile order here is unchanged).
544
- * `via/graph-wiring.ts#applyTaintOverlay` appends the `taint`
545
- * binding after WHATEVER this function returns, so taint's present-time
546
- * redaction always runs after computed's regardless of this ordering.
547
- * {@link Collection._applyMoneyFields} PREPENDS money for the same reason
548
- * on its own (MV-precreation reconcile) path — see its docstring;
549
- * {@link Collection._applyClassifiedFields} APPENDS classified on that same
550
- * reconcile path (blobFields/computed have no late-attach reconcile door —
551
- * `viaFields`, like i18nFields/dictKeyFields, is construction-only).
552
- *
553
- * `eraseCfgOut` (#629 Task 10, optional out-param) — this function runs
554
- * before the owning `Collection` exists (`this.codec` isn't built yet), so
555
- * the classified binding's `classifySealedShred` closure can't be wired
556
- * here. When supplied, `eraseCfgOut.classified` is set to the SAME cfg
557
- * object instance handed to `viaBinder('classified')`, so a caller
558
- * (`resolveCollectionConfig`) can thread it out to the `Collection`
559
- * constructor, which mutates `classifySealedShred` in place once
560
- * `this.codec` exists. Additive — every existing caller omits it and keeps
561
- * getting a plain `NoydbVia[]`.
562
- */
563
499
  export declare function compileVias<T>(opts: CollectionOpts<T>, classifiedGuardCtx: ClassifiedGuardCtx, eraseCfgOut?: {
564
500
  classified?: ClassifiedViaConfig;
565
501
  }): NoydbVia[];
@@ -712,6 +648,7 @@ export declare function resolveCollectionConfig<T>(opts: CollectionOpts<T>): {
712
648
  } | undefined;
713
649
  i18nFields: Record<string, I18nTextDescriptor> | undefined;
714
650
  textIndexes: readonly string[] | undefined;
651
+ textIndexPositions: readonly string[] | undefined;
715
652
  embeddings: EmbeddingDescriptor | undefined;
716
653
  vectorSet: VectorSet | undefined;
717
654
  dictKeyFields: Record<string, StaticDictDescriptor<string> | DictKeyDescriptor<string>> | undefined;