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