@noy-db/hub 0.4.0-pre.4 → 0.4.0-pre.6
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/README.md +2 -2
- package/dist/api-5QVQX4HG.js +20 -0
- package/dist/attestation/index.js +18 -18
- package/dist/{backup-JL2GOTYQ.js → backup-USYSNCYM.js} +11 -11
- package/dist/blobs/index.js +15 -12
- package/dist/blobs/index.js.map +1 -1
- package/dist/broker/index.js +12 -12
- package/dist/cargo/index.js +34 -36
- package/dist/{chunk-JLHKBAFY.js → chunk-2BVW754E.js} +3 -3
- package/dist/{chunk-T7S4V52L.js → chunk-2PDBYF2O.js} +4 -4
- package/dist/{chunk-YGBIBOCR.js → chunk-2ZSC454H.js} +7 -7
- package/dist/{chunk-IGAIOGCN.js → chunk-32467U5J.js} +4 -4
- package/dist/{chunk-JA5O7UEZ.js → chunk-3GXDB3NQ.js} +6 -6
- package/dist/chunk-3GXDB3NQ.js.map +1 -0
- package/dist/{chunk-U73LHVPF.js → chunk-3S2YNMUS.js} +54 -6
- package/dist/chunk-3S2YNMUS.js.map +1 -0
- package/dist/{chunk-JW3XCZA2.js → chunk-3TZUC4WS.js} +11 -11
- package/dist/{chunk-JA5B3SLH.js → chunk-44Y3P5U6.js} +2 -2
- package/dist/{chunk-25G7U6RD.js → chunk-4B3DL75F.js} +2 -2
- package/dist/{chunk-L4OA7G5T.js → chunk-522MBPE5.js} +2 -2
- package/dist/chunk-5ABOFAHN.js +81 -0
- package/dist/chunk-5ABOFAHN.js.map +1 -0
- package/dist/chunk-5D2ALSM5.js +19 -0
- package/dist/chunk-5D2ALSM5.js.map +1 -0
- package/dist/{chunk-M25ZIEB2.js → chunk-5HSSTOOG.js} +2 -2
- package/dist/{chunk-LLVW4V7R.js → chunk-5WLDZZ6S.js} +3 -3
- package/dist/{chunk-BCOKZC4B.js → chunk-6SSWOUUS.js} +19 -19
- package/dist/chunk-6SSWOUUS.js.map +1 -0
- package/dist/{chunk-IGM563N5.js → chunk-6SYOHUHM.js} +6 -6
- package/dist/chunk-6SYOHUHM.js.map +1 -0
- package/dist/{chunk-7B4GPCX7.js → chunk-7IQWHYL2.js} +5 -5
- package/dist/{chunk-J3VW4J4E.js → chunk-7LP7FFJ2.js} +2 -2
- package/dist/chunk-7LP7FFJ2.js.map +1 -0
- package/dist/{chunk-5P5AAXYA.js → chunk-7U6AB7DZ.js} +7 -7
- package/dist/chunk-7U6AB7DZ.js.map +1 -0
- package/dist/chunk-AFHQATY4.js +47 -0
- package/dist/chunk-AFHQATY4.js.map +1 -0
- package/dist/{chunk-OWE4BNTM.js → chunk-AZXEOEQK.js} +4 -4
- package/dist/{chunk-GBEXTC6Z.js → chunk-BAAUFCJK.js} +3 -3
- package/dist/chunk-BAAUFCJK.js.map +1 -0
- package/dist/{chunk-BZEPJJOK.js → chunk-C2V7AJO2.js} +4 -4
- package/dist/chunk-CADUYBQD.js +151 -0
- package/dist/chunk-CADUYBQD.js.map +1 -0
- package/dist/{chunk-2JZ763FV.js → chunk-D4LAJ737.js} +2 -2
- package/dist/{chunk-5BHNQNBI.js → chunk-DOZFU7OZ.js} +1 -1
- package/dist/chunk-DOZFU7OZ.js.map +1 -0
- package/dist/{chunk-MEKAMERX.js → chunk-E7FSBI6I.js} +29 -29
- package/dist/chunk-E7FSBI6I.js.map +1 -0
- package/dist/{chunk-N4FZ6ITM.js → chunk-EGU4PWQW.js} +2 -2
- package/dist/chunk-EP5L47XV.js +22 -0
- package/dist/chunk-EP5L47XV.js.map +1 -0
- package/dist/{chunk-EW4HFWGJ.js → chunk-EPME33Y4.js} +6 -6
- package/dist/{chunk-W7TCXZWU.js → chunk-EWPS35AR.js} +794 -1045
- package/dist/chunk-EWPS35AR.js.map +1 -0
- package/dist/{chunk-JKWNG3TM.js → chunk-FHHYCBBP.js} +2 -2
- package/dist/{chunk-5BB3N4KU.js → chunk-G4MFQXYX.js} +2 -2
- package/dist/{chunk-KVHWEPT2.js → chunk-GHEMAVTN.js} +2 -2
- package/dist/{chunk-CGPO3ZYB.js → chunk-GQT6J4FJ.js} +15 -2
- package/dist/chunk-GQT6J4FJ.js.map +1 -0
- package/dist/{chunk-XW7NWO4A.js → chunk-GTNRMJYH.js} +2 -2
- package/dist/{chunk-YG2EG6CB.js → chunk-H5GMROCB.js} +4 -4
- package/dist/{chunk-JIMEB4C6.js → chunk-HA7P3BTB.js} +26 -177
- package/dist/chunk-HA7P3BTB.js.map +1 -0
- package/dist/{chunk-5KI3REO3.js → chunk-HDF5R2K6.js} +7 -7
- package/dist/{chunk-V3YB7RGR.js → chunk-HVPW6PCX.js} +3 -3
- package/dist/{chunk-2VUISNGP.js → chunk-HXVRRJBD.js} +5 -5
- package/dist/{chunk-ZJGZDOQO.js → chunk-ICYC5YNI.js} +6 -6
- package/dist/{chunk-KR5EGWI4.js → chunk-IUATR5UE.js} +27 -5
- package/dist/chunk-IUATR5UE.js.map +1 -0
- package/dist/{chunk-AFBJHD55.js → chunk-JGOKAZNB.js} +5 -5
- package/dist/{chunk-XGVDLQJE.js → chunk-JOCMXSR2.js} +3 -3
- package/dist/{chunk-XGVDLQJE.js.map → chunk-JOCMXSR2.js.map} +1 -1
- package/dist/{chunk-HGVFJL63.js → chunk-JTIPVW4J.js} +15 -5
- package/dist/{chunk-HGVFJL63.js.map → chunk-JTIPVW4J.js.map} +1 -1
- package/dist/{chunk-QXPOEAKR.js → chunk-KCZAFDP5.js} +2 -2
- package/dist/{chunk-MSO2C3KG.js → chunk-LC7DSMHR.js} +2 -2
- package/dist/{chunk-OVFCAS7U.js → chunk-LG2GUYRX.js} +9 -9
- package/dist/{chunk-2KL6NDD4.js → chunk-LN3MQFUE.js} +56 -4
- package/dist/chunk-LN3MQFUE.js.map +1 -0
- package/dist/{chunk-QUIG6BZT.js → chunk-M4GO4ZJK.js} +226 -36
- package/dist/chunk-M4GO4ZJK.js.map +1 -0
- package/dist/{chunk-QDNVHA2F.js → chunk-M7W2KYTL.js} +2 -2
- package/dist/{chunk-XULHFSHO.js → chunk-MLCTPWSO.js} +5 -5
- package/dist/chunk-MLCTPWSO.js.map +1 -0
- package/dist/{chunk-PEY6ZTCF.js → chunk-MMVQ3SUO.js} +9 -9
- package/dist/{chunk-PEY6ZTCF.js.map → chunk-MMVQ3SUO.js.map} +1 -1
- package/dist/{chunk-4X6DJZHY.js → chunk-MPPWL64H.js} +26 -43
- package/dist/chunk-MPPWL64H.js.map +1 -0
- package/dist/{chunk-QYJIOWKN.js → chunk-MQBFT2OT.js} +11 -9
- package/dist/chunk-MQBFT2OT.js.map +1 -0
- package/dist/{chunk-IUIVDVXM.js → chunk-MUPZ6IZX.js} +2 -2
- package/dist/{chunk-GZ2GKOF6.js → chunk-NA374QG7.js} +3 -3
- package/dist/chunk-NIKO2BBZ.js +23 -0
- package/dist/chunk-NIKO2BBZ.js.map +1 -0
- package/dist/{chunk-2U7Y7BNJ.js → chunk-ONB627HU.js} +2 -2
- package/dist/{chunk-GYB2QK5H.js → chunk-OWLZONGX.js} +2 -2
- package/dist/{chunk-YHPUDB7Q.js → chunk-OWOT7CFC.js} +2 -2
- package/dist/{chunk-VEX6G3YL.js → chunk-P4NUJVWL.js} +2 -2
- package/dist/chunk-PEOZ34EM.js +13 -0
- package/dist/chunk-PEOZ34EM.js.map +1 -0
- package/dist/{chunk-NM4LVUXH.js → chunk-PTT2NB46.js} +2 -2
- package/dist/chunk-PVEWA2DU.js +23 -0
- package/dist/chunk-PVEWA2DU.js.map +1 -0
- package/dist/{chunk-2ITLQZV5.js → chunk-PWWWMRT7.js} +2 -2
- package/dist/{chunk-FLHOTGOO.js → chunk-QVGEVZ5F.js} +3 -3
- package/dist/{chunk-HKR25MGX.js → chunk-QVIZDLAR.js} +10 -10
- package/dist/chunk-QVIZDLAR.js.map +1 -0
- package/dist/{chunk-OOTTXUNV.js → chunk-RM5EXCFF.js} +2 -2
- package/dist/{chunk-OOTTXUNV.js.map → chunk-RM5EXCFF.js.map} +1 -1
- package/dist/{chunk-OGFPMCSP.js → chunk-SBOHNJUD.js} +2 -2
- package/dist/{chunk-EDC6MLXV.js → chunk-SEU6QHH4.js} +2 -2
- package/dist/chunk-SMY5X46Z.js +14 -0
- package/dist/chunk-SMY5X46Z.js.map +1 -0
- package/dist/{chunk-F4COUZLL.js → chunk-TMR64XPL.js} +2 -2
- package/dist/{chunk-5OZCCLNC.js → chunk-TSNRZSRC.js} +2 -2
- package/dist/{chunk-2RMDVWGB.js → chunk-UNREYBZO.js} +2 -2
- package/dist/{chunk-BLB7P7LS.js → chunk-V2R2VWER.js} +176 -17
- package/dist/chunk-V2R2VWER.js.map +1 -0
- package/dist/{chunk-3XVOLB75.js → chunk-VDTWFN2P.js} +7 -5
- package/dist/chunk-VDTWFN2P.js.map +1 -0
- package/dist/chunk-VKQCVU2Z.js +21 -0
- package/dist/chunk-VKQCVU2Z.js.map +1 -0
- package/dist/{chunk-QCUH2G77.js → chunk-VNJMLOQS.js} +6 -6
- package/dist/{chunk-UEO5CHOP.js → chunk-WCJJQV2D.js} +13 -13
- package/dist/chunk-WCJJQV2D.js.map +1 -0
- package/dist/{chunk-25ZDB25Z.js → chunk-WWBC4KLB.js} +3 -3
- package/dist/chunk-WWBC4KLB.js.map +1 -0
- package/dist/{chunk-V7RGFJ3Z.js → chunk-XG7OZDOS.js} +6 -6
- package/dist/{chunk-GS3Q2KOZ.js → chunk-XONZGK6J.js} +2 -2
- package/dist/{chunk-5SZ24DL5.js → chunk-XSOGLHGY.js} +6 -6
- package/dist/{chunk-CCT4WZI6.js → chunk-XY6MNSAF.js} +5 -5
- package/dist/chunk-XY6MNSAF.js.map +1 -0
- package/dist/chunk-XZHEOSQ2.js +16 -0
- package/dist/chunk-XZHEOSQ2.js.map +1 -0
- package/dist/{chunk-NOT7XA7Q.js → chunk-YGMREQAK.js} +5 -5
- package/dist/{chunk-H4SMS4O2.js → chunk-YJ3TREAC.js} +2 -2
- package/dist/chunk-YMUFFJCO.js +23 -0
- package/dist/chunk-YMUFFJCO.js.map +1 -0
- package/dist/{chunk-E2R5NRZD.js → chunk-Z4D3YGAB.js} +2 -2
- package/dist/{chunk-WJDYZP3U.js → chunk-ZDFU34XY.js} +42 -39
- package/dist/chunk-ZDFU34XY.js.map +1 -0
- package/dist/{chunk-BZK6JEX4.js → chunk-ZF572E2M.js} +5 -5
- package/dist/{chunk-DEQ2JTBR.js → chunk-ZGEFBDPR.js} +4 -4
- package/dist/chunk-ZGEFBDPR.js.map +1 -0
- package/dist/{chunk-QAFWRGVD.js → chunk-ZHMUFYZF.js} +7 -7
- package/dist/{chunk-BVZGNMVM.js → chunk-ZHZ4PET5.js} +3 -3
- package/dist/{chunk-IZX3WZBF.js → chunk-ZM72UO3Y.js} +4 -4
- package/dist/{chunk-STR7WBOB.js → chunk-ZUDAK436.js} +2 -2
- package/dist/{chunk-ITI3SJRB.js → chunk-ZX5FNWH7.js} +2 -2
- package/dist/classified/index.js +5 -5
- package/dist/{classified-marker-7S5IEP6Q.js → classified-marker-SVDRXLD3.js} +3 -3
- package/dist/collection-facade-S5PPKZD5.js +44 -0
- package/dist/{computed-WZNKRLCY.js → computed-33DRJDOC.js} +3 -3
- package/dist/consent/index.js +13 -9
- package/dist/consent/index.js.map +1 -1
- package/dist/{cover-B5MY43CK.js → cover-ADBCTIKN.js} +4 -4
- package/dist/crdt/index.js +4 -0
- package/dist/crdt/index.js.map +1 -1
- package/dist/{dead-filter-KRRD57MR.js → dead-filter-HKDMTMVY.js} +2 -2
- package/dist/delegation-EV7LKJPH.js +25 -0
- package/dist/derivations/index.js +12 -12
- package/dist/derive-5LDJW76F.js +21 -0
- package/dist/dispatch-SPMYNXNW.js +194 -0
- package/dist/dispatch-SPMYNXNW.js.map +1 -0
- package/dist/dispatch-V5MSMQYX.js +72 -0
- package/dist/dispatch-V5MSMQYX.js.map +1 -0
- package/dist/{enclave-YFKA3GJT.js → enclave-ZA7C3H2L.js} +11 -11
- package/dist/executor-FCJEH3FU.js +9 -0
- package/dist/executor-OHET7TF7.js +9 -0
- package/dist/executor-SVHAJZ4A.js +28 -0
- package/dist/export-accessible-S35YKIBL.js +23 -0
- package/dist/extract-partition-UVHAM5WZ.js +38 -0
- package/dist/{fanout-sidecar-HJV3A7PM.js → fanout-sidecar-HRMHC34B.js} +9 -9
- package/dist/find-LEBUXVL7.js +11 -0
- package/dist/forget/index.js +9 -9
- package/dist/guards/index.js +3 -3
- package/dist/history/index.js +16 -12
- package/dist/history/index.js.map +1 -1
- package/dist/i18n/index.js +16 -14
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.d.ts +17 -16
- package/dist/index.js +155 -211
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.js +4 -2
- package/dist/indexing/index.js.map +1 -1
- package/dist/issue-5X3SMCF4.js +19 -0
- package/dist/kernel/collection.d.ts +0 -1
- package/dist/kernel/enclave/crypto.d.ts +8 -8
- package/dist/kernel/enclave/index.d.ts +2 -2
- package/dist/kernel/errors.d.ts +20 -20
- package/dist/kernel/lazy.d.ts +30 -0
- package/dist/kernel/noydb.d.ts +53 -101
- package/dist/kernel/query/builder.d.ts +10 -10
- package/dist/kernel/query/index.d.ts +0 -6
- package/dist/kernel/query/scan-builder.d.ts +4 -4
- package/dist/kernel/types.d.ts +87 -46
- package/dist/kernel/validation.d.ts +33 -33
- package/dist/kernel/vault.d.ts +12 -149
- package/dist/kernel/via/dispatch.d.ts +7 -0
- package/dist/{ledger-SW6QQOAV.js → ledger-K6JBFL3Z.js} +11 -11
- package/dist/liberate-NHTCKBU4.js +24 -0
- package/dist/{link-set-GNGGCFI4.js → link-set-XVZY2ODC.js} +11 -11
- package/dist/materialized-views/index.js +22 -19
- package/dist/noydb-TI3RFU6M.js +78 -0
- package/dist/overlay-views/index.js +4 -4
- package/dist/periods/index.js +15 -13
- package/dist/pod/index.js +11 -12
- package/dist/{policy-EAXSJNOT.js → policy-QWGJB7P7.js} +5 -5
- package/dist/port/with/collection-options.d.ts +171 -0
- package/dist/port/with/collection-registries.d.ts +62 -0
- package/dist/port/with/strategies.d.ts +2 -2
- package/dist/port/with/team-strategy.d.ts +3 -2
- package/dist/portability/index.js +8 -8
- package/dist/{post-register-A7HCFBP5.js → post-register-5VHHVFJY.js} +6 -6
- package/dist/query/index.js +6 -46
- package/dist/{aggregate → reduce}/index.js +24 -17
- package/dist/reduce/index.js.map +1 -0
- package/dist/register-CEX7R7NE.js +23 -0
- package/dist/registry-7CZWF3EQ.js +9 -0
- package/dist/registry-DIKMRXUC.js +19 -0
- package/dist/registry-EWIB5NTI.js +18 -0
- package/dist/request-withdrawal-AAG57QO4.js +31 -0
- package/dist/{reveal-PB3YG544.js → reveal-7OOT5XPD.js} +6 -6
- package/dist/revoke-U5LCIJMF.js +24 -0
- package/dist/satellites/index.js +1 -1
- package/dist/sealed-record/index.js +12 -12
- package/dist/{seed-EKF4DIBB.js → seed-GVOI6QP6.js} +12 -12
- package/dist/seed-GVOI6QP6.js.map +1 -0
- package/dist/session/index.js +13 -9
- package/dist/session/index.js.map +1 -1
- package/dist/shadow/index.js +6 -2
- package/dist/shadow/index.js.map +1 -1
- package/dist/signer-NAA2OX7H.js +25 -0
- package/dist/snapshots/index.js +14 -10
- package/dist/snapshots/index.js.map +1 -1
- package/dist/{stale-4UNPHWOU.js → stale-BJO2WIN7.js} +11 -10
- package/dist/storage-FL7XXZTN.js +23 -0
- package/dist/{store-coordination-provider-3AELCZ4Y.js → store-coordination-provider-DX5HECK3.js} +3 -3
- package/dist/sync/index.js +14 -10
- package/dist/sync/index.js.map +1 -1
- package/dist/team/index.js +26 -28
- package/dist/tiers/index.js +10 -10
- package/dist/to/index.js +1 -1
- package/dist/tx/index.js +7 -3
- package/dist/tx/index.js.map +1 -1
- package/dist/util/index.js +1 -1
- package/dist/{verify-MXN66IIH.js → verify-5X37OXRY.js} +5 -5
- package/dist/via/blob/index.d.ts +2 -0
- package/dist/via/i18n/core.d.ts +1 -1
- package/dist/via/i18n/index.d.ts +2 -0
- package/dist/via/money/money-reducer.d.ts +2 -2
- package/dist/{walk-H4YE52S2.js → walk-JXMWKKQW.js} +11 -11
- package/dist/with-audit/consent/index.d.ts +2 -0
- package/dist/with-audit/periods/index.d.ts +2 -0
- package/dist/with-audit/portability/export-accessible.d.ts +4 -4
- package/dist/with-audit/portability/request-withdrawal.d.ts +3 -3
- package/dist/with-audit/portability/withdraw-accessible.d.ts +2 -2
- package/dist/with-audit/sealed-record/strategy.d.ts +1 -1
- package/dist/with-cargo/adopt-partition.d.ts +7 -7
- package/dist/with-cargo/floor.d.ts +3 -3
- package/dist/with-cargo/index.d.ts +1 -1
- package/dist/with-commit/crdt/index.d.ts +2 -0
- package/dist/with-commit/history/index.d.ts +2 -0
- package/dist/with-commit/history/time-machine.d.ts +2 -2
- package/dist/with-fork/shadow/index.d.ts +2 -0
- package/dist/with-fork/snapshots/index.d.ts +2 -0
- package/dist/with-formula/derivations/dispatch.d.ts +98 -0
- package/dist/with-formula/materialized-views/dispatch.d.ts +75 -0
- package/dist/with-formula/materialized-views/types.d.ts +7 -7
- package/dist/with-lookup/indexing/index.d.ts +2 -0
- package/dist/with-lookup/{aggregate → reduce}/active.d.ts +8 -8
- package/dist/with-lookup/{aggregate → reduce}/groupby.d.ts +21 -21
- package/dist/with-lookup/reduce/index.d.ts +34 -0
- package/dist/with-lookup/{aggregate → reduce}/reducers.d.ts +10 -10
- package/dist/with-lookup/{aggregate/aggregation.d.ts → reduce/reduction.d.ts} +21 -21
- package/dist/with-lookup/{aggregate → reduce}/strategy.d.ts +15 -15
- package/dist/with-party/custody/liberate.d.ts +3 -3
- package/dist/with-party/session/dev-unlock.d.ts +2 -2
- package/dist/with-party/session/index.d.ts +2 -0
- package/dist/with-party/session/session.d.ts +2 -2
- package/dist/with-party/sync/index.d.ts +2 -0
- package/dist/with-party/team/deed.d.ts +8 -8
- package/dist/with-party/team/index.d.ts +2 -2
- package/dist/with-party/team/keyring.d.ts +39 -20
- package/dist/with-party/team/{managed-passphrase.d.ts → managed-secret.d.ts} +27 -27
- package/dist/with-party/team/noydb-facade.d.ts +43 -42
- package/dist/with-party/team/peer-recover.d.ts +13 -13
- package/dist/with-party/team/recovery.d.ts +5 -5
- package/dist/with-party/team/rotate-recover.d.ts +30 -30
- package/dist/with-pod/bundle.d.ts +30 -30
- package/dist/with-pod/format.d.ts +2 -2
- package/dist/withdraw-accessible-GO6KQJVM.js +28 -0
- package/package.json +6 -34
- package/dist/aggregate/index.js.map +0 -1
- package/dist/api-UPAT2O3M.js +0 -20
- package/dist/as/index.js +0 -30
- package/dist/at/index.js +0 -1
- package/dist/by/index.js +0 -11
- package/dist/chunk-25ZDB25Z.js.map +0 -1
- package/dist/chunk-2KL6NDD4.js.map +0 -1
- package/dist/chunk-2YELV6TV.js +0 -1
- package/dist/chunk-3O62PVDW.js +0 -205
- package/dist/chunk-3O62PVDW.js.map +0 -1
- package/dist/chunk-3XVOLB75.js.map +0 -1
- package/dist/chunk-4X6DJZHY.js.map +0 -1
- package/dist/chunk-5BHNQNBI.js.map +0 -1
- package/dist/chunk-5P5AAXYA.js.map +0 -1
- package/dist/chunk-BCOKZC4B.js.map +0 -1
- package/dist/chunk-BLB7P7LS.js.map +0 -1
- package/dist/chunk-CCT4WZI6.js.map +0 -1
- package/dist/chunk-CGPO3ZYB.js.map +0 -1
- package/dist/chunk-DEQ2JTBR.js.map +0 -1
- package/dist/chunk-GBEXTC6Z.js.map +0 -1
- package/dist/chunk-HKR25MGX.js.map +0 -1
- package/dist/chunk-IGM563N5.js.map +0 -1
- package/dist/chunk-J3VW4J4E.js.map +0 -1
- package/dist/chunk-JA5O7UEZ.js.map +0 -1
- package/dist/chunk-JIMEB4C6.js.map +0 -1
- package/dist/chunk-KMONEHDJ.js +0 -54
- package/dist/chunk-KMONEHDJ.js.map +0 -1
- package/dist/chunk-KR5EGWI4.js.map +0 -1
- package/dist/chunk-LB7FD65R.js +0 -163
- package/dist/chunk-LB7FD65R.js.map +0 -1
- package/dist/chunk-MEKAMERX.js.map +0 -1
- package/dist/chunk-QUIG6BZT.js.map +0 -1
- package/dist/chunk-QYJIOWKN.js.map +0 -1
- package/dist/chunk-U73LHVPF.js.map +0 -1
- package/dist/chunk-UEO5CHOP.js.map +0 -1
- package/dist/chunk-W7TCXZWU.js.map +0 -1
- package/dist/chunk-WEC3JGBA.js +0 -255
- package/dist/chunk-WEC3JGBA.js.map +0 -1
- package/dist/chunk-WJDYZP3U.js.map +0 -1
- package/dist/chunk-XULHFSHO.js.map +0 -1
- package/dist/collection-facade-CMZGQ6IS.js +0 -44
- package/dist/delegation-UT76AQIG.js +0 -25
- package/dist/derive-SGRCCKVP.js +0 -21
- package/dist/executor-TEZYRDN3.js +0 -9
- package/dist/executor-WQQRU6DO.js +0 -9
- package/dist/executor-YORMIBWV.js +0 -26
- package/dist/export-accessible-HXMKW5LJ.js +0 -23
- package/dist/extract-partition-QGQ2R42J.js +0 -38
- package/dist/find-VV6PBIHK.js +0 -11
- package/dist/in/index.js +0 -1
- package/dist/issue-7JJ4Z7E2.js +0 -19
- package/dist/liberate-FK7JI2QX.js +0 -24
- package/dist/noydb-N5IW6OFZ.js +0 -70
- package/dist/on/index.js +0 -17
- package/dist/port/as/index.d.ts +0 -26
- package/dist/port/at/index.d.ts +0 -18
- package/dist/port/in/index.d.ts +0 -21
- package/dist/port/on/index.d.ts +0 -27
- package/dist/port/ui/index.d.ts +0 -21
- package/dist/port/with/index.d.ts +0 -18
- package/dist/register-YBMRLZLO.js +0 -23
- package/dist/registry-3LXKNXWI.js +0 -9
- package/dist/registry-4V4YQCXJ.js +0 -19
- package/dist/registry-ZULMLCJK.js +0 -18
- package/dist/request-withdrawal-SEVUEUDG.js +0 -31
- package/dist/request-withdrawal-SEVUEUDG.js.map +0 -1
- package/dist/revoke-5QULL5GT.js +0 -24
- package/dist/revoke-5QULL5GT.js.map +0 -1
- package/dist/seed-EKF4DIBB.js.map +0 -1
- package/dist/signer-ZMH35FT4.js +0 -25
- package/dist/signer-ZMH35FT4.js.map +0 -1
- package/dist/stale-4UNPHWOU.js.map +0 -1
- package/dist/storage-QOZKQMID.js +0 -23
- package/dist/storage-QOZKQMID.js.map +0 -1
- package/dist/ui/index.js +0 -1
- package/dist/ui/index.js.map +0 -1
- package/dist/with/index.js +0 -31
- package/dist/with/index.js.map +0 -1
- package/dist/with-lookup/aggregate/index.d.ts +0 -23
- package/dist/withdraw-accessible-HPOVNG2G.js +0 -28
- package/dist/withdraw-accessible-HPOVNG2G.js.map +0 -1
- /package/dist/{api-UPAT2O3M.js.map → api-5QVQX4HG.js.map} +0 -0
- /package/dist/{backup-JL2GOTYQ.js.map → backup-USYSNCYM.js.map} +0 -0
- /package/dist/{chunk-JLHKBAFY.js.map → chunk-2BVW754E.js.map} +0 -0
- /package/dist/{chunk-T7S4V52L.js.map → chunk-2PDBYF2O.js.map} +0 -0
- /package/dist/{chunk-YGBIBOCR.js.map → chunk-2ZSC454H.js.map} +0 -0
- /package/dist/{chunk-IGAIOGCN.js.map → chunk-32467U5J.js.map} +0 -0
- /package/dist/{chunk-JW3XCZA2.js.map → chunk-3TZUC4WS.js.map} +0 -0
- /package/dist/{chunk-JA5B3SLH.js.map → chunk-44Y3P5U6.js.map} +0 -0
- /package/dist/{chunk-25G7U6RD.js.map → chunk-4B3DL75F.js.map} +0 -0
- /package/dist/{chunk-L4OA7G5T.js.map → chunk-522MBPE5.js.map} +0 -0
- /package/dist/{chunk-M25ZIEB2.js.map → chunk-5HSSTOOG.js.map} +0 -0
- /package/dist/{chunk-LLVW4V7R.js.map → chunk-5WLDZZ6S.js.map} +0 -0
- /package/dist/{chunk-7B4GPCX7.js.map → chunk-7IQWHYL2.js.map} +0 -0
- /package/dist/{chunk-OWE4BNTM.js.map → chunk-AZXEOEQK.js.map} +0 -0
- /package/dist/{chunk-BZEPJJOK.js.map → chunk-C2V7AJO2.js.map} +0 -0
- /package/dist/{chunk-2JZ763FV.js.map → chunk-D4LAJ737.js.map} +0 -0
- /package/dist/{chunk-N4FZ6ITM.js.map → chunk-EGU4PWQW.js.map} +0 -0
- /package/dist/{chunk-EW4HFWGJ.js.map → chunk-EPME33Y4.js.map} +0 -0
- /package/dist/{chunk-JKWNG3TM.js.map → chunk-FHHYCBBP.js.map} +0 -0
- /package/dist/{chunk-5BB3N4KU.js.map → chunk-G4MFQXYX.js.map} +0 -0
- /package/dist/{chunk-KVHWEPT2.js.map → chunk-GHEMAVTN.js.map} +0 -0
- /package/dist/{chunk-XW7NWO4A.js.map → chunk-GTNRMJYH.js.map} +0 -0
- /package/dist/{chunk-YG2EG6CB.js.map → chunk-H5GMROCB.js.map} +0 -0
- /package/dist/{chunk-5KI3REO3.js.map → chunk-HDF5R2K6.js.map} +0 -0
- /package/dist/{chunk-V3YB7RGR.js.map → chunk-HVPW6PCX.js.map} +0 -0
- /package/dist/{chunk-2VUISNGP.js.map → chunk-HXVRRJBD.js.map} +0 -0
- /package/dist/{chunk-ZJGZDOQO.js.map → chunk-ICYC5YNI.js.map} +0 -0
- /package/dist/{chunk-AFBJHD55.js.map → chunk-JGOKAZNB.js.map} +0 -0
- /package/dist/{chunk-QXPOEAKR.js.map → chunk-KCZAFDP5.js.map} +0 -0
- /package/dist/{chunk-MSO2C3KG.js.map → chunk-LC7DSMHR.js.map} +0 -0
- /package/dist/{chunk-OVFCAS7U.js.map → chunk-LG2GUYRX.js.map} +0 -0
- /package/dist/{chunk-QDNVHA2F.js.map → chunk-M7W2KYTL.js.map} +0 -0
- /package/dist/{chunk-IUIVDVXM.js.map → chunk-MUPZ6IZX.js.map} +0 -0
- /package/dist/{chunk-GZ2GKOF6.js.map → chunk-NA374QG7.js.map} +0 -0
- /package/dist/{chunk-2U7Y7BNJ.js.map → chunk-ONB627HU.js.map} +0 -0
- /package/dist/{chunk-GYB2QK5H.js.map → chunk-OWLZONGX.js.map} +0 -0
- /package/dist/{chunk-YHPUDB7Q.js.map → chunk-OWOT7CFC.js.map} +0 -0
- /package/dist/{chunk-VEX6G3YL.js.map → chunk-P4NUJVWL.js.map} +0 -0
- /package/dist/{chunk-NM4LVUXH.js.map → chunk-PTT2NB46.js.map} +0 -0
- /package/dist/{chunk-2ITLQZV5.js.map → chunk-PWWWMRT7.js.map} +0 -0
- /package/dist/{chunk-FLHOTGOO.js.map → chunk-QVGEVZ5F.js.map} +0 -0
- /package/dist/{chunk-OGFPMCSP.js.map → chunk-SBOHNJUD.js.map} +0 -0
- /package/dist/{chunk-EDC6MLXV.js.map → chunk-SEU6QHH4.js.map} +0 -0
- /package/dist/{chunk-F4COUZLL.js.map → chunk-TMR64XPL.js.map} +0 -0
- /package/dist/{chunk-5OZCCLNC.js.map → chunk-TSNRZSRC.js.map} +0 -0
- /package/dist/{chunk-2RMDVWGB.js.map → chunk-UNREYBZO.js.map} +0 -0
- /package/dist/{chunk-QCUH2G77.js.map → chunk-VNJMLOQS.js.map} +0 -0
- /package/dist/{chunk-V7RGFJ3Z.js.map → chunk-XG7OZDOS.js.map} +0 -0
- /package/dist/{chunk-GS3Q2KOZ.js.map → chunk-XONZGK6J.js.map} +0 -0
- /package/dist/{chunk-5SZ24DL5.js.map → chunk-XSOGLHGY.js.map} +0 -0
- /package/dist/{chunk-NOT7XA7Q.js.map → chunk-YGMREQAK.js.map} +0 -0
- /package/dist/{chunk-H4SMS4O2.js.map → chunk-YJ3TREAC.js.map} +0 -0
- /package/dist/{chunk-E2R5NRZD.js.map → chunk-Z4D3YGAB.js.map} +0 -0
- /package/dist/{chunk-BZK6JEX4.js.map → chunk-ZF572E2M.js.map} +0 -0
- /package/dist/{chunk-QAFWRGVD.js.map → chunk-ZHMUFYZF.js.map} +0 -0
- /package/dist/{chunk-BVZGNMVM.js.map → chunk-ZHZ4PET5.js.map} +0 -0
- /package/dist/{chunk-IZX3WZBF.js.map → chunk-ZM72UO3Y.js.map} +0 -0
- /package/dist/{chunk-STR7WBOB.js.map → chunk-ZUDAK436.js.map} +0 -0
- /package/dist/{chunk-ITI3SJRB.js.map → chunk-ZX5FNWH7.js.map} +0 -0
- /package/dist/{classified-marker-7S5IEP6Q.js.map → classified-marker-SVDRXLD3.js.map} +0 -0
- /package/dist/{as/index.js.map → collection-facade-S5PPKZD5.js.map} +0 -0
- /package/dist/{at/index.js.map → computed-33DRJDOC.js.map} +0 -0
- /package/dist/{by/index.js.map → cover-ADBCTIKN.js.map} +0 -0
- /package/dist/{dead-filter-KRRD57MR.js.map → dead-filter-HKDMTMVY.js.map} +0 -0
- /package/dist/{chunk-2YELV6TV.js.map → delegation-EV7LKJPH.js.map} +0 -0
- /package/dist/{collection-facade-CMZGQ6IS.js.map → derive-5LDJW76F.js.map} +0 -0
- /package/dist/{computed-WZNKRLCY.js.map → enclave-ZA7C3H2L.js.map} +0 -0
- /package/dist/{cover-B5MY43CK.js.map → executor-FCJEH3FU.js.map} +0 -0
- /package/dist/{delegation-UT76AQIG.js.map → executor-OHET7TF7.js.map} +0 -0
- /package/dist/{derive-SGRCCKVP.js.map → executor-SVHAJZ4A.js.map} +0 -0
- /package/dist/{enclave-YFKA3GJT.js.map → export-accessible-S35YKIBL.js.map} +0 -0
- /package/dist/{executor-TEZYRDN3.js.map → extract-partition-UVHAM5WZ.js.map} +0 -0
- /package/dist/{fanout-sidecar-HJV3A7PM.js.map → fanout-sidecar-HRMHC34B.js.map} +0 -0
- /package/dist/{executor-WQQRU6DO.js.map → find-LEBUXVL7.js.map} +0 -0
- /package/dist/{executor-YORMIBWV.js.map → issue-5X3SMCF4.js.map} +0 -0
- /package/dist/{export-accessible-HXMKW5LJ.js.map → ledger-K6JBFL3Z.js.map} +0 -0
- /package/dist/{extract-partition-QGQ2R42J.js.map → liberate-NHTCKBU4.js.map} +0 -0
- /package/dist/{find-VV6PBIHK.js.map → link-set-XVZY2ODC.js.map} +0 -0
- /package/dist/{in/index.js.map → noydb-TI3RFU6M.js.map} +0 -0
- /package/dist/{issue-7JJ4Z7E2.js.map → policy-QWGJB7P7.js.map} +0 -0
- /package/dist/{post-register-A7HCFBP5.js.map → post-register-5VHHVFJY.js.map} +0 -0
- /package/dist/{ledger-SW6QQOAV.js.map → register-CEX7R7NE.js.map} +0 -0
- /package/dist/{liberate-FK7JI2QX.js.map → registry-7CZWF3EQ.js.map} +0 -0
- /package/dist/{link-set-GNGGCFI4.js.map → registry-DIKMRXUC.js.map} +0 -0
- /package/dist/{noydb-N5IW6OFZ.js.map → registry-EWIB5NTI.js.map} +0 -0
- /package/dist/{on/index.js.map → request-withdrawal-AAG57QO4.js.map} +0 -0
- /package/dist/{reveal-PB3YG544.js.map → reveal-7OOT5XPD.js.map} +0 -0
- /package/dist/{policy-EAXSJNOT.js.map → revoke-U5LCIJMF.js.map} +0 -0
- /package/dist/{register-YBMRLZLO.js.map → signer-NAA2OX7H.js.map} +0 -0
- /package/dist/{registry-3LXKNXWI.js.map → stale-BJO2WIN7.js.map} +0 -0
- /package/dist/{registry-4V4YQCXJ.js.map → storage-FL7XXZTN.js.map} +0 -0
- /package/dist/{store-coordination-provider-3AELCZ4Y.js.map → store-coordination-provider-DX5HECK3.js.map} +0 -0
- /package/dist/{verify-MXN66IIH.js.map → verify-5X37OXRY.js.map} +0 -0
- /package/dist/{walk-H4YE52S2.js.map → walk-JXMWKKQW.js.map} +0 -0
- /package/dist/with-lookup/{aggregate → reduce}/canonical-key.d.ts +0 -0
- /package/dist/{registry-ZULMLCJK.js.map → withdraw-accessible-GO6KQJVM.js.map} +0 -0
|
@@ -58,9 +58,9 @@
|
|
|
58
58
|
* - `scan().join(...)` — tracked under (streaming join)
|
|
59
59
|
*/
|
|
60
60
|
import type { QueryField } from '../types.js';
|
|
61
|
-
import type { ReducerBuilder } from '../../with-lookup/
|
|
61
|
+
import type { ReducerBuilder } from '../../with-lookup/reduce/reducers.js';
|
|
62
62
|
import type { Clause, Operator } from './predicate.js';
|
|
63
|
-
import type {
|
|
63
|
+
import type { ReduceSpec, ReduceResult } from '../../with-lookup/reduce/reduction.js';
|
|
64
64
|
import type { JoinContext, JoinLeg } from './join.js';
|
|
65
65
|
import type { ViaPipeline } from '../via/pipeline.js';
|
|
66
66
|
/**
|
|
@@ -321,8 +321,8 @@ export declare class ScanBuilder<T, S extends keyof T = never, M extends keyof T
|
|
|
321
321
|
* method has never run and must not start running as a side effect of
|
|
322
322
|
* this gate).
|
|
323
323
|
*/
|
|
324
|
-
aggregate<Spec extends
|
|
325
|
-
aggregate<Spec extends
|
|
324
|
+
aggregate<Spec extends ReduceSpec>(spec: Spec): Promise<ReduceResult<Spec>>;
|
|
325
|
+
aggregate<Spec extends ReduceSpec>(build: (b: ReducerBuilder<T, S, M>) => Spec): Promise<ReduceResult<Spec>>;
|
|
326
326
|
/**
|
|
327
327
|
* Evaluate the clause list against a single record. Linear in
|
|
328
328
|
* the clause count; short-circuits on first false. Clauses on a
|
package/dist/kernel/types.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ import type { SyncPolicy } from './sync-policy.js';
|
|
|
28
28
|
import type { BlobStrategy } from '../port/with/blob-strategy.js';
|
|
29
29
|
import type { ArchiveStrategy } from '../with-fork/archive/index.js';
|
|
30
30
|
import type { IndexStrategy } from '../with-lookup/indexing/strategy.js';
|
|
31
|
-
import type {
|
|
31
|
+
import type { ReduceStrategy } from '../with-lookup/reduce/strategy.js';
|
|
32
32
|
import type { ConsentStrategy } from '../with-audit/consent/strategy.js';
|
|
33
33
|
import type { PeriodsStrategy } from '../with-audit/periods/strategy.js';
|
|
34
34
|
import type { ShadowStrategy } from '../with-fork/shadow/strategy.js';
|
|
@@ -55,11 +55,11 @@ import type { SyncStrategy } from '../with-party/team/sync-strategy.js';
|
|
|
55
55
|
import type { GuardStrategyHandleAny } from '../with-audit/guards/types.js';
|
|
56
56
|
import type { DerivationStrategyHandle } from '../with-formula/derivations/types.js';
|
|
57
57
|
import type { UnlockedKeyring } from '../with-party/team/keyring.js';
|
|
58
|
-
import type {
|
|
58
|
+
import type { SecretPolicy } from './validation.js';
|
|
59
59
|
import type { CoverSchema } from '../with-party/directory/cover/types.js';
|
|
60
60
|
import type { MaterializedViewStrategyHandle } from '../with-formula/materialized-views/types.js';
|
|
61
61
|
import type { OverlayedViewStrategyHandle } from '../with-formula/overlay-views/types.js';
|
|
62
|
-
import type { SealingKeyProvider, RecipientHint } from '../with-party/team/managed-
|
|
62
|
+
import type { SealingKeyProvider, RecipientHint } from '../with-party/team/managed-secret.js';
|
|
63
63
|
import type { ShamirRecoveryProvider } from '../with-party/team/shamir-recovery-provider.js';
|
|
64
64
|
import type { ObjectProjection } from '../with-shape/blobs/object-projection.js';
|
|
65
65
|
import type { CoordinationProvider } from '../port/by/types.js';
|
|
@@ -755,7 +755,7 @@ export type VaultPolicyOnDisk = Record<string, unknown>;
|
|
|
755
755
|
* - `paper` — `on-recovery` codes (the standard end-to-end profile).
|
|
756
756
|
* - `shamir` / `multi-channel` / `admin-mediated` — API surface ships;
|
|
757
757
|
* per-profile dispatch lands in follow-up issues. Calling
|
|
758
|
-
* `db.
|
|
758
|
+
* `db.recoverSecret` against these throws
|
|
759
759
|
* {@link RecoveryProfileNotImplementedError}.
|
|
760
760
|
*/
|
|
761
761
|
export type RecoveryEnrollment = {
|
|
@@ -837,7 +837,7 @@ export interface KeyringAuthenticatorWrappingKEK extends KeyringAuthenticatorBas
|
|
|
837
837
|
*
|
|
838
838
|
* Trade-off: a slot of this kind reconstructs `UnlockedKeyring` with
|
|
839
839
|
* `kek: null` after unlock. That is semantically correct for tier-2
|
|
840
|
-
* (sensitive ops like `enrollAuthenticator` / `
|
|
840
|
+
* (sensitive ops like `enrollAuthenticator` / `rotateSecret`
|
|
841
841
|
* require a tier-1 unlock anyway) and matches how `@noy-db/on-pin`
|
|
842
842
|
* already behaves at tier 3.
|
|
843
843
|
*
|
|
@@ -877,12 +877,12 @@ export interface KeyringFile {
|
|
|
877
877
|
readonly created_at: string;
|
|
878
878
|
readonly granted_by: string;
|
|
879
879
|
/**
|
|
880
|
-
*
|
|
880
|
+
* Secret canary — base64 AES-KW-wrapped form of a known constant
|
|
881
881
|
* 256-bit value, wrapped under the keyring's KEK.
|
|
882
882
|
*
|
|
883
883
|
* Optional: older keyrings load with no canary and fall back to
|
|
884
884
|
* the multi-DEK corruption heuristic. Newer keyrings
|
|
885
|
-
* carry one and let `loadKeyring` distinguish wrong-
|
|
885
|
+
* carry one and let `loadKeyring` distinguish wrong-secret
|
|
886
886
|
* from corruption even when ALL DEKs (including a single-DEK keyring's
|
|
887
887
|
* sole DEK) are corrupted.
|
|
888
888
|
*
|
|
@@ -1395,7 +1395,7 @@ export interface GrantOptions {
|
|
|
1395
1395
|
readonly userId: string;
|
|
1396
1396
|
readonly displayName: string;
|
|
1397
1397
|
readonly role: Role;
|
|
1398
|
-
readonly
|
|
1398
|
+
readonly secret: string;
|
|
1399
1399
|
readonly permissions?: Permissions;
|
|
1400
1400
|
/**
|
|
1401
1401
|
* Optional `@noy-db/as-*` export capability. Omit or
|
|
@@ -1412,9 +1412,9 @@ export interface GrantOptions {
|
|
|
1412
1412
|
/**
|
|
1413
1413
|
* Skip phrase-format strength validation (issue #7). Defaults to
|
|
1414
1414
|
* false — `grant()` rejects phrases that don't meet the configured
|
|
1415
|
-
* `
|
|
1415
|
+
* `SecretPolicy`. Test fixtures and CLI scripts pass `true`.
|
|
1416
1416
|
*/
|
|
1417
|
-
readonly
|
|
1417
|
+
readonly allowWeakSecret?: boolean;
|
|
1418
1418
|
/**
|
|
1419
1419
|
* Initial user-envelope payload for the new principal. Sealed under
|
|
1420
1420
|
* the same vault DEK (the reserved `_users` collection's DEK) and
|
|
@@ -1612,7 +1612,7 @@ export interface SessionPolicy {
|
|
|
1612
1612
|
readonly absoluteTimeoutMs?: number;
|
|
1613
1613
|
/**
|
|
1614
1614
|
* Operations that require the user to re-authenticate (re-enter their
|
|
1615
|
-
*
|
|
1615
|
+
* secret or perform a fresh WebAuthn assertion) before proceeding,
|
|
1616
1616
|
* even if the session is still alive.
|
|
1617
1617
|
*
|
|
1618
1618
|
* Common pattern: `requireReAuthFor: ['export', 'grant']` — allow
|
|
@@ -2200,16 +2200,16 @@ export interface NoydbOptions {
|
|
|
2200
2200
|
readonly indexStrategy?: IndexStrategy;
|
|
2201
2201
|
/**
|
|
2202
2202
|
* tree-shake seam — optional aggregate strategy. Pass
|
|
2203
|
-
* `
|
|
2203
|
+
* `withReduce()` from `@noy-db/hub/reduce` to enable
|
|
2204
2204
|
* `.aggregate()` and `.groupBy()` on Query. When omitted, those
|
|
2205
2205
|
* methods throw with a pointer at the subpath; the ~886 LOC of
|
|
2206
|
-
*
|
|
2206
|
+
* Reduction + GroupedQuery machinery never reaches the bundle.
|
|
2207
2207
|
* Streaming `scan().aggregate()` works independently of this
|
|
2208
|
-
* strategy — it doesn't use the `
|
|
2208
|
+
* strategy — it doesn't use the `Reduction` class.
|
|
2209
2209
|
*
|
|
2210
2210
|
* @internal
|
|
2211
2211
|
*/
|
|
2212
|
-
readonly
|
|
2212
|
+
readonly reduceStrategy?: ReduceStrategy;
|
|
2213
2213
|
/**
|
|
2214
2214
|
* tree-shake seam — optional CRDT strategy. Required when
|
|
2215
2215
|
* any collection is declared with `crdt: 'lww-map' | 'rga' | 'yjs'`;
|
|
@@ -2400,7 +2400,7 @@ export interface NoydbOptions {
|
|
|
2400
2400
|
* throw `TeamNotEnabledError` and the keyring grant/revoke/rotate engines
|
|
2401
2401
|
* are reached only via opt-in — the always-on floor is single-user.
|
|
2402
2402
|
* Single-user primitives (owner keyring, unlock, `listUsers`,
|
|
2403
|
-
* `updateUser`,
|
|
2403
|
+
* `updateUser`, secret rotate/recover) stay ungated, as does the
|
|
2404
2404
|
* `createDeedOwner` free function (no createNoydb instance to gate
|
|
2405
2405
|
* against).
|
|
2406
2406
|
*/
|
|
@@ -2484,12 +2484,12 @@ export interface NoydbOptions {
|
|
|
2484
2484
|
readonly sync?: NoydbStore | SyncTarget | SyncTarget[];
|
|
2485
2485
|
/** User identifier. */
|
|
2486
2486
|
readonly user: string;
|
|
2487
|
-
/**
|
|
2487
|
+
/** Secret for key derivation. Required unless encrypt is false or `getKeyring` is provided. */
|
|
2488
2488
|
readonly secret?: string;
|
|
2489
2489
|
/**
|
|
2490
2490
|
* Optional callback that returns an unlocked keyring for a given vault.
|
|
2491
2491
|
* Use this to plug in WebAuthn / OIDC / Shamir / any unlock path that
|
|
2492
|
-
* produces an `UnlockedKeyring` outside the
|
|
2492
|
+
* produces an `UnlockedKeyring` outside the secret model.
|
|
2493
2493
|
*
|
|
2494
2494
|
* When set, `secret` MUST NOT also be set — `createNoydb` throws if both
|
|
2495
2495
|
* are supplied. When neither is set (and `encrypt !== false`), `createNoydb`
|
|
@@ -2517,32 +2517,32 @@ export interface NoydbOptions {
|
|
|
2517
2517
|
* ```
|
|
2518
2518
|
*
|
|
2519
2519
|
* Note: this callback is responsible for both the "open existing vault"
|
|
2520
|
-
* and the "create new vault" cases. Unlike the
|
|
2520
|
+
* and the "create new vault" cases. Unlike the secret path, there is
|
|
2521
2521
|
* no automatic `NoAccessError` → `createOwnerKeyring` fallback, because
|
|
2522
2522
|
* the callback owner has the UI context to decide which path to run.
|
|
2523
|
-
* For first-time bootstrap, use a
|
|
2523
|
+
* For first-time bootstrap, use a secret or recovery code, enroll
|
|
2524
2524
|
* WebAuthn from the unlocked keyring, then swap to `getKeyring` on
|
|
2525
2525
|
* subsequent sessions.
|
|
2526
2526
|
*/
|
|
2527
2527
|
readonly getKeyring?: (vault: string) => Promise<UnlockedKeyring>;
|
|
2528
2528
|
/**
|
|
2529
|
-
*
|
|
2529
|
+
* Secret mode. Default `'standard'`.
|
|
2530
2530
|
*
|
|
2531
2531
|
* - `'standard'` — the legacy flow. `secret` supplies the
|
|
2532
|
-
* plaintext
|
|
2533
|
-
* `rotate-
|
|
2532
|
+
* plaintext secret, the user knows it, and the policy gate
|
|
2533
|
+
* `rotate-secret` is enabled.
|
|
2534
2534
|
* - `'managed'` — rubber-hose-resistant mode. Hub generates a
|
|
2535
|
-
* 256-bit random
|
|
2535
|
+
* 256-bit random secret at first open and seals it under
|
|
2536
2536
|
* the provided `sealingKey`. The user never sees or types the
|
|
2537
|
-
*
|
|
2537
|
+
* secret, defeating the $5-wrench attack. Mutually
|
|
2538
2538
|
* exclusive with `secret` and `getKeyring`.
|
|
2539
2539
|
*
|
|
2540
|
-
* @see https://github.com/vLannaAi/noy-db-docs/blob/main/content/docs/services/session-tiers.md → Managed-
|
|
2540
|
+
* @see https://github.com/vLannaAi/noy-db-docs/blob/main/content/docs/services/session-tiers.md → Managed-secret mode
|
|
2541
2541
|
*/
|
|
2542
|
-
readonly
|
|
2542
|
+
readonly secretMode?: 'standard' | 'managed';
|
|
2543
2543
|
/**
|
|
2544
2544
|
* Provider that seals/unseals the auto-generated managed-mode
|
|
2545
|
-
*
|
|
2545
|
+
* secret. Required when `secretMode === 'managed'`; ignored
|
|
2546
2546
|
* otherwise. Implementations live in per-platform packages
|
|
2547
2547
|
* (`@noy-db/seal-macos-keychain`, `@noy-db/seal-wincred`,
|
|
2548
2548
|
* `@noy-db/seal-libsecret`, `@noy-db/seal-aws-kms`, …).
|
|
@@ -2591,17 +2591,17 @@ export interface NoydbOptions {
|
|
|
2591
2591
|
*/
|
|
2592
2592
|
readonly sessionPolicy?: SessionPolicy;
|
|
2593
2593
|
/**
|
|
2594
|
-
* Validate
|
|
2594
|
+
* Validate secret strength against the phrase format
|
|
2595
2595
|
* on first-time keyring creation. When
|
|
2596
|
-
* `true`, weak phrases throw {@link
|
|
2597
|
-
* `createNoydb()` / `db.
|
|
2596
|
+
* `true`, weak phrases throw {@link WeakSecretError} from
|
|
2597
|
+
* `createNoydb()` / `db.team.rotateSecret()`. Default: `false` for
|
|
2598
2598
|
* back-compat; planned to flip to `true` in a future major release.
|
|
2599
2599
|
*/
|
|
2600
|
-
readonly
|
|
2600
|
+
readonly validateSecret?: boolean;
|
|
2601
2601
|
/**
|
|
2602
2602
|
* Vault-level policy gate document. When present, the hub
|
|
2603
2603
|
* persists the merged policy at `_meta/policy` on first-time vault
|
|
2604
|
-
* creation and gates sensitive operations (`db.
|
|
2604
|
+
* creation and gates sensitive operations (`db.rotateSecret`,
|
|
2605
2605
|
* `db.export*`, …) against it. Omitted ⇒ the engine uses
|
|
2606
2606
|
* {@link PERSONAL_POLICY}. Use {@link STRICT_POLICY} for regulated
|
|
2607
2607
|
* deployments.
|
|
@@ -2616,11 +2616,11 @@ export interface NoydbOptions {
|
|
|
2616
2616
|
readonly policy?: VaultPolicy;
|
|
2617
2617
|
/**
|
|
2618
2618
|
* Mandatory recovery profile enrollment. Vaults with
|
|
2619
|
-
* `recover-
|
|
2619
|
+
* `recover-secret` enabled MUST register at least one profile
|
|
2620
2620
|
* before being production-ready, otherwise `createNoydb()` throws
|
|
2621
2621
|
* {@link RecoveryNotEnrolledError}. Set
|
|
2622
|
-
* `policy.gates['recover-
|
|
2623
|
-
* deliberately opt out of recovery (
|
|
2622
|
+
* `policy.gates['recover-secret'].enabled = false` to
|
|
2623
|
+
* deliberately opt out of recovery (secret loss = data loss).
|
|
2624
2624
|
*
|
|
2625
2625
|
* The `'paper'` profile is supported end-to-end. Other
|
|
2626
2626
|
* profiles ship the API shape and throw
|
|
@@ -2647,7 +2647,7 @@ export interface NoydbOptions {
|
|
|
2647
2647
|
* data records but not the keyring row, or a WebAuthn credential was rotated).
|
|
2648
2648
|
* **All previously encrypted data is unrecoverable after a reset.**
|
|
2649
2649
|
*
|
|
2650
|
-
* Only applies to the
|
|
2650
|
+
* Only applies to the secret (`secret`) path. When `getKeyring` is used,
|
|
2651
2651
|
* the callback is responsible for handling stale-keyring detection itself.
|
|
2652
2652
|
*/
|
|
2653
2653
|
readonly onInvalidKey?: 'error' | 'reset';
|
|
@@ -3037,7 +3037,7 @@ export interface WarningRules {
|
|
|
3037
3037
|
}
|
|
3038
3038
|
/**
|
|
3039
3039
|
* Policy applied to one named gate. `enabled: false` disables the
|
|
3040
|
-
* action entirely (useful in managed-
|
|
3040
|
+
* action entirely (useful in managed-secret mode where rotation is
|
|
3041
3041
|
* impossible by construction).
|
|
3042
3042
|
*/
|
|
3043
3043
|
export interface GatePolicy {
|
|
@@ -3053,11 +3053,11 @@ export interface GatePolicy {
|
|
|
3053
3053
|
* and use the same engine; the engine treats unknown names with no
|
|
3054
3054
|
* configured policy as "no gate" (no-op).
|
|
3055
3055
|
*/
|
|
3056
|
-
export type BuiltInGateName = 'rotate-
|
|
3056
|
+
export type BuiltInGateName = 'rotate-secret' | 'recover-secret' | 'enroll-authenticator' | 'remove-authenticator'
|
|
3057
3057
|
/**
|
|
3058
3058
|
* Authorize a deliberate paper-recovery-code regeneration —
|
|
3059
|
-
* `db.rotateRecovery`. Symmetric to `rotate-
|
|
3060
|
-
* the case where the user remembers their
|
|
3059
|
+
* `db.rotateRecovery`. Symmetric to `rotate-secret` for
|
|
3060
|
+
* the case where the user remembers their secret but wants a
|
|
3061
3061
|
* fresh sheet (lost the printout, suspect compromise of the off-site
|
|
3062
3062
|
* copy). PERSONAL allows tier-1; STRICT requires an off-device
|
|
3063
3063
|
* factor so a stolen unlocked laptop cannot silently mint a new
|
|
@@ -3080,7 +3080,7 @@ export type BuiltInGateName = 'rotate-passphrase' | 'recover-passphrase' | 'enro
|
|
|
3080
3080
|
/**
|
|
3081
3081
|
* Authorize an atomic peer-recovery — `db.recoverUser`.
|
|
3082
3082
|
* Distinct from `revoke-user` because peer-recovery is intentional
|
|
3083
|
-
* re-issuance of someone's keyring under a temp
|
|
3083
|
+
* re-issuance of someone's keyring under a temp secret, NOT
|
|
3084
3084
|
* removal. Allows owner→owner natively (matches the threat model:
|
|
3085
3085
|
* a co-owner explicitly recovering another co-owner). Ships with a
|
|
3086
3086
|
* factor-proof default in `STRICT_POLICY` so the issuer must
|
|
@@ -3139,12 +3139,12 @@ export type BuiltInGateName = 'rotate-passphrase' | 'recover-passphrase' | 'enro
|
|
|
3139
3139
|
export type GateName = BuiltInGateName | `app:${string}`;
|
|
3140
3140
|
/**
|
|
3141
3141
|
* Top-level policy object. Persisted at `_meta/policy` once at vault
|
|
3142
|
-
* creation. The `
|
|
3143
|
-
* applied at every
|
|
3142
|
+
* creation. The `secret` block configures the strength rules
|
|
3143
|
+
* applied at every secret ingress; `gates` configures
|
|
3144
3144
|
* the action-level requirements.
|
|
3145
3145
|
*/
|
|
3146
3146
|
export interface VaultPolicy {
|
|
3147
|
-
readonly
|
|
3147
|
+
readonly secret?: SecretPolicy;
|
|
3148
3148
|
readonly gates: Partial<Record<GateName, GatePolicy>>;
|
|
3149
3149
|
}
|
|
3150
3150
|
/** Concrete proof an actor presents to {@link checkGate}. */
|
|
@@ -3160,7 +3160,7 @@ export interface FactorProof {
|
|
|
3160
3160
|
* Noydb method. Used as the optional last parameter of every method
|
|
3161
3161
|
* that runs through `checkGate`: `db.grant`, `db.revoke`, `db.updateUser`,
|
|
3162
3162
|
* `db.enrollAuthenticator`, `db.removeAuthenticator`, `db.updateAuthenticator`,
|
|
3163
|
-
* `db.enrollWebAuthn`, `db.
|
|
3163
|
+
* `db.enrollWebAuthn`, `db.rotateSecret`, `db.recoverSecret`,
|
|
3164
3164
|
* `db.recoverUser`, `db.enrollUnlock`, `db.describeUserAuth`,
|
|
3165
3165
|
* `db.describeAllUsersAuth`.
|
|
3166
3166
|
*
|
|
@@ -3286,4 +3286,45 @@ export interface NoydbPolicyDeps {
|
|
|
3286
3286
|
* synchronously — mirrors {@link UserApiFactory}.
|
|
3287
3287
|
*/
|
|
3288
3288
|
export type NoydbPolicyFactory = (deps: NoydbPolicyDeps) => NoydbPolicyApi;
|
|
3289
|
+
/**
|
|
3290
|
+
* Named field-set declarations for a collection's type-level shape (#839).
|
|
3291
|
+
*
|
|
3292
|
+
* Replaces the positional `Collection<T, S, Q, M>` tail at every surface a
|
|
3293
|
+
* consumer touches. The positional form was unreadable and unsafe: `Q` and `M`
|
|
3294
|
+
* are both `keyof T & string`, so swapping them type-checked silently, and
|
|
3295
|
+
* reaching `M` meant writing placeholders —
|
|
3296
|
+
* `collection<Sale, never, never, 'amount' | 'tax'>`.
|
|
3297
|
+
*
|
|
3298
|
+
* ```ts
|
|
3299
|
+
* vault.collection<Sale, { money: 'amount' | 'tax' }>('sales')
|
|
3300
|
+
* vault.collection<Invoice, { sensitive: 'ssn'; indexed: 'clientId' }>('invoices')
|
|
3301
|
+
* ```
|
|
3302
|
+
*
|
|
3303
|
+
* Every member is optional; omitting one keeps that axis permissive, which is
|
|
3304
|
+
* what the `[X] extends [never]` guards in {@link QueryField} /
|
|
3305
|
+
* {@link IndexFieldName} encode. Those guards are NOT removable — they are the
|
|
3306
|
+
* difference between "no indexes declared, so `where()` accepts any field" and
|
|
3307
|
+
* "indexes declared, so `where()` is restricted to them" — so they are
|
|
3308
|
+
* re-expressed against this shape rather than dropped.
|
|
3309
|
+
*/
|
|
3310
|
+
export interface CollectionShape<T> {
|
|
3311
|
+
/** Fields sealed at rest; reads return {@link Sealed} handles. */
|
|
3312
|
+
readonly sensitive?: keyof T & string;
|
|
3313
|
+
/** Fields carrying a declared secondary index; narrows `where()` / `orderBy()`. */
|
|
3314
|
+
readonly indexed?: keyof T & string;
|
|
3315
|
+
/** Fields carrying a money descriptor. */
|
|
3316
|
+
readonly money?: keyof T & string;
|
|
3317
|
+
}
|
|
3318
|
+
/** The `sensitive` field set of a {@link CollectionShape}, or `never` if unset. */
|
|
3319
|
+
export type SensitiveOf<T, O> = O extends {
|
|
3320
|
+
sensitive: infer S;
|
|
3321
|
+
} ? (S & keyof T & string) : never;
|
|
3322
|
+
/** The `indexed` field set of a {@link CollectionShape}, or `never` if unset. */
|
|
3323
|
+
export type IndexedOf<T, O> = O extends {
|
|
3324
|
+
indexed: infer Q;
|
|
3325
|
+
} ? (Q & keyof T & string) : never;
|
|
3326
|
+
/** The `money` field set of a {@link CollectionShape}, or `never` if unset. */
|
|
3327
|
+
export type MoneyOf<T, O> = O extends {
|
|
3328
|
+
money: infer M;
|
|
3329
|
+
} ? (M & keyof T & string) : never;
|
|
3289
3330
|
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Secret validation — phrase format (per the three-tier session-tiers
|
|
3
3
|
* design, locked 2026-05-04).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Secrets are **phrases**: multiple simple words, easy to remember,
|
|
6
6
|
* structurally constrained so a weak choice cannot silently collapse the
|
|
7
7
|
* security floor. The format is intentionally narrow: lowercase letters
|
|
8
8
|
* and single spaces only, no punctuation, no symbols, no digits.
|
|
@@ -12,17 +12,17 @@
|
|
|
12
12
|
* - Per-word minimum: 3 characters (excludes "a", "is", "of").
|
|
13
13
|
* - Adjacent repeats rejected ("the the").
|
|
14
14
|
*
|
|
15
|
-
* The hub runs validation default-on at every
|
|
16
|
-
* (`createOwnerKeyring`, `grant`, `
|
|
17
|
-
* CLI scripts override via `{
|
|
15
|
+
* The hub runs validation default-on at every secret ingress
|
|
16
|
+
* (`createOwnerKeyring`, `grant`, `rotateSecret`); test fixtures and
|
|
17
|
+
* CLI scripts override via `{ allowWeakSecret: true }`.
|
|
18
18
|
*
|
|
19
19
|
* @module
|
|
20
20
|
*/
|
|
21
21
|
import { NoydbError } from './errors.js';
|
|
22
22
|
/** All reasons a phrase can be rejected. */
|
|
23
|
-
export type
|
|
24
|
-
/** Per-vault knobs. Aligns with `VaultPolicy.
|
|
25
|
-
export interface
|
|
23
|
+
export type WeakSecretReason = 'empty' | 'invalid-chars' | 'leading-or-trailing-space' | 'double-space' | 'too-few-words' | 'word-too-short' | 'repeated-adjacent';
|
|
24
|
+
/** Per-vault knobs. Aligns with `VaultPolicy.secret`. */
|
|
25
|
+
export interface SecretPolicy {
|
|
26
26
|
/** Minimum number of words. Default 6. Strict policy uses 8. */
|
|
27
27
|
readonly minWords?: number;
|
|
28
28
|
/** Minimum characters per word. Default 3. */
|
|
@@ -42,7 +42,7 @@ export interface PassphrasePolicy {
|
|
|
42
42
|
* // Thai + English mix with digits permitted
|
|
43
43
|
* pattern: /^[\p{L}0-9 ]+( [\p{L}0-9 ]+)*$/u
|
|
44
44
|
*
|
|
45
|
-
* // Allow uppercase + hyphens (
|
|
45
|
+
* // Allow uppercase + hyphens (secret-with-hyphens style)
|
|
46
46
|
* pattern: /^[A-Za-z]+([- ][A-Za-z]+)*$/
|
|
47
47
|
* ```
|
|
48
48
|
*
|
|
@@ -55,7 +55,7 @@ export interface PassphrasePolicy {
|
|
|
55
55
|
readonly pattern?: RegExp;
|
|
56
56
|
/**
|
|
57
57
|
* Replace ALL validation entirely with a custom function. When set,
|
|
58
|
-
* none of the other
|
|
58
|
+
* none of the other SecretPolicy fields apply — the consumer
|
|
59
59
|
* owns every rule (word splitting, character classes, entropy
|
|
60
60
|
* thresholds, allowlist/denylist). Use sparingly; this is the
|
|
61
61
|
* escape hatch for domain-specific phrase formats:
|
|
@@ -64,50 +64,50 @@ export interface PassphrasePolicy {
|
|
|
64
64
|
* - BIP-39 seed phrases (24 words, fixed wordlist, etc.)
|
|
65
65
|
* - Organization-specific HR password policies
|
|
66
66
|
*
|
|
67
|
-
* The returned `
|
|
68
|
-
* {@link
|
|
69
|
-
* `ok: false` throws `
|
|
67
|
+
* The returned `SecretValidationResult` is what
|
|
68
|
+
* {@link assertStrongSecret} dispatches on — `ok: true` accepts;
|
|
69
|
+
* `ok: false` throws `WeakSecretError` with the supplied reason.
|
|
70
70
|
*
|
|
71
71
|
*/
|
|
72
|
-
readonly customValidator?: (phrase: string) =>
|
|
72
|
+
readonly customValidator?: (phrase: string) => SecretValidationResult;
|
|
73
73
|
}
|
|
74
74
|
/** Result of a check. Discriminated union — compile-time exhaustive. */
|
|
75
|
-
export type
|
|
75
|
+
export type SecretValidationResult = {
|
|
76
76
|
readonly ok: true;
|
|
77
77
|
readonly words: number;
|
|
78
78
|
} | {
|
|
79
79
|
readonly ok: false;
|
|
80
|
-
readonly reason:
|
|
80
|
+
readonly reason: WeakSecretReason;
|
|
81
81
|
readonly minimum?: number;
|
|
82
82
|
readonly got?: number;
|
|
83
83
|
};
|
|
84
84
|
/**
|
|
85
|
-
* Thrown by `
|
|
86
|
-
* point (`createOwnerKeyring`, `grant`, `
|
|
85
|
+
* Thrown by `assertStrongSecret()` and by every hub ingress
|
|
86
|
+
* point (`createOwnerKeyring`, `grant`, `rotateSecret`) when a
|
|
87
87
|
* supplied phrase fails the structural rules above.
|
|
88
88
|
*/
|
|
89
|
-
export declare class
|
|
90
|
-
readonly reason:
|
|
89
|
+
export declare class WeakSecretError extends NoydbError {
|
|
90
|
+
readonly reason: WeakSecretReason;
|
|
91
91
|
readonly suggestion: string;
|
|
92
|
-
constructor(reason:
|
|
92
|
+
constructor(reason: WeakSecretReason, suggestion: string);
|
|
93
93
|
}
|
|
94
94
|
/**
|
|
95
95
|
* Inspect a phrase against the format rules and return a structured
|
|
96
96
|
* verdict. Never throws — callers either branch on `ok` or pass the
|
|
97
|
-
* result to {@link
|
|
97
|
+
* result to {@link assertStrongSecret} for the throwing flavour.
|
|
98
98
|
*/
|
|
99
|
-
export declare function
|
|
99
|
+
export declare function validateSecret(s: string, opts?: SecretPolicy): SecretValidationResult;
|
|
100
100
|
/**
|
|
101
|
-
* Throw {@link
|
|
102
|
-
* `createOwnerKeyring`, `grant`, and `
|
|
101
|
+
* Throw {@link WeakSecretError} when the phrase fails. Used by
|
|
102
|
+
* `createOwnerKeyring`, `grant`, and `rotateSecret` at ingress.
|
|
103
103
|
*
|
|
104
|
-
* Pass `{
|
|
104
|
+
* Pass `{ allowWeakSecret: true }` to bypass — intended for test
|
|
105
105
|
* fixtures, CLI scripts, and dev environments. The override never
|
|
106
106
|
* loosens the cryptographic key derivation; it only relaxes the
|
|
107
107
|
* structural-strength gate.
|
|
108
108
|
*/
|
|
109
|
-
export declare function
|
|
110
|
-
|
|
109
|
+
export declare function assertStrongSecret(s: string, opts?: SecretPolicy & {
|
|
110
|
+
allowWeakSecret?: boolean;
|
|
111
111
|
}): void;
|
|
112
112
|
/**
|
|
113
113
|
* Estimate the entropy of a phrase, given the EFF 7,776-word list as
|
|
@@ -117,14 +117,14 @@ export declare function assertStrongPassphrase(s: string, opts?: PassphrasePolic
|
|
|
117
117
|
* estimates aren't comparable to phrase entropy, and surfacing 0 makes
|
|
118
118
|
* weak inputs visible in any UI that displays an entropy meter.
|
|
119
119
|
*/
|
|
120
|
-
export declare function estimateEntropy(
|
|
120
|
+
export declare function estimateEntropy(secret: string): number;
|
|
121
121
|
/**
|
|
122
122
|
* Internal compatibility shim. Older code paths used the throwing
|
|
123
|
-
* `
|
|
124
|
-
* to the new `
|
|
123
|
+
* `validateSecret(s)` directly; some still do via re-exports. Routes
|
|
124
|
+
* to the new `assertStrongSecret` so the contract holds for both
|
|
125
125
|
* shapes during the transition. New code should call
|
|
126
|
-
* {@link
|
|
126
|
+
* {@link assertStrongSecret} directly.
|
|
127
127
|
*
|
|
128
128
|
* @internal
|
|
129
129
|
*/
|
|
130
|
-
export declare function
|
|
130
|
+
export declare function legacyAssertSecret(s: string): void;
|