@noy-db/hub 0.6.0-pre.9 → 0.7.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 +7127 -0
- package/README.md +1 -1
- package/codemods/0.4.0-pre.json +24 -0
- package/codemods/0.6.0-pre.json +229 -0
- package/codemods/0.7.0-pre.json +258 -0
- package/dist/api-EQYRTZO2.js +20 -0
- package/dist/as/index.js +146 -0
- package/dist/as/index.js.map +1 -0
- package/dist/at/index.js +23 -0
- package/dist/attestation/index.js +19 -19
- package/dist/{backup-KULFZ2T4.js → backup-Z7ZBTAQ6.js} +36 -18
- package/dist/backup-Z7ZBTAQ6.js.map +1 -0
- package/dist/blobs/index.js +22 -20
- package/dist/blobs/index.js.map +1 -1
- package/dist/broker/index.js +12 -12
- package/dist/by/index.js +11 -0
- package/dist/cargo/index.js +40 -36
- package/dist/{chunk-YAWK6AWF.js → chunk-225O5CXQ.js} +2 -2
- package/dist/{chunk-MSWYQLMQ.js → chunk-2GXEQUEX.js} +2 -2
- package/dist/chunk-2GXEQUEX.js.map +1 -0
- package/dist/{chunk-3URQC7EH.js → chunk-2LPVI4PX.js} +355 -132
- package/dist/chunk-2LPVI4PX.js.map +1 -0
- package/dist/{chunk-JJNOLSG5.js → chunk-3L2MVE36.js} +15 -16
- package/dist/chunk-3L2MVE36.js.map +1 -0
- package/dist/{chunk-OF3L2SD6.js → chunk-3QARDAYW.js} +2 -2
- package/dist/{chunk-WLZ47GSL.js → chunk-467SKJ65.js} +12 -10
- package/dist/{chunk-WLZ47GSL.js.map → chunk-467SKJ65.js.map} +1 -1
- package/dist/{chunk-W3TVWF6N.js → chunk-4A4TYISP.js} +2 -2
- package/dist/{chunk-ZJADGNYF.js → chunk-4AOERLTV.js} +1 -1
- package/dist/chunk-4AOERLTV.js.map +1 -0
- package/dist/{chunk-CCZJJ4I2.js → chunk-4G25SDQL.js} +6 -6
- package/dist/{chunk-4I72F5DF.js → chunk-4LPF226H.js} +11 -14
- package/dist/chunk-4LPF226H.js.map +1 -0
- package/dist/{chunk-7F4DBNSP.js → chunk-4ZPE6SKS.js} +135 -18
- package/dist/chunk-4ZPE6SKS.js.map +1 -0
- package/dist/{chunk-7TSYBD3E.js → chunk-5263OEM3.js} +2 -2
- package/dist/{chunk-WFUIE565.js → chunk-57JTHWLQ.js} +17 -14
- package/dist/chunk-57JTHWLQ.js.map +1 -0
- package/dist/{chunk-FNSMZQS4.js → chunk-5ACAVJUI.js} +2 -2
- package/dist/{chunk-PDLLCOGD.js → chunk-5AFMP532.js} +20 -17
- package/dist/chunk-5AFMP532.js.map +1 -0
- package/dist/{chunk-JRKZTEZZ.js → chunk-5W7YXFV5.js} +444 -73
- package/dist/chunk-5W7YXFV5.js.map +1 -0
- package/dist/chunk-6EW2UCVF.js +190 -0
- package/dist/chunk-6EW2UCVF.js.map +1 -0
- package/dist/{chunk-4VUPLMZ6.js → chunk-6FOGTKBY.js} +68 -73
- package/dist/chunk-6FOGTKBY.js.map +1 -0
- package/dist/{chunk-VMCCGUQB.js → chunk-7LYUJNU3.js} +2 -2
- package/dist/{chunk-52JPHN5N.js → chunk-A2YW5EMU.js} +27 -149
- package/dist/chunk-A2YW5EMU.js.map +1 -0
- package/dist/{chunk-WLYIROCJ.js → chunk-AB5P32RE.js} +2 -2
- package/dist/{chunk-PL2GHSCM.js → chunk-ALB64CZM.js} +157 -90
- package/dist/chunk-ALB64CZM.js.map +1 -0
- package/dist/{chunk-SUFG5E73.js → chunk-ALUNQEBY.js} +2 -2
- package/dist/{chunk-CADUYBQD.js → chunk-ATL3ZVXT.js} +2 -2
- package/dist/{chunk-BWVKEOPE.js → chunk-ATV637J7.js} +7 -11
- package/dist/chunk-ATV637J7.js.map +1 -0
- package/dist/{chunk-DG27IUVI.js → chunk-CBRS2NEK.js} +2 -11
- package/dist/chunk-CBRS2NEK.js.map +1 -0
- package/dist/{chunk-7MNBICB5.js → chunk-CN6B5PEN.js} +16 -14
- package/dist/chunk-CN6B5PEN.js.map +1 -0
- package/dist/{chunk-6FJWSWFT.js → chunk-DBNYPLWY.js} +3 -3
- package/dist/{chunk-5JY5TSVY.js → chunk-DFAUMLD7.js} +25 -31
- package/dist/chunk-DFAUMLD7.js.map +1 -0
- package/dist/{chunk-FFDNKRCY.js → chunk-DKWPJOYH.js} +2 -2
- package/dist/chunk-DKWPJOYH.js.map +1 -0
- package/dist/{chunk-VJFMXYKP.js → chunk-E6YA6UAP.js} +2 -2
- package/dist/{chunk-WASHZV34.js → chunk-F23WQK3G.js} +65 -27
- package/dist/chunk-F23WQK3G.js.map +1 -0
- package/dist/{chunk-JIUVJ4M7.js → chunk-F7ZFRPGQ.js} +3 -3
- package/dist/{chunk-HXGUIPQB.js → chunk-FOG7YEJP.js} +3 -3
- package/dist/{chunk-QULVCV3M.js → chunk-GK4DRVUD.js} +6 -6
- package/dist/chunk-GK4DRVUD.js.map +1 -0
- package/dist/{chunk-BRVW2GS5.js → chunk-H36KSN6X.js} +87 -34
- package/dist/chunk-H36KSN6X.js.map +1 -0
- package/dist/{chunk-O2ERS4UJ.js → chunk-H4M7ADXY.js} +81 -52
- package/dist/chunk-H4M7ADXY.js.map +1 -0
- package/dist/{chunk-FZ6NYJ7L.js → chunk-H7HP56F6.js} +11 -8
- package/dist/chunk-H7HP56F6.js.map +1 -0
- package/dist/chunk-HK67PX4J.js +27 -0
- package/dist/chunk-HK67PX4J.js.map +1 -0
- package/dist/{chunk-X56RTUK3.js → chunk-HM4JSXX2.js} +3 -3
- package/dist/{chunk-AHLJSVRL.js → chunk-HTGRQZFB.js} +5 -7
- package/dist/chunk-HTGRQZFB.js.map +1 -0
- package/dist/{chunk-GQ3BX5EA.js → chunk-I3ISCYT7.js} +2 -2
- package/dist/{chunk-Q6TEJXBX.js → chunk-IESNYJXZ.js} +31 -49
- package/dist/chunk-IESNYJXZ.js.map +1 -0
- package/dist/{chunk-FUHKW252.js → chunk-J4MN6XIU.js} +2 -2
- package/dist/{chunk-ADW22QSB.js → chunk-J4UJ5FRV.js} +4 -4
- package/dist/{chunk-HNGSV2YC.js → chunk-JBIV4FLR.js} +67 -10
- package/dist/chunk-JBIV4FLR.js.map +1 -0
- package/dist/{chunk-HVQGCKY4.js → chunk-JVLSU7S2.js} +2 -2
- package/dist/{chunk-AR2JDFAE.js → chunk-KDJGJR7F.js} +2 -2
- package/dist/{chunk-NPP5R7FF.js → chunk-KN4W2OQ4.js} +22 -18
- package/dist/chunk-KN4W2OQ4.js.map +1 -0
- package/dist/{chunk-G6S5VVHP.js → chunk-L6GTLZRK.js} +10 -10
- package/dist/chunk-L6GTLZRK.js.map +1 -0
- package/dist/{chunk-2BMRJ6LQ.js → chunk-LF6DMX4C.js} +8 -11
- package/dist/{chunk-2BMRJ6LQ.js.map → chunk-LF6DMX4C.js.map} +1 -1
- package/dist/chunk-LFUID7OW.js +163 -0
- package/dist/chunk-LFUID7OW.js.map +1 -0
- package/dist/{chunk-747LRSOO.js → chunk-LKFKXS5K.js} +2 -2
- package/dist/{chunk-U5O6GIWZ.js → chunk-LR4Z47QD.js} +3 -3
- package/dist/{chunk-VZ3XFUQ7.js → chunk-MTBXJAS4.js} +16 -22
- package/dist/chunk-MTBXJAS4.js.map +1 -0
- package/dist/chunk-N4CNVSUF.js +66 -0
- package/dist/chunk-N4CNVSUF.js.map +1 -0
- package/dist/{chunk-RTAMLDWP.js → chunk-NLKLXXTO.js} +2 -2
- package/dist/{chunk-IGJCYUT5.js → chunk-NSITFOCJ.js} +1 -1
- package/dist/chunk-NSITFOCJ.js.map +1 -0
- package/dist/{chunk-FDX7OWWI.js → chunk-OPXR4PB2.js} +2 -2
- package/dist/{chunk-4GZ6XOVW.js → chunk-OWLVBOWO.js} +44 -42
- package/dist/chunk-OWLVBOWO.js.map +1 -0
- package/dist/{chunk-Z45YRGFO.js → chunk-P6ASQOZR.js} +2 -2
- package/dist/{chunk-5O5HRRTV.js → chunk-PCQDY6QN.js} +7 -7
- package/dist/{chunk-5O5HRRTV.js.map → chunk-PCQDY6QN.js.map} +1 -1
- package/dist/{chunk-BEFVYAR5.js → chunk-PGFKIOR3.js} +4 -4
- package/dist/chunk-PGFKIOR3.js.map +1 -0
- package/dist/{chunk-3FSX6LDG.js → chunk-POS53FG6.js} +18 -3
- package/dist/{chunk-3FSX6LDG.js.map → chunk-POS53FG6.js.map} +1 -1
- package/dist/{chunk-3IXIU6FP.js → chunk-PQ6Z2TAP.js} +7 -10
- package/dist/chunk-PQ6Z2TAP.js.map +1 -0
- package/dist/{chunk-CEJWMBXO.js → chunk-PUJTKLPL.js} +6 -2
- package/dist/chunk-PUJTKLPL.js.map +1 -0
- package/dist/{chunk-GAG7QOVO.js → chunk-QGJ4XIA7.js} +53 -18
- package/dist/chunk-QGJ4XIA7.js.map +1 -0
- package/dist/{chunk-2DHSSLOD.js → chunk-QHJKK77B.js} +13 -15
- package/dist/chunk-QHJKK77B.js.map +1 -0
- package/dist/{chunk-2Z3NCLNX.js → chunk-QI5NWLVW.js} +7 -7
- package/dist/{chunk-6SAFL5YE.js → chunk-RC4BROYR.js} +3 -3
- package/dist/{chunk-NJDQ4YSV.js → chunk-RDHUZ674.js} +4 -4
- package/dist/{chunk-YPYHVOXP.js → chunk-RK7N4OQ5.js} +2 -2
- package/dist/chunk-RK7N4OQ5.js.map +1 -0
- package/dist/{chunk-3737A6EA.js → chunk-S2VG3ABP.js} +127 -31
- package/dist/chunk-S2VG3ABP.js.map +1 -0
- package/dist/{chunk-3JVXVJ7L.js → chunk-S35S77YU.js} +10 -10
- package/dist/{chunk-KUDZVJKQ.js → chunk-SHILAQH5.js} +2 -2
- package/dist/{chunk-4UVDI4XE.js → chunk-T3PHCEN4.js} +4 -4
- package/dist/{chunk-55LKVALY.js → chunk-T7IR4N2S.js} +1 -3
- package/dist/chunk-T7IR4N2S.js.map +1 -0
- package/dist/{chunk-RXYYFSBB.js → chunk-TOV6VMHF.js} +6 -6
- package/dist/chunk-TOV6VMHF.js.map +1 -0
- package/dist/{chunk-W77KZHCW.js → chunk-TVIFAHZR.js} +16 -17
- package/dist/chunk-TVIFAHZR.js.map +1 -0
- package/dist/chunk-UBSFPGVJ.js +1 -0
- package/dist/{chunk-FAXZQ5UF.js → chunk-UCUALOSM.js} +2 -2
- package/dist/{chunk-4HDYQL3J.js → chunk-VAG47QHV.js} +2 -2
- package/dist/{chunk-35EBKWQU.js → chunk-VFIWDPXZ.js} +4 -4
- package/dist/{chunk-5ZKS6ZE2.js → chunk-VTG7327U.js} +4 -4
- package/dist/chunk-VTG7327U.js.map +1 -0
- package/dist/{chunk-VCETL77O.js → chunk-W5LHQXZU.js} +36 -7
- package/dist/chunk-W5LHQXZU.js.map +1 -0
- package/dist/{chunk-6NVPFKN3.js → chunk-WK5FSW7T.js} +92 -35
- package/dist/chunk-WK5FSW7T.js.map +1 -0
- package/dist/{chunk-HNHCQ556.js → chunk-WLLUM35R.js} +2 -2
- package/dist/{chunk-YJ6IONGA.js → chunk-X62MEF2O.js} +13 -5
- package/dist/chunk-X62MEF2O.js.map +1 -0
- package/dist/{chunk-7G6VDWXB.js → chunk-X67FCULK.js} +5 -5
- package/dist/chunk-X67FCULK.js.map +1 -0
- package/dist/{chunk-UHXCLPGC.js → chunk-XDVVBETV.js} +2 -2
- package/dist/chunk-XDVVBETV.js.map +1 -0
- package/dist/chunk-XJ3FEKEY.js +15 -0
- package/dist/chunk-XJ3FEKEY.js.map +1 -0
- package/dist/{chunk-E6427JU2.js → chunk-XSN63FUS.js} +19 -3
- package/dist/chunk-XSN63FUS.js.map +1 -0
- package/dist/{chunk-JRCYZEHU.js → chunk-XVU7J43V.js} +2 -2
- package/dist/{chunk-2GAJGUNM.js → chunk-Y3YLJORD.js} +408 -260
- package/dist/chunk-Y3YLJORD.js.map +1 -0
- package/dist/{chunk-6BU3L4UE.js → chunk-Y6GZ2P4M.js} +7 -10
- package/dist/chunk-Y6GZ2P4M.js.map +1 -0
- package/dist/{chunk-DMQCLZ4Z.js → chunk-YCSM3GZU.js} +2 -2
- package/dist/{chunk-RV3ARMPN.js → chunk-YKPGQJFU.js} +30 -180
- package/dist/chunk-YKPGQJFU.js.map +1 -0
- package/dist/{chunk-FMQJZH4R.js → chunk-YMLQBZFJ.js} +6 -6
- package/dist/{chunk-6HFM7EIT.js → chunk-YPSOHDNC.js} +2 -2
- package/dist/{chunk-CDB2HVQW.js → chunk-YXA2TCTZ.js} +14 -15
- package/dist/chunk-YXA2TCTZ.js.map +1 -0
- package/dist/{chunk-N35NC4JH.js → chunk-Z2PWOSCJ.js} +2 -2
- package/dist/{chunk-XWX7GL56.js → chunk-Z2WK53N6.js} +47 -23
- package/dist/chunk-Z2WK53N6.js.map +1 -0
- package/dist/{chunk-HPLWFNG4.js → chunk-Z7ZXZL6Y.js} +2 -2
- package/dist/{chunk-PNKHAKQ7.js → chunk-ZO252Q5S.js} +17 -10
- package/dist/chunk-ZO252Q5S.js.map +1 -0
- package/dist/classified/index.js +5 -5
- package/dist/{classified-marker-2KJAXRRO.js → classified-marker-BSQHU4JT.js} +3 -3
- package/dist/collection-facade-LG3NYZVB.js +45 -0
- package/dist/{computed-6G5M3UPH.js → computed-ASBNTLOK.js} +3 -3
- package/dist/consent/index.js +10 -10
- package/dist/cover/index.js +10 -3
- package/dist/custody/index.js +12 -11
- package/dist/{dead-filter-DCB62VWW.js → dead-filter-QKU56XTQ.js} +2 -2
- package/dist/debug/index.js +1 -1
- package/dist/{delegation-MO7YZYJS.js → delegation-XWRPYODW.js} +24 -23
- package/dist/delegation-XWRPYODW.js.map +1 -0
- package/dist/derivations/index.js +12 -12
- package/dist/derive-CXHCY46K.js +22 -0
- package/dist/directory/index.js +10 -10
- package/dist/{dispatch-MJ6SHB3Y.js → dispatch-4AP4PUZU.js} +18 -18
- package/dist/{dispatch-FZEAWKVM.js → dispatch-VR4LRXZ7.js} +9 -6
- package/dist/dispatch-VR4LRXZ7.js.map +1 -0
- package/dist/{enclave-JU4YIEPB.js → enclave-NYPT7WA7.js} +31 -9
- package/dist/executor-3KFRQETS.js +29 -0
- package/dist/executor-AFHQYRAU.js +9 -0
- package/dist/executor-YYDW6XQI.js +9 -0
- package/dist/export-accessible-BX2ILB4C.js +23 -0
- package/dist/extract-partition-UPOVITFI.js +38 -0
- package/dist/{fanout-sidecar-NNAJQXMX.js → fanout-sidecar-IWP3R4RC.js} +18 -27
- package/dist/fanout-sidecar-IWP3R4RC.js.map +1 -0
- package/dist/{fence-watcher-DHQ775JB.js → fence-watcher-ZVSMLKQD.js} +1 -1
- package/dist/fence-watcher-ZVSMLKQD.js.map +1 -0
- package/dist/find-SZBL2HPB.js +11 -0
- package/dist/forget/index.js +9 -9
- package/dist/guards/index.js +4 -4
- package/dist/history/index.js +23 -20
- package/dist/history/index.js.map +1 -1
- package/dist/i18n/index.js +14 -14
- package/dist/index.d.ts +35 -18
- package/dist/index.js +199 -204
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.js +4 -4
- package/dist/introspection/index.js +12 -11
- package/dist/issue-G53NB6EW.js +19 -0
- package/dist/kernel/collection-config.d.ts +9 -9
- package/dist/kernel/collection.d.ts +9 -3
- package/dist/kernel/constants.d.ts +36 -0
- package/dist/kernel/enclave/crypto.d.ts +52 -4
- package/dist/kernel/enclave/index.d.ts +10 -3
- package/dist/kernel/enclave/record-aad.d.ts +131 -0
- package/dist/kernel/enclave/record-envelope.d.ts +76 -0
- package/dist/kernel/enclave/record-keys/envelope-body.d.ts +34 -2
- package/dist/kernel/enclave/record-keys/lifecycle.d.ts +22 -5
- package/dist/kernel/enclave/record-keys/record-codec.d.ts +47 -14
- package/dist/kernel/enclave/record-keys/rekey-blob.d.ts +88 -0
- package/dist/kernel/enclave/record-keys/rekey.d.ts +91 -0
- package/dist/kernel/enclave/record-keys/tombstone.d.ts +3 -2
- package/dist/kernel/errors.d.ts +134 -14
- package/dist/kernel/merge-authority.d.ts +25 -0
- package/dist/kernel/noydb.d.ts +33 -10
- package/dist/kernel/query/builder.d.ts +51 -4
- package/dist/kernel/query/join.d.ts +27 -0
- package/dist/kernel/query/live.d.ts +31 -9
- package/dist/kernel/query/predicate.d.ts +9 -0
- package/dist/kernel/refs.d.ts +3 -1
- package/dist/kernel/secret-mode.d.ts +1 -1
- package/dist/kernel/sync-policy.d.ts +0 -2
- package/dist/kernel/tier-visibility.d.ts +34 -0
- package/dist/kernel/types.d.ts +145 -28
- package/dist/kernel/vault.d.ts +16 -7
- package/dist/kernel/via/compose.d.ts +3 -3
- package/dist/kernel/via/index.d.ts +15 -6
- package/dist/kernel/via/pipeline.d.ts +6 -6
- package/dist/kernel/via/reconcile.d.ts +14 -2
- package/dist/kernel/via/taint-binding.d.ts +3 -3
- package/dist/{ledger-AETNF4OM.js → ledger-T5K4P2D7.js} +11 -11
- package/dist/liberate-VEOZRESE.js +25 -0
- package/dist/{link-set-E5HNY67I.js → link-set-76JZ6YB4.js} +11 -11
- package/dist/{managed-secret-CWQ6PND5.js → managed-secret-6YC32VXG.js} +13 -5
- package/dist/materialized-views/index.js +27 -27
- package/dist/migrate-cek-LBRKYUZZ.js +19 -0
- package/dist/migrate-cek-LBRKYUZZ.js.map +1 -0
- package/dist/money/index.js +5 -5
- package/dist/noydb-EDJA4JNJ.js +86 -0
- package/dist/on/index.js +1 -0
- package/dist/overlay-views/index.js +4 -4
- package/dist/periods/index.js +12 -12
- package/dist/pod/index.js +79 -88
- package/dist/pod-handle-P6DPBM5U.js +41 -0
- package/dist/pod-handle-P6DPBM5U.js.map +1 -0
- package/dist/policy/index.js +11 -4
- package/dist/port/as/active.d.ts +10 -0
- package/dist/port/as/index.d.ts +32 -0
- package/dist/port/as/types.d.ts +113 -0
- package/dist/port/at/index.d.ts +37 -0
- package/dist/port/by/default-provider.d.ts +3 -3
- package/dist/port/by/index.d.ts +32 -10
- package/dist/port/by/types.d.ts +29 -11
- package/dist/port/on/index.d.ts +50 -0
- package/dist/port/to/index.d.ts +4 -4
- package/dist/port/to/locator.d.ts +54 -8
- package/dist/port/with/computed-strategy.d.ts +1 -1
- package/dist/port/with/device-seal-strategy.d.ts +2 -2
- package/dist/port/with/formats-strategy.d.ts +76 -0
- package/dist/port/with/i18n-strategy.d.ts +4 -1
- package/dist/port/with/lookup-strategy.d.ts +4 -1
- package/dist/port/with/merge-authority.d.ts +52 -0
- package/dist/port/with/service-bus.d.ts +0 -4
- package/dist/port/with/strategies.d.ts +13 -5
- package/dist/port/with/team-strategy.d.ts +5 -1
- package/dist/portability/index.js +8 -8
- package/dist/{post-register-2XSSMGEQ.js → post-register-53O7AJRZ.js} +6 -6
- package/dist/query/index.js +6 -6
- package/dist/reduce/index.js +6 -6
- package/dist/register-6TCBR6XD.js +32 -0
- package/dist/registry-DH2L4O2V.js +18 -0
- package/dist/registry-IWFMXCHX.js +9 -0
- package/dist/registry-Q3FG3OAX.js +9 -0
- package/dist/registry-YC3IFG3A.js +19 -0
- package/dist/request-withdrawal-NM5VYR6F.js +31 -0
- package/dist/{reveal-BW36KCOQ.js → reveal-XBIMHAXR.js} +6 -6
- package/dist/revoke-MJNYWO72.js +24 -0
- package/dist/satellites/index.js +1 -1
- package/dist/schema-update/index.js +2 -2
- package/dist/sealed-record/index.js +20 -13
- package/dist/sealed-record/index.js.map +1 -1
- package/dist/search/index.js +4 -4
- package/dist/{seed-GDV5PT4R.js → seed-NSNIGYXE.js} +20 -22
- package/dist/seed-NSNIGYXE.js.map +1 -0
- package/dist/sequence/index.js +9 -9
- package/dist/session/index.js +10 -10
- package/dist/shadow/index.js +2 -2
- package/dist/share-link/index.js +1 -1
- package/dist/signer-6XVS2AU3.js +25 -0
- package/dist/snapshots/index.js +10 -10
- package/dist/snapshots/index.js.map +1 -1
- package/dist/{stale-ARHFVL5U.js → stale-MCS46TFO.js} +10 -10
- package/dist/storage-ZXUT476I.js +23 -0
- package/dist/storage-ZXUT476I.js.map +1 -0
- package/dist/{store-coordination-provider-GFCUOBR6.js → store-coordination-provider-6FM26VQM.js} +22 -15
- package/dist/store-coordination-provider-6FM26VQM.js.map +1 -0
- package/dist/sync/index.js +11 -11
- package/dist/team/index.js +17 -16
- package/dist/tiers/index.js +11 -10
- package/dist/to/index.js +17 -9
- package/dist/to/index.js.map +1 -1
- package/dist/transactions/index.js +4 -4
- package/dist/{ulid-PTAIMDG4.js → ulid-VQW6ERQN.js} +2 -2
- package/dist/ulid-VQW6ERQN.js.map +1 -0
- package/dist/util/index.js +1 -1
- package/dist/vault-diff-FE5J35NJ.js +9 -0
- package/dist/vault-diff-FE5J35NJ.js.map +1 -0
- package/dist/vault-head/index.js +115 -0
- package/dist/vault-head/index.js.map +1 -0
- package/dist/{verify-RO5RTZOJ.js → verify-WYOFLSNA.js} +5 -5
- package/dist/via/blob/binding.d.ts +6 -6
- package/dist/via/blob/index.d.ts +3 -0
- package/dist/via/classified/binding.d.ts +9 -9
- package/dist/via/computed/binding.d.ts +2 -2
- package/dist/via/i18n/binding.d.ts +4 -4
- package/dist/via/lookup/binding.d.ts +5 -5
- package/dist/via/lookup/handle.d.ts +4 -1
- package/dist/via/lookup/index.d.ts +1 -1
- package/dist/via/lookup/snapshot.d.ts +1 -1
- package/dist/via/money/binding.d.ts +3 -3
- package/dist/via/money/normalize.d.ts +1 -1
- package/dist/via/money/where.d.ts +3 -3
- package/dist/walk-JNEOYCAU.js +21 -0
- package/dist/walk-JNEOYCAU.js.map +1 -0
- package/dist/with-audit/periods/periods.d.ts +1 -1
- package/dist/with-audit/periods/strategy.d.ts +1 -1
- package/dist/with-audit/sealed-record/index.d.ts +13 -0
- package/dist/with-audit/tiers/index.d.ts +17 -2
- package/dist/with-cargo/adopt-partition.d.ts +7 -7
- package/dist/with-cargo/extract-partition.d.ts +1 -1
- package/dist/with-cargo/floor.d.ts +1 -1
- package/dist/with-cargo/index.d.ts +2 -2
- package/dist/with-commit/history/history.d.ts +26 -0
- package/dist/with-commit/history/index.d.ts +2 -1
- package/dist/with-commit/history/ledger/store.d.ts +7 -1
- package/dist/with-commit/history/strategy.d.ts +11 -1
- package/dist/with-commit/numbering/index.d.ts +0 -5
- package/dist/with-commit/vault-head/active.d.ts +2 -0
- package/dist/with-commit/vault-head/head.d.ts +28 -0
- package/dist/with-commit/vault-head/index.d.ts +10 -0
- package/dist/with-commit/vault-head/strategy.d.ts +127 -0
- package/dist/with-commit/vault-head/verify.d.ts +90 -0
- package/dist/with-formula/materialized-views/dependency-analyzer.d.ts +4 -0
- package/dist/with-formula/materialized-views/projection-legs.d.ts +59 -0
- package/dist/with-formula/materialized-views/registry.d.ts +50 -0
- package/dist/with-formula/materialized-views/types.d.ts +68 -10
- package/dist/with-party/directory/cover/storage.d.ts +0 -8
- package/dist/with-party/directory/storage.d.ts +0 -11
- package/dist/with-party/directory/visibility.d.ts +0 -21
- package/dist/with-party/policy/storage.d.ts +0 -10
- package/dist/with-party/team/deed.d.ts +4 -4
- package/dist/with-party/team/device-seal.d.ts +5 -5
- package/dist/with-party/team/echo-ceremony.d.ts +2 -2
- package/dist/with-party/team/echo-secret.d.ts +4 -4
- package/dist/with-party/team/index.d.ts +3 -3
- package/dist/with-party/team/keyring.d.ts +141 -4
- package/dist/with-party/team/managed-secret.d.ts +21 -11
- package/dist/with-party/team/noydb-facade.d.ts +7 -3
- package/dist/with-party/team/{shamir-recovery-provider.d.ts → noydb-shamir.d.ts} +1 -1
- package/dist/with-party/team/recovery.d.ts +3 -3
- package/dist/with-party/team/roster-tag.d.ts +101 -0
- package/dist/with-party/team/rotate-recover.d.ts +5 -5
- package/dist/with-party/team/tiers.d.ts +2 -1
- package/dist/with-pod/format.d.ts +11 -13
- package/dist/with-pod/index.d.ts +10 -10
- package/dist/with-pod/open.d.ts +2 -2
- package/dist/with-pod/pod-handle.d.ts +19 -0
- package/dist/with-pod/pod-store.d.ts +0 -8
- package/dist/with-pod/{bundle.d.ts → pod.d.ts} +17 -25
- package/dist/with-pod/ulid.d.ts +1 -1
- package/dist/with-shape/blobs/blob-compaction.d.ts +13 -0
- package/dist/with-shape/blobs/blob-set.d.ts +83 -11
- package/dist/with-shape/blobs/orphan-report.d.ts +62 -0
- package/dist/with-shape/introspection/describe.d.ts +2 -2
- package/dist/with-shape/schema-update/fence-controller.d.ts +4 -4
- package/dist/with-shape/schema-update/fence-watcher.d.ts +4 -4
- package/dist/with-shape/schema-update/store-coordination-provider.d.ts +7 -6
- package/dist/with-sync/engine.d.ts +54 -5
- package/dist/with-sync/strategy.d.ts +3 -0
- package/dist/withdraw-accessible-ILTSXTIE.js +28 -0
- package/dist/withdraw-accessible-ILTSXTIE.js.map +1 -0
- package/package.json +29 -5
- package/dist/api-RXUMEKT3.js +0 -20
- package/dist/backup-KULFZ2T4.js.map +0 -1
- package/dist/bundle-handle-GFNHT52M.js +0 -36
- package/dist/bundle-handle-GFNHT52M.js.map +0 -1
- package/dist/chunk-2DHSSLOD.js.map +0 -1
- package/dist/chunk-2GAJGUNM.js.map +0 -1
- package/dist/chunk-3737A6EA.js.map +0 -1
- package/dist/chunk-3IXIU6FP.js.map +0 -1
- package/dist/chunk-3URQC7EH.js.map +0 -1
- package/dist/chunk-4GZ6XOVW.js.map +0 -1
- package/dist/chunk-4I72F5DF.js.map +0 -1
- package/dist/chunk-4VUPLMZ6.js.map +0 -1
- package/dist/chunk-52JPHN5N.js.map +0 -1
- package/dist/chunk-55LKVALY.js.map +0 -1
- package/dist/chunk-5JY5TSVY.js.map +0 -1
- package/dist/chunk-5ZKS6ZE2.js.map +0 -1
- package/dist/chunk-6BU3L4UE.js.map +0 -1
- package/dist/chunk-6NVPFKN3.js.map +0 -1
- package/dist/chunk-7F4DBNSP.js.map +0 -1
- package/dist/chunk-7G6VDWXB.js.map +0 -1
- package/dist/chunk-7H73RIE3.js +0 -45
- package/dist/chunk-7H73RIE3.js.map +0 -1
- package/dist/chunk-7MNBICB5.js.map +0 -1
- package/dist/chunk-AFHQATY4.js +0 -47
- package/dist/chunk-AFHQATY4.js.map +0 -1
- package/dist/chunk-AHLJSVRL.js.map +0 -1
- package/dist/chunk-BEFVYAR5.js.map +0 -1
- package/dist/chunk-BRVW2GS5.js.map +0 -1
- package/dist/chunk-BWVKEOPE.js.map +0 -1
- package/dist/chunk-CDB2HVQW.js.map +0 -1
- package/dist/chunk-CEJWMBXO.js.map +0 -1
- package/dist/chunk-DG27IUVI.js.map +0 -1
- package/dist/chunk-E6427JU2.js.map +0 -1
- package/dist/chunk-FFDNKRCY.js.map +0 -1
- package/dist/chunk-FZ6NYJ7L.js.map +0 -1
- package/dist/chunk-G6S5VVHP.js.map +0 -1
- package/dist/chunk-GAG7QOVO.js.map +0 -1
- package/dist/chunk-HNGSV2YC.js.map +0 -1
- package/dist/chunk-IGJCYUT5.js.map +0 -1
- package/dist/chunk-JJNOLSG5.js.map +0 -1
- package/dist/chunk-JRKZTEZZ.js.map +0 -1
- package/dist/chunk-MSWYQLMQ.js.map +0 -1
- package/dist/chunk-NPP5R7FF.js.map +0 -1
- package/dist/chunk-O2ERS4UJ.js.map +0 -1
- package/dist/chunk-PDLLCOGD.js.map +0 -1
- package/dist/chunk-PL2GHSCM.js.map +0 -1
- package/dist/chunk-PNKHAKQ7.js.map +0 -1
- package/dist/chunk-Q6TEJXBX.js.map +0 -1
- package/dist/chunk-QULVCV3M.js.map +0 -1
- package/dist/chunk-RV3ARMPN.js.map +0 -1
- package/dist/chunk-RXYYFSBB.js.map +0 -1
- package/dist/chunk-UHXCLPGC.js.map +0 -1
- package/dist/chunk-VCETL77O.js.map +0 -1
- package/dist/chunk-VZ3XFUQ7.js.map +0 -1
- package/dist/chunk-W77KZHCW.js.map +0 -1
- package/dist/chunk-WASHZV34.js.map +0 -1
- package/dist/chunk-WFUIE565.js.map +0 -1
- package/dist/chunk-XWX7GL56.js.map +0 -1
- package/dist/chunk-YJ6IONGA.js.map +0 -1
- package/dist/chunk-YPYHVOXP.js.map +0 -1
- package/dist/chunk-ZJADGNYF.js.map +0 -1
- package/dist/collection-facade-QEJIM6BC.js +0 -45
- package/dist/delegation-MO7YZYJS.js.map +0 -1
- package/dist/derive-IUA6JFLB.js +0 -22
- package/dist/dispatch-FZEAWKVM.js.map +0 -1
- package/dist/executor-CYJQLKKI.js +0 -9
- package/dist/executor-S4QIKEHW.js +0 -9
- package/dist/executor-YIQB2S6N.js +0 -29
- package/dist/export-accessible-4S36PQNR.js +0 -23
- package/dist/extract-partition-IO7FDZ2P.js +0 -38
- package/dist/fanout-sidecar-NNAJQXMX.js.map +0 -1
- package/dist/fence-watcher-DHQ775JB.js.map +0 -1
- package/dist/find-RBBYKXI7.js +0 -11
- package/dist/issue-RIVHSY2S.js +0 -19
- package/dist/liberate-GFN4C7RR.js +0 -24
- package/dist/noydb-ASEXNJS6.js +0 -83
- package/dist/register-4EFJCVYD.js +0 -32
- package/dist/registry-4SDHHOJ7.js +0 -18
- package/dist/registry-CZVINVQH.js +0 -9
- package/dist/registry-IKUR2MXD.js +0 -9
- package/dist/registry-OYTFGWVK.js +0 -19
- package/dist/request-withdrawal-KGXGDPVQ.js +0 -31
- package/dist/revoke-JFN773KF.js +0 -24
- package/dist/seed-GDV5PT4R.js.map +0 -1
- package/dist/signer-TA55QB6R.js +0 -25
- package/dist/storage-V7MTFAQJ.js +0 -23
- package/dist/store-coordination-provider-GFCUOBR6.js.map +0 -1
- package/dist/walk-3ZECBFDA.js +0 -21
- package/dist/with-pod/bundle-handle.d.ts +0 -9
- package/dist/withdraw-accessible-7PG4DYQK.js +0 -28
- /package/dist/{api-RXUMEKT3.js.map → api-EQYRTZO2.js.map} +0 -0
- /package/dist/{collection-facade-QEJIM6BC.js.map → at/index.js.map} +0 -0
- /package/dist/{computed-6G5M3UPH.js.map → by/index.js.map} +0 -0
- /package/dist/{chunk-YAWK6AWF.js.map → chunk-225O5CXQ.js.map} +0 -0
- /package/dist/{chunk-OF3L2SD6.js.map → chunk-3QARDAYW.js.map} +0 -0
- /package/dist/{chunk-W3TVWF6N.js.map → chunk-4A4TYISP.js.map} +0 -0
- /package/dist/{chunk-CCZJJ4I2.js.map → chunk-4G25SDQL.js.map} +0 -0
- /package/dist/{chunk-7TSYBD3E.js.map → chunk-5263OEM3.js.map} +0 -0
- /package/dist/{chunk-FNSMZQS4.js.map → chunk-5ACAVJUI.js.map} +0 -0
- /package/dist/{chunk-VMCCGUQB.js.map → chunk-7LYUJNU3.js.map} +0 -0
- /package/dist/{chunk-WLYIROCJ.js.map → chunk-AB5P32RE.js.map} +0 -0
- /package/dist/{chunk-SUFG5E73.js.map → chunk-ALUNQEBY.js.map} +0 -0
- /package/dist/{chunk-CADUYBQD.js.map → chunk-ATL3ZVXT.js.map} +0 -0
- /package/dist/{chunk-6FJWSWFT.js.map → chunk-DBNYPLWY.js.map} +0 -0
- /package/dist/{chunk-VJFMXYKP.js.map → chunk-E6YA6UAP.js.map} +0 -0
- /package/dist/{chunk-JIUVJ4M7.js.map → chunk-F7ZFRPGQ.js.map} +0 -0
- /package/dist/{chunk-HXGUIPQB.js.map → chunk-FOG7YEJP.js.map} +0 -0
- /package/dist/{chunk-X56RTUK3.js.map → chunk-HM4JSXX2.js.map} +0 -0
- /package/dist/{chunk-GQ3BX5EA.js.map → chunk-I3ISCYT7.js.map} +0 -0
- /package/dist/{chunk-FUHKW252.js.map → chunk-J4MN6XIU.js.map} +0 -0
- /package/dist/{chunk-ADW22QSB.js.map → chunk-J4UJ5FRV.js.map} +0 -0
- /package/dist/{chunk-HVQGCKY4.js.map → chunk-JVLSU7S2.js.map} +0 -0
- /package/dist/{chunk-AR2JDFAE.js.map → chunk-KDJGJR7F.js.map} +0 -0
- /package/dist/{chunk-747LRSOO.js.map → chunk-LKFKXS5K.js.map} +0 -0
- /package/dist/{chunk-U5O6GIWZ.js.map → chunk-LR4Z47QD.js.map} +0 -0
- /package/dist/{chunk-RTAMLDWP.js.map → chunk-NLKLXXTO.js.map} +0 -0
- /package/dist/{chunk-FDX7OWWI.js.map → chunk-OPXR4PB2.js.map} +0 -0
- /package/dist/{chunk-Z45YRGFO.js.map → chunk-P6ASQOZR.js.map} +0 -0
- /package/dist/{chunk-2Z3NCLNX.js.map → chunk-QI5NWLVW.js.map} +0 -0
- /package/dist/{chunk-6SAFL5YE.js.map → chunk-RC4BROYR.js.map} +0 -0
- /package/dist/{chunk-NJDQ4YSV.js.map → chunk-RDHUZ674.js.map} +0 -0
- /package/dist/{chunk-3JVXVJ7L.js.map → chunk-S35S77YU.js.map} +0 -0
- /package/dist/{chunk-KUDZVJKQ.js.map → chunk-SHILAQH5.js.map} +0 -0
- /package/dist/{chunk-4UVDI4XE.js.map → chunk-T3PHCEN4.js.map} +0 -0
- /package/dist/{derive-IUA6JFLB.js.map → chunk-UBSFPGVJ.js.map} +0 -0
- /package/dist/{chunk-FAXZQ5UF.js.map → chunk-UCUALOSM.js.map} +0 -0
- /package/dist/{chunk-4HDYQL3J.js.map → chunk-VAG47QHV.js.map} +0 -0
- /package/dist/{chunk-35EBKWQU.js.map → chunk-VFIWDPXZ.js.map} +0 -0
- /package/dist/{chunk-HNHCQ556.js.map → chunk-WLLUM35R.js.map} +0 -0
- /package/dist/{chunk-JRCYZEHU.js.map → chunk-XVU7J43V.js.map} +0 -0
- /package/dist/{chunk-DMQCLZ4Z.js.map → chunk-YCSM3GZU.js.map} +0 -0
- /package/dist/{chunk-FMQJZH4R.js.map → chunk-YMLQBZFJ.js.map} +0 -0
- /package/dist/{chunk-6HFM7EIT.js.map → chunk-YPSOHDNC.js.map} +0 -0
- /package/dist/{chunk-N35NC4JH.js.map → chunk-Z2PWOSCJ.js.map} +0 -0
- /package/dist/{chunk-HPLWFNG4.js.map → chunk-Z7ZXZL6Y.js.map} +0 -0
- /package/dist/{classified-marker-2KJAXRRO.js.map → classified-marker-BSQHU4JT.js.map} +0 -0
- /package/dist/{enclave-JU4YIEPB.js.map → collection-facade-LG3NYZVB.js.map} +0 -0
- /package/dist/{executor-CYJQLKKI.js.map → computed-ASBNTLOK.js.map} +0 -0
- /package/dist/{dead-filter-DCB62VWW.js.map → dead-filter-QKU56XTQ.js.map} +0 -0
- /package/dist/{executor-S4QIKEHW.js.map → derive-CXHCY46K.js.map} +0 -0
- /package/dist/{dispatch-MJ6SHB3Y.js.map → dispatch-4AP4PUZU.js.map} +0 -0
- /package/dist/{executor-YIQB2S6N.js.map → enclave-NYPT7WA7.js.map} +0 -0
- /package/dist/{export-accessible-4S36PQNR.js.map → executor-3KFRQETS.js.map} +0 -0
- /package/dist/{extract-partition-IO7FDZ2P.js.map → executor-AFHQYRAU.js.map} +0 -0
- /package/dist/{find-RBBYKXI7.js.map → executor-YYDW6XQI.js.map} +0 -0
- /package/dist/{issue-RIVHSY2S.js.map → export-accessible-BX2ILB4C.js.map} +0 -0
- /package/dist/{ledger-AETNF4OM.js.map → extract-partition-UPOVITFI.js.map} +0 -0
- /package/dist/{liberate-GFN4C7RR.js.map → find-SZBL2HPB.js.map} +0 -0
- /package/dist/{link-set-E5HNY67I.js.map → issue-G53NB6EW.js.map} +0 -0
- /package/dist/{managed-secret-CWQ6PND5.js.map → ledger-T5K4P2D7.js.map} +0 -0
- /package/dist/{noydb-ASEXNJS6.js.map → liberate-VEOZRESE.js.map} +0 -0
- /package/dist/{register-4EFJCVYD.js.map → link-set-76JZ6YB4.js.map} +0 -0
- /package/dist/{registry-4SDHHOJ7.js.map → managed-secret-6YC32VXG.js.map} +0 -0
- /package/dist/{registry-CZVINVQH.js.map → noydb-EDJA4JNJ.js.map} +0 -0
- /package/dist/{registry-IKUR2MXD.js.map → on/index.js.map} +0 -0
- /package/dist/{post-register-2XSSMGEQ.js.map → post-register-53O7AJRZ.js.map} +0 -0
- /package/dist/{registry-OYTFGWVK.js.map → register-6TCBR6XD.js.map} +0 -0
- /package/dist/{request-withdrawal-KGXGDPVQ.js.map → registry-DH2L4O2V.js.map} +0 -0
- /package/dist/{revoke-JFN773KF.js.map → registry-IWFMXCHX.js.map} +0 -0
- /package/dist/{signer-TA55QB6R.js.map → registry-Q3FG3OAX.js.map} +0 -0
- /package/dist/{stale-ARHFVL5U.js.map → registry-YC3IFG3A.js.map} +0 -0
- /package/dist/{storage-V7MTFAQJ.js.map → request-withdrawal-NM5VYR6F.js.map} +0 -0
- /package/dist/{reveal-BW36KCOQ.js.map → reveal-XBIMHAXR.js.map} +0 -0
- /package/dist/{ulid-PTAIMDG4.js.map → revoke-MJNYWO72.js.map} +0 -0
- /package/dist/{walk-3ZECBFDA.js.map → signer-6XVS2AU3.js.map} +0 -0
- /package/dist/{withdraw-accessible-7PG4DYQK.js.map → stale-MCS46TFO.js.map} +0 -0
- /package/dist/{verify-RO5RTZOJ.js.map → verify-WYOFLSNA.js.map} +0 -0
|
@@ -106,6 +106,15 @@ export interface CrossJoinClause {
|
|
|
106
106
|
readonly onPredicateName?: string;
|
|
107
107
|
/** Per-clause row ceiling override. `undefined` → `DEFAULT_CROSS_JOIN_MAX_ROWS`. */
|
|
108
108
|
readonly maxRows?: number;
|
|
109
|
+
/**
|
|
110
|
+
* Left-outer mode (#1130). When the `on:` subset for a left row is empty,
|
|
111
|
+
* emit that row once with `null` under `as` instead of dropping it.
|
|
112
|
+
*
|
|
113
|
+
* Applies to both call shapes. With `on:` the empty thing is that left
|
|
114
|
+
* row's subset; without it, an empty TARGET collection is what would
|
|
115
|
+
* otherwise drop every left row.
|
|
116
|
+
*/
|
|
117
|
+
readonly outer?: boolean;
|
|
109
118
|
}
|
|
110
119
|
export type Clause = FieldClause | FilterClause | WherePredicateClause | GroupClause | CrossJoinClause;
|
|
111
120
|
/**
|
package/dist/kernel/refs.d.ts
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
* Foreign-key references — the soft-FK mechanism.
|
|
3
3
|
*
|
|
4
4
|
* A collection declares its references as metadata at construction
|
|
5
|
-
* time
|
|
5
|
+
* time. A declaration made on an already-constructed collection is
|
|
6
|
+
* late-attached rather than dropped (#1141) — an identical redeclaration is a
|
|
7
|
+
* no-op, a conflicting one throws:
|
|
6
8
|
*
|
|
7
9
|
* ```ts
|
|
8
10
|
* import { ref } from '@noy-db/hub'
|
|
@@ -52,7 +52,7 @@ export declare function resolveEffectiveSecret(options: NoydbOptions, store: Noy
|
|
|
52
52
|
export declare function ownerKeyringOptions(options: NoydbOptions, secret: string | EchoSecretParts): {
|
|
53
53
|
echoMaskHint?: string;
|
|
54
54
|
echoSecretPolicy?: import("./validation.js").EchoSecretPolicy;
|
|
55
|
-
deviceSeal?: import("../index.js").
|
|
55
|
+
deviceSeal?: import("../index.js").NoydbDeviceSeal;
|
|
56
56
|
userId: string;
|
|
57
57
|
secret: string | EchoSecretParts;
|
|
58
58
|
validate: boolean;
|
|
@@ -119,8 +119,6 @@ export interface SyncPolicy {
|
|
|
119
119
|
export declare const INDEXED_STORE_POLICY: SyncPolicy;
|
|
120
120
|
/** Default for bundle stores (Drive, WebDAV, Git). */
|
|
121
121
|
export declare const POD_STORE_POLICY: SyncPolicy;
|
|
122
|
-
/** @deprecated Use `POD_STORE_POLICY`. */
|
|
123
|
-
export declare const BUNDLE_STORE_POLICY: SyncPolicy;
|
|
124
122
|
/**
|
|
125
123
|
* Current operational state of the `SyncScheduler`.
|
|
126
124
|
*
|
|
@@ -52,3 +52,37 @@ export declare function assertTierWritable(adapter: NoydbStore, vault: string, n
|
|
|
52
52
|
* explicit for concurrent writes generally.
|
|
53
53
|
*/
|
|
54
54
|
export declare function assertCutoverTierSafe(adapter: NoydbStore, vault: string, name: string, tiersEnabled: boolean): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* The key a collection's DEK is stored under in `UnlockedKeyring.deks` for a
|
|
57
|
+
* given tier: `collection` at tier 0, `collection#N` above it.
|
|
58
|
+
*
|
|
59
|
+
* Lives in the kernel because the `deks` map is a kernel type and the kernel
|
|
60
|
+
* reads it — `noydb.ts` needs this to resolve the right DEK when verifying a
|
|
61
|
+
* pulled envelope (#1042). `with-party/team/tiers.ts` re-exports it, so every
|
|
62
|
+
* existing importer is unchanged; the definition simply moved to the layer that
|
|
63
|
+
* owns the map rather than one that happens to use it.
|
|
64
|
+
*
|
|
65
|
+
* This move was forced by `port-layering`, and rightly: the alternative was the
|
|
66
|
+
* kernel spine statically importing a `with-*` service, or duplicating the
|
|
67
|
+
* naming convention in two places where it could drift.
|
|
68
|
+
*/
|
|
69
|
+
export declare function dekKey(collection: string, tier: number): string;
|
|
70
|
+
/**
|
|
71
|
+
* Inverse of {@link dekKey}: split a DEK slot name back into the collection it
|
|
72
|
+
* belongs to and the tier it covers.
|
|
73
|
+
*
|
|
74
|
+
* Needed because a tier slot **names a key, not a collection** (#1125).
|
|
75
|
+
* `store.list(vault, "docs#1")` is empty — elevated records live in `docs`
|
|
76
|
+
* alongside their tier-0 siblings, distinguished by the envelope `_tier` field.
|
|
77
|
+
* Anything that walks a slot's data must walk `collection` and select within it,
|
|
78
|
+
* never list the slot name.
|
|
79
|
+
*
|
|
80
|
+
* Parsed from the RIGHT, requiring an all-digit positive suffix. A name that
|
|
81
|
+
* does not fit that shape is a plain collection at tier 0 — including one that
|
|
82
|
+
* merely contains a `#`, which round-trips correctly precisely because `dekKey`
|
|
83
|
+
* never produces `#0`.
|
|
84
|
+
*/
|
|
85
|
+
export declare function parseDekKey(slot: string): {
|
|
86
|
+
collection: string;
|
|
87
|
+
tier: number;
|
|
88
|
+
};
|
package/dist/kernel/types.d.ts
CHANGED
|
@@ -34,6 +34,7 @@ import type { PeriodsStrategy } from '../with-audit/periods/strategy.js';
|
|
|
34
34
|
import type { ShadowStrategy } from '../with-fork/shadow/strategy.js';
|
|
35
35
|
import type { TransactionsStrategy } from '../with-commit/tx/strategy.js';
|
|
36
36
|
import type { HistoryStrategy } from '../with-commit/history/strategy.js';
|
|
37
|
+
import type { VaultHeadStrategy } from '../with-commit/vault-head/strategy.js';
|
|
37
38
|
import type { ForgetStrategy } from '../with-audit/forget/strategy.js';
|
|
38
39
|
import type { SnapshotsStrategy } from '../with-fork/snapshots/strategy.js';
|
|
39
40
|
import type { DerivationSkippedFrozen } from './via/dispatch.js';
|
|
@@ -59,19 +60,20 @@ import type { SecretPolicy, EchoSecretPolicy } from './validation.js';
|
|
|
59
60
|
import type { CoverSchema } from '../with-party/directory/cover/types.js';
|
|
60
61
|
import type { MaterializedViewStrategy } from '../with-formula/materialized-views/types.js';
|
|
61
62
|
import type { OverlayedViewStrategy } from '../with-formula/overlay-views/types.js';
|
|
62
|
-
import type {
|
|
63
|
-
import type {
|
|
63
|
+
import type { NoydbSealer, RecipientHint } from '../with-party/team/managed-secret.js';
|
|
64
|
+
import type { NoydbShamir } from '../with-party/team/noydb-shamir.js';
|
|
64
65
|
import type { ObjectProjection } from '../with-shape/blobs/object-projection.js';
|
|
65
|
-
import type {
|
|
66
|
+
import type { FormatsStrategy } from '../port/with/formats-strategy.js';
|
|
67
|
+
import type { NoydbMesh } from '../port/by/types.js';
|
|
66
68
|
import type { ScriptWarning } from '../port/with/i18n-strategy.js';
|
|
67
69
|
import type { ViaDescriptor } from './via/index.js';
|
|
68
70
|
import type { EnclaveKey, EchoSecretParts } from './enclave/index.js';
|
|
69
|
-
import type {
|
|
71
|
+
import type { NoydbDeviceSeal } from '../port/with/device-seal-strategy.js';
|
|
70
72
|
export type { EchoSecretParts };
|
|
71
73
|
/** Format version for encrypted record envelopes. */
|
|
72
74
|
export declare const NOYDB_FORMAT_VERSION: 1;
|
|
73
75
|
/** Format version for keyring files. */
|
|
74
|
-
export declare const NOYDB_KEYRING_VERSION:
|
|
76
|
+
export declare const NOYDB_KEYRING_VERSION: 2;
|
|
75
77
|
/** Format version for backup files. */
|
|
76
78
|
export declare const NOYDB_BACKUP_VERSION: 1;
|
|
77
79
|
/** Format version for sync metadata. */
|
|
@@ -403,7 +405,7 @@ export declare class SealedHandle<V> implements Sealed<V> {
|
|
|
403
405
|
* implement this — the §11.2 capability matrix lives in the type system.
|
|
404
406
|
*
|
|
405
407
|
* Per foundation §11.4. A function that requires recipient-target sealing
|
|
406
|
-
* takes `RecipientSealer`, not `
|
|
408
|
+
* takes `RecipientSealer`, not `NoydbSealer` — the compiler rejects
|
|
407
409
|
* passing a self-only provider at the spec site.
|
|
408
410
|
*/
|
|
409
411
|
export interface RecipientSealer {
|
|
@@ -412,7 +414,7 @@ export interface RecipientSealer {
|
|
|
412
414
|
publishRecipientHint(): Promise<RecipientHint>;
|
|
413
415
|
/**
|
|
414
416
|
* Seal plaintext for the recipient described by `hint`. Returns opaque
|
|
415
|
-
* bytes — same contract as `
|
|
417
|
+
* bytes — same contract as `NoydbSealer.seal()`. The bundle
|
|
416
418
|
* layer base64-encodes the bytes into `SealedAutoUnlockEntry.sealed`
|
|
417
419
|
* without inspecting them.
|
|
418
420
|
*/
|
|
@@ -704,8 +706,20 @@ export declare function createStore<TOptions>(factory: (options: TOptions) => No
|
|
|
704
706
|
/**
|
|
705
707
|
* Interchange formats `@noy-db/as-*` packages can produce. `'*'` is a
|
|
706
708
|
* wildcard granting every current + future plaintext format.
|
|
709
|
+
*
|
|
710
|
+
* OPEN, not closed. The literals below are the formats hub ships bindings
|
|
711
|
+
* for and exist so editors autocomplete them; `(string & {})` admits any
|
|
712
|
+
* other `NoydbFormat.id`, including one from a third-party package hub has
|
|
713
|
+
* never heard of. Closing this union would mean a third-party format could
|
|
714
|
+
* be *checked* by `assertCanExport` but never *granted* — forcing owners
|
|
715
|
+
* onto the `'*'` wildcard, which is strictly worse than a name hub does
|
|
716
|
+
* not recognise.
|
|
717
|
+
*
|
|
718
|
+
* The cost, stated: a typo in a grant (`'csvv'`) typechecks. It then fails
|
|
719
|
+
* closed at runtime, because the gate is an exact-match lookup — the safe
|
|
720
|
+
* direction for a security capability.
|
|
707
721
|
*/
|
|
708
|
-
export type ExportFormat = 'xlsx' | 'csv' | 'json' | 'ndjson' | 'xml' | 'sql' | 'pdf' | 'blob' | 'zip' | '*';
|
|
722
|
+
export type ExportFormat = 'xlsx' | 'csv' | 'json' | 'ndjson' | 'xml' | 'sql' | 'pdf' | 'blob' | 'zip' | '*' | (string & {});
|
|
709
723
|
/**
|
|
710
724
|
* Owner-granted export capability on a keyring.
|
|
711
725
|
*
|
|
@@ -908,6 +922,21 @@ export interface KeyringFile {
|
|
|
908
922
|
readonly role: Role;
|
|
909
923
|
readonly permissions: Permissions;
|
|
910
924
|
readonly deks: Record<string, string>;
|
|
925
|
+
/**
|
|
926
|
+
* DEKs for a rotation that has STARTED but not committed (#1074).
|
|
927
|
+
*
|
|
928
|
+
* `rotateKeys` persists the new DEK here *before* rewriting any record, so an
|
|
929
|
+
* interruption can never strand records under a key that was only ever in
|
|
930
|
+
* memory. On commit these move into `deks` and this is cleared.
|
|
931
|
+
*
|
|
932
|
+
* Present on disk ⇒ a rotation was interrupted and the collection may hold
|
|
933
|
+
* records on both sides of the migration. Re-running `rotateKeys` resumes
|
|
934
|
+
* with this key rather than minting a fresh one.
|
|
935
|
+
*
|
|
936
|
+
* Optional: absent on every keyring written before this existed, and absent
|
|
937
|
+
* in the normal committed state.
|
|
938
|
+
*/
|
|
939
|
+
readonly pending_deks?: Record<string, string>;
|
|
911
940
|
readonly salt: string;
|
|
912
941
|
readonly created_at: string;
|
|
913
942
|
readonly granted_by: string;
|
|
@@ -915,17 +944,31 @@ export interface KeyringFile {
|
|
|
915
944
|
* Secret canary — base64 AES-KW-wrapped form of a known constant
|
|
916
945
|
* 256-bit value, wrapped under the keyring's KEK.
|
|
917
946
|
*
|
|
918
|
-
*
|
|
919
|
-
*
|
|
920
|
-
*
|
|
921
|
-
* from corruption even when ALL DEKs (including a single-DEK keyring's
|
|
922
|
-
* sole DEK) are corrupted.
|
|
947
|
+
* Lets `loadKeyring` distinguish wrong-secret from corruption even when
|
|
948
|
+
* ALL DEKs (including a single-DEK keyring's sole DEK) are corrupted: the
|
|
949
|
+
* canary unwrapping proves the KEK correct independent of any DEK byte.
|
|
923
950
|
*
|
|
924
951
|
* AES-KW is deterministic — every write site mints fresh on each
|
|
925
952
|
* persist; same KEK + same constant input always produces the same
|
|
926
953
|
* ciphertext, so this round-trips without state.
|
|
954
|
+
*
|
|
955
|
+
* REQUIRED as of #1096 (no-legacy policy): the pre-canary fallback
|
|
956
|
+
* heuristic is deleted, so an absent canary is not an old file, it is a
|
|
957
|
+
* store that stripped the field — `KeyringTamperedError('canary-missing')`.
|
|
958
|
+
*/
|
|
959
|
+
readonly canary: string;
|
|
960
|
+
/**
|
|
961
|
+
* #1096 — AES-GCM({iv,data}) of the canonical authority fields
|
|
962
|
+
* (user_id, role, permissions, granted_by, expires_at, capabilities)
|
|
963
|
+
* under the vault roster key (carried as `deks[ROSTER_KEY_ID]`).
|
|
964
|
+
* Required: a valid canary with a missing or mismatching tag is refused
|
|
965
|
+
* as KeyringTamperedError — absence must itself be an error, or a store
|
|
966
|
+
* opts out of verification by deleting a plaintext field.
|
|
927
967
|
*/
|
|
928
|
-
readonly
|
|
968
|
+
readonly roster_tag: {
|
|
969
|
+
readonly iv: string;
|
|
970
|
+
readonly data: string;
|
|
971
|
+
};
|
|
929
972
|
/**
|
|
930
973
|
* Tier-2 authenticator slots (multi-slot keyring extension).
|
|
931
974
|
* Optional / append-only: keyring files written before the
|
|
@@ -956,7 +999,7 @@ export interface KeyringFile {
|
|
|
956
999
|
* "this slot works for 30 days then becomes opaque to its holder."
|
|
957
1000
|
*
|
|
958
1001
|
* Absent on live keyrings written via `db.grant()` — the field is
|
|
959
|
-
* meaningful for `
|
|
1002
|
+
* meaningful for `PodRecipient` slots produced by
|
|
960
1003
|
* `writePod({ recipients: [...] })`. Setting it on a live
|
|
961
1004
|
* keyring is allowed but unusual.
|
|
962
1005
|
*/
|
|
@@ -1284,9 +1327,38 @@ export interface SyncTransactionResult {
|
|
|
1284
1327
|
}
|
|
1285
1328
|
export interface SyncStatus {
|
|
1286
1329
|
readonly dirty: number;
|
|
1330
|
+
/**
|
|
1331
|
+
* ISO 8601 timestamp of the last push that completed with **no errors**, or
|
|
1332
|
+
* `null` if none ever has (#1036). A failed attempt does not advance it — so
|
|
1333
|
+
* this answers "when did my data last reach the remote?", which is the reading
|
|
1334
|
+
* the name invites and the one the field previously did not honour.
|
|
1335
|
+
*/
|
|
1287
1336
|
readonly lastPush: string | null;
|
|
1337
|
+
/** As {@link SyncStatus.lastPush}, for pulls: last pull that had no errors. */
|
|
1288
1338
|
readonly lastPull: string | null;
|
|
1339
|
+
/**
|
|
1340
|
+
* Whether the **browser** reports network connectivity — driven solely by the
|
|
1341
|
+
* global `online`/`offline` events (#1034). It is NOT target reachability: an
|
|
1342
|
+
* unreachable store never flips it, and losing Wi-Fi flips it for every target
|
|
1343
|
+
* at once. To detect a failing target, read {@link SyncStatus.lastError}.
|
|
1344
|
+
*/
|
|
1289
1345
|
readonly online: boolean;
|
|
1346
|
+
/**
|
|
1347
|
+
* The failure that ended the most recent push/pull, cleared by the next
|
|
1348
|
+
* success (#1036). **Absent** when nothing has failed since the last success —
|
|
1349
|
+
* so `lastPush: null` with no `lastError` means "never synced", while
|
|
1350
|
+
* `lastPush` set plus a `lastError` means "synced then, failing since".
|
|
1351
|
+
*
|
|
1352
|
+
* Live state, not persisted: a reload cannot know whether the target still
|
|
1353
|
+
* fails, so it starts absent until the next attempt says otherwise.
|
|
1354
|
+
*/
|
|
1355
|
+
readonly lastError?: {
|
|
1356
|
+
/** ISO 8601 timestamp of the failed attempt. */
|
|
1357
|
+
readonly at: string;
|
|
1358
|
+
readonly op: 'push' | 'pull';
|
|
1359
|
+
/** Message of the first error the attempt collected. */
|
|
1360
|
+
readonly message: string;
|
|
1361
|
+
};
|
|
1290
1362
|
/**
|
|
1291
1363
|
* Per-collection readiness under a `'phased'` pull policy (#809). **Absent**
|
|
1292
1364
|
* for every other policy, and a collection the sequence never names is absent
|
|
@@ -1329,6 +1401,41 @@ export interface SyncTarget {
|
|
|
1329
1401
|
* (#948). Deliberately omits any preset *name* — a resolved `SyncPolicy` doesn't
|
|
1330
1402
|
* retain which preset (if any) it came from, so only its push/pull mode is surfaced.
|
|
1331
1403
|
*/
|
|
1404
|
+
/**
|
|
1405
|
+
* Per-target sync state (#1034). `syncStatus()` answers for the vault as a
|
|
1406
|
+
* whole; this answers per target, which is what a redundant topology needs in
|
|
1407
|
+
* order to say "the LAN store is unavailable — syncing via the cloud" rather
|
|
1408
|
+
* than just "something is wrong".
|
|
1409
|
+
*
|
|
1410
|
+
* Deliberately carries **no `online` flag.** `SyncStatus.online` reflects the
|
|
1411
|
+
* *browser's* global connectivity — it is set only by the `online`/`offline`
|
|
1412
|
+
* window events and no store outcome ever changes it, so every engine flips at
|
|
1413
|
+
* once for the same reason. Exposing it per target would make a global signal
|
|
1414
|
+
* look per-target: a status list would appear to update row by row while every
|
|
1415
|
+
* row actually moved together. Per-target *reachability* derived from real
|
|
1416
|
+
* store outcomes is a separate, still-unbuilt thing.
|
|
1417
|
+
*/
|
|
1418
|
+
export interface SyncTargetStatus {
|
|
1419
|
+
/** As registered. `undefined` when the target was declared without one. */
|
|
1420
|
+
readonly label: string | undefined;
|
|
1421
|
+
readonly role: SyncTargetRole;
|
|
1422
|
+
/** Pending local writes for this target. */
|
|
1423
|
+
readonly dirty: number;
|
|
1424
|
+
/** Last push that completed with no errors, or `null`. See {@link SyncStatus.lastPush}. */
|
|
1425
|
+
readonly lastPush: string | null;
|
|
1426
|
+
/** Last pull that completed with no errors, or `null`. */
|
|
1427
|
+
readonly lastPull: string | null;
|
|
1428
|
+
/**
|
|
1429
|
+
* Nothing queued for this target — `dirty === 0`.
|
|
1430
|
+
*
|
|
1431
|
+
* Well-defined for every role: for a `sync-peer` it means the two sides
|
|
1432
|
+
* agree as of the last exchange; for a push-only `backup` it means every
|
|
1433
|
+
* local write has reached it. It is a statement about the *outbound* queue
|
|
1434
|
+
* only, and says nothing about whether the target holds data this client has
|
|
1435
|
+
* not pulled.
|
|
1436
|
+
*/
|
|
1437
|
+
readonly caughtUp: boolean;
|
|
1438
|
+
}
|
|
1332
1439
|
export interface SyncTargetInfo {
|
|
1333
1440
|
readonly label: string | undefined;
|
|
1334
1441
|
readonly role: SyncTargetRole;
|
|
@@ -1544,7 +1651,6 @@ export interface UpdateUserOptions {
|
|
|
1544
1651
|
}
|
|
1545
1652
|
export interface RevokeOptions {
|
|
1546
1653
|
readonly userId: string;
|
|
1547
|
-
readonly rotateKeys?: boolean;
|
|
1548
1654
|
/**
|
|
1549
1655
|
* Cascade behavior when the revoked user is an admin who has granted
|
|
1550
1656
|
* other admins.
|
|
@@ -1868,10 +1974,10 @@ export interface CrdtStrategy {
|
|
|
1868
1974
|
* that operate on whole-vault bundles rather than per-record KV.
|
|
1869
1975
|
*
|
|
1870
1976
|
* Implement `readBundle` / `writeBundle` instead of the six-method KV
|
|
1871
|
-
* contract. Use `
|
|
1977
|
+
* contract. Use `wrapPodStore()` from `@noy-db/hub` to convert to a
|
|
1872
1978
|
* `NoydbStore` that the rest of the API consumes transparently.
|
|
1873
1979
|
*
|
|
1874
|
-
* Named `NoydbPodStore`
|
|
1980
|
+
* Named `NoydbPodStore` for consistency
|
|
1875
1981
|
* with the hub / to-* / in-* rename. Concrete implementations ship
|
|
1876
1982
|
* in `@noy-db/to-*` packages starting in.
|
|
1877
1983
|
*/
|
|
@@ -1907,8 +2013,6 @@ export interface NoydbPodStore {
|
|
|
1907
2013
|
size: number;
|
|
1908
2014
|
}>>;
|
|
1909
2015
|
}
|
|
1910
|
-
/** @deprecated Use `NoydbPodStore`. */
|
|
1911
|
-
export type NoydbBundleStore = NoydbPodStore;
|
|
1912
2016
|
/**
|
|
1913
2017
|
* Content-addressed blob object stored in the vault-level blob index.
|
|
1914
2018
|
* Identified by HMAC-SHA-256(blobDEK, plaintext) — opaque to the store.
|
|
@@ -2354,6 +2458,13 @@ export interface NoydbOptions {
|
|
|
2354
2458
|
* @internal
|
|
2355
2459
|
*/
|
|
2356
2460
|
readonly historyStrategy?: HistoryStrategy;
|
|
2461
|
+
/**
|
|
2462
|
+
* #1044 — opt in to the vault head, which detects a store that WITHHOLDS.
|
|
2463
|
+
* `withVaultHead()` from `@noy-db/hub/vault-head`. Costs one small write per
|
|
2464
|
+
* commit; on a single-device offline vault it defends against nothing, which
|
|
2465
|
+
* is why it is opt-in while AAD is not.
|
|
2466
|
+
*/
|
|
2467
|
+
readonly vaultHeadStrategy?: VaultHeadStrategy;
|
|
2357
2468
|
/**
|
|
2358
2469
|
* GDPR right-to-erasure. Pass `withForget({ subjects })`
|
|
2359
2470
|
* from `@noy-db/hub/forget` to declare which collections carry erasable
|
|
@@ -2663,13 +2774,13 @@ export interface NoydbOptions {
|
|
|
2663
2774
|
* (`@noy-db/seal-macos-keychain`, `@noy-db/seal-wincred`,
|
|
2664
2775
|
* `@noy-db/seal-libsecret`, `@noy-db/seal-aws-kms`, …).
|
|
2665
2776
|
*/
|
|
2666
|
-
readonly sealingKey?:
|
|
2777
|
+
readonly sealingKey?: NoydbSealer;
|
|
2667
2778
|
/**
|
|
2668
2779
|
* Device-local sealer for the echo reveal-blob. Echo mode only.
|
|
2669
2780
|
* Absent ⇒ live keyrings enroll `reveal: 'portable'`; present ⇒
|
|
2670
2781
|
* `sealed` (attacker-B resistance). Spec resolved question 4.
|
|
2671
2782
|
*/
|
|
2672
|
-
readonly deviceSeal?:
|
|
2783
|
+
readonly deviceSeal?: NoydbDeviceSeal;
|
|
2673
2784
|
/**
|
|
2674
2785
|
* Echo enrollment only: optional display hint for the masked echo,
|
|
2675
2786
|
* threaded to the owner keyring's `KeyringEchoBlock.mask_hint` (surfaced
|
|
@@ -2683,7 +2794,7 @@ export interface NoydbOptions {
|
|
|
2683
2794
|
readonly echoMaskHint?: string;
|
|
2684
2795
|
/** Required to use `profile: 'shamir'` recovery. Pass
|
|
2685
2796
|
* `shamirRecoveryProvider()` from `@noy-db/on-shamir`. */
|
|
2686
|
-
readonly shamirRecovery?:
|
|
2797
|
+
readonly shamirRecovery?: NoydbShamir;
|
|
2687
2798
|
/** Enable encryption. Default: true. */
|
|
2688
2799
|
readonly encrypt?: boolean;
|
|
2689
2800
|
/**
|
|
@@ -2832,20 +2943,26 @@ export interface NoydbOptions {
|
|
|
2832
2943
|
readonly plaintextTranslatorName?: string;
|
|
2833
2944
|
/**
|
|
2834
2945
|
* Drain-barrier coordination transport for the schema fence.
|
|
2835
|
-
* When omitted, the kernel uses a {@link
|
|
2836
|
-
* primary store (`
|
|
2946
|
+
* When omitted, the kernel uses a {@link NoydbMesh} backed by the
|
|
2947
|
+
* primary store (`StoreMesh`), reproducing today's
|
|
2837
2948
|
* store-polling fence behavior byte-for-byte. `@noy-db/by-tabs` /
|
|
2838
2949
|
* `@noy-db/by-peer` inject a real-time push transport here; an external
|
|
2839
2950
|
* orchestrator (`@klum-db/lobby`) drives it through the `Noydb` handle.
|
|
2840
2951
|
*
|
|
2841
2952
|
* @internal
|
|
2842
2953
|
*/
|
|
2843
|
-
|
|
2954
|
+
/**
|
|
2955
|
+
* Enables `vault.export(format)` / `vault.import(format, input)` — the
|
|
2956
|
+
* `as-*` format port. Opt-in: a vault that never exports ships none of it.
|
|
2957
|
+
* `withFormats()` from `@noy-db/hub/as`.
|
|
2958
|
+
*/
|
|
2959
|
+
readonly formatsStrategy?: FormatsStrategy;
|
|
2960
|
+
readonly mesh?: NoydbMesh;
|
|
2844
2961
|
/**
|
|
2845
2962
|
* Pre-resolved factory for the `vault.user` per-principal user-envelope
|
|
2846
2963
|
* API. `createNoydb()` always resolves this itself (dynamically
|
|
2847
2964
|
* importing `with-party/directory/user-envelope/api.js`) before
|
|
2848
|
-
* constructing `Noydb` — mirrors the {@link
|
|
2965
|
+
* constructing `Noydb` — mirrors the {@link mesh}
|
|
2849
2966
|
* pre-resolve above. There is no supported way to override it; it exists
|
|
2850
2967
|
* as an options-bag field only so `createNoydb()` can thread the
|
|
2851
2968
|
* pre-resolved value into the constructor without a second parameter.
|
|
@@ -2858,7 +2975,7 @@ export interface NoydbOptions {
|
|
|
2858
2975
|
* read/update/bootstrap + session-policy enforcer wiring).
|
|
2859
2976
|
* `createNoydb()` always resolves this itself (dynamically importing
|
|
2860
2977
|
* `with-party/policy/index.js`) before constructing `Noydb` — mirrors the
|
|
2861
|
-
* {@link
|
|
2978
|
+
* {@link mesh} / {@link userApiFactory} pre-resolves
|
|
2862
2979
|
* above. There is no supported way to override it.
|
|
2863
2980
|
*
|
|
2864
2981
|
* @internal
|
package/dist/kernel/vault.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { OpenCollectionOptions } from '../port/with/collection-options.js';
|
|
2
2
|
import type { StrategyBag } from '../port/with/strategies.js';
|
|
3
|
+
import type { NoydbFormat, ImportPlan, FormatExportOptions, FormatImportOptions } from '../port/with/formats-strategy.js';
|
|
3
4
|
import type { NoydbStore, EncryptedEnvelope, HistoryConfig, ExportStreamOptions, ExportChunk, CollectionConflictResolver, CrossTierAccessEvent, Role, VaultUserApi, CollectionShape, SensitiveOf, IndexedOf, MoneyOf } from './types.js';
|
|
4
5
|
import type { Noydb } from './noydb.js';
|
|
5
6
|
import type { IssueDelegationOptions, DelegationToken } from '../with-party/team/delegation.js';
|
|
6
7
|
import { Collection } from './collection.js';
|
|
7
8
|
import type { JoinableSource } from './query/index.js';
|
|
8
9
|
import type { OnDirtyCallback } from './collection.js';
|
|
9
|
-
import type { UnlockedKeyring,
|
|
10
|
+
import type { UnlockedKeyring, PodRecipient } from '../with-party/team/keyring.js';
|
|
10
11
|
import type { MaterializedViewRegistry } from '../with-formula/materialized-views/registry.js';
|
|
11
12
|
import type { MaterializedViewStrategy } from '../with-formula/materialized-views/types.js';
|
|
12
13
|
import type { OverlayedViewRegistry } from '../with-formula/overlay-views/registry.js';
|
|
@@ -336,7 +337,7 @@ export declare class Vault {
|
|
|
336
337
|
* unblocks R-S7 when a base gains forget coverage after its satellite was
|
|
337
338
|
* already declared without `perRecordKeys`. Call BEFORE re-declaring with
|
|
338
339
|
* `{ satelliteOf, perRecordKeys: true }` AND before this collection serves
|
|
339
|
-
* writes (unfenced walk — see
|
|
340
|
+
* writes (unfenced walk — see `with-shape/satellites/migrate-cek.ts`); resumable.
|
|
340
341
|
*/
|
|
341
342
|
migrateSatellitePerRecordKeys(satelliteName: string): Promise<{
|
|
342
343
|
migrated: number;
|
|
@@ -574,7 +575,7 @@ export declare class Vault {
|
|
|
574
575
|
*
|
|
575
576
|
* @public
|
|
576
577
|
*/
|
|
577
|
-
buildBundleRecipientKeyrings(recipients: readonly
|
|
578
|
+
buildBundleRecipientKeyrings(recipients: readonly PodRecipient[]): Promise<Record<string, KeyringFile>>;
|
|
578
579
|
/**
|
|
579
580
|
* Authorize an `@noy-db/as-*` export against the current keyring's
|
|
580
581
|
* `exportCapability`. Throws `ExportCapabilityError` if
|
|
@@ -745,7 +746,7 @@ export declare class Vault {
|
|
|
745
746
|
*
|
|
746
747
|
* @internal
|
|
747
748
|
*/
|
|
748
|
-
_decryptEnvelopeForBundleFilter(env: EncryptedEnvelope, collectionName: string): Promise<unknown>;
|
|
749
|
+
_decryptEnvelopeForBundleFilter(env: EncryptedEnvelope, collectionName: string, recordId: string): Promise<unknown>;
|
|
749
750
|
/**
|
|
750
751
|
* Read-only accessor for the invoking keyring's import capability
|
|
751
752
|
* (issue ). UI affordance — returns false in every default-closed
|
|
@@ -1164,7 +1165,7 @@ export declare class Vault {
|
|
|
1164
1165
|
* - The keyring must already carry a wrap for the target tier on
|
|
1165
1166
|
* at least one collection (or be `owner` / `admin`, who can
|
|
1166
1167
|
* auto-mint). Otherwise throws {@link TierNotGrantedError}.
|
|
1167
|
-
* - Per-collection capability gates (`
|
|
1168
|
+
* - Per-collection capability gates (`assertCanExport`,
|
|
1168
1169
|
* `canExportBundle`) are NOT bypassed — elevation is a tier
|
|
1169
1170
|
* projection, not a privilege escalation path.
|
|
1170
1171
|
* - Only one elevation can be active per vault at a time.
|
|
@@ -1348,12 +1349,12 @@ export declare class Vault {
|
|
|
1348
1349
|
* distinct handles, which is the right behavior — they're
|
|
1349
1350
|
* separate vault instances now.
|
|
1350
1351
|
*/
|
|
1351
|
-
|
|
1352
|
+
getPodHandle(): Promise<string>;
|
|
1352
1353
|
/**
|
|
1353
1354
|
* Read the owner-curated cover for this vault (or `undefined` if
|
|
1354
1355
|
* none is persisted). The cover lives in `_meta/public-envelope`
|
|
1355
1356
|
* (the frozen wire name) as plaintext — readable without any KEK
|
|
1356
|
-
* — so `
|
|
1357
|
+
* — so `getPodHandle`-style callers can label a vault before
|
|
1357
1358
|
* unlock.
|
|
1358
1359
|
*
|
|
1359
1360
|
* Mirrors `Noydb.getCover(vault, opts)` but scoped to a
|
|
@@ -1498,6 +1499,14 @@ export declare class Vault {
|
|
|
1498
1499
|
* }
|
|
1499
1500
|
* ```
|
|
1500
1501
|
*/
|
|
1502
|
+
/**
|
|
1503
|
+
* Serialise this vault through an `as-*` format. The gate runs before a
|
|
1504
|
+
* record is read and the format never receives a vault — see
|
|
1505
|
+
* `docs/adr/0004-as-format-port.md` and `port/as/active.ts`.
|
|
1506
|
+
*/
|
|
1507
|
+
export<Out extends string | Uint8Array>(format: NoydbFormat<Out>, options?: FormatExportOptions): Promise<Out>;
|
|
1508
|
+
/** Plan an import from an `as-*` format. Nothing is written until `apply()`. */
|
|
1509
|
+
import<Out extends string | Uint8Array>(format: NoydbFormat<Out>, input: Out, options?: FormatImportOptions): Promise<ImportPlan>;
|
|
1501
1510
|
exportStream(opts?: ExportStreamOptions): AsyncIterableIterator<ExportChunk>;
|
|
1502
1511
|
/**
|
|
1503
1512
|
* Convenience wrapper that consumes `exportStream()` and serializes the
|
|
@@ -47,7 +47,7 @@ export interface MergedViaFields {
|
|
|
47
47
|
/**
|
|
48
48
|
* Merge `viaFields` (the {@link via} composer) with the money/i18n sugar
|
|
49
49
|
* keys into the effective maps every consumer reads — the kernel's
|
|
50
|
-
* `
|
|
50
|
+
* `compileVias` (the `ViaPipeline` bindings) and `vault.ts`'s own
|
|
51
51
|
* i18n/dict registries (put-time validation, dict-join/search resolution)
|
|
52
52
|
* both call this so a field declared via `viaFields` behaves identically to
|
|
53
53
|
* one declared under its feature's sugar key.
|
|
@@ -65,7 +65,7 @@ export declare function mergeViaFields(sources: ViaFieldSources): MergedViaField
|
|
|
65
65
|
* `blobFields`) resolves silently by compile-order first-wins in `ViaPipeline`'s per-field
|
|
66
66
|
* posture/clause lookup — undefined pipeline behavior for a config that is almost certainly a
|
|
67
67
|
* mistake. `mergeViaFields` already guards sugar-vs-`viaFields` and `dictKeyFields`-vs-
|
|
68
|
-
* `lookupFields` collisions (#623 Task 9); this runs one step later, in `
|
|
68
|
+
* `lookupFields` collisions (#623 Task 9); this runs one step later, in `compileVias`
|
|
69
69
|
* (fresh construction) or {@link guardReconcileCollisions} (late-attach reconcile), because
|
|
70
70
|
* those are the only seams that also see `classifiedFields`/`blobFields` — neither is part of
|
|
71
71
|
* `ViaFieldSources`, so `mergeViaFields` never sees them.
|
|
@@ -127,7 +127,7 @@ export declare function guardCrossBindingFieldCollisions(fieldMaps: Readonly<Rec
|
|
|
127
127
|
* THIS call's incoming family map claims the SAME field for a DIFFERENT family (e.g. call-1
|
|
128
128
|
* `classifiedFields:['ssn']`, call-2 `moneyFields:{ssn}`) — undetectable by (a) alone since
|
|
129
129
|
* the collision spans two calls. Read via the LIVE collection's compiled bindings
|
|
130
|
-
* (`coll._via.bindings`): each `
|
|
130
|
+
* (`coll._via.bindings`): each `NoydbVia.covers(field)` (`via/index.ts`) plus its `brand` tells us
|
|
131
131
|
* which family already owns the field, mapped through the SAME {@link VIA_FIELD_MAP_FAMILY}
|
|
132
132
|
* the incoming side uses — no new collection.ts surface needed.
|
|
133
133
|
*
|
|
@@ -47,8 +47,17 @@ export interface ViaCryptoCtx {
|
|
|
47
47
|
delete(field: string): Promise<void>;
|
|
48
48
|
};
|
|
49
49
|
reservedEnvelopes(prefix: string): {
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
/**
|
|
51
|
+
* `id` is the record id the envelope will be stored under. Required
|
|
52
|
+
* (#1051) because this function holds the DEK, so it is where record-identity
|
|
53
|
+
* AAD is applied — a caller that cannot name the id cannot be bound.
|
|
54
|
+
*/
|
|
55
|
+
encrypt(identity: {
|
|
56
|
+
readonly collection: string;
|
|
57
|
+
readonly id: string;
|
|
58
|
+
readonly by?: string;
|
|
59
|
+
}, json: string, v: number): Promise<EncryptedEnvelope>;
|
|
60
|
+
decrypt(collection: string, id: string, env: EncryptedEnvelope): Promise<string>;
|
|
52
61
|
};
|
|
53
62
|
}
|
|
54
63
|
/** Per-call erase context — `forget()`'s per-ref participation door (phase C). */
|
|
@@ -76,15 +85,15 @@ export interface ViaEraseReport {
|
|
|
76
85
|
* e.g. quantizeMoneyFields(record, moneyFields)). All hooks optional;
|
|
77
86
|
* absent = passthrough. Query-participation hooks are SYNC (#553).
|
|
78
87
|
*/
|
|
79
|
-
export interface
|
|
88
|
+
export interface NoydbVia {
|
|
80
89
|
readonly brand: string;
|
|
81
90
|
readonly posture: ViaPosture;
|
|
82
91
|
/** Declared dependencies (field paths / cross-record specs). MANDATORY for any future
|
|
83
92
|
* derive-bearing binding — phase C validates well-formedness (strings, non-empty,
|
|
84
93
|
* reference declared fields) and graph-registers a derived edge for each covered
|
|
85
|
-
* field at declare time, right after `
|
|
94
|
+
* field at declare time, right after `compileVias` builds the bindings
|
|
86
95
|
* (unknown source field throws `ValidationError`). See
|
|
87
|
-
* `kernel/collection-config.ts`'s `
|
|
96
|
+
* `kernel/collection-config.ts`'s `resolveViaDepsEdges`. */
|
|
88
97
|
readonly deps?: readonly string[];
|
|
89
98
|
/** Collection-name prefixes this binding's `reservedEnvelopes` capability may address (e.g. `_dict_`). */
|
|
90
99
|
readonly reservedPrefixes?: readonly string[];
|
|
@@ -190,7 +199,7 @@ export interface ViaBinding {
|
|
|
190
199
|
describeFragment?(): Record<string, unknown>;
|
|
191
200
|
}
|
|
192
201
|
/** Binder: constructs a binding from a collection's declared config. Installed by the feature's declaration factory. */
|
|
193
|
-
export type ViaBinder = (config: unknown) =>
|
|
202
|
+
export type ViaBinder = (config: unknown) => NoydbVia;
|
|
194
203
|
/** @internal — called (idempotently, first-wins) by a feature's declaration factory, e.g. money(). */
|
|
195
204
|
export declare function installViaBinder(brand: string, binder: ViaBinder): void;
|
|
196
205
|
/** @internal — registry presence check. Used by tests (mirrors isMoneyEngineInstalled) and by vault's i18n validator delegators as a no-i18n-ever-declared fast path. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { NoydbVia, ViaPosture, ViaWriteCtx, ViaReadCtx, ViaCryptoCtx, SealedSlotRef, ViaEraseCtx, ViaEraseReport } from './index.js';
|
|
2
2
|
/** Opaque per-clause query payload carried on FieldClause (replaces the money-only slot). */
|
|
3
3
|
export interface ViaClause {
|
|
4
4
|
readonly brand: string;
|
|
@@ -23,7 +23,7 @@ export interface ViaTaintOverlay {
|
|
|
23
23
|
readonly defaultPosture?: ViaPosture;
|
|
24
24
|
}
|
|
25
25
|
export declare class ViaPipeline {
|
|
26
|
-
readonly bindings: readonly
|
|
26
|
+
readonly bindings: readonly NoydbVia[];
|
|
27
27
|
readonly taint?: ViaTaintOverlay | undefined;
|
|
28
28
|
/**
|
|
29
29
|
* Present-phase-ONLY order (#665, corrected under #665 review) — a stable
|
|
@@ -33,7 +33,7 @@ export declare class ViaPipeline {
|
|
|
33
33
|
* everything else (existing relative order). `present()` folds over this
|
|
34
34
|
* instead of `bindings` so a `mode: 'virtual'` computed field's value
|
|
35
35
|
* exists before i18n/lookup's dressing `present()` hooks run on it
|
|
36
|
-
* (today's `
|
|
36
|
+
* (today's `compileVias` order is money→i18n→lookup→classified→
|
|
37
37
|
* blob→computed, `collection-config.ts:554`, so dressing unconditionally
|
|
38
38
|
* ran BEFORE the value it dresses existed). This reorder is binding-level,
|
|
39
39
|
* not conditioned on any particular field composition — it applies to
|
|
@@ -72,7 +72,7 @@ export declare class ViaPipeline {
|
|
|
72
72
|
* Money-dressing a virtual computed field's OWN output (the composed
|
|
73
73
|
* `computed(virtual) + money` case) is NOT resolved by this partition
|
|
74
74
|
* alone — #669 resolves it with a separate mid-fold hook instead:
|
|
75
|
-
* `
|
|
75
|
+
* `NoydbVia.presentLate` runs after every binding's `present()` in this
|
|
76
76
|
* money+computed segment, before the "everything else" segment below, so
|
|
77
77
|
* money can quantize/reinterpret a virtual field's fresh MAJOR-UNITS
|
|
78
78
|
* output as if it were a stored value, without perturbing this ordering
|
|
@@ -81,7 +81,7 @@ export declare class ViaPipeline {
|
|
|
81
81
|
*/
|
|
82
82
|
private readonly _presentOrder;
|
|
83
83
|
/** #669 — index into `_presentOrder` where the money+computed segment ends and the
|
|
84
|
-
* "everything else" segment begins (`
|
|
84
|
+
* "everything else" segment begins (`moneyVias.length + computedVias.length`);
|
|
85
85
|
* `present()` runs every binding's `presentLate` at exactly this boundary. */
|
|
86
86
|
private readonly _presentLateBoundary;
|
|
87
87
|
private constructor();
|
|
@@ -89,7 +89,7 @@ export declare class ViaPipeline {
|
|
|
89
89
|
* `this.via === undefined` (#553: keeps an all-plain collection sync). A
|
|
90
90
|
* `'*'`-defaulted output collection (#642) counts as "something to enforce"
|
|
91
91
|
* even with zero field-specific postures and zero bindings. */
|
|
92
|
-
static build(bindings: readonly
|
|
92
|
+
static build(bindings: readonly NoydbVia[], taint?: ViaTaintOverlay): ViaPipeline | undefined;
|
|
93
93
|
/** Refuse a write before crypto runs: awaits each binding's `enforceWrite` in order — first throw wins. */
|
|
94
94
|
enforceWrite(record: Record<string, unknown>, ctx: ViaWriteCtx): Promise<void>;
|
|
95
95
|
ingest(record: Record<string, unknown>): Record<string, unknown>;
|