@noy-db/hub 0.4.0-pre.6 → 0.4.0-pre.8

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 (460) hide show
  1. package/README.md +1 -2
  2. package/dist/api-3NKVNZPM.js +20 -0
  3. package/dist/attestation/index.js +18 -18
  4. package/dist/{backup-USYSNCYM.js → backup-PTSVXDDW.js} +13 -13
  5. package/dist/blobs/index.js +13 -13
  6. package/dist/blobs/index.js.map +1 -1
  7. package/dist/broker/index.js +12 -12
  8. package/dist/cargo/index.js +31 -29
  9. package/dist/{chunk-5WLDZZ6S.js → chunk-35NMVJ7I.js} +3 -3
  10. package/dist/{chunk-ZGEFBDPR.js → chunk-3HUYRN24.js} +3 -3
  11. package/dist/chunk-3HUYRN24.js.map +1 -0
  12. package/dist/{chunk-NA374QG7.js → chunk-3XKESW5E.js} +3 -3
  13. package/dist/{chunk-MUPZ6IZX.js → chunk-4JQK3L4V.js} +2 -2
  14. package/dist/{chunk-Z4D3YGAB.js → chunk-4ZKNC6A6.js} +2 -2
  15. package/dist/{chunk-ONB627HU.js → chunk-55LX6FSX.js} +2 -2
  16. package/dist/{chunk-M7W2KYTL.js → chunk-56IIVAEO.js} +2 -2
  17. package/dist/{chunk-FHHYCBBP.js → chunk-5DRROK5W.js} +2 -2
  18. package/dist/{chunk-GTNRMJYH.js → chunk-5GQEU4DN.js} +2 -2
  19. package/dist/{chunk-XSOGLHGY.js → chunk-6L3DKWRY.js} +6 -6
  20. package/dist/chunk-6LJY7X5A.js +18 -0
  21. package/dist/chunk-6LJY7X5A.js.map +1 -0
  22. package/dist/{chunk-44Y3P5U6.js → chunk-6M2I3DKF.js} +2 -2
  23. package/dist/{chunk-HDF5R2K6.js → chunk-6R6Q3MRN.js} +7 -7
  24. package/dist/{chunk-ZUDAK436.js → chunk-6UBZ6I5Z.js} +2 -2
  25. package/dist/{chunk-SEU6QHH4.js → chunk-6ZNSB3H6.js} +5 -17
  26. package/dist/chunk-6ZNSB3H6.js.map +1 -0
  27. package/dist/{chunk-7U6AB7DZ.js → chunk-AKKRXT23.js} +2 -2
  28. package/dist/{chunk-2PDBYF2O.js → chunk-AT2JJEKJ.js} +4 -4
  29. package/dist/chunk-AT2JJEKJ.js.map +1 -0
  30. package/dist/{chunk-OWLZONGX.js → chunk-BLBAQRBM.js} +2 -2
  31. package/dist/{chunk-XONZGK6J.js → chunk-BN4HRYAZ.js} +2 -2
  32. package/dist/{chunk-QVGEVZ5F.js → chunk-BQ6DHN4I.js} +3 -3
  33. package/dist/{chunk-ZHMUFYZF.js → chunk-BXHMZ2XW.js} +8 -8
  34. package/dist/{chunk-LG2GUYRX.js → chunk-BYFXLDVV.js} +9 -9
  35. package/dist/{chunk-M4GO4ZJK.js → chunk-C25JXSOR.js} +137 -11
  36. package/dist/chunk-C25JXSOR.js.map +1 -0
  37. package/dist/{chunk-3TZUC4WS.js → chunk-CCDP6EPB.js} +13 -355
  38. package/dist/chunk-CCDP6EPB.js.map +1 -0
  39. package/dist/{chunk-QRHEAZ2Q.js → chunk-CUZLNGD5.js} +1 -1
  40. package/dist/{chunk-HXVRRJBD.js → chunk-DGBIHDVK.js} +5 -5
  41. package/dist/chunk-DSDXAKIP.js +50 -0
  42. package/dist/chunk-DSDXAKIP.js.map +1 -0
  43. package/dist/{chunk-JGOKAZNB.js → chunk-DZAF24PG.js} +5 -5
  44. package/dist/{chunk-NIKO2BBZ.js → chunk-DZFQVICS.js} +2 -2
  45. package/dist/chunk-DZFQVICS.js.map +1 -0
  46. package/dist/chunk-E23UGFVC.js +63 -0
  47. package/dist/chunk-E23UGFVC.js.map +1 -0
  48. package/dist/{chunk-YGMREQAK.js → chunk-EBKCYQ2D.js} +14 -14
  49. package/dist/chunk-EBKCYQ2D.js.map +1 -0
  50. package/dist/chunk-EIPVYUEP.js +654 -0
  51. package/dist/chunk-EIPVYUEP.js.map +1 -0
  52. package/dist/{chunk-TMR64XPL.js → chunk-EZNTORXE.js} +2 -2
  53. package/dist/{chunk-WCJJQV2D.js → chunk-FMNU7IUG.js} +3 -3
  54. package/dist/{chunk-H5GMROCB.js → chunk-FO6RNKKW.js} +8 -46
  55. package/dist/chunk-FO6RNKKW.js.map +1 -0
  56. package/dist/{chunk-YMUGBZN2.js → chunk-FQ5CHJR7.js} +1 -1
  57. package/dist/chunk-FQ5CHJR7.js.map +1 -0
  58. package/dist/{chunk-MQBFT2OT.js → chunk-FRMW23UK.js} +7 -7
  59. package/dist/chunk-FRMW23UK.js.map +1 -0
  60. package/dist/chunk-GJW4HX2O.js +1 -0
  61. package/dist/{chunk-JTIPVW4J.js → chunk-GP3UWP22.js} +4 -4
  62. package/dist/{chunk-DOZFU7OZ.js → chunk-GZACYEOB.js} +1 -1
  63. package/dist/chunk-GZACYEOB.js.map +1 -0
  64. package/dist/{chunk-XG7OZDOS.js → chunk-HFUAFR6B.js} +6 -6
  65. package/dist/{chunk-LN3MQFUE.js → chunk-IF6WNGAK.js} +9 -6
  66. package/dist/chunk-IF6WNGAK.js.map +1 -0
  67. package/dist/{chunk-ZX5FNWH7.js → chunk-IG6KUWBX.js} +2 -2
  68. package/dist/chunk-IG6KUWBX.js.map +1 -0
  69. package/dist/{chunk-VDTWFN2P.js → chunk-IMRB2C4O.js} +3 -3
  70. package/dist/{chunk-2BVW754E.js → chunk-ISRKW4YN.js} +3 -3
  71. package/dist/{chunk-P4NUJVWL.js → chunk-IXNCZTWA.js} +2 -2
  72. package/dist/{chunk-ZHZ4PET5.js → chunk-JIDLU57U.js} +3 -3
  73. package/dist/{chunk-V2R2VWER.js → chunk-JTR75MKH.js} +12 -12
  74. package/dist/{chunk-V2R2VWER.js.map → chunk-JTR75MKH.js.map} +1 -1
  75. package/dist/{chunk-PTT2NB46.js → chunk-JYJFGD2H.js} +2 -2
  76. package/dist/{chunk-XY6MNSAF.js → chunk-JYV4JJV2.js} +5 -5
  77. package/dist/{chunk-AZXEOEQK.js → chunk-KFRPNHWR.js} +4 -4
  78. package/dist/chunk-KFRPNHWR.js.map +1 -0
  79. package/dist/{chunk-ZDFU34XY.js → chunk-KPXM4WO6.js} +58 -54
  80. package/dist/chunk-KPXM4WO6.js.map +1 -0
  81. package/dist/{chunk-HA7P3BTB.js → chunk-KRCBZYTZ.js} +4 -4
  82. package/dist/{chunk-VNJMLOQS.js → chunk-KW42W6SV.js} +6 -6
  83. package/dist/{chunk-GQT6J4FJ.js → chunk-L3YYLT4E.js} +2 -2
  84. package/dist/chunk-L3YYLT4E.js.map +1 -0
  85. package/dist/{chunk-3GXDB3NQ.js → chunk-MANUDU7I.js} +6 -6
  86. package/dist/{chunk-YJ3TREAC.js → chunk-MHMLXJ3I.js} +2 -2
  87. package/dist/chunk-MHMLXJ3I.js.map +1 -0
  88. package/dist/{chunk-D4LAJ737.js → chunk-MSMJJB4J.js} +2 -2
  89. package/dist/chunk-MSMJJB4J.js.map +1 -0
  90. package/dist/{chunk-VQNJ7UZL.js → chunk-MTJLOC3Y.js} +1 -1
  91. package/dist/chunk-MTJLOC3Y.js.map +1 -0
  92. package/dist/{chunk-RM5EXCFF.js → chunk-MXUT7FTE.js} +2 -2
  93. package/dist/chunk-MXUT7FTE.js.map +1 -0
  94. package/dist/{chunk-IUATR5UE.js → chunk-N5PLUFH2.js} +5 -5
  95. package/dist/{chunk-C2V7AJO2.js → chunk-NEX7JCMO.js} +4 -4
  96. package/dist/{chunk-5HSSTOOG.js → chunk-NFZGZ4AK.js} +2 -2
  97. package/dist/{chunk-5ABOFAHN.js → chunk-NJ4DYYO5.js} +2 -2
  98. package/dist/chunk-NJ4DYYO5.js.map +1 -0
  99. package/dist/{chunk-2ZSC454H.js → chunk-NQSO4UAH.js} +8 -8
  100. package/dist/chunk-NQSO4UAH.js.map +1 -0
  101. package/dist/{chunk-GHEMAVTN.js → chunk-NYEFP7DY.js} +4 -4
  102. package/dist/chunk-NYEFP7DY.js.map +1 -0
  103. package/dist/{chunk-32467U5J.js → chunk-OBPVWOSQ.js} +4 -4
  104. package/dist/{chunk-6SSWOUUS.js → chunk-OLIWCCFM.js} +2 -5
  105. package/dist/{chunk-UNREYBZO.js → chunk-OLSARBZU.js} +2 -2
  106. package/dist/{chunk-LC7DSMHR.js → chunk-PTHKZWEH.js} +2 -14
  107. package/dist/{chunk-LC7DSMHR.js.map → chunk-PTHKZWEH.js.map} +1 -1
  108. package/dist/chunk-QADFHRQM.js +367 -0
  109. package/dist/chunk-QADFHRQM.js.map +1 -0
  110. package/dist/{chunk-7LP7FFJ2.js → chunk-QD46HPZG.js} +2 -2
  111. package/dist/{chunk-G4MFQXYX.js → chunk-QJNCB5SK.js} +2 -2
  112. package/dist/{chunk-6SYOHUHM.js → chunk-QZWTRENR.js} +2 -2
  113. package/dist/chunk-QZWTRENR.js.map +1 -0
  114. package/dist/{chunk-TSNRZSRC.js → chunk-RO5NM6UI.js} +2 -2
  115. package/dist/chunk-RO5NM6UI.js.map +1 -0
  116. package/dist/{chunk-MMVQ3SUO.js → chunk-RZPOZPZU.js} +8 -8
  117. package/dist/chunk-SGDPRCC4.js +1075 -0
  118. package/dist/chunk-SGDPRCC4.js.map +1 -0
  119. package/dist/{chunk-E7FSBI6I.js → chunk-SGQ4N5FS.js} +5 -5
  120. package/dist/{chunk-522MBPE5.js → chunk-SHEEBRZ4.js} +2 -2
  121. package/dist/{chunk-EPME33Y4.js → chunk-SHYIA73K.js} +6 -6
  122. package/dist/chunk-SKM35Y4Q.js +77 -0
  123. package/dist/chunk-SKM35Y4Q.js.map +1 -0
  124. package/dist/{chunk-MLCTPWSO.js → chunk-TE6LH6J2.js} +5 -5
  125. package/dist/chunk-TG634KCO.js +63 -0
  126. package/dist/chunk-TG634KCO.js.map +1 -0
  127. package/dist/{chunk-QVIZDLAR.js → chunk-TIVK6PRK.js} +9 -10
  128. package/dist/chunk-TIVK6PRK.js.map +1 -0
  129. package/dist/{chunk-EWPS35AR.js → chunk-TWS3S62A.js} +185 -333
  130. package/dist/chunk-TWS3S62A.js.map +1 -0
  131. package/dist/{chunk-JOCMXSR2.js → chunk-UADPR6F4.js} +3 -3
  132. package/dist/{chunk-SBOHNJUD.js → chunk-V6UQZA2H.js} +2 -2
  133. package/dist/chunk-VG2ZSFYD.js +32 -0
  134. package/dist/chunk-VG2ZSFYD.js.map +1 -0
  135. package/dist/{chunk-KCZAFDP5.js → chunk-VH6SOCXH.js} +2 -2
  136. package/dist/{chunk-4B3DL75F.js → chunk-W3G5REIU.js} +2 -2
  137. package/dist/{chunk-EGU4PWQW.js → chunk-W66AM5IB.js} +2 -2
  138. package/dist/chunk-W66AM5IB.js.map +1 -0
  139. package/dist/{chunk-MPPWL64H.js → chunk-WBKZUO5V.js} +3 -3
  140. package/dist/{chunk-WWBC4KLB.js → chunk-WO4T4OD5.js} +2 -2
  141. package/dist/{chunk-7IQWHYL2.js → chunk-WZ3NCMK6.js} +6 -5
  142. package/dist/{chunk-BAAUFCJK.js → chunk-X4MVWPHV.js} +3 -3
  143. package/dist/{chunk-HVPW6PCX.js → chunk-XIDQKFZF.js} +3 -3
  144. package/dist/chunk-Y2NBBT6K.js +18 -0
  145. package/dist/chunk-Y2NBBT6K.js.map +1 -0
  146. package/dist/{chunk-OWOT7CFC.js → chunk-Y6B6HVKC.js} +2 -2
  147. package/dist/{chunk-ICYC5YNI.js → chunk-Y6VZQGGH.js} +6 -6
  148. package/dist/{chunk-ZM72UO3Y.js → chunk-ZFUFAHZ3.js} +4 -4
  149. package/dist/{chunk-PWWWMRT7.js → chunk-ZTLOXFPB.js} +2 -2
  150. package/dist/chunk-ZTLOXFPB.js.map +1 -0
  151. package/dist/{walk-JXMWKKQW.js → chunk-ZWBKDKXC.js} +4 -13
  152. package/dist/{walk-JXMWKKQW.js.map → chunk-ZWBKDKXC.js.map} +1 -1
  153. package/dist/classified/index.js +5 -5
  154. package/dist/{classified-marker-SVDRXLD3.js → classified-marker-EOOSMWFC.js} +3 -3
  155. package/dist/collection-facade-TTRF5NFJ.js +45 -0
  156. package/dist/{computed-33DRJDOC.js → computed-AB45PS4V.js} +3 -3
  157. package/dist/consent/index.js +9 -9
  158. package/dist/{cover-ADBCTIKN.js → cover/index.js} +7 -6
  159. package/dist/custody/index.js +26 -0
  160. package/dist/{dead-filter-HKDMTMVY.js → dead-filter-6DYY7S64.js} +2 -2
  161. package/dist/{chunk-ZF572E2M.js → delegation-ONOZVPIP.js} +12 -6
  162. package/dist/{chunk-ZF572E2M.js.map → delegation-ONOZVPIP.js.map} +1 -1
  163. package/dist/derivations/index.js +12 -12
  164. package/dist/derive-IGGVSUPH.js +22 -0
  165. package/dist/directory/index.js +46 -0
  166. package/dist/{dispatch-SPMYNXNW.js → dispatch-7T45NN7C.js} +18 -18
  167. package/dist/{dispatch-V5MSMQYX.js → dispatch-RPTLK7LJ.js} +5 -5
  168. package/dist/{enclave-ZA7C3H2L.js → enclave-CLJVSDFG.js} +9 -9
  169. package/dist/executor-IEBLTBCW.js +9 -0
  170. package/dist/executor-RM7XWQDU.js +9 -0
  171. package/dist/executor-XZYM4KHT.js +28 -0
  172. package/dist/export-accessible-24XCCD3A.js +23 -0
  173. package/dist/extract-partition-H2TPEEOF.js +38 -0
  174. package/dist/{fanout-sidecar-HRMHC34B.js → fanout-sidecar-TV7CXAJ6.js} +9 -9
  175. package/dist/find-OZMTRIK3.js +11 -0
  176. package/dist/forget/index.js +11 -11
  177. package/dist/forget/index.js.map +1 -1
  178. package/dist/guards/index.js +4 -4
  179. package/dist/history/index.js +12 -12
  180. package/dist/i18n/index.js +14 -14
  181. package/dist/index.d.ts +16 -19
  182. package/dist/index.js +208 -1961
  183. package/dist/index.js.map +1 -1
  184. package/dist/indexing/index.js +2 -2
  185. package/dist/indexing/index.js.map +1 -1
  186. package/dist/introspection/index.js +28 -0
  187. package/dist/issue-55HJE7JF.js +19 -0
  188. package/dist/kernel/collection-config.d.ts +1 -1
  189. package/dist/kernel/collection.d.ts +2 -2
  190. package/dist/kernel/errors.d.ts +2 -2
  191. package/dist/kernel/noydb.d.ts +1 -1
  192. package/dist/kernel/sync-policy.d.ts +1 -1
  193. package/dist/kernel/types.d.ts +20 -20
  194. package/dist/kernel/vault.d.ts +10 -10
  195. package/dist/{ledger-K6JBFL3Z.js → ledger-XY6NP3J2.js} +11 -11
  196. package/dist/liberate-LXOJ2EMB.js +24 -0
  197. package/dist/{link-set-XVZY2ODC.js → link-set-POQB7BU5.js} +11 -11
  198. package/dist/materialized-views/index.js +19 -19
  199. package/dist/money/index.js +31 -0
  200. package/dist/noydb-FHZ4ZDBP.js +82 -0
  201. package/dist/overlay-views/index.js +4 -4
  202. package/dist/periods/index.js +13 -13
  203. package/dist/pod/index.js +11 -11
  204. package/dist/{policy-QWGJB7P7.js → policy/index.js} +6 -6
  205. package/dist/port/with/blob-strategy.d.ts +15 -5
  206. package/dist/port/with/strategies.d.ts +9 -9
  207. package/dist/portability/index.js +8 -8
  208. package/dist/{post-register-5VHHVFJY.js → post-register-URQANI3B.js} +6 -6
  209. package/dist/query/index.js +3 -3
  210. package/dist/reduce/index.js +4 -4
  211. package/dist/register-5W6CG4RM.js +25 -0
  212. package/dist/registry-7Y5WF7GS.js +9 -0
  213. package/dist/{registry-VW6P6A3J.js → registry-BWD2ED52.js} +2 -2
  214. package/dist/registry-MCSGBZXI.js +18 -0
  215. package/dist/registry-UJFP3NWF.js +19 -0
  216. package/dist/request-withdrawal-IWYDM4SO.js +31 -0
  217. package/dist/{reveal-7OOT5XPD.js → reveal-BXZGWIOP.js} +6 -6
  218. package/dist/revoke-TINYPHYY.js +24 -0
  219. package/dist/satellites/index.js +1 -1
  220. package/dist/schema-update/index.js +26 -0
  221. package/dist/schema-update/index.js.map +1 -0
  222. package/dist/sealed-record/index.js +12 -12
  223. package/dist/search/index.js +36 -0
  224. package/dist/search/index.js.map +1 -0
  225. package/dist/{seed-GVOI6QP6.js → seed-F7YYQTRC.js} +11 -11
  226. package/dist/sequence/index.js +30 -0
  227. package/dist/sequence/index.js.map +1 -0
  228. package/dist/session/index.js +9 -9
  229. package/dist/shadow/index.js +2 -2
  230. package/dist/signer-WMZKCNKC.js +25 -0
  231. package/dist/signer-WMZKCNKC.js.map +1 -0
  232. package/dist/snapshots/index.js +11 -11
  233. package/dist/snapshots/index.js.map +1 -1
  234. package/dist/{stale-BJO2WIN7.js → stale-JOE7GBAE.js} +10 -10
  235. package/dist/stale-JOE7GBAE.js.map +1 -0
  236. package/dist/storage-B3WBKXKT.js +23 -0
  237. package/dist/storage-B3WBKXKT.js.map +1 -0
  238. package/dist/store/index.js +22 -0
  239. package/dist/store/index.js.map +1 -0
  240. package/dist/{store-coordination-provider-DX5HECK3.js → store-coordination-provider-5LX2UFU2.js} +3 -3
  241. package/dist/sync/index.js +11 -11
  242. package/dist/team/index.js +29 -20
  243. package/dist/tiers/index.js +10 -10
  244. package/dist/to/index.js +1 -1
  245. package/dist/{tx → transactions}/index.js +3 -3
  246. package/dist/{tx → transactions}/index.js.map +1 -1
  247. package/dist/util/index.js +1 -1
  248. package/dist/{verify-5X37OXRY.js → verify-7XWHJWUN.js} +5 -5
  249. package/dist/via/blob/active.d.ts +7 -18
  250. package/dist/via/blob/binding.d.ts +1 -1
  251. package/dist/via/blob/index.d.ts +2 -2
  252. package/dist/walk-6OHAWGBS.js +21 -0
  253. package/dist/walk-6OHAWGBS.js.map +1 -0
  254. package/dist/with-audit/forget/active.d.ts +3 -3
  255. package/dist/with-audit/forget/index.d.ts +4 -4
  256. package/dist/with-audit/forget/strategy.d.ts +3 -3
  257. package/dist/with-audit/guards/executor.d.ts +4 -4
  258. package/dist/with-audit/guards/immutable-guard.d.ts +3 -3
  259. package/dist/with-audit/guards/index.d.ts +1 -1
  260. package/dist/with-audit/guards/registry.d.ts +3 -3
  261. package/dist/with-audit/guards/transition-guard.d.ts +3 -3
  262. package/dist/with-audit/guards/types.d.ts +10 -10
  263. package/dist/with-audit/guards/with-guard.d.ts +2 -2
  264. package/dist/with-commit/numbering/descriptor.d.ts +16 -6
  265. package/dist/with-commit/tx/active.d.ts +5 -5
  266. package/dist/with-commit/tx/index.d.ts +2 -2
  267. package/dist/with-commit/tx/invariants.d.ts +1 -1
  268. package/dist/with-commit/tx/strategy.d.ts +3 -3
  269. package/dist/with-fork/snapshots/active.d.ts +2 -2
  270. package/dist/with-fork/snapshots/index.d.ts +1 -1
  271. package/dist/with-fork/snapshots/noydb-facade.d.ts +3 -3
  272. package/dist/with-fork/snapshots/strategy.d.ts +2 -2
  273. package/dist/with-formula/derivations/executor.d.ts +2 -2
  274. package/dist/with-formula/derivations/index.d.ts +2 -1
  275. package/dist/with-formula/derivations/registry.d.ts +3 -3
  276. package/dist/with-formula/derivations/stale.d.ts +2 -2
  277. package/dist/with-formula/derivations/types.d.ts +3 -3
  278. package/dist/with-formula/derivations/with-derivation.d.ts +2 -2
  279. package/dist/with-formula/derivations/with-rollup.d.ts +15 -8
  280. package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +3 -3
  281. package/dist/with-formula/materialized-views/index.d.ts +1 -1
  282. package/dist/with-formula/materialized-views/registry.d.ts +4 -4
  283. package/dist/with-formula/materialized-views/types.d.ts +4 -4
  284. package/dist/with-formula/materialized-views/with-materialized-view.d.ts +2 -2
  285. package/dist/with-formula/overlay-views/index.d.ts +1 -1
  286. package/dist/with-formula/overlay-views/registry.d.ts +4 -4
  287. package/dist/with-formula/overlay-views/types.d.ts +3 -3
  288. package/dist/with-formula/overlay-views/virtual-collection.d.ts +2 -2
  289. package/dist/with-formula/overlay-views/with-overlayed-view.d.ts +2 -2
  290. package/dist/with-lookup/indexing/active.d.ts +5 -5
  291. package/dist/with-lookup/indexing/index.d.ts +1 -1
  292. package/dist/with-lookup/indexing/strategy.d.ts +3 -3
  293. package/dist/with-lookup/search/build-docs.d.ts +7 -2
  294. package/dist/with-lookup/search/index.d.ts +1 -1
  295. package/dist/with-party/directory/cover/index.d.ts +1 -0
  296. package/dist/with-party/directory/index.d.ts +2 -0
  297. package/dist/with-party/team/index.d.ts +2 -0
  298. package/dist/with-party/team/keyring.d.ts +49 -20
  299. package/dist/with-party/team/noydb-facade.d.ts +2 -2
  300. package/dist/with-shape/blobs/blob-set.d.ts +1 -1
  301. package/dist/with-shape/introspection/index.d.ts +6 -0
  302. package/dist/with-shape/schema-update/index.d.ts +1 -0
  303. package/dist/with-store/index.d.ts +3 -2
  304. package/dist/with-store/route-store.d.ts +1 -1
  305. package/dist/withdraw-accessible-DEUCOO4F.js +28 -0
  306. package/dist/withdraw-accessible-DEUCOO4F.js.map +1 -0
  307. package/package.json +45 -5
  308. package/dist/api-5QVQX4HG.js +0 -20
  309. package/dist/chunk-2PDBYF2O.js.map +0 -1
  310. package/dist/chunk-2ZSC454H.js.map +0 -1
  311. package/dist/chunk-3S2YNMUS.js +0 -134
  312. package/dist/chunk-3S2YNMUS.js.map +0 -1
  313. package/dist/chunk-3TZUC4WS.js.map +0 -1
  314. package/dist/chunk-5ABOFAHN.js.map +0 -1
  315. package/dist/chunk-6SYOHUHM.js.map +0 -1
  316. package/dist/chunk-AZXEOEQK.js.map +0 -1
  317. package/dist/chunk-D4LAJ737.js.map +0 -1
  318. package/dist/chunk-DOZFU7OZ.js.map +0 -1
  319. package/dist/chunk-EGU4PWQW.js.map +0 -1
  320. package/dist/chunk-EWPS35AR.js.map +0 -1
  321. package/dist/chunk-GHEMAVTN.js.map +0 -1
  322. package/dist/chunk-GQT6J4FJ.js.map +0 -1
  323. package/dist/chunk-H5GMROCB.js.map +0 -1
  324. package/dist/chunk-LN3MQFUE.js.map +0 -1
  325. package/dist/chunk-M4GO4ZJK.js.map +0 -1
  326. package/dist/chunk-MQBFT2OT.js.map +0 -1
  327. package/dist/chunk-NIKO2BBZ.js.map +0 -1
  328. package/dist/chunk-PWWWMRT7.js.map +0 -1
  329. package/dist/chunk-QVIZDLAR.js.map +0 -1
  330. package/dist/chunk-RM5EXCFF.js.map +0 -1
  331. package/dist/chunk-SEU6QHH4.js.map +0 -1
  332. package/dist/chunk-TSNRZSRC.js.map +0 -1
  333. package/dist/chunk-VQNJ7UZL.js.map +0 -1
  334. package/dist/chunk-YGMREQAK.js.map +0 -1
  335. package/dist/chunk-YJ3TREAC.js.map +0 -1
  336. package/dist/chunk-YMUGBZN2.js.map +0 -1
  337. package/dist/chunk-ZDFU34XY.js.map +0 -1
  338. package/dist/chunk-ZGEFBDPR.js.map +0 -1
  339. package/dist/chunk-ZX5FNWH7.js.map +0 -1
  340. package/dist/collection-facade-S5PPKZD5.js +0 -44
  341. package/dist/delegation-EV7LKJPH.js +0 -25
  342. package/dist/derive-5LDJW76F.js +0 -21
  343. package/dist/executor-FCJEH3FU.js +0 -9
  344. package/dist/executor-OHET7TF7.js +0 -9
  345. package/dist/executor-SVHAJZ4A.js +0 -28
  346. package/dist/export-accessible-S35YKIBL.js +0 -23
  347. package/dist/extract-partition-UVHAM5WZ.js +0 -38
  348. package/dist/find-LEBUXVL7.js +0 -11
  349. package/dist/issue-5X3SMCF4.js +0 -19
  350. package/dist/liberate-NHTCKBU4.js +0 -24
  351. package/dist/noydb-TI3RFU6M.js +0 -78
  352. package/dist/register-CEX7R7NE.js +0 -23
  353. package/dist/registry-7CZWF3EQ.js +0 -9
  354. package/dist/registry-DIKMRXUC.js +0 -19
  355. package/dist/registry-EWIB5NTI.js +0 -18
  356. package/dist/request-withdrawal-AAG57QO4.js +0 -31
  357. package/dist/revoke-U5LCIJMF.js +0 -24
  358. package/dist/signer-NAA2OX7H.js +0 -25
  359. package/dist/storage-FL7XXZTN.js +0 -23
  360. package/dist/withdraw-accessible-GO6KQJVM.js +0 -28
  361. /package/dist/{api-5QVQX4HG.js.map → api-3NKVNZPM.js.map} +0 -0
  362. /package/dist/{backup-USYSNCYM.js.map → backup-PTSVXDDW.js.map} +0 -0
  363. /package/dist/{chunk-5WLDZZ6S.js.map → chunk-35NMVJ7I.js.map} +0 -0
  364. /package/dist/{chunk-NA374QG7.js.map → chunk-3XKESW5E.js.map} +0 -0
  365. /package/dist/{chunk-MUPZ6IZX.js.map → chunk-4JQK3L4V.js.map} +0 -0
  366. /package/dist/{chunk-Z4D3YGAB.js.map → chunk-4ZKNC6A6.js.map} +0 -0
  367. /package/dist/{chunk-ONB627HU.js.map → chunk-55LX6FSX.js.map} +0 -0
  368. /package/dist/{chunk-M7W2KYTL.js.map → chunk-56IIVAEO.js.map} +0 -0
  369. /package/dist/{chunk-FHHYCBBP.js.map → chunk-5DRROK5W.js.map} +0 -0
  370. /package/dist/{chunk-GTNRMJYH.js.map → chunk-5GQEU4DN.js.map} +0 -0
  371. /package/dist/{chunk-XSOGLHGY.js.map → chunk-6L3DKWRY.js.map} +0 -0
  372. /package/dist/{chunk-44Y3P5U6.js.map → chunk-6M2I3DKF.js.map} +0 -0
  373. /package/dist/{chunk-HDF5R2K6.js.map → chunk-6R6Q3MRN.js.map} +0 -0
  374. /package/dist/{chunk-ZUDAK436.js.map → chunk-6UBZ6I5Z.js.map} +0 -0
  375. /package/dist/{chunk-7U6AB7DZ.js.map → chunk-AKKRXT23.js.map} +0 -0
  376. /package/dist/{chunk-OWLZONGX.js.map → chunk-BLBAQRBM.js.map} +0 -0
  377. /package/dist/{chunk-XONZGK6J.js.map → chunk-BN4HRYAZ.js.map} +0 -0
  378. /package/dist/{chunk-QVGEVZ5F.js.map → chunk-BQ6DHN4I.js.map} +0 -0
  379. /package/dist/{chunk-ZHMUFYZF.js.map → chunk-BXHMZ2XW.js.map} +0 -0
  380. /package/dist/{chunk-LG2GUYRX.js.map → chunk-BYFXLDVV.js.map} +0 -0
  381. /package/dist/{chunk-QRHEAZ2Q.js.map → chunk-CUZLNGD5.js.map} +0 -0
  382. /package/dist/{chunk-HXVRRJBD.js.map → chunk-DGBIHDVK.js.map} +0 -0
  383. /package/dist/{chunk-JGOKAZNB.js.map → chunk-DZAF24PG.js.map} +0 -0
  384. /package/dist/{chunk-TMR64XPL.js.map → chunk-EZNTORXE.js.map} +0 -0
  385. /package/dist/{chunk-WCJJQV2D.js.map → chunk-FMNU7IUG.js.map} +0 -0
  386. /package/dist/{collection-facade-S5PPKZD5.js.map → chunk-GJW4HX2O.js.map} +0 -0
  387. /package/dist/{chunk-JTIPVW4J.js.map → chunk-GP3UWP22.js.map} +0 -0
  388. /package/dist/{chunk-XG7OZDOS.js.map → chunk-HFUAFR6B.js.map} +0 -0
  389. /package/dist/{chunk-VDTWFN2P.js.map → chunk-IMRB2C4O.js.map} +0 -0
  390. /package/dist/{chunk-2BVW754E.js.map → chunk-ISRKW4YN.js.map} +0 -0
  391. /package/dist/{chunk-P4NUJVWL.js.map → chunk-IXNCZTWA.js.map} +0 -0
  392. /package/dist/{chunk-ZHZ4PET5.js.map → chunk-JIDLU57U.js.map} +0 -0
  393. /package/dist/{chunk-PTT2NB46.js.map → chunk-JYJFGD2H.js.map} +0 -0
  394. /package/dist/{chunk-XY6MNSAF.js.map → chunk-JYV4JJV2.js.map} +0 -0
  395. /package/dist/{chunk-HA7P3BTB.js.map → chunk-KRCBZYTZ.js.map} +0 -0
  396. /package/dist/{chunk-VNJMLOQS.js.map → chunk-KW42W6SV.js.map} +0 -0
  397. /package/dist/{chunk-3GXDB3NQ.js.map → chunk-MANUDU7I.js.map} +0 -0
  398. /package/dist/{chunk-IUATR5UE.js.map → chunk-N5PLUFH2.js.map} +0 -0
  399. /package/dist/{chunk-C2V7AJO2.js.map → chunk-NEX7JCMO.js.map} +0 -0
  400. /package/dist/{chunk-5HSSTOOG.js.map → chunk-NFZGZ4AK.js.map} +0 -0
  401. /package/dist/{chunk-32467U5J.js.map → chunk-OBPVWOSQ.js.map} +0 -0
  402. /package/dist/{chunk-6SSWOUUS.js.map → chunk-OLIWCCFM.js.map} +0 -0
  403. /package/dist/{chunk-UNREYBZO.js.map → chunk-OLSARBZU.js.map} +0 -0
  404. /package/dist/{chunk-7LP7FFJ2.js.map → chunk-QD46HPZG.js.map} +0 -0
  405. /package/dist/{chunk-G4MFQXYX.js.map → chunk-QJNCB5SK.js.map} +0 -0
  406. /package/dist/{chunk-MMVQ3SUO.js.map → chunk-RZPOZPZU.js.map} +0 -0
  407. /package/dist/{chunk-E7FSBI6I.js.map → chunk-SGQ4N5FS.js.map} +0 -0
  408. /package/dist/{chunk-522MBPE5.js.map → chunk-SHEEBRZ4.js.map} +0 -0
  409. /package/dist/{chunk-EPME33Y4.js.map → chunk-SHYIA73K.js.map} +0 -0
  410. /package/dist/{chunk-MLCTPWSO.js.map → chunk-TE6LH6J2.js.map} +0 -0
  411. /package/dist/{chunk-JOCMXSR2.js.map → chunk-UADPR6F4.js.map} +0 -0
  412. /package/dist/{chunk-SBOHNJUD.js.map → chunk-V6UQZA2H.js.map} +0 -0
  413. /package/dist/{chunk-KCZAFDP5.js.map → chunk-VH6SOCXH.js.map} +0 -0
  414. /package/dist/{chunk-4B3DL75F.js.map → chunk-W3G5REIU.js.map} +0 -0
  415. /package/dist/{chunk-MPPWL64H.js.map → chunk-WBKZUO5V.js.map} +0 -0
  416. /package/dist/{chunk-WWBC4KLB.js.map → chunk-WO4T4OD5.js.map} +0 -0
  417. /package/dist/{chunk-7IQWHYL2.js.map → chunk-WZ3NCMK6.js.map} +0 -0
  418. /package/dist/{chunk-BAAUFCJK.js.map → chunk-X4MVWPHV.js.map} +0 -0
  419. /package/dist/{chunk-HVPW6PCX.js.map → chunk-XIDQKFZF.js.map} +0 -0
  420. /package/dist/{chunk-OWOT7CFC.js.map → chunk-Y6B6HVKC.js.map} +0 -0
  421. /package/dist/{chunk-ICYC5YNI.js.map → chunk-Y6VZQGGH.js.map} +0 -0
  422. /package/dist/{chunk-ZM72UO3Y.js.map → chunk-ZFUFAHZ3.js.map} +0 -0
  423. /package/dist/{classified-marker-SVDRXLD3.js.map → classified-marker-EOOSMWFC.js.map} +0 -0
  424. /package/dist/{computed-33DRJDOC.js.map → collection-facade-TTRF5NFJ.js.map} +0 -0
  425. /package/dist/{cover-ADBCTIKN.js.map → computed-AB45PS4V.js.map} +0 -0
  426. /package/dist/{delegation-EV7LKJPH.js.map → cover/index.js.map} +0 -0
  427. /package/dist/{derive-5LDJW76F.js.map → custody/index.js.map} +0 -0
  428. /package/dist/{dead-filter-HKDMTMVY.js.map → dead-filter-6DYY7S64.js.map} +0 -0
  429. /package/dist/{enclave-ZA7C3H2L.js.map → derive-IGGVSUPH.js.map} +0 -0
  430. /package/dist/{executor-FCJEH3FU.js.map → directory/index.js.map} +0 -0
  431. /package/dist/{dispatch-SPMYNXNW.js.map → dispatch-7T45NN7C.js.map} +0 -0
  432. /package/dist/{dispatch-V5MSMQYX.js.map → dispatch-RPTLK7LJ.js.map} +0 -0
  433. /package/dist/{executor-OHET7TF7.js.map → enclave-CLJVSDFG.js.map} +0 -0
  434. /package/dist/{executor-SVHAJZ4A.js.map → executor-IEBLTBCW.js.map} +0 -0
  435. /package/dist/{export-accessible-S35YKIBL.js.map → executor-RM7XWQDU.js.map} +0 -0
  436. /package/dist/{extract-partition-UVHAM5WZ.js.map → executor-XZYM4KHT.js.map} +0 -0
  437. /package/dist/{find-LEBUXVL7.js.map → export-accessible-24XCCD3A.js.map} +0 -0
  438. /package/dist/{issue-5X3SMCF4.js.map → extract-partition-H2TPEEOF.js.map} +0 -0
  439. /package/dist/{fanout-sidecar-HRMHC34B.js.map → fanout-sidecar-TV7CXAJ6.js.map} +0 -0
  440. /package/dist/{ledger-K6JBFL3Z.js.map → find-OZMTRIK3.js.map} +0 -0
  441. /package/dist/{liberate-NHTCKBU4.js.map → introspection/index.js.map} +0 -0
  442. /package/dist/{link-set-XVZY2ODC.js.map → issue-55HJE7JF.js.map} +0 -0
  443. /package/dist/{noydb-TI3RFU6M.js.map → ledger-XY6NP3J2.js.map} +0 -0
  444. /package/dist/{policy-QWGJB7P7.js.map → liberate-LXOJ2EMB.js.map} +0 -0
  445. /package/dist/{register-CEX7R7NE.js.map → link-set-POQB7BU5.js.map} +0 -0
  446. /package/dist/{registry-7CZWF3EQ.js.map → money/index.js.map} +0 -0
  447. /package/dist/{registry-DIKMRXUC.js.map → noydb-FHZ4ZDBP.js.map} +0 -0
  448. /package/dist/{registry-EWIB5NTI.js.map → policy/index.js.map} +0 -0
  449. /package/dist/{post-register-5VHHVFJY.js.map → post-register-URQANI3B.js.map} +0 -0
  450. /package/dist/{registry-VW6P6A3J.js.map → register-5W6CG4RM.js.map} +0 -0
  451. /package/dist/{request-withdrawal-AAG57QO4.js.map → registry-7Y5WF7GS.js.map} +0 -0
  452. /package/dist/{revoke-U5LCIJMF.js.map → registry-BWD2ED52.js.map} +0 -0
  453. /package/dist/{signer-NAA2OX7H.js.map → registry-MCSGBZXI.js.map} +0 -0
  454. /package/dist/{stale-BJO2WIN7.js.map → registry-UJFP3NWF.js.map} +0 -0
  455. /package/dist/{storage-FL7XXZTN.js.map → request-withdrawal-IWYDM4SO.js.map} +0 -0
  456. /package/dist/{reveal-7OOT5XPD.js.map → reveal-BXZGWIOP.js.map} +0 -0
  457. /package/dist/{withdraw-accessible-GO6KQJVM.js.map → revoke-TINYPHYY.js.map} +0 -0
  458. /package/dist/{seed-GVOI6QP6.js.map → seed-F7YYQTRC.js.map} +0 -0
  459. /package/dist/{store-coordination-provider-DX5HECK3.js.map → store-coordination-provider-5LX2UFU2.js.map} +0 -0
  460. /package/dist/{verify-5X37OXRY.js.map → verify-7XWHJWUN.js.map} +0 -0
package/dist/index.js CHANGED
@@ -1,14 +1,3 @@
1
- import {
2
- UserApi
3
- } from "./chunk-NA374QG7.js";
4
- import {
5
- DEFAULT_FRESHNESS_MS,
6
- PERSONAL_POLICY,
7
- STRICT_POLICY,
8
- checkGate,
9
- describeGate,
10
- mergePolicy
11
- } from "./chunk-WCJJQV2D.js";
12
1
  import {
13
2
  Collection,
14
3
  ELEVATION_AUDIT_COLLECTION,
@@ -20,10 +9,6 @@ import {
20
9
  RefScopeError,
21
10
  Vault,
22
11
  createNoydb,
23
- describeAllUsersAuth,
24
- describeAuthConfig,
25
- describeUserAuth,
26
- diagramAuthConfig,
27
12
  isRefArray,
28
13
  isViaFieldSpec,
29
14
  memoryStore,
@@ -31,189 +16,222 @@ import {
31
16
  refArray,
32
17
  via,
33
18
  withArchive
34
- } from "./chunk-EWPS35AR.js";
35
- import {
36
- NO_SEQUENCE,
37
- SequenceStore,
38
- compileSequenceFormat,
39
- resolveSequenceKey,
40
- withSequence
41
- } from "./chunk-YGMREQAK.js";
42
- import {
43
- META_COLLECTION,
44
- POLICY_RECORD_ID,
45
- loadVaultPolicy,
46
- saveVaultPolicy
47
- } from "./chunk-M7W2KYTL.js";
48
- import {
49
- DELEGATIONS_COLLECTION,
50
- issueDelegation,
51
- loadActiveDelegations,
52
- revokeDelegation
53
- } from "./chunk-ZF572E2M.js";
54
- import "./chunk-VYYM3MEN.js";
55
- import {
56
- COVER_FIELDS,
57
- DEFAULT_COVER_SCHEMA,
58
- resolveSchema
59
- } from "./chunk-QRHEAZ2Q.js";
60
- import "./chunk-5ABOFAHN.js";
19
+ } from "./chunk-TWS3S62A.js";
20
+ import "./chunk-NJ4DYYO5.js";
61
21
  import {
62
22
  persistSchemaIfNeeded
63
- } from "./chunk-H5GMROCB.js";
23
+ } from "./chunk-FO6RNKKW.js";
64
24
  import {
65
25
  LinkEndpointError
66
- } from "./chunk-XG7OZDOS.js";
26
+ } from "./chunk-HFUAFR6B.js";
67
27
  import {
68
28
  LinkIntegrityError,
69
29
  isLinkCollectionName
70
- } from "./chunk-MUPZ6IZX.js";
71
- import "./chunk-522MBPE5.js";
30
+ } from "./chunk-4JQK3L4V.js";
31
+ import "./chunk-SHEEBRZ4.js";
72
32
  import {
73
33
  ComputedFieldError,
74
34
  evalComputedFields
75
- } from "./chunk-FHHYCBBP.js";
35
+ } from "./chunk-5DRROK5W.js";
76
36
  import {
77
37
  WithdrawalRequestError,
78
38
  approveWithdrawal,
79
39
  listWithdrawalRequests,
80
40
  rejectWithdrawal,
81
41
  requestWithdrawal
82
- } from "./chunk-XY6MNSAF.js";
83
- import "./chunk-44Y3P5U6.js";
42
+ } from "./chunk-JYV4JJV2.js";
43
+ import "./chunk-6M2I3DKF.js";
44
+ import "./chunk-CCDP6EPB.js";
84
45
  import {
85
- NO_SEARCH,
86
- tokenize,
87
- withSearch
88
- } from "./chunk-3TZUC4WS.js";
46
+ COVER_FIELDS,
47
+ DEFAULT_COVER_SCHEMA,
48
+ resolveSchema
49
+ } from "./chunk-CUZLNGD5.js";
89
50
  import {
90
- derivePersistedSchema,
91
- isZodSchema
92
- } from "./chunk-SEU6QHH4.js";
51
+ additiveOnly,
52
+ blindUpdate,
53
+ coordinatedCutover,
54
+ lockSchema
55
+ } from "./chunk-E23UGFVC.js";
56
+ import "./chunk-6LJY7X5A.js";
57
+ import "./chunk-DSDXAKIP.js";
58
+ import {
59
+ DEFAULT_FRESHNESS_MS,
60
+ PERSONAL_POLICY,
61
+ STRICT_POLICY,
62
+ checkGate,
63
+ describeGate,
64
+ mergePolicy
65
+ } from "./chunk-FMNU7IUG.js";
66
+ import "./chunk-GJW4HX2O.js";
67
+ import {
68
+ UserApi
69
+ } from "./chunk-3XKESW5E.js";
70
+ import "./chunk-GYGLAVCX.js";
71
+ import "./chunk-6R6Q3MRN.js";
72
+ import "./chunk-BLBAQRBM.js";
93
73
  import {
94
74
  decryptExtractedPartition,
95
75
  diffVault,
96
76
  withCargo
97
- } from "./chunk-V2R2VWER.js";
77
+ } from "./chunk-JTR75MKH.js";
98
78
  import {
99
- CustodyApi,
100
- NO_CARGO,
101
- NO_CUSTODY,
102
- withCustody
103
- } from "./chunk-3S2YNMUS.js";
104
- import "./chunk-LG2GUYRX.js";
79
+ NO_CARGO
80
+ } from "./chunk-TG634KCO.js";
81
+ import "./chunk-BYFXLDVV.js";
105
82
  import {
106
- DEED_RECORD_ID,
107
83
  createDeedOwner,
108
84
  isDeedVault,
109
85
  liberateVault,
110
86
  loadDeedMarker
111
- } from "./chunk-QVIZDLAR.js";
87
+ } from "./chunk-TIVK6PRK.js";
112
88
  import {
113
89
  MemoryRecipientSealer,
114
90
  MemorySealingKeyProvider,
115
- SEALED_SECRET_RECORD_ID,
116
91
  aesGcmOpen,
117
- loadSealedSecret,
118
92
  parseRsaOaepTlv,
119
- parseSealedEnvelope,
120
- saveSealedSecret,
121
93
  sealRsaOaepTlv
122
- } from "./chunk-6SSWOUUS.js";
94
+ } from "./chunk-OLIWCCFM.js";
123
95
  import {
124
- fuseRetrieval
125
- } from "./chunk-AURFOK3D.js";
96
+ withdrawAccessibleData
97
+ } from "./chunk-TE6LH6J2.js";
98
+ import {
99
+ exportAccessibleData
100
+ } from "./chunk-WO4T4OD5.js";
101
+ import {
102
+ routeStore,
103
+ withCache,
104
+ withCircuitBreaker,
105
+ withHealthCheck,
106
+ withLogging,
107
+ withMetrics,
108
+ withRetry,
109
+ wrapStore
110
+ } from "./chunk-EIPVYUEP.js";
111
+ import {
112
+ applyListProjection
113
+ } from "./chunk-VG2ZSFYD.js";
114
+ import "./chunk-VYYM3MEN.js";
115
+ import {
116
+ derivePersistedSchema,
117
+ isZodSchema
118
+ } from "./chunk-6ZNSB3H6.js";
119
+ import "./chunk-Y2NBBT6K.js";
126
120
  import {
127
121
  SCHEMAS_COLLECTION,
128
122
  loadPersistedSchema,
129
123
  savePersistedSchema
130
- } from "./chunk-32467U5J.js";
131
- import "./chunk-GYGLAVCX.js";
124
+ } from "./chunk-OBPVWOSQ.js";
132
125
  import {
133
- withdrawAccessibleData
134
- } from "./chunk-MLCTPWSO.js";
126
+ MoneyCurrencyError,
127
+ MoneyPrecisionError,
128
+ MoneyUnsupportedError,
129
+ allocate,
130
+ asMoney,
131
+ isMoneyDescriptor,
132
+ isMoneyString,
133
+ money,
134
+ moneyNumber,
135
+ mulRate,
136
+ scaleForCurrency
137
+ } from "./chunk-SGDPRCC4.js";
135
138
  import {
136
- exportAccessibleData
137
- } from "./chunk-WWBC4KLB.js";
139
+ withDerivation,
140
+ withRollup
141
+ } from "./chunk-NYEFP7DY.js";
142
+ import "./chunk-AT2JJEKJ.js";
143
+ import "./chunk-4ZKNC6A6.js";
144
+ import "./chunk-MHMLXJ3I.js";
145
+ import {
146
+ withMaterializedView
147
+ } from "./chunk-MXUT7FTE.js";
148
+ import "./chunk-FRMW23UK.js";
149
+ import {
150
+ buildLookupSnapshot
151
+ } from "./chunk-GP3UWP22.js";
152
+ import "./chunk-3HUYRN24.js";
153
+ import "./chunk-IMRB2C4O.js";
154
+ import {
155
+ withOverlayedView
156
+ } from "./chunk-MSMJJB4J.js";
157
+ import "./chunk-ZTLOXFPB.js";
158
+ import "./chunk-IG6KUWBX.js";
138
159
  import "./chunk-EP5L47XV.js";
139
160
  import {
140
161
  isDiscriminant
141
162
  } from "./chunk-PY4KJPYU.js";
142
- import "./chunk-GTNRMJYH.js";
163
+ import "./chunk-5GQEU4DN.js";
143
164
  import {
144
165
  classified,
145
166
  luhnCheck
146
- } from "./chunk-XSOGLHGY.js";
167
+ } from "./chunk-6L3DKWRY.js";
147
168
  import {
148
169
  ClassifiedNeverStoredError,
149
170
  ClassifiedValidationError,
150
171
  isClassifiedFieldSpec,
151
172
  isClassifiedGroup,
152
173
  resolveClassifiedFields
153
- } from "./chunk-ZM72UO3Y.js";
154
- import "./chunk-HDF5R2K6.js";
155
- import "./chunk-OWLZONGX.js";
156
- import "./chunk-XONZGK6J.js";
157
- import "./chunk-IUATR5UE.js";
174
+ } from "./chunk-ZFUFAHZ3.js";
175
+ import "./chunk-BN4HRYAZ.js";
176
+ import "./chunk-N5PLUFH2.js";
158
177
  import "./chunk-GHVIKOHT.js";
159
178
  import {
160
179
  immutableGuard,
161
180
  transitionGuard,
162
181
  withGuard
163
- } from "./chunk-TSNRZSRC.js";
164
- import "./chunk-YMUGBZN2.js";
182
+ } from "./chunk-RO5NM6UI.js";
183
+ import "./chunk-FQ5CHJR7.js";
165
184
  import "./chunk-JK733I5V.js";
166
- import "./chunk-EGU4PWQW.js";
185
+ import "./chunk-W66AM5IB.js";
167
186
  import {
168
187
  CollectionFrame,
169
188
  VaultFrame
170
- } from "./chunk-ONB627HU.js";
189
+ } from "./chunk-55LX6FSX.js";
171
190
  import "./chunk-SMY5X46Z.js";
172
- import "./chunk-NIKO2BBZ.js";
191
+ import "./chunk-DZFQVICS.js";
173
192
  import {
174
193
  TxCollection,
175
194
  TxContext,
176
195
  TxVault,
177
196
  runTransaction
178
- } from "./chunk-QVGEVZ5F.js";
197
+ } from "./chunk-BQ6DHN4I.js";
198
+ import "./chunk-5D2ALSM5.js";
179
199
  import {
180
- withDerivation,
181
- withRollup
182
- } from "./chunk-GHEMAVTN.js";
183
- import "./chunk-2PDBYF2O.js";
184
- import "./chunk-Z4D3YGAB.js";
185
- import "./chunk-YJ3TREAC.js";
200
+ NO_SEARCH,
201
+ tokenize,
202
+ withSearch
203
+ } from "./chunk-QADFHRQM.js";
186
204
  import {
187
- withMaterializedView
188
- } from "./chunk-RM5EXCFF.js";
189
- import "./chunk-MQBFT2OT.js";
205
+ fuseRetrieval
206
+ } from "./chunk-AURFOK3D.js";
190
207
  import {
191
- buildLookupSnapshot
192
- } from "./chunk-JTIPVW4J.js";
193
- import "./chunk-ZGEFBDPR.js";
194
- import "./chunk-VDTWFN2P.js";
195
- import "./chunk-5D2ALSM5.js";
208
+ NO_SEQUENCE,
209
+ SequenceStore,
210
+ compileSequenceFormat,
211
+ resolveSequenceKey,
212
+ withSequence
213
+ } from "./chunk-EBKCYQ2D.js";
196
214
  import {
197
- withOverlayedView
198
- } from "./chunk-D4LAJ737.js";
199
- import "./chunk-PWWWMRT7.js";
200
- import "./chunk-ZX5FNWH7.js";
215
+ CustodyApi,
216
+ NO_CUSTODY,
217
+ withCustody
218
+ } from "./chunk-SKM35Y4Q.js";
201
219
  import {
202
220
  DEFAULT_CROSS_JOIN_MAX_ROWS,
203
221
  Query,
204
222
  ScanBuilder,
205
223
  buildLiveQuery,
206
224
  executePlan
207
- } from "./chunk-MPPWL64H.js";
225
+ } from "./chunk-WBKZUO5V.js";
208
226
  import {
209
227
  DEFAULT_JOIN_MAX_ROWS,
210
228
  applyJoins
211
- } from "./chunk-SBOHNJUD.js";
229
+ } from "./chunk-V6UQZA2H.js";
212
230
  import {
213
231
  importExternalObjects,
214
232
  memoryObjectProjection
215
233
  } from "./chunk-4Q6HSHHL.js";
216
- import "./chunk-LN3MQFUE.js";
234
+ import "./chunk-IF6WNGAK.js";
217
235
  import {
218
236
  BLOB_CHUNKS_COLLECTION,
219
237
  BLOB_COLLECTION,
@@ -230,8 +248,8 @@ import {
230
248
  getIntent,
231
249
  isPreCompressed,
232
250
  sweepBlobIntents
233
- } from "./chunk-2ZSC454H.js";
234
- import "./chunk-GQT6J4FJ.js";
251
+ } from "./chunk-NQSO4UAH.js";
252
+ import "./chunk-L3YYLT4E.js";
235
253
  import {
236
254
  CollectionIndexes
237
255
  } from "./chunk-KPZS5QAQ.js";
@@ -243,7 +261,7 @@ import {
243
261
  estimateRecordBytes,
244
262
  parseBytes
245
263
  } from "./chunk-NO272T7Q.js";
246
- import "./chunk-HA7P3BTB.js";
264
+ import "./chunk-KRCBZYTZ.js";
247
265
  import "./chunk-XZHEOSQ2.js";
248
266
  import "./chunk-YMUFFJCO.js";
249
267
  import "./chunk-CADUYBQD.js";
@@ -262,7 +280,7 @@ import {
262
280
  createPodStore,
263
281
  wrapBundleStore,
264
282
  wrapPodStore
265
- } from "./chunk-OWOT7CFC.js";
283
+ } from "./chunk-Y6B6HVKC.js";
266
284
  import {
267
285
  NOYDB_BUNDLE_FORMAT_VERSION,
268
286
  NOYDB_BUNDLE_MAGIC,
@@ -275,7 +293,7 @@ import {
275
293
  readPodHeader,
276
294
  writeNoydbBundle,
277
295
  writePod
278
- } from "./chunk-E7FSBI6I.js";
296
+ } from "./chunk-SGQ4N5FS.js";
279
297
  import {
280
298
  COVER_RECORD_ID,
281
299
  isCover,
@@ -283,21 +301,21 @@ import {
283
301
  readCover,
284
302
  saveCover,
285
303
  validateCoverInput
286
- } from "./chunk-ZHZ4PET5.js";
304
+ } from "./chunk-JIDLU57U.js";
287
305
  import {
288
306
  CONSENT_AUDIT_COLLECTION
289
- } from "./chunk-HVPW6PCX.js";
307
+ } from "./chunk-XIDQKFZF.js";
290
308
  import "./chunk-PEOZ34EM.js";
291
- import "./chunk-UNREYBZO.js";
309
+ import "./chunk-OLSARBZU.js";
292
310
  import {
293
311
  dictKey,
294
312
  staticDict
295
- } from "./chunk-4B3DL75F.js";
313
+ } from "./chunk-W3G5REIU.js";
296
314
  import {
297
315
  DICT_COLLECTION_PREFIX,
298
316
  LookupHandle,
299
317
  dictCollectionName
300
- } from "./chunk-C2V7AJO2.js";
318
+ } from "./chunk-NEX7JCMO.js";
301
319
  import {
302
320
  applyI18nLocale,
303
321
  enforceScript,
@@ -312,10 +330,10 @@ import {
312
330
  resolvePolicy,
313
331
  setAtPathInPlace,
314
332
  validateI18nTextValue
315
- } from "./chunk-JOCMXSR2.js";
333
+ } from "./chunk-UADPR6F4.js";
316
334
  import {
317
335
  installViaBinder
318
- } from "./chunk-ZUDAK436.js";
336
+ } from "./chunk-6UBZ6I5Z.js";
319
337
  import {
320
338
  credentialStatus,
321
339
  deleteCredential,
@@ -323,39 +341,55 @@ import {
323
341
  listCredentials,
324
342
  putCredential,
325
343
  withTeam
326
- } from "./chunk-EPME33Y4.js";
344
+ } from "./chunk-SHYIA73K.js";
327
345
  import {
328
- MAGIC_LINK_CONTENT_INFO_PREFIX,
329
346
  MAGIC_LINK_GRANTS_COLLECTION,
330
- MAGIC_LINK_KEK_INFO_PREFIX,
331
347
  NO_TEAM,
332
348
  burnPaperRecoveryEntry,
333
349
  deriveMagicLinkContentKey,
350
+ describeAllUsersAuth,
351
+ describeAuthConfig,
352
+ describeUserAuth,
353
+ diagramAuthConfig,
334
354
  enrollAuthenticator,
335
355
  findAuthenticator,
336
- hasRecoveryEnrolled,
337
356
  isMagicLinkGrantExpired,
338
357
  listMagicLinkGrants,
339
358
  loadPaperRecoveryEntries,
340
- loadShamirRecoveryEntries,
341
359
  magicLinkGrantRecordId,
342
360
  mintPaperRecoveryEntry,
343
- mintShamirRecoveryEntry,
344
361
  mintWrappedDeksBlob,
345
362
  readMagicLinkGrantRecord,
346
- recoverSecret,
347
363
  recoverUser,
348
364
  removeAuthenticator,
349
365
  revokeMagicLinkGrant,
350
366
  rotateSecret,
351
367
  savePaperRecoveryEntries,
352
- saveShamirRecoveryEntries,
353
368
  unwrapDeksFromBlob,
354
369
  unwrapDeksFromPaperEntry,
355
- unwrapDeksFromShamirEntry,
356
370
  unwrapMagicLinkGrant,
357
371
  writeMagicLinkGrant
358
- } from "./chunk-M4GO4ZJK.js";
372
+ } from "./chunk-C25JXSOR.js";
373
+ import {
374
+ META_COLLECTION,
375
+ POLICY_RECORD_ID,
376
+ loadVaultPolicy,
377
+ saveVaultPolicy
378
+ } from "./chunk-56IIVAEO.js";
379
+ import {
380
+ PresenceHandle,
381
+ SyncEngine,
382
+ SyncTransaction
383
+ } from "./chunk-BXHMZ2XW.js";
384
+ import {
385
+ BUNDLE_STORE_POLICY,
386
+ INDEXED_STORE_POLICY,
387
+ POD_STORE_POLICY,
388
+ SyncScheduler
389
+ } from "./chunk-MTJLOC3Y.js";
390
+ import {
391
+ PERIODS_COLLECTION
392
+ } from "./chunk-EZNTORXE.js";
359
393
  import {
360
394
  SYNC_CREDENTIALS_COLLECTION,
361
395
  WeakSecretError,
@@ -369,7 +403,7 @@ import {
369
403
  listUsers,
370
404
  listUsersWithEnvelopes,
371
405
  validateSecret
372
- } from "./chunk-ZDFU34XY.js";
406
+ } from "./chunk-KPXM4WO6.js";
373
407
  import {
374
408
  DIRECTORY_RECORD_ID,
375
409
  VISIBILITY_RECORD_PREFIX,
@@ -383,27 +417,9 @@ import {
383
417
  readUserVisibility,
384
418
  saveUserEnvelope,
385
419
  visibilityRecordId
386
- } from "./chunk-7IQWHYL2.js";
387
- import {
388
- PresenceHandle,
389
- SyncEngine,
390
- SyncTransaction
391
- } from "./chunk-ZHMUFYZF.js";
392
- import {
393
- BUNDLE_STORE_POLICY,
394
- INDEXED_STORE_POLICY,
395
- POD_STORE_POLICY,
396
- SyncScheduler
397
- } from "./chunk-VQNJ7UZL.js";
398
- import {
399
- PERIODS_COLLECTION
400
- } from "./chunk-TMR64XPL.js";
401
- import {
402
- assertTierAccess,
403
- dekKey,
404
- effectiveClearance
405
- } from "./chunk-LC7DSMHR.js";
406
- import "./chunk-P4NUJVWL.js";
420
+ } from "./chunk-WZ3NCMK6.js";
421
+ import "./chunk-PTHKZWEH.js";
422
+ import "./chunk-IXNCZTWA.js";
407
423
  import {
408
424
  PolicyEnforcer,
409
425
  activeSessionCount,
@@ -418,7 +434,7 @@ import {
418
434
  revokeAllSessions,
419
435
  revokeSession,
420
436
  validateSessionPolicy
421
- } from "./chunk-BAAUFCJK.js";
437
+ } from "./chunk-X4MVWPHV.js";
422
438
  import "./chunk-VKQCVU2Z.js";
423
439
  import {
424
440
  generateULID,
@@ -427,7 +443,7 @@ import {
427
443
  import {
428
444
  CollectionInstant,
429
445
  VaultInstant
430
- } from "./chunk-3GXDB3NQ.js";
446
+ } from "./chunk-MANUDU7I.js";
431
447
  import "./chunk-AFHQATY4.js";
432
448
  import {
433
449
  diff,
@@ -437,12 +453,12 @@ import {
437
453
  LedgerStore,
438
454
  applyPatch,
439
455
  computePatch
440
- } from "./chunk-ICYC5YNI.js";
456
+ } from "./chunk-Y6VZQGGH.js";
441
457
  import {
442
458
  LEDGER_COLLECTION,
443
459
  LEDGER_DELTAS_COLLECTION
444
460
  } from "./chunk-I7FD46FF.js";
445
- import "./chunk-PTT2NB46.js";
461
+ import "./chunk-JYJFGD2H.js";
446
462
  import {
447
463
  canonicalJson,
448
464
  envelopePayloadHash,
@@ -450,17 +466,17 @@ import {
450
466
  paddedIndex,
451
467
  parseIndex,
452
468
  sha256Hex
453
- } from "./chunk-2BVW754E.js";
454
- import "./chunk-AZXEOEQK.js";
455
- import "./chunk-7LP7FFJ2.js";
469
+ } from "./chunk-ISRKW4YN.js";
470
+ import "./chunk-KFRPNHWR.js";
471
+ import "./chunk-QD46HPZG.js";
456
472
  import {
457
473
  validateSchemaInput,
458
474
  validateSchemaOutput
459
- } from "./chunk-MMVQ3SUO.js";
460
- import "./chunk-KCZAFDP5.js";
461
- import "./chunk-5WLDZZ6S.js";
462
- import "./chunk-5HSSTOOG.js";
463
- import "./chunk-G4MFQXYX.js";
475
+ } from "./chunk-RZPOZPZU.js";
476
+ import "./chunk-VH6SOCXH.js";
477
+ import "./chunk-35NMVJ7I.js";
478
+ import "./chunk-NFZGZ4AK.js";
479
+ import "./chunk-QJNCB5SK.js";
464
480
  import "./chunk-LP7BEXCT.js";
465
481
  import {
466
482
  base64ToBuffer,
@@ -470,7 +486,7 @@ import {
470
486
  derivePresenceKey,
471
487
  encryptBytes,
472
488
  encryptDeterministic
473
- } from "./chunk-7U6AB7DZ.js";
489
+ } from "./chunk-AKKRXT23.js";
474
490
  import {
475
491
  NOYDB_BACKUP_VERSION,
476
492
  NOYDB_FORMAT_VERSION,
@@ -478,7 +494,7 @@ import {
478
494
  NOYDB_SYNC_VERSION,
479
495
  SealedHandle,
480
496
  createStore
481
- } from "./chunk-DOZFU7OZ.js";
497
+ } from "./chunk-GZACYEOB.js";
482
498
  import {
483
499
  AlreadyElevatedError,
484
500
  AmendmentForbiddenError,
@@ -608,1793 +624,44 @@ import {
608
624
  UserEnvelopeOversizedError,
609
625
  ValidationError,
610
626
  VaultTemplateNotFoundError
611
- } from "./chunk-6SYOHUHM.js";
627
+ } from "./chunk-QZWTRENR.js";
612
628
  import "./chunk-PZ5AY32C.js";
613
629
 
614
- // src/with-shape/introspection/projection.ts
615
- function applyListProjection(desc, record, opts) {
616
- const out = { ...record };
617
- for (const f of desc.fields) {
618
- if (f.classified !== void 0) {
619
- const list = f.classified.list;
620
- if (list === "omit") {
621
- delete out[f.key];
622
- continue;
623
- }
624
- if ("mask" in list) {
625
- out[f.key] = list.mask.replace(/\$\{(\w+)\}/g, (_m, rider) => {
626
- const v = record[`${f.key}_${rider}`];
627
- return v === void 0 || v === null ? "\u2022" : `${v}`;
628
- });
629
- continue;
630
- }
631
- out[f.key] = record[`${f.key}_${list.rider}`];
632
- continue;
633
- }
634
- if (opts?.sensitivity !== void 0 && (f.sensitivity === "pii" || f.sensitivity === "secret")) {
635
- if (opts.sensitivity === "omit") delete out[f.key];
636
- else out[f.key] = "\u2022\u2022\u2022";
637
- }
638
- }
639
- return out;
640
- }
641
-
642
- // src/with-shape/schema-update/strategies.ts
643
- function blindUpdate() {
644
- return { name: "blindUpdate", onSchemaDelta: () => ({ action: "allow" }) };
645
- }
646
- function additiveOnly() {
647
- return {
648
- name: "additiveOnly",
649
- onSchemaDelta(delta) {
650
- if (delta.kind === "non-additive") {
651
- return {
652
- action: "reject",
653
- error: new NonAdditiveSchemaChangeError(
654
- `Non-additive schema change to "${delta.collection}" (added: [${delta.added.join(", ")}], removed: [${delta.removed.join(", ")}], changed: [${delta.changed.map((c) => c.field).join(", ")}]). Register a coordinatedCutover() strategy to migrate, or revert the change.`
655
- )
656
- };
657
- }
658
- return { action: "allow" };
659
- }
660
- };
661
- }
662
- function lockSchema(opts) {
663
- const fields = opts?.fields;
664
- return {
665
- name: "lockSchema",
666
- onSchemaDelta(delta) {
667
- if (delta.kind === "none") return { action: "allow" };
668
- const touched = fields ? [...delta.added, ...delta.removed, ...delta.changed.map((c) => c.field)].filter((f) => fields.includes(f)) : ["<any>"];
669
- if (touched.length === 0) return { action: "allow" };
670
- return {
671
- action: "reject",
672
- error: new SchemaLockedError(
673
- `Schema for "${delta.collection}" is locked` + (fields ? ` on fields [${fields.join(", ")}] (touched: [${touched.join(", ")}])` : "") + `; the change was refused.`
674
- )
675
- };
676
- }
677
- };
678
- }
679
-
680
- // src/with-shape/schema-update/cutover.ts
681
- function coordinatedCutover(opts) {
682
- return {
683
- name: "coordinatedCutover",
684
- onSchemaDelta(delta) {
685
- if (delta.kind === "non-additive") {
686
- return { action: "cutover", transform: opts.transform };
687
- }
688
- return { action: "allow" };
689
- }
690
- };
691
- }
692
-
693
- // src/with-store/route-store.ts
694
- var BLOB_CHUNKS = "_blob_chunks";
695
- var BLOB_INDEX = "_blob_index";
696
- var BLOB_SLOTS = "_blob_slots_";
697
- var BLOB_VERSIONS = "_blob_versions_";
698
- function routeStore(opts) {
699
- const primary = opts.default;
700
- const blobsIsSimple = opts.blobs && "get" in opts.blobs;
701
- const simpleBlobStore = blobsIsSimple ? opts.blobs : void 0;
702
- const tieredBlobs = !blobsIsSimple ? opts.blobs : void 0;
703
- const blobThreshold = tieredBlobs?.threshold ?? 400 * 1024;
704
- const allStores = /* @__PURE__ */ new Set([primary]);
705
- if (simpleBlobStore) allStores.add(simpleBlobStore);
706
- if (tieredBlobs?.large) allStores.add(tieredBlobs.large);
707
- if (tieredBlobs?.small) allStores.add(tieredBlobs.small);
708
- if (opts.age?.cold) allStores.add(opts.age.cold);
709
- if (opts.routes) for (const s of Object.values(opts.routes)) allStores.add(s);
710
- if (opts.vaultRoutes) for (const s of Object.values(opts.vaultRoutes)) allStores.add(s);
711
- if (opts.blobRoutes) for (const s of Object.values(opts.blobRoutes)) allStores.add(s);
712
- if (opts.overflow) allStores.add(opts.overflow);
713
- if (opts.blobLifecycle?.archiveStore) allStores.add(opts.blobLifecycle.archiveStore);
714
- const overrides = /* @__PURE__ */ new Map();
715
- const suspended = /* @__PURE__ */ new Set();
716
- const writeQueues = /* @__PURE__ */ new Map();
717
- const NULL_STORE = {
718
- name: "suspended",
719
- async get() {
720
- return null;
721
- },
722
- async put() {
723
- },
724
- async delete() {
725
- },
726
- async list() {
727
- return [];
728
- },
729
- async loadAll() {
730
- return {};
731
- },
732
- async saveAll() {
733
- }
734
- };
735
- function routeNameFor(vault, collection) {
736
- if (opts.vaultRoutes) {
737
- for (const prefix of Object.keys(opts.vaultRoutes)) {
738
- if (vault.startsWith(prefix)) return prefix;
739
- }
740
- }
741
- if (opts.routes && !collection.startsWith("_") && opts.routes[collection]) {
742
- return collection;
743
- }
744
- if (isBlobChunks(collection) && (simpleBlobStore || tieredBlobs)) return "blobs";
745
- if (opts.routeBlobMeta && isBlobMeta(collection) && (simpleBlobStore || tieredBlobs)) return "blobs";
746
- if (opts.age && !collection.startsWith("_")) {
747
- }
748
- return "default";
749
- }
750
- const quotaExceeded = false;
751
- function resolveOriginalStore(route) {
752
- if (route === "blobs") return simpleBlobStore ?? tieredBlobs?.large ?? primary;
753
- if (route === "cold") return opts.age?.cold ?? primary;
754
- if (opts.routes?.[route]) return opts.routes[route];
755
- if (opts.vaultRoutes?.[route]) return opts.vaultRoutes[route];
756
- return primary;
757
- }
758
- function maybeQueueWrite(routeName, method, vault, collection, id, envelope, expectedVersion) {
759
- if (!suspended.has(routeName)) return false;
760
- const queue = writeQueues.get(routeName);
761
- if (!queue) return false;
762
- if (queue.writes.length >= queue.maxSize) {
763
- queue.writes.shift();
764
- }
765
- queue.writes.push({
766
- method,
767
- vault,
768
- collection,
769
- id,
770
- ...envelope !== void 0 ? { envelope } : {},
771
- ...expectedVersion !== void 0 ? { expectedVersion } : {}
772
- });
773
- return true;
774
- }
775
- function isBlobChunks(collection) {
776
- return collection === BLOB_CHUNKS;
777
- }
778
- function isBlobMeta(collection) {
779
- return collection === BLOB_INDEX || collection.startsWith(BLOB_SLOTS) || collection.startsWith(BLOB_VERSIONS);
780
- }
781
- function isInternal(collection) {
782
- return collection.startsWith("_");
783
- }
784
- function storeFor(vault, collection) {
785
- const rName = routeNameFor(vault, collection);
786
- if (suspended.has(rName)) return NULL_STORE;
787
- if (overrides.has(rName)) return overrides.get(rName);
788
- if (opts.vaultRoutes) {
789
- for (const [prefix, store2] of Object.entries(opts.vaultRoutes)) {
790
- if (vault.startsWith(prefix)) return store2;
791
- }
792
- }
793
- if (opts.routes && !isInternal(collection) && opts.routes[collection]) {
794
- return opts.routes[collection];
795
- }
796
- if (isBlobChunks(collection)) {
797
- if (simpleBlobStore) return simpleBlobStore;
798
- if (tieredBlobs) return tieredBlobs.large;
799
- }
800
- if (opts.routeBlobMeta && isBlobMeta(collection)) {
801
- if (simpleBlobStore) return simpleBlobStore;
802
- if (tieredBlobs) return tieredBlobs.large;
803
- }
804
- if (quotaExceeded && opts.overflow) return opts.overflow;
805
- return primary;
806
- }
807
- function blobStoreForSize(dataSize) {
808
- if (!tieredBlobs) return simpleBlobStore ?? primary;
809
- if (dataSize <= blobThreshold) {
810
- return tieredBlobs.small ?? primary;
811
- }
812
- return tieredBlobs.large;
813
- }
814
- function isCold(collection, envelope, before) {
815
- if (!opts.age) return false;
816
- if (isInternal(collection)) return false;
817
- if (opts.age.collections && opts.age.collections.length > 0) {
818
- if (!opts.age.collections.includes(collection)) return false;
819
- }
820
- const cutoffIso = before ?? (opts.age.coldAfterDays != null ? new Date(Date.now() - opts.age.coldAfterDays * 24 * 60 * 60 * 1e3).toISOString() : void 0);
821
- if (cutoffIso === void 0) return false;
822
- return envelope._ts < cutoffIso;
823
- }
824
- const store = {
825
- name: buildName(),
826
- ...opts.age?.cold ? { capabilities: { ...primary.capabilities, coldArchival: true } } : primary.capabilities ? { capabilities: { ...primary.capabilities, coldArchival: false } } : {},
827
- async get(vault, collection, id) {
828
- const s = storeFor(vault, collection);
829
- const result = await s.get(vault, collection, id);
830
- if (result === null && opts.age && !isInternal(collection)) {
831
- if (!opts.age.collections?.length || opts.age.collections.includes(collection)) {
832
- return opts.age.cold.get(vault, collection, id);
833
- }
834
- }
835
- return result;
836
- },
837
- async put(vault, collection, id, envelope, expectedVersion) {
838
- const rn = routeNameFor(vault, collection);
839
- if (maybeQueueWrite(rn, "put", vault, collection, id, envelope, expectedVersion)) return;
840
- if (isBlobChunks(collection) && tieredBlobs) {
841
- const dataSize = envelope._data.length;
842
- const s2 = blobStoreForSize(dataSize);
843
- return s2.put(vault, collection, id, envelope, expectedVersion);
844
- }
845
- const s = storeFor(vault, collection);
846
- if (opts.age && !isInternal(collection)) {
847
- opts.age.cold.delete(vault, collection, id).catch(() => {
848
- });
849
- }
850
- return s.put(vault, collection, id, envelope, expectedVersion);
851
- },
852
- async delete(vault, collection, id) {
853
- const rn = routeNameFor(vault, collection);
854
- if (maybeQueueWrite(rn, "delete", vault, collection, id)) return;
855
- const s = storeFor(vault, collection);
856
- await s.delete(vault, collection, id);
857
- if (opts.age && !isInternal(collection)) {
858
- await opts.age.cold.delete(vault, collection, id).catch(() => {
859
- });
860
- }
861
- },
862
- async list(vault, collection) {
863
- const s = storeFor(vault, collection);
864
- const ids = await s.list(vault, collection);
865
- if (opts.age && !isInternal(collection)) {
866
- if (!opts.age.collections?.length || opts.age.collections.includes(collection)) {
867
- const coldIds = await opts.age.cold.list(vault, collection).catch(() => []);
868
- if (coldIds.length > 0) {
869
- const merged = new Set(ids);
870
- for (const id of coldIds) merged.add(id);
871
- return [...merged];
872
- }
873
- }
874
- }
875
- return ids;
876
- },
877
- async loadAll(vault) {
878
- const stores = getStoresForVault(vault);
879
- const snapshots = await Promise.all(
880
- stores.map((s) => s.loadAll(vault).catch(() => ({})))
881
- );
882
- return mergeSnapshots(snapshots);
883
- },
884
- async saveAll(vault, data) {
885
- const partitioned = /* @__PURE__ */ new Map();
886
- for (const [collection, records] of Object.entries(data)) {
887
- const s = storeFor(vault, collection);
888
- if (!partitioned.has(s)) partitioned.set(s, {});
889
- partitioned.get(s)[collection] = records;
890
- }
891
- await Promise.all(
892
- [...partitioned.entries()].map(([s, snap]) => s.saveAll(vault, snap))
893
- );
894
- },
895
- async compact(vault, compactOpts) {
896
- if (!opts.age) return 0;
897
- let migrated = 0;
898
- const collections = opts.age.collections?.length ? opts.age.collections : Object.keys(await primary.loadAll(vault).catch(() => ({})));
899
- for (const collection of collections) {
900
- const ids = await primary.list(vault, collection).catch(() => []);
901
- for (const id of ids) {
902
- const envelope = await primary.get(vault, collection, id);
903
- if (!envelope) continue;
904
- if (isCold(collection, envelope, compactOpts?.before)) {
905
- await opts.age.cold.put(vault, collection, id, envelope);
906
- await primary.delete(vault, collection, id);
907
- migrated++;
908
- }
909
- }
910
- }
911
- return migrated;
912
- },
913
- // ── Runtime override / suspend ──────────────────────
914
- override(route, overrideStore, overrideOpts) {
915
- if (overrideOpts?.hydrate) {
916
- return (async () => {
917
- overrides.set(route, overrideStore);
918
- })();
919
- }
920
- overrides.set(route, overrideStore);
921
- },
922
- clearOverride(route) {
923
- overrides.delete(route);
924
- },
925
- suspend(route, suspendOpts) {
926
- suspended.add(route);
927
- if (suspendOpts?.queue) {
928
- writeQueues.set(route, {
929
- writes: [],
930
- maxSize: suspendOpts.maxQueueSize ?? 1e4
931
- });
932
- }
933
- },
934
- async resume(route) {
935
- suspended.delete(route);
936
- const queue = writeQueues.get(route);
937
- if (!queue || queue.writes.length === 0) {
938
- writeQueues.delete(route);
939
- return 0;
940
- }
941
- let replayed = 0;
942
- const target = overrides.get(route) ?? resolveOriginalStore(route);
943
- for (const write of queue.writes) {
944
- try {
945
- if (write.method === "put" && write.envelope) {
946
- await target.put(write.vault, write.collection, write.id, write.envelope, write.expectedVersion);
947
- } else if (write.method === "delete") {
948
- await target.delete(write.vault, write.collection, write.id);
949
- }
950
- replayed++;
951
- } catch {
952
- }
953
- }
954
- writeQueues.delete(route);
955
- return replayed;
956
- },
957
- routeStatus() {
958
- const ov = {};
959
- for (const [k, v] of overrides) ov[k] = v.name ?? "unnamed";
960
- const q = {};
961
- for (const [k, v] of writeQueues) q[k] = v.writes.length;
962
- return { overrides: ov, suspended: [...suspended], queued: q };
963
- },
964
- resolveBackend(vaultId) {
965
- if (opts.vaultRoutes) {
966
- for (const [prefix, s] of Object.entries(opts.vaultRoutes)) {
967
- if (vaultId.startsWith(prefix)) return s;
968
- }
969
- }
970
- return primary;
971
- }
972
- };
973
- if (anyHas("listVaults")) {
974
- store.listVaults = async () => {
975
- const results = await Promise.all(
976
- [...allStores].filter((s) => s.listVaults !== void 0).map((s) => s.listVaults().catch(() => []))
977
- );
978
- return [...new Set(results.flat())];
979
- };
980
- }
981
- if (anyHas("ping")) {
982
- store.ping = async () => {
983
- const results = await Promise.all(
984
- [...allStores].filter((s) => s.ping !== void 0).map((s) => s.ping().catch(() => false))
985
- );
986
- return results.some(Boolean);
987
- };
988
- }
989
- return store;
990
- function buildName() {
991
- const names = [...allStores].map((s) => s.name ?? "?").join("+");
992
- return `route(${names})`;
993
- }
994
- function anyHas(method) {
995
- return [...allStores].some((s) => s[method]);
996
- }
997
- function getStoresForVault(vault) {
998
- const stores = /* @__PURE__ */ new Set();
999
- if (opts.vaultRoutes) {
1000
- for (const [prefix, s] of Object.entries(opts.vaultRoutes)) {
1001
- if (vault.startsWith(prefix)) {
1002
- stores.add(s);
1003
- return [...stores];
1004
- }
1005
- }
1006
- }
1007
- stores.add(primary);
1008
- if (simpleBlobStore) stores.add(simpleBlobStore);
1009
- if (tieredBlobs?.large) stores.add(tieredBlobs.large);
1010
- if (tieredBlobs?.small && tieredBlobs.small !== primary) stores.add(tieredBlobs.small);
1011
- if (opts.age?.cold) stores.add(opts.age.cold);
1012
- if (opts.routes) {
1013
- for (const s of Object.values(opts.routes)) stores.add(s);
1014
- }
1015
- return [...stores];
1016
- }
1017
- }
1018
- function mergeSnapshots(snapshots) {
1019
- const merged = {};
1020
- for (const snap of snapshots) {
1021
- for (const [collection, records] of Object.entries(snap)) {
1022
- if (!merged[collection]) {
1023
- merged[collection] = { ...records };
1024
- continue;
1025
- }
1026
- for (const [id, envelope] of Object.entries(records)) {
1027
- const existing = merged[collection][id];
1028
- if (!existing || envelope._ts >= existing._ts) {
1029
- merged[collection][id] = envelope;
1030
- }
1031
- }
1032
- }
1033
- }
1034
- return merged;
1035
- }
1036
-
1037
- // src/with-store/store-middleware.ts
1038
- function wrapStore(store, ...middlewares) {
1039
- let result = store;
1040
- for (let i = middlewares.length - 1; i >= 0; i--) {
1041
- result = middlewares[i](result);
1042
- }
1043
- return result;
1044
- }
1045
- function withRetry(opts = {}) {
1046
- const maxRetries = opts.maxRetries ?? 3;
1047
- const backoffMs = opts.backoffMs ?? 500;
1048
- const jitter = opts.jitter ?? 0.3;
1049
- const retryOn = opts.retryOn ? new Set(opts.retryOn) : null;
1050
- function shouldRetry(err) {
1051
- if (!retryOn) return true;
1052
- if (err && typeof err === "object" && "code" in err) {
1053
- return retryOn.has(err.code);
1054
- }
1055
- return true;
1056
- }
1057
- async function retryable(fn) {
1058
- let lastError;
1059
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
1060
- try {
1061
- return await fn();
1062
- } catch (err) {
1063
- lastError = err;
1064
- if (attempt >= maxRetries || !shouldRetry(err)) throw err;
1065
- const delay = backoffMs * Math.pow(2, attempt) * (1 + Math.random() * jitter);
1066
- await new Promise((r) => setTimeout(r, delay));
1067
- }
1068
- }
1069
- throw lastError;
1070
- }
1071
- return (next) => ({
1072
- ...next,
1073
- name: next.name ? `retry(${next.name})` : "retry",
1074
- get: (v, c, id) => retryable(() => next.get(v, c, id)),
1075
- put: (v, c, id, env, ev) => retryable(() => next.put(v, c, id, env, ev)),
1076
- delete: (v, c, id) => retryable(() => next.delete(v, c, id)),
1077
- list: (v, c) => retryable(() => next.list(v, c)),
1078
- loadAll: (v) => retryable(() => next.loadAll(v)),
1079
- saveAll: (v, d) => retryable(() => next.saveAll(v, d))
1080
- });
1081
- }
1082
- var LOG_LEVELS = { debug: 0, info: 1, warn: 2, error: 3 };
1083
- function withLogging(opts = {}) {
1084
- const minLevel = LOG_LEVELS[opts.level ?? "info"];
1085
- const logger = opts.logger ?? console;
1086
- const logData = opts.logData ?? false;
1087
- function log(level, method, args, durationMs) {
1088
- if (LOG_LEVELS[level] < minLevel) return;
1089
- const parts = [`[noydb:${method}]`, ...Object.entries(args).map(([k, v]) => `${k}=${String(v)}`)];
1090
- if (durationMs !== void 0) parts.push(`${durationMs}ms`);
1091
- logger[level](parts.join(" "));
1092
- }
1093
- function timed(method, args, fn) {
1094
- const start = Date.now();
1095
- return fn().then(
1096
- (result) => {
1097
- log("debug", method, args, Date.now() - start);
1098
- return result;
1099
- },
1100
- (err) => {
1101
- log("error", method, { ...args, error: err.message }, Date.now() - start);
1102
- throw err;
1103
- }
1104
- );
1105
- }
1106
- return (next) => ({
1107
- ...next,
1108
- name: next.name ? `log(${next.name})` : "log",
1109
- get: (v, c, id) => timed("get", { vault: v, collection: c, id }, () => next.get(v, c, id)),
1110
- put: (v, c, id, env, ev) => timed("put", {
1111
- vault: v,
1112
- collection: c,
1113
- id,
1114
- version: env._v,
1115
- ...logData ? { data: env._data.slice(0, 40) + "..." } : {}
1116
- }, () => next.put(v, c, id, env, ev)),
1117
- delete: (v, c, id) => timed("delete", { vault: v, collection: c, id }, () => next.delete(v, c, id)),
1118
- list: (v, c) => timed("list", { vault: v, collection: c }, () => next.list(v, c)),
1119
- loadAll: (v) => timed("loadAll", { vault: v }, () => next.loadAll(v)),
1120
- saveAll: (v, d) => timed("saveAll", { vault: v }, () => next.saveAll(v, d))
1121
- });
1122
- }
1123
- function withMetrics(opts) {
1124
- function tracked(method, vault, fn, collection, id) {
1125
- const start = Date.now();
1126
- return fn().then(
1127
- (result) => {
1128
- opts.onOperation({
1129
- method,
1130
- vault,
1131
- ...collection !== void 0 ? { collection } : {},
1132
- ...id !== void 0 ? { id } : {},
1133
- durationMs: Date.now() - start,
1134
- success: true
1135
- });
1136
- return result;
1137
- },
1138
- (err) => {
1139
- opts.onOperation({
1140
- method,
1141
- vault,
1142
- ...collection !== void 0 ? { collection } : {},
1143
- ...id !== void 0 ? { id } : {},
1144
- durationMs: Date.now() - start,
1145
- success: false,
1146
- error: err
1147
- });
1148
- throw err;
1149
- }
1150
- );
1151
- }
1152
- return (next) => ({
1153
- ...next,
1154
- name: next.name ? `metrics(${next.name})` : "metrics",
1155
- get: (v, c, id) => tracked("get", v, () => next.get(v, c, id), c, id),
1156
- put: (v, c, id, env, ev) => tracked("put", v, () => next.put(v, c, id, env, ev), c, id),
1157
- delete: (v, c, id) => tracked("delete", v, () => next.delete(v, c, id), c, id),
1158
- list: (v, c) => tracked("list", v, () => next.list(v, c), c),
1159
- loadAll: (v) => tracked("loadAll", v, () => next.loadAll(v)),
1160
- saveAll: (v, d) => tracked("saveAll", v, () => next.saveAll(v, d))
1161
- });
1162
- }
1163
- function withCircuitBreaker(opts = {}) {
1164
- const threshold = opts.failureThreshold ?? 5;
1165
- const resetMs = opts.resetTimeoutMs ?? 3e4;
1166
- let state = "closed";
1167
- let failures = 0;
1168
- let lastFailureTime = 0;
1169
- function recordSuccess() {
1170
- if (state === "half-open") {
1171
- state = "closed";
1172
- failures = 0;
1173
- opts.onClose?.();
1174
- }
1175
- failures = 0;
1176
- }
1177
- function recordFailure() {
1178
- failures++;
1179
- lastFailureTime = Date.now();
1180
- if (failures >= threshold && state === "closed") {
1181
- state = "open";
1182
- opts.onOpen?.();
1183
- }
1184
- }
1185
- function canAttempt() {
1186
- if (state === "closed") return true;
1187
- if (state === "open") {
1188
- if (Date.now() - lastFailureTime >= resetMs) {
1189
- state = "half-open";
1190
- return true;
1191
- }
1192
- return false;
1193
- }
1194
- return true;
1195
- }
1196
- async function guarded(fn, fallback) {
1197
- if (!canAttempt()) return fallback;
1198
- try {
1199
- const result = await fn();
1200
- recordSuccess();
1201
- return result;
1202
- } catch (err) {
1203
- recordFailure();
1204
- throw err;
1205
- }
1206
- }
1207
- return (next) => ({
1208
- ...next,
1209
- name: next.name ? `cb(${next.name})` : "cb",
1210
- get: (v, c, id) => guarded(() => next.get(v, c, id), null),
1211
- put: (v, c, id, env, ev) => guarded(() => next.put(v, c, id, env, ev), void 0),
1212
- delete: (v, c, id) => guarded(() => next.delete(v, c, id), void 0),
1213
- list: (v, c) => guarded(() => next.list(v, c), []),
1214
- loadAll: (v) => guarded(() => next.loadAll(v), {}),
1215
- saveAll: (v, d) => guarded(() => next.saveAll(v, d), void 0)
1216
- });
1217
- }
1218
- function withCache(opts = {}) {
1219
- const maxEntries = opts.maxEntries ?? 500;
1220
- const ttlMs = opts.ttlMs ?? 6e4;
1221
- const cache = /* @__PURE__ */ new Map();
1222
- function cacheKey(vault, collection, id) {
1223
- return `${vault}\0${collection}\0${id}`;
1224
- }
1225
- function getFromCache(key) {
1226
- const entry = cache.get(key);
1227
- if (!entry) return void 0;
1228
- if (ttlMs > 0 && Date.now() - entry.cachedAt > ttlMs) {
1229
- cache.delete(key);
1230
- return void 0;
1231
- }
1232
- cache.delete(key);
1233
- cache.set(key, entry);
1234
- return entry.envelope;
1235
- }
1236
- function setInCache(key, envelope) {
1237
- if (cache.size >= maxEntries) {
1238
- const oldest = cache.keys().next().value;
1239
- if (oldest !== void 0) cache.delete(oldest);
1240
- }
1241
- cache.set(key, { envelope, cachedAt: Date.now() });
1242
- }
1243
- function invalidate(key) {
1244
- cache.delete(key);
1245
- }
1246
- return (next) => ({
1247
- ...next,
1248
- name: next.name ? `cache(${next.name})` : "cache",
1249
- async get(vault, collection, id) {
1250
- const key = cacheKey(vault, collection, id);
1251
- const cached = getFromCache(key);
1252
- if (cached !== void 0) return cached;
1253
- const result = await next.get(vault, collection, id);
1254
- setInCache(key, result);
1255
- return result;
1256
- },
1257
- async put(vault, collection, id, env, ev) {
1258
- invalidate(cacheKey(vault, collection, id));
1259
- await next.put(vault, collection, id, env, ev);
1260
- setInCache(cacheKey(vault, collection, id), env);
1261
- },
1262
- async delete(vault, collection, id) {
1263
- invalidate(cacheKey(vault, collection, id));
1264
- await next.delete(vault, collection, id);
1265
- },
1266
- list: (v, c) => next.list(v, c),
1267
- loadAll: (v) => next.loadAll(v),
1268
- saveAll: (v, d) => next.saveAll(v, d)
1269
- });
1270
- }
1271
- function withHealthCheck(opts = {}) {
1272
- const intervalMs = opts.checkIntervalMs ?? 3e4;
1273
- const failThreshold = opts.suspendAfterFailures ?? 3;
1274
- const successThreshold = opts.resumeAfterSuccess ?? 1;
1275
- let isSuspended = false;
1276
- let consecutiveFailures = 0;
1277
- let consecutiveSuccesses = 0;
1278
- return (next) => {
1279
- const checkFn = opts.check ?? (next.ping ? () => next.ping() : async () => {
1280
- await next.list("__health__", "__ping__");
1281
- return true;
1282
- });
1283
- async function doCheck() {
1284
- try {
1285
- const ok = await checkFn();
1286
- if (ok) {
1287
- consecutiveFailures = 0;
1288
- consecutiveSuccesses++;
1289
- if (isSuspended && consecutiveSuccesses >= successThreshold) {
1290
- isSuspended = false;
1291
- consecutiveSuccesses = 0;
1292
- opts.onResume?.();
1293
- }
1294
- } else {
1295
- throw new Error("Health check returned false");
1296
- }
1297
- } catch {
1298
- consecutiveSuccesses = 0;
1299
- consecutiveFailures++;
1300
- if (!isSuspended && consecutiveFailures >= failThreshold) {
1301
- isSuspended = true;
1302
- consecutiveFailures = 0;
1303
- opts.onSuspend?.();
1304
- }
1305
- }
1306
- }
1307
- setInterval(() => {
1308
- void doCheck();
1309
- }, intervalMs);
1310
- const wrapped = {
1311
- ...next,
1312
- name: next.name ? `health(${next.name})` : "health",
1313
- async get(v, c, id) {
1314
- return isSuspended ? null : next.get(v, c, id);
1315
- },
1316
- async put(v, c, id, env, ev) {
1317
- if (!isSuspended) await next.put(v, c, id, env, ev);
1318
- },
1319
- async delete(v, c, id) {
1320
- if (!isSuspended) await next.delete(v, c, id);
1321
- },
1322
- async list(v, c) {
1323
- return isSuspended ? [] : next.list(v, c);
1324
- },
1325
- async loadAll(v) {
1326
- return isSuspended ? {} : next.loadAll(v);
1327
- },
1328
- async saveAll(v, d) {
1329
- if (!isSuspended) await next.saveAll(v, d);
1330
- }
1331
- };
1332
- return wrapped;
1333
- };
1334
- }
1335
-
1336
630
  // src/with-commit/numbering/descriptor.ts
1337
- function withDeferredNumbering(config) {
631
+ function withDeferredNumbering(opts) {
1338
632
  return {
1339
- series: config.series,
1340
- collection: config.collection,
1341
- field: config.field,
1342
- settleWindowMs: config.settleWindowMs ?? 0
633
+ series: opts.series,
634
+ collection: opts.collection,
635
+ field: opts.field,
636
+ settleWindowMs: opts.settleWindowMs ?? 0
1343
637
  };
1344
638
  }
1345
639
 
1346
- // src/via/money/iso4217.ts
1347
- var MINOR_UNITS = {
1348
- // 2-decimal majors
1349
- EUR: 2,
1350
- USD: 2,
1351
- GBP: 2,
1352
- CHF: 2,
1353
- CAD: 2,
1354
- AUD: 2,
1355
- NZD: 2,
1356
- SGD: 2,
1357
- HKD: 2,
1358
- CNY: 2,
1359
- INR: 2,
1360
- BRL: 2,
1361
- MXN: 2,
1362
- ZAR: 2,
1363
- RUB: 2,
1364
- TRY: 2,
1365
- PLN: 2,
1366
- SEK: 2,
1367
- NOK: 2,
1368
- DKK: 2,
1369
- CZK: 2,
1370
- HUF: 2,
1371
- RON: 2,
1372
- ILS: 2,
1373
- THB: 2,
1374
- PHP: 2,
1375
- MYR: 2,
1376
- IDR: 2,
1377
- AED: 2,
1378
- SAR: 2,
1379
- QAR: 2,
1380
- EGP: 2,
1381
- // 0-decimal
1382
- JPY: 0,
1383
- KRW: 0,
1384
- ISK: 0,
1385
- CLP: 0,
1386
- VND: 0,
1387
- XOF: 0,
1388
- XAF: 0,
1389
- PYG: 0,
1390
- // 3-decimal
1391
- BHD: 3,
1392
- KWD: 3,
1393
- OMR: 3,
1394
- TND: 3,
1395
- JOD: 3,
1396
- IQD: 3,
1397
- LYD: 3
1398
- };
1399
- function scaleForCurrency(code) {
1400
- const v = MINOR_UNITS[code];
1401
- return v === void 0 ? null : v;
1402
- }
1403
-
1404
- // src/via/money/fixed-point.ts
1405
- function expandExponent(s) {
1406
- const m = /^([+-]?)(\d+)(?:\.(\d+))?[eE]([+-]?\d+)$/.exec(s);
1407
- if (!m) return s;
1408
- const sign = m[1] === "-" ? "-" : "";
1409
- const intp = m[2];
1410
- const frac = m[3] ?? "";
1411
- const exp = Number(m[4]);
1412
- const digits = intp + frac;
1413
- const pointPos = intp.length + exp;
1414
- let body;
1415
- if (pointPos <= 0) {
1416
- body = "0." + "0".repeat(-pointPos) + digits;
1417
- } else if (pointPos >= digits.length) {
1418
- body = digits + "0".repeat(pointPos - digits.length);
1419
- } else {
1420
- body = digits.slice(0, pointPos) + "." + digits.slice(pointPos);
1421
- }
1422
- return sign + body;
1423
- }
1424
- function toCanonicalDecimalString(input) {
1425
- let s;
1426
- if (typeof input === "number") {
1427
- if (!Number.isFinite(input)) return null;
1428
- s = String(input);
1429
- } else {
1430
- s = input.trim();
1431
- }
1432
- s = expandExponent(s);
1433
- if (s.startsWith("+")) s = s.slice(1);
1434
- if (!/^-?(\d+(\.\d*)?|\.\d+)$/.test(s)) return null;
1435
- return s;
1436
- }
1437
- function shouldRoundUp(negative, lastKeptDigit, firstDiscarded, hasMoreNonZeroAfterFirst, mode) {
1438
- switch (mode) {
1439
- case "up":
1440
- return true;
1441
- case "down":
1442
- return false;
1443
- case "ceil":
1444
- return !negative;
1445
- case "floor":
1446
- return negative;
1447
- case "half-up":
1448
- return firstDiscarded >= 5;
1449
- case "half-down":
1450
- return firstDiscarded > 5 || firstDiscarded === 5 && hasMoreNonZeroAfterFirst;
1451
- case "half-even":
1452
- if (firstDiscarded > 5) return true;
1453
- if (firstDiscarded < 5) return false;
1454
- return hasMoreNonZeroAfterFirst || lastKeptDigit % 2 === 1;
1455
- }
1456
- }
1457
- function parseToScaledInt(input, scale, rounding) {
1458
- const canonical = toCanonicalDecimalString(input);
1459
- if (canonical === null) return { ok: false, reason: "nonfinite" };
1460
- const negative = canonical.startsWith("-");
1461
- const unsigned = negative ? canonical.slice(1) : canonical;
1462
- const dot = unsigned.indexOf(".");
1463
- const intPart = dot === -1 ? unsigned : unsigned.slice(0, dot);
1464
- const fracPart = dot === -1 ? "" : unsigned.slice(dot + 1);
1465
- const intDigits = intPart === "" ? "0" : intPart;
1466
- if (fracPart.length <= scale) {
1467
- const keep2 = fracPart.padEnd(scale, "0");
1468
- const magnitude2 = BigInt(intDigits + keep2);
1469
- return { ok: true, value: negative && magnitude2 !== 0n ? -magnitude2 : magnitude2 };
1470
- }
1471
- const keep = fracPart.slice(0, scale);
1472
- const tail = fracPart.slice(scale);
1473
- const magnitudeDigits = intDigits + keep;
1474
- let magnitude = BigInt(magnitudeDigits);
1475
- if (/^0+$/.test(tail)) {
1476
- return { ok: true, value: negative && magnitude !== 0n ? -magnitude : magnitude };
1477
- }
1478
- if (rounding === void 0) return { ok: false, reason: "precision" };
1479
- const lastKeptDigit = Number(magnitudeDigits[magnitudeDigits.length - 1]);
1480
- const firstDiscarded = Number(tail[0]);
1481
- const hasMoreNonZeroAfterFirst = /[1-9]/.test(tail.slice(1));
1482
- if (shouldRoundUp(negative, lastKeptDigit, firstDiscarded, hasMoreNonZeroAfterFirst, rounding)) {
1483
- magnitude += 1n;
1484
- }
1485
- return { ok: true, value: negative && magnitude !== 0n ? -magnitude : magnitude };
1486
- }
1487
- function decimalScaleOf(input) {
1488
- const s = toCanonicalDecimalString(input);
1489
- if (s === null) return null;
1490
- const dot = s.indexOf(".");
1491
- return dot === -1 ? 0 : s.length - dot - 1;
1492
- }
1493
- function rescaleScaledInt(value, fromScale, toScale, rounding = "half-up") {
1494
- if (toScale >= fromScale) return value * 10n ** BigInt(toScale - fromScale);
1495
- const drop = fromScale - toScale;
1496
- const negative = value < 0n;
1497
- const absStr = (negative ? -value : value).toString().padStart(drop + 1, "0");
1498
- const keptStr = absStr.slice(0, absStr.length - drop);
1499
- const tail = absStr.slice(absStr.length - drop);
1500
- let magnitude = BigInt(keptStr);
1501
- if (!/^0+$/.test(tail)) {
1502
- const lastKeptDigit = Number(keptStr[keptStr.length - 1]);
1503
- const firstDiscarded = Number(tail[0]);
1504
- const hasMoreNonZeroAfterFirst = /[1-9]/.test(tail.slice(1));
1505
- if (shouldRoundUp(negative, lastKeptDigit, firstDiscarded, hasMoreNonZeroAfterFirst, rounding)) {
1506
- magnitude += 1n;
1507
- }
1508
- }
1509
- return negative && magnitude !== 0n ? -magnitude : magnitude;
1510
- }
1511
- function formatScaledInt(value, scale) {
1512
- const negative = value < 0n;
1513
- const abs = (negative ? -value : value).toString();
1514
- if (scale === 0) return (negative ? "-" : "") + abs;
1515
- const padded = abs.padStart(scale + 1, "0");
1516
- const cut = padded.length - scale;
1517
- const intPart = padded.slice(0, cut);
1518
- const fracPart = padded.slice(cut);
1519
- return (negative ? "-" : "") + intPart + "." + fracPart;
1520
- }
1521
-
1522
- // src/via/money/paths.ts
1523
- var SEGMENT_RE = /^(\*|[^.[\]*]+)(\[\])?$/;
1524
- var parseCache = /* @__PURE__ */ new Map();
1525
- function parseMoneyPath(path) {
1526
- const cached = parseCache.get(path);
1527
- if (cached) return cached;
1528
- if (typeof path !== "string" || path.length === 0) {
1529
- throw new ValidationError("moneyFields: path must be a non-empty string");
1530
- }
1531
- const segments = [];
1532
- for (const part of path.split(".")) {
1533
- const m = SEGMENT_RE.exec(part);
1534
- if (!m) {
1535
- throw new ValidationError(
1536
- `moneyFields: invalid path "${path}" \u2014 segment "${part}" must be a key, "key[]", "*", or "*[]"`
1537
- );
1538
- }
1539
- const array = m[2] === "[]";
1540
- segments.push(
1541
- m[1] === "*" ? { kind: "wildcard", array } : { kind: "key", key: m[1], array }
1542
- );
1543
- }
1544
- parseCache.set(path, segments);
1545
- return segments;
1546
- }
1547
- function isSimpleMoneyPath(path) {
1548
- return !path.includes(".") && !path.includes("[") && !path.includes("*");
1549
- }
1550
- function validateMoneyFieldPaths(moneyFields) {
1551
- for (const path of Object.keys(moneyFields)) parseMoneyPath(path);
1552
- }
1553
- function transformAtMoneyPath(node, path, segments, index, visit, lenient) {
1554
- if (node === null || node === void 0) return node;
1555
- const seg = segments[index];
1556
- const last = index === segments.length - 1;
1557
- if (seg.kind === "key") {
1558
- if (typeof node !== "object" || Array.isArray(node)) {
1559
- if (lenient) return node;
1560
- throw new ValidationError(
1561
- `moneyFields: path "${path}" expected an object at segment "${seg.key}", got ${Array.isArray(node) ? "an array" : typeof node}`
1562
- );
1563
- }
1564
- const obj2 = node;
1565
- if (!(seg.key in obj2) || obj2[seg.key] === null || obj2[seg.key] === void 0) return node;
1566
- if (seg.array) {
1567
- const arr = obj2[seg.key];
1568
- if (!Array.isArray(arr)) {
1569
- if (lenient) return node;
1570
- throw new ValidationError(
1571
- `moneyFields: path "${path}" declares "${seg.key}[]" but the value is not an array`
1572
- );
1573
- }
1574
- const cloned = [...arr];
1575
- if (last) {
1576
- for (let i = 0; i < cloned.length; i++) visit(cloned, i);
1577
- } else {
1578
- for (let i = 0; i < cloned.length; i++) {
1579
- cloned[i] = transformAtMoneyPath(cloned[i], path, segments, index + 1, visit, lenient);
1580
- }
1581
- }
1582
- return { ...obj2, [seg.key]: cloned };
1583
- }
1584
- const clone2 = { ...obj2 };
1585
- if (last) {
1586
- visit(clone2, seg.key);
1587
- } else {
1588
- clone2[seg.key] = transformAtMoneyPath(clone2[seg.key], path, segments, index + 1, visit, lenient);
1589
- }
1590
- return clone2;
1591
- }
1592
- if (seg.array) {
1593
- if (!Array.isArray(node)) {
1594
- if (lenient) return node;
1595
- throw new ValidationError(`moneyFields: path "${path}" declares "*[]" but the value is not an array`);
1596
- }
1597
- const cloned = [...node];
1598
- if (last) {
1599
- for (let i = 0; i < cloned.length; i++) visit(cloned, i);
1600
- } else {
1601
- for (let i = 0; i < cloned.length; i++) {
1602
- cloned[i] = transformAtMoneyPath(cloned[i], path, segments, index + 1, visit, lenient);
1603
- }
1604
- }
1605
- return cloned;
1606
- }
1607
- if (typeof node !== "object" || Array.isArray(node)) {
1608
- if (lenient) return node;
1609
- throw new ValidationError(
1610
- `moneyFields: path "${path}" applies "*" to a non-object (${Array.isArray(node) ? 'array \u2014 use "*[]"' : typeof node})`
1611
- );
1612
- }
1613
- const obj = node;
1614
- const clone = { ...obj };
1615
- for (const key of Object.keys(obj)) {
1616
- const v = clone[key];
1617
- if (v === null || v === void 0) continue;
1618
- if (last) visit(clone, key);
1619
- else clone[key] = transformAtMoneyPath(v, path, segments, index + 1, visit, lenient);
1620
- }
1621
- return clone;
1622
- }
1623
-
1624
- // src/via/money/normalize.ts
1625
- function isMoneyValueObject(v) {
1626
- return typeof v === "object" && v !== null && "currency" in v;
1627
- }
1628
- function quantizeAmount(field, input, scale, rounding) {
1629
- const r = parseToScaledInt(input, scale, rounding);
1630
- if (!r.ok) {
1631
- if (r.reason === "precision") throw new MoneyPrecisionError(field, input, scale);
1632
- throw new TypeError(`money: field "${field}" value ${JSON.stringify(input)} is not a finite decimal`);
1633
- }
1634
- return r.value.toString();
1635
- }
1636
- function canonicalizeStoredMoney(record, moneyFields) {
1637
- if (record === null || record === void 0) return record;
1638
- if (!moneyFields || Object.keys(moneyFields).length === 0) return record;
1639
- return decodeMoneyFields(record, moneyFields, "raw");
1640
- }
1641
- function canonicalizeIncomingMoney(record, moneyFields) {
1642
- if (!moneyFields || Object.keys(moneyFields).length === 0) return record;
1643
- try {
1644
- return decodeMoneyFields(
1645
- quantizeMoneyFields(record, moneyFields),
1646
- moneyFields,
1647
- "raw"
1648
- );
1649
- } catch {
1650
- return record;
1651
- }
1652
- }
1653
- function quantizeValue(field, raw, desc) {
1654
- if (desc.mode === "fixed") {
1655
- const currency2 = desc.fixedCurrency;
1656
- return quantizeAmount(field, raw, desc.scaleFor(currency2), desc.rounding);
1657
- }
1658
- let amount;
1659
- let currency;
1660
- if (isMoneyValueObject(raw)) {
1661
- currency = String(raw.currency);
1662
- amount = raw.amount;
1663
- } else {
1664
- const sole = desc.soleCurrency();
1665
- if (sole === void 0) {
1666
- throw new TypeError(
1667
- `money: field "${field}" is multi-currency \u2014 write { amount, currency }, not a bare amount`
1668
- );
1669
- }
1670
- currency = sole;
1671
- amount = raw;
1672
- }
1673
- const scale = desc.scaleFor(currency);
1674
- return { amount: quantizeAmount(field, amount, scale, desc.rounding), currency };
1675
- }
1676
- function quantizeMoneyFields(record, moneyFields) {
1677
- let out = { ...record };
1678
- for (const [path, desc] of Object.entries(moneyFields)) {
1679
- if (isSimpleMoneyPath(path)) {
1680
- const raw = out[path];
1681
- if (raw === null || raw === void 0) continue;
1682
- out[path] = quantizeValue(path, raw, desc);
1683
- continue;
1684
- }
1685
- out = transformAtMoneyPath(
1686
- out,
1687
- path,
1688
- parseMoneyPath(path),
1689
- 0,
1690
- (container, key) => {
1691
- const raw = container[key];
1692
- if (raw === null || raw === void 0) return;
1693
- container[key] = quantizeValue(path, raw, desc);
1694
- },
1695
- /* lenient */
1696
- false
1697
- );
1698
- }
1699
- return out;
1700
- }
1701
- function formatCurrency(decimal, currency, scale, locale) {
1702
- const fmt = new Intl.NumberFormat(locale, {
1703
- style: "currency",
1704
- currency,
1705
- minimumFractionDigits: scale,
1706
- maximumFractionDigits: scale
1707
- });
1708
- return fmt.format(decimal);
1709
- }
1710
- function moneyScaledValue(stored, desc) {
1711
- let raw;
1712
- if (desc.mode === "fixed") {
1713
- raw = stored;
1714
- } else {
1715
- if (!isMoneyValueObject(stored)) return null;
1716
- raw = stored.amount;
1717
- }
1718
- if (typeof raw !== "string" && typeof raw !== "number") return null;
1719
- try {
1720
- return BigInt(String(raw));
1721
- } catch {
1722
- return null;
1723
- }
1724
- }
1725
- function canonicalizeMoneyIndexKey(field, rawValue, moneyFields) {
1726
- const desc = moneyFields[field];
1727
- if (!desc || desc.mode !== "fixed") return void 0;
1728
- return moneyScaledValue(rawValue, desc)?.toString();
1729
- }
1730
- function decodeValue(stored, desc) {
1731
- let currency;
1732
- let scaledIntString;
1733
- if (desc.mode === "fixed") {
1734
- if (typeof stored !== "string" && typeof stored !== "number") return null;
1735
- currency = desc.fixedCurrency;
1736
- scaledIntString = String(stored);
1737
- } else {
1738
- if (!isMoneyValueObject(stored)) return null;
1739
- const amount = stored.amount;
1740
- if (typeof stored.currency !== "string" || typeof amount !== "string" && typeof amount !== "number") return null;
1741
- currency = stored.currency;
1742
- scaledIntString = String(amount);
1743
- }
1744
- const scale = desc.scaleFor(currency);
1745
- let decimal;
1746
- try {
1747
- decimal = formatScaledInt(BigInt(scaledIntString), scale);
1748
- } catch {
1749
- return null;
1750
- }
1751
- return {
1752
- decoded: desc.mode === "fixed" ? decimal : { amount: decimal, currency },
1753
- decimal,
1754
- currency,
1755
- scale
1756
- };
1757
- }
1758
- function presentVirtualMoneyFields(record, moneyFields, virtualMoney, locale) {
1759
- let out = record;
1760
- const format = locale !== "raw";
1761
- const fmtLocale = typeof locale === "string" && locale !== "raw" ? locale : "en-US";
1762
- for (const field of virtualMoney) {
1763
- const desc = moneyFields[field];
1764
- if (!desc || desc.mode !== "fixed") continue;
1765
- const raw = out[field];
1766
- if (raw === null || raw === void 0) continue;
1767
- if (typeof raw !== "number" && typeof raw !== "string") continue;
1768
- const currency = desc.fixedCurrency;
1769
- const scale = desc.scaleFor(currency);
1770
- const r = parseToScaledInt(raw, scale, desc.rounding);
1771
- if (!r.ok) continue;
1772
- if (out === record) out = { ...record };
1773
- const decimal = formatScaledInt(r.value, scale);
1774
- out[field] = decimal;
1775
- if (format) {
1776
- out[`${field}Formatted`] = formatCurrency(decimal, currency, scale, fmtLocale);
1777
- out[`${field}Number`] = Number(decimal);
1778
- }
1779
- }
1780
- return out;
1781
- }
1782
- function decodeMoneyFields(record, moneyFields, locale) {
1783
- let out = { ...record };
1784
- const format = locale !== "raw";
1785
- const fmtLocale = typeof locale === "string" && locale !== "raw" ? locale : "en-US";
1786
- for (const [path, desc] of Object.entries(moneyFields)) {
1787
- if (isSimpleMoneyPath(path)) {
1788
- const stored = out[path];
1789
- if (stored === null || stored === void 0) continue;
1790
- const r = decodeValue(stored, desc);
1791
- if (r === null) continue;
1792
- out[path] = r.decoded;
1793
- if (format) {
1794
- out[`${path}Formatted`] = formatCurrency(r.decimal, r.currency, r.scale, fmtLocale);
1795
- out[`${path}Number`] = Number(r.decimal);
1796
- }
1797
- continue;
1798
- }
1799
- out = transformAtMoneyPath(
1800
- out,
1801
- path,
1802
- parseMoneyPath(path),
1803
- 0,
1804
- (container, key) => {
1805
- const stored = container[key];
1806
- if (stored === null || stored === void 0) return;
1807
- const r = decodeValue(stored, desc);
1808
- if (r === null) return;
1809
- container[key] = r.decoded;
1810
- if (format && typeof key === "string" && !Array.isArray(container)) {
1811
- container[`${key}Formatted`] = formatCurrency(r.decimal, r.currency, r.scale, fmtLocale);
1812
- container[`${key}Number`] = Number(r.decimal);
1813
- }
1814
- },
1815
- /* lenient */
1816
- true
1817
- );
1818
- }
1819
- return out;
1820
- }
1821
-
1822
- // src/via/money/where.ts
1823
- function isMoneyValueObject2(v) {
1824
- return typeof v === "object" && v !== null && "currency" in v;
1825
- }
1826
- function parseOperand(field, raw, desc) {
1827
- let amount;
1828
- let currency;
1829
- if (desc.mode === "fixed") {
1830
- currency = desc.fixedCurrency;
1831
- amount = raw;
1832
- } else if (isMoneyValueObject2(raw)) {
1833
- currency = String(raw.currency);
1834
- amount = raw.amount;
1835
- } else {
1836
- const sole = desc.soleCurrency();
1837
- if (sole === void 0) {
1838
- throw new MoneyUnsupportedError(
1839
- `where("${field}"): field is multi-currency \u2014 compare against { amount, currency }, not a bare amount`
1840
- );
1841
- }
1842
- currency = sole;
1843
- amount = raw;
1844
- }
1845
- if (typeof amount !== "number" && typeof amount !== "string") {
1846
- throw new MoneyUnsupportedError(
1847
- `where("${field}"): operand ${JSON.stringify(raw)} is not a money amount`
1848
- );
1849
- }
1850
- const r = parseToScaledInt(amount, desc.scaleFor(currency), desc.rounding);
1851
- if (!r.ok) {
1852
- throw new MoneyUnsupportedError(
1853
- `where("${field}"): operand ${JSON.stringify(amount)} is not a finite decimal`
1854
- );
1855
- }
1856
- return { scaled: r.value.toString(), currency };
1857
- }
1858
- function moneyFieldClause(field, op, value, desc) {
1859
- switch (op) {
1860
- case "==":
1861
- case "!=":
1862
- case "<":
1863
- case "<=":
1864
- case ">":
1865
- case ">=": {
1866
- const e = parseOperand(field, value, desc);
1867
- return { mode: desc.mode, entries: [e] };
1868
- }
1869
- case "between": {
1870
- if (!Array.isArray(value) || value.length !== 2) {
1871
- throw new MoneyUnsupportedError(`where("${field}"): 'between' needs a [lo, hi] tuple`);
1872
- }
1873
- const lo = parseOperand(field, value[0], desc);
1874
- const hi = parseOperand(field, value[1], desc);
1875
- if (lo.currency !== hi.currency) {
1876
- throw new MoneyUnsupportedError(
1877
- `where("${field}"): 'between' bounds mix currencies (${lo.currency} vs ${hi.currency})`
1878
- );
1879
- }
1880
- return { mode: desc.mode, entries: [lo, hi] };
1881
- }
1882
- case "in": {
1883
- if (!Array.isArray(value)) {
1884
- throw new MoneyUnsupportedError(`where("${field}"): 'in' needs an array of amounts`);
1885
- }
1886
- return { mode: desc.mode, entries: value.map((v) => parseOperand(field, v, desc)) };
1887
- }
1888
- default:
1889
- throw new MoneyUnsupportedError(
1890
- `where("${field}"): operator '${op}' is not supported on a money field`
1891
- );
1892
- }
1893
- }
1894
- function moneyIndexProbe(op, payload) {
1895
- if (payload.mode !== "fixed") return void 0;
1896
- if (op === "==") return payload.entries[0]?.scaled;
1897
- if (op === "in") return payload.entries.map((e) => e.scaled);
1898
- return void 0;
1899
- }
1900
- function readStored(actual, operand) {
1901
- let amount;
1902
- let currency;
1903
- if (operand.mode === "fixed") {
1904
- if (typeof actual !== "string" && typeof actual !== "number") return null;
1905
- amount = actual;
1906
- currency = operand.entries[0]?.currency ?? "";
1907
- } else {
1908
- if (!isMoneyValueObject2(actual)) return null;
1909
- if (typeof actual.currency !== "string") return null;
1910
- amount = actual.amount;
1911
- currency = actual.currency;
1912
- }
1913
- if (typeof amount !== "string" && typeof amount !== "number") return null;
1914
- try {
1915
- return { scaled: BigInt(amount).toString(), currency };
1916
- } catch {
1917
- return null;
1918
- }
1919
- }
1920
- function evaluateMoneyClause(actual, op, operand) {
1921
- const stored = readStored(actual, operand);
1922
- if (stored === null) return op === "!=";
1923
- const a = BigInt(stored.scaled);
1924
- if (op === "in") {
1925
- return operand.entries.some(
1926
- (e2) => e2.currency === stored.currency && BigInt(e2.scaled) === a
1927
- );
1928
- }
1929
- if (op === "between") {
1930
- const [lo, hi] = operand.entries;
1931
- if (!lo || !hi || lo.currency !== stored.currency) return false;
1932
- return a >= BigInt(lo.scaled) && a <= BigInt(hi.scaled);
1933
- }
1934
- const e = operand.entries[0];
1935
- if (!e) return false;
1936
- if (e.currency !== stored.currency) return op === "!=";
1937
- const b = BigInt(e.scaled);
1938
- switch (op) {
1939
- case "==":
1940
- return a === b;
1941
- case "!=":
1942
- return a !== b;
1943
- case "<":
1944
- return a < b;
1945
- case "<=":
1946
- return a <= b;
1947
- case ">":
1948
- return a > b;
1949
- case ">=":
1950
- return a >= b;
1951
- default:
1952
- return false;
1953
- }
1954
- }
1955
-
1956
- // src/via/money/money-reducer.ts
1957
- function toScaledIntFromAny(v, scale) {
1958
- if (typeof v === "bigint") return v;
1959
- if (typeof v === "number") {
1960
- const r = parseToScaledInt(v, scale);
1961
- return r.ok ? r.value : null;
1962
- }
1963
- if (typeof v === "string") {
1964
- if (!v.includes(".")) {
1965
- try {
1966
- return BigInt(v);
1967
- } catch {
1968
- return null;
1969
- }
1970
- }
1971
- const r = parseToScaledInt(v, scale);
1972
- return r.ok ? r.value : null;
1973
- }
1974
- return null;
1975
- }
1976
- function readMoney(record, field, desc) {
1977
- const raw = readPath(record, field);
1978
- if (raw === null || raw === void 0) return null;
1979
- if (desc.mode === "fixed") {
1980
- const cur = desc.fixedCurrency;
1981
- const value2 = toScaledIntFromAny(raw, desc.scaleFor(cur));
1982
- return value2 === null ? null : { currency: cur, value: value2 };
1983
- }
1984
- if (typeof raw !== "object") return null;
1985
- const o = raw;
1986
- if (typeof o.currency !== "string") return null;
1987
- const scale = desc.allows(o.currency) ? desc.scaleFor(o.currency) : 0;
1988
- const value = toScaledIntFromAny(o.amount, scale);
1989
- return value === null ? null : { currency: o.currency, value };
1990
- }
1991
- function targetScaleFor(desc, currency) {
1992
- if (desc.allows(currency)) return desc.scaleFor(currency);
1993
- const s = scaleForCurrency(currency);
1994
- if (s === null) {
1995
- throw new Error(`money: cannot determine scale for conversion target "${currency}"`);
1996
- }
1997
- return s;
1998
- }
1999
- function parseRate(rate) {
2000
- const s = String(rate).trim();
2001
- const neg = s.startsWith("-");
2002
- const body = neg ? s.slice(1) : s;
2003
- const dot = body.indexOf(".");
2004
- const intPart = dot === -1 ? body : body.slice(0, dot);
2005
- const fracPart = dot === -1 ? "" : body.slice(dot + 1);
2006
- const int = BigInt((intPart === "" ? "0" : intPart) + fracPart);
2007
- return { int: neg ? -int : int, scale: fracPart.length };
2008
- }
2009
- function divRoundHalfEven(n, d) {
2010
- const q = n / d;
2011
- const r = n % d;
2012
- const twiceR = (r < 0n ? -r : r) * 2n;
2013
- if (twiceR < d) return q;
2014
- if (twiceR > d) return q + (n < 0n ? -1n : 1n);
2015
- return q % 2n === 0n ? q : q + (n < 0n ? -1n : 1n);
2016
- }
2017
- function convertScaled(value, srcScale, rate, targetScale) {
2018
- const { int: rateInt, scale: rateScale } = parseRate(rate);
2019
- const product = value * rateInt;
2020
- const curScale = srcScale + rateScale;
2021
- if (curScale === targetScale) return product;
2022
- if (curScale < targetScale) return product * 10n ** BigInt(targetScale - curScale);
2023
- return divRoundHalfEven(product, 10n ** BigInt(curScale - targetScale));
2024
- }
2025
- function finalizeSum(state, desc, convertTo, fx) {
2026
- if (convertTo !== void 0) {
2027
- if (fx === void 0) {
2028
- throw new Error(`money: sum convertTo "${convertTo}" requires an fx rate map`);
2029
- }
2030
- const targetScale = targetScaleFor(desc, convertTo);
2031
- let total = 0n;
2032
- for (const [cur, v] of state) {
2033
- if (cur === convertTo) {
2034
- total += convertScaled(v, desc.scaleFor(cur), 1, targetScale);
2035
- continue;
2036
- }
2037
- const rate = fx[`${cur}->${convertTo}`];
2038
- if (rate === void 0) {
2039
- throw new Error(`money: no fx rate for "${cur}->${convertTo}"`);
2040
- }
2041
- total += convertScaled(v, desc.scaleFor(cur), rate, targetScale);
2042
- }
2043
- return formatScaledInt(total, targetScale);
2044
- }
2045
- if (desc.mode === "fixed") {
2046
- const cur = desc.fixedCurrency;
2047
- return formatScaledInt(state.get(cur) ?? 0n, desc.scaleFor(cur));
2048
- }
2049
- const out = {};
2050
- for (const [cur, v] of state) out[cur] = formatScaledInt(v, desc.scaleFor(cur));
2051
- return out;
2052
- }
2053
- function moneySumReducer(field, desc, convertTo, fx) {
2054
- return {
2055
- op: "sum",
2056
- field,
2057
- init: () => /* @__PURE__ */ new Map(),
2058
- step: (state, record) => {
2059
- const m = readMoney(record, field, desc);
2060
- if (m) state.set(m.currency, (state.get(m.currency) ?? 0n) + m.value);
2061
- return state;
2062
- },
2063
- remove: (state, record) => {
2064
- const m = readMoney(record, field, desc);
2065
- if (m) state.set(m.currency, (state.get(m.currency) ?? 0n) - m.value);
2066
- return state;
2067
- },
2068
- finalize: (state) => finalizeSum(state, desc, convertTo, fx)
2069
- };
2070
- }
2071
- function extremum(values, op) {
2072
- let out = values[0];
2073
- for (let i = 1; i < values.length; i++) {
2074
- const v = values[i];
2075
- if (op === "min" ? v < out : v > out) out = v;
2076
- }
2077
- return out;
2078
- }
2079
- function moneyMinMaxReducer(op, field, desc) {
640
+ // src/via/computed/binding.ts
641
+ var VIRTUAL_POSTURE = { encryptedAtRest: "envelope", queryable: "none", exportable: true, forgettable: false };
642
+ function computedBinding(cfg) {
643
+ const fields = cfg.virtualFields;
2080
644
  return {
2081
- op,
2082
- field,
2083
- init: () => /* @__PURE__ */ new Map(),
2084
- step: (state, record) => {
2085
- const m = readMoney(record, field, desc);
2086
- if (m) {
2087
- const arr = state.get(m.currency);
2088
- if (arr) arr.push(m.value);
2089
- else state.set(m.currency, [m.value]);
645
+ brand: "computed",
646
+ posture: VIRTUAL_POSTURE,
647
+ covers: (field) => fields.has(field),
648
+ present: (record) => {
649
+ let r = record;
650
+ for (const [field, desc] of fields) {
651
+ if (r === record) r = { ...record };
652
+ r[field] = desc.fn(r);
2090
653
  }
2091
- return state;
2092
- },
2093
- remove: (state, record) => {
2094
- const m = readMoney(record, field, desc);
2095
- if (m) {
2096
- const arr = state.get(m.currency);
2097
- if (arr) {
2098
- const idx = arr.indexOf(m.value);
2099
- if (idx >= 0) arr.splice(idx, 1);
2100
- }
2101
- }
2102
- return state;
2103
- },
2104
- finalize: (state) => {
2105
- if (desc.mode === "fixed") {
2106
- const cur = desc.fixedCurrency;
2107
- const arr = state.get(cur);
2108
- if (!arr || arr.length === 0) return null;
2109
- return formatScaledInt(extremum(arr, op), desc.scaleFor(cur));
2110
- }
2111
- const out = {};
2112
- for (const [cur, arr] of state) {
2113
- if (arr.length > 0) out[cur] = formatScaledInt(extremum(arr, op), desc.scaleFor(cur));
2114
- }
2115
- return out;
2116
- }
2117
- };
2118
- }
2119
- function wrapMoneyReducers(spec, moneyFields) {
2120
- let changed = false;
2121
- const out = {};
2122
- for (const [key, reducer] of Object.entries(spec)) {
2123
- const field = reducer.field;
2124
- const desc = field ? moneyFields[field] : void 0;
2125
- if (desc && reducer.op === "avg") {
2126
- throw new MoneyUnsupportedError(
2127
- field,
2128
- `avg() is not supported on money field "${field}" in v1 \u2014 use sum() and count() and divide at the boundary.`
2129
- );
654
+ return r;
2130
655
  }
2131
- if (desc && (reducer.op === "sum" || reducer.op === "min" || reducer.op === "max")) {
2132
- changed = true;
2133
- out[key] = reducer.op === "sum" ? moneySumReducer(field, desc, reducer.convertTo, reducer.fx) : moneyMinMaxReducer(reducer.op, field, desc);
2134
- } else {
2135
- out[key] = reducer;
2136
- }
2137
- }
2138
- return changed ? out : spec;
2139
- }
2140
-
2141
- // src/via/money/binding.ts
2142
- function moneyBinding(moneyFields, virtualMoneyFields) {
2143
- validateMoneyFieldPaths(moneyFields);
2144
- const hasVirtualMoney = virtualMoneyFields !== void 0 && virtualMoneyFields.size > 0;
2145
- const ordinaryPresentFields = hasVirtualMoney ? Object.fromEntries(Object.entries(moneyFields).filter(([f]) => !virtualMoneyFields.has(f))) : moneyFields;
2146
- return {
2147
- brand: "money",
2148
- posture: { encryptedAtRest: "envelope", queryable: "ordered", exportable: true, forgettable: true },
2149
- covers: (field) => field in moneyFields,
2150
- ingest: (r) => canonicalizeIncomingMoney(r, moneyFields),
2151
- canonicalizeStored: (r) => canonicalizeStoredMoney(r, moneyFields),
2152
- encodeWrite: (r) => quantizeMoneyFields(r, moneyFields),
2153
- present: (r, ctx) => decodeMoneyFields(r, ordinaryPresentFields, typeof ctx.locale === "string" ? ctx.locale : void 0),
2154
- ...hasVirtualMoney ? {
2155
- presentLate: (r, ctx) => presentVirtualMoneyFields(r, moneyFields, virtualMoneyFields, typeof ctx.locale === "string" ? ctx.locale : void 0)
2156
- } : {},
2157
- buildClause: (field, op, value) => {
2158
- const desc = moneyFields[field];
2159
- if (!desc) return void 0;
2160
- return moneyFieldClause(field, op, value, desc);
2161
- },
2162
- evaluateClause: (actual, op, payload) => evaluateMoneyClause(actual, op, payload),
2163
- indexProbe: (op, payload) => moneyIndexProbe(op, payload),
2164
- canonicalizeIndexKey: (field, rawValue) => canonicalizeMoneyIndexKey(field, rawValue, moneyFields),
2165
- decodeResults: (r) => decodeMoneyFields(r, moneyFields, "raw"),
2166
- compareForOrder: (field, a, b) => {
2167
- const desc = moneyFields[field];
2168
- if (!desc) return void 0;
2169
- const av = moneyScaledValue(a, desc);
2170
- const bv = moneyScaledValue(b, desc);
2171
- if (av === null) return bv === null ? 0 : 1;
2172
- if (bv === null) return -1;
2173
- return av < bv ? -1 : av > bv ? 1 : 0;
2174
- },
2175
- wrapReducers: (spec) => wrapMoneyReducers(spec, moneyFields)
2176
- };
2177
- }
2178
- function linkMoneyVia() {
2179
- installViaBinder("money", (cfg) => {
2180
- const c = cfg;
2181
- return moneyBinding(c.moneyFields, c.virtualMoneyFields);
2182
- });
2183
- }
2184
-
2185
- // src/via/money/descriptor.ts
2186
- var MoneyPrecisionError = class extends NoydbError {
2187
- constructor(field, value, scale) {
2188
- super(
2189
- "MONEY_PRECISION",
2190
- `money: value ${JSON.stringify(value)} for field "${field}" exceeds scale ${scale} and no rounding mode is configured`
2191
- );
2192
- this.field = field;
2193
- this.value = value;
2194
- this.scale = scale;
2195
- this.name = "MoneyPrecisionError";
2196
- }
2197
- field;
2198
- value;
2199
- scale;
2200
- };
2201
- var MoneyCurrencyError = class extends NoydbError {
2202
- constructor(currency, reason, field) {
2203
- super(
2204
- "MONEY_CURRENCY",
2205
- reason === "not-allowed" ? `money: currency "${currency}" is not allowed${field ? ` for field "${field}"` : ""}` : `money: no scale known for currency "${currency}"${field ? ` (field "${field}")` : ""} \u2014 pass an explicit scale / scaleOverrides`
2206
- );
2207
- this.currency = currency;
2208
- this.reason = reason;
2209
- this.field = field;
2210
- this.name = "MoneyCurrencyError";
2211
- }
2212
- currency;
2213
- reason;
2214
- field;
2215
- };
2216
- var MoneyUnsupportedError = class extends NoydbError {
2217
- constructor(field, message) {
2218
- super(
2219
- "MONEY_UNSUPPORTED",
2220
- message ?? `money: operation is not supported on field "${field}" \u2014 use sum() and count() and divide at the boundary`
2221
- );
2222
- this.field = field;
2223
- this.name = "MoneyUnsupportedError";
2224
- }
2225
- field;
2226
- };
2227
- function isMultiOptions(o) {
2228
- return "currencies" in o;
2229
- }
2230
- function money(options) {
2231
- linkMoneyVia();
2232
- const hasFixed = "currency" in options;
2233
- const hasMulti = "currencies" in options;
2234
- if (hasFixed && hasMulti) {
2235
- throw new TypeError("money: `currency` and `currencies` are mutually exclusive");
2236
- }
2237
- if (!hasFixed && !hasMulti) {
2238
- throw new TypeError("money: one of `currency` or `currencies` is required");
2239
- }
2240
- const rounding = options.rounding;
2241
- if (isMultiOptions(options)) {
2242
- const overrides = options.scaleOverrides ?? {};
2243
- const allowList = options.currencies;
2244
- const allows = (c) => allowList === "any" ? true : allowList.includes(c);
2245
- const scaleFor = (c) => {
2246
- if (!allows(c)) throw new MoneyCurrencyError(c, "not-allowed");
2247
- const s = overrides[c] ?? scaleForCurrency(c);
2248
- if (s === null || s === void 0) throw new MoneyCurrencyError(c, "unknown-scale");
2249
- return s;
2250
- };
2251
- if (allowList !== "any") for (const c of allowList) scaleFor(c);
2252
- const soleCurrency = () => allowList !== "any" && allowList.length === 1 ? allowList[0] : void 0;
2253
- return {
2254
- _noydbMoney: true,
2255
- _viaBrand: "money",
2256
- mode: "multi",
2257
- options,
2258
- rounding,
2259
- fixedCurrency: void 0,
2260
- scaleFor,
2261
- allows,
2262
- soleCurrency
2263
- };
2264
- }
2265
- const currency = options.currency;
2266
- const resolvedScale = options.scale ?? scaleForCurrency(currency);
2267
- if (resolvedScale === null || resolvedScale === void 0) {
2268
- throw new MoneyCurrencyError(currency, "unknown-scale");
2269
- }
2270
- return {
2271
- _noydbMoney: true,
2272
- _viaBrand: "money",
2273
- mode: "fixed",
2274
- options,
2275
- rounding,
2276
- fixedCurrency: currency,
2277
- scaleFor(c) {
2278
- if (c !== currency) throw new MoneyCurrencyError(c, "not-allowed");
2279
- return resolvedScale;
2280
- },
2281
- allows: (c) => c === currency,
2282
- soleCurrency: () => currency
2283
656
  };
2284
657
  }
2285
- function isMoneyDescriptor(x) {
2286
- return typeof x === "object" && x !== null && x._noydbMoney === true;
2287
- }
2288
-
2289
- // src/via/money/arith.ts
2290
- function parseAmount(label, amount, scale, rounding) {
2291
- const r = parseToScaledInt(amount, scale, rounding);
2292
- if (!r.ok) {
2293
- throw new MoneyUnsupportedError(
2294
- r.reason === "precision" ? `${label}: amount ${JSON.stringify(amount)} has more precision than scale ${scale} and no rounding mode is configured` : `${label}: amount ${JSON.stringify(amount)} is not a finite decimal`
2295
- );
2296
- }
2297
- return r.value;
2298
- }
2299
- function resolveScale(label, amount, explicit) {
2300
- if (explicit !== void 0) {
2301
- if (!Number.isInteger(explicit) || explicit < 0) {
2302
- throw new MoneyUnsupportedError(`${label}: scale must be a non-negative integer`);
2303
- }
2304
- return explicit;
2305
- }
2306
- const inferred = decimalScaleOf(amount);
2307
- if (inferred === null) {
2308
- throw new MoneyUnsupportedError(`${label}: amount ${JSON.stringify(amount)} is not a finite decimal`);
2309
- }
2310
- return inferred;
2311
- }
2312
- function mulRate(amount, rate, opts = {}) {
2313
- const scale = resolveScale("mulRate", amount, opts.scale);
2314
- const rounding = opts.rounding ?? "half-up";
2315
- const a = parseAmount("mulRate", amount, scale, rounding);
2316
- const rateScale = decimalScaleOf(rate);
2317
- if (rateScale === null) {
2318
- throw new MoneyUnsupportedError(`mulRate: rate ${JSON.stringify(rate)} is not a finite decimal`);
2319
- }
2320
- const r = parseToScaledInt(rate, rateScale);
2321
- if (!r.ok) {
2322
- throw new MoneyUnsupportedError(`mulRate: rate ${JSON.stringify(rate)} is not a finite decimal`);
2323
- }
2324
- const product = a * r.value;
2325
- return formatScaledInt(rescaleScaledInt(product, scale + rateScale, scale, rounding), scale);
2326
- }
2327
- function allocate(amount, weights, opts = {}) {
2328
- if (weights.length === 0) {
2329
- throw new MoneyUnsupportedError("allocate: weights must not be empty");
2330
- }
2331
- const scale = resolveScale("allocate", amount, opts.scale);
2332
- const a = parseAmount("allocate", amount, scale);
2333
- let weightScale = 0;
2334
- for (const w of weights) {
2335
- const s = decimalScaleOf(w);
2336
- if (s === null) {
2337
- throw new MoneyUnsupportedError(`allocate: weight ${JSON.stringify(w)} is not a finite decimal`);
2338
- }
2339
- if (s > weightScale) weightScale = s;
2340
- }
2341
- const scaledWeights = weights.map((w) => {
2342
- const r = parseToScaledInt(w, weightScale);
2343
- if (!r.ok || r.value < 0n) {
2344
- throw new MoneyUnsupportedError(`allocate: weight ${JSON.stringify(w)} must be a non-negative decimal`);
2345
- }
2346
- return r.value;
2347
- });
2348
- const sumW = scaledWeights.reduce((acc, w) => acc + w, 0n);
2349
- if (sumW === 0n) {
2350
- throw new MoneyUnsupportedError("allocate: weights must not all be zero");
2351
- }
2352
- const negative = a < 0n;
2353
- const mag = negative ? -a : a;
2354
- const base = [];
2355
- const remainders = [];
2356
- let distributed = 0n;
2357
- for (let i = 0; i < scaledWeights.length; i++) {
2358
- const product = mag * scaledWeights[i];
2359
- const share = product / sumW;
2360
- base.push(share);
2361
- distributed += share;
2362
- remainders.push({ index: i, rem: product % sumW });
2363
- }
2364
- let leftover = mag - distributed;
2365
- remainders.sort((x, y) => y.rem > x.rem ? 1 : y.rem < x.rem ? -1 : x.index - y.index);
2366
- for (const { index } of remainders) {
2367
- if (leftover === 0n) break;
2368
- base[index] = base[index] + 1n;
2369
- leftover -= 1n;
2370
- }
2371
- return base.map((p) => formatScaledInt(negative && p !== 0n ? -p : p, scale));
2372
- }
2373
-
2374
- // src/via/money/branded.ts
2375
- function asMoney(value) {
2376
- if (!isMoneyLike(value)) {
2377
- throw new MoneyUnsupportedError(`asMoney: ${JSON.stringify(value)} is not a finite decimal`);
2378
- }
2379
- return String(value).trim();
2380
- }
2381
- function isMoneyString(value) {
2382
- return typeof value === "string" && isMoneyLike(value);
2383
- }
2384
- function moneyNumber(value) {
2385
- if (!isMoneyLike(value)) {
2386
- throw new MoneyUnsupportedError(`moneyNumber: ${JSON.stringify(value)} is not a finite decimal`);
2387
- }
2388
- return Number(value);
2389
- }
2390
- function isMoneyLike(value) {
2391
- if (typeof value === "number") return Number.isFinite(value);
2392
- if (typeof value !== "string") return false;
2393
- return decimalScaleOf(value) !== null;
658
+ function linkComputedVia() {
659
+ installViaBinder("computed", (cfg) => computedBinding(cfg));
2394
660
  }
2395
661
 
2396
662
  // src/via/computed/descriptor.ts
2397
663
  function computed(fn, opts) {
664
+ linkComputedVia();
2398
665
  return {
2399
666
  _viaBrand: "computed",
2400
667
  fn,
@@ -2723,13 +990,11 @@ export {
2723
990
  CrossJoinTooLargeError,
2724
991
  CustodyApi,
2725
992
  CustodyNotEnabledError,
2726
- DEED_RECORD_ID,
2727
993
  DEFAULT_CHUNK_SIZE,
2728
994
  DEFAULT_COVER_SCHEMA,
2729
995
  DEFAULT_CROSS_JOIN_MAX_ROWS,
2730
996
  DEFAULT_FRESHNESS_MS,
2731
997
  DEFAULT_JOIN_MAX_ROWS,
2732
- DELEGATIONS_COLLECTION,
2733
998
  DICT_COLLECTION_PREFIX,
2734
999
  DIRECTORY_RECORD_ID,
2735
1000
  DanglingReferenceError,
@@ -2775,9 +1040,7 @@ export {
2775
1040
  LinkIntegrityError,
2776
1041
  LocaleNotSpecifiedError,
2777
1042
  Lru,
2778
- MAGIC_LINK_CONTENT_INFO_PREFIX,
2779
1043
  MAGIC_LINK_GRANTS_COLLECTION,
2780
- MAGIC_LINK_KEK_INFO_PREFIX,
2781
1044
  META_COLLECTION,
2782
1045
  ManagedRecoveryNotEnrolledError,
2783
1046
  MaterializedViewConfigError,
@@ -2845,7 +1108,6 @@ export {
2845
1108
  ReservedVaultNameError,
2846
1109
  RestrictRefUnresolvableError,
2847
1110
  SCHEMAS_COLLECTION,
2848
- SEALED_SECRET_RECORD_ID,
2849
1111
  STATE_VAULT_NAME,
2850
1112
  STRICT_POLICY,
2851
1113
  SYNC_CREDENTIALS_COLLECTION,
@@ -2913,7 +1175,6 @@ export {
2913
1175
  approveWithdrawal,
2914
1176
  asMoney,
2915
1177
  assertStrongSecret,
2916
- assertTierAccess,
2917
1178
  base64ToBuffer,
2918
1179
  blindUpdate,
2919
1180
  bufferToBase64,
@@ -2940,7 +1201,6 @@ export {
2940
1201
  decryptBytes,
2941
1202
  decryptDeterministic,
2942
1203
  decryptExtractedPartition,
2943
- dekKey,
2944
1204
  deleteCredential,
2945
1205
  deleteIntent,
2946
1206
  deleteUserEnvelope,
@@ -2960,7 +1220,6 @@ export {
2960
1220
  dictKey,
2961
1221
  diff,
2962
1222
  diffVault,
2963
- effectiveClearance,
2964
1223
  enableDevUnlock,
2965
1224
  encryptBytes,
2966
1225
  encryptDeterministic,
@@ -2987,7 +1246,6 @@ export {
2987
1246
  hasExportCapability,
2988
1247
  hasImportCapability,
2989
1248
  hasNoydbBundleMagic,
2990
- hasRecoveryEnrolled,
2991
1249
  hashEntry,
2992
1250
  i18nText,
2993
1251
  immutableGuard,
@@ -3014,8 +1272,6 @@ export {
3014
1272
  isULID,
3015
1273
  isViaFieldSpec,
3016
1274
  isZodSchema,
3017
- issueDelegation,
3018
- recoverSecret as keyringRecoverSecret,
3019
1275
  rotateSecret as keyringRotateSecret,
3020
1276
  liberateVault,
3021
1277
  listCredentials,
@@ -3024,14 +1280,11 @@ export {
3024
1280
  listUsers,
3025
1281
  listUsersWithEnvelopes,
3026
1282
  listWithdrawalRequests,
3027
- loadActiveDelegations,
3028
1283
  loadCover,
3029
1284
  loadDeedMarker,
3030
1285
  loadDevUnlock,
3031
1286
  loadPaperRecoveryEntries,
3032
1287
  loadPersistedSchema,
3033
- loadSealedSecret,
3034
- loadShamirRecoveryEntries,
3035
1288
  loadUserEnvelope,
3036
1289
  loadVaultPolicy,
3037
1290
  lockSchema,
@@ -3043,7 +1296,6 @@ export {
3043
1296
  mergeCrdtStates,
3044
1297
  mergePolicy,
3045
1298
  mintPaperRecoveryEntry,
3046
- mintShamirRecoveryEntry,
3047
1299
  mintWrappedDeksBlob,
3048
1300
  money,
3049
1301
  moneyNumber,
@@ -3052,7 +1304,6 @@ export {
3052
1304
  parseBytes,
3053
1305
  parseIndex,
3054
1306
  parseRsaOaepTlv,
3055
- parseSealedEnvelope,
3056
1307
  persistDirectoryConfig,
3057
1308
  persistSchemaIfNeeded,
3058
1309
  persistUserVisibility,
@@ -3081,7 +1332,6 @@ export {
3081
1332
  resolveSequenceKey,
3082
1333
  resolveSession,
3083
1334
  revokeAllSessions,
3084
- revokeDelegation,
3085
1335
  revokeMagicLinkGrant,
3086
1336
  revokeSession,
3087
1337
  routeStore,
@@ -3089,8 +1339,6 @@ export {
3089
1339
  saveCover,
3090
1340
  savePaperRecoveryEntries,
3091
1341
  savePersistedSchema,
3092
- saveSealedSecret,
3093
- saveShamirRecoveryEntries,
3094
1342
  saveUserEnvelope,
3095
1343
  saveVaultPolicy,
3096
1344
  scaleForCurrency,
@@ -3102,7 +1350,6 @@ export {
3102
1350
  transitionGuard,
3103
1351
  unwrapDeksFromBlob,
3104
1352
  unwrapDeksFromPaperEntry,
3105
- unwrapDeksFromShamirEntry,
3106
1353
  unwrapMagicLinkGrant,
3107
1354
  validateCoverInput,
3108
1355
  validateI18nTextValue,