@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
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Strategy seam between the core Query / ScanBuilder chain and the
|
|
3
3
|
* optional aggregate / groupBy service. Core imports
|
|
4
|
-
* `
|
|
4
|
+
* `ReduceStrategy` as a TYPE-ONLY symbol and `NO_REDUCE` as a
|
|
5
5
|
* tiny runtime stub.
|
|
6
6
|
*
|
|
7
|
-
* The heavy machinery — `
|
|
8
|
-
* reducer-step logic — is only reachable from `
|
|
7
|
+
* The heavy machinery — `Reduction`, `GroupedQuery`, the
|
|
8
|
+
* reducer-step logic — is only reachable from `withReduce()` in
|
|
9
9
|
* `./active.ts`, which is only exported through the
|
|
10
|
-
* `@noy-db/hub/
|
|
10
|
+
* `@noy-db/hub/reduce` subpath. Consumers that don't import the
|
|
11
11
|
* subpath ship none of the ~886 LOC.
|
|
12
12
|
*
|
|
13
13
|
* @internal
|
|
14
14
|
*/
|
|
15
|
-
import type {
|
|
15
|
+
import type { Reduction, ReduceSpec, ReduceResult, ReductionUpstream } from './reduction.js';
|
|
16
16
|
import type { GroupedQuery, GroupedQueryN } from './groupby.js';
|
|
17
17
|
import type { ViaPipeline } from '../../kernel/via/pipeline.js';
|
|
18
18
|
/**
|
|
@@ -21,39 +21,39 @@ import type { ViaPipeline } from '../../kernel/via/pipeline.js';
|
|
|
21
21
|
*
|
|
22
22
|
* @internal
|
|
23
23
|
*/
|
|
24
|
-
export interface
|
|
24
|
+
export interface ReduceStrategy {
|
|
25
25
|
/**
|
|
26
|
-
* Build an `
|
|
26
|
+
* Build an `Reduction<R>` for `Query.aggregate(spec)`. `executeRecords`
|
|
27
27
|
* is a closure that produces the matching record set when the
|
|
28
|
-
*
|
|
29
|
-
* constructs a real `
|
|
28
|
+
* reduction runs. NO_REDUCE throws; the active strategy
|
|
29
|
+
* constructs a real `Reduction`.
|
|
30
30
|
*/
|
|
31
|
-
aggregate<Spec extends
|
|
31
|
+
aggregate<Spec extends ReduceSpec>(executeRecords: () => readonly unknown[], spec: Spec, upstreams: readonly ReductionUpstream[]): Reduction<ReduceResult<Spec>>;
|
|
32
32
|
/**
|
|
33
33
|
* Build a `GroupedQuery<T, F, S>` for `Query.groupBy(field)`. Same
|
|
34
34
|
* closure / upstream inputs as `aggregate` plus the group key field.
|
|
35
35
|
*/
|
|
36
|
-
groupBy<T, F extends string, S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], field: F, upstreams: readonly
|
|
36
|
+
groupBy<T, F extends string, S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], field: F, upstreams: readonly ReductionUpstream[], dictLabelResolver?: (key: string, locale: string, fallback?: string | readonly string[]) => Promise<string | undefined>, via?: ViaPipeline): GroupedQuery<T, F, S, M>;
|
|
37
37
|
/**
|
|
38
38
|
* Variadic-keyed sibling — builds a `GroupedQueryN<T, F, S>` for
|
|
39
39
|
* `Query.groupBy(...fields)`. No dictLabelResolver — `<field>Label`
|
|
40
40
|
* projection only applies to single-field groupings, which dispatch
|
|
41
41
|
* through `groupBy` above.
|
|
42
42
|
*/
|
|
43
|
-
groupByN<T, F extends readonly string[], S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], fields: F, upstreams: readonly
|
|
43
|
+
groupByN<T, F extends readonly string[], S extends keyof T = never, M extends keyof T & string = never>(executeRecords: () => readonly unknown[], fields: F, upstreams: readonly ReductionUpstream[], via?: ViaPipeline): GroupedQueryN<T, F, S, M>;
|
|
44
44
|
/**
|
|
45
45
|
* Terminal streaming aggregator for `ScanBuilder.aggregate(spec)`.
|
|
46
46
|
* Takes an async iterable of decrypted records + the spec and
|
|
47
47
|
* returns the reduced result.
|
|
48
48
|
*/
|
|
49
|
-
scanAggregate<Spec extends
|
|
49
|
+
scanAggregate<Spec extends ReduceSpec>(iter: AsyncIterable<unknown>, spec: Spec): Promise<ReduceResult<Spec>>;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
52
|
* No-aggregate stub. Every `.aggregate()` / `.groupBy()` / streaming
|
|
53
53
|
* `scan().aggregate()` call throws with a pointer at the subpath. The
|
|
54
|
-
* real `
|
|
54
|
+
* real `Reduction` / `GroupedQuery` classes are never referenced at
|
|
55
55
|
* runtime, so the bundler drops the ~886 LOC.
|
|
56
56
|
*
|
|
57
57
|
* @internal
|
|
58
58
|
*/
|
|
59
|
-
export declare const
|
|
59
|
+
export declare const NO_REDUCE: ReduceStrategy;
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* unseal the original sealed owner. The old sealed-owner credential is left
|
|
25
25
|
* untouched and ORPHANED (its `_keyring/<id>` file remains, its KEK is still
|
|
26
26
|
* sealed under the non-firm provider), never impersonated. The new owner is a
|
|
27
|
-
* DISTINCT principal under a fresh KEK derived from `
|
|
27
|
+
* DISTINCT principal under a fresh KEK derived from `newOwnerSecret`. This
|
|
28
28
|
* preserves the inalienability floor: the act of claiming ownership is itself
|
|
29
29
|
* auditable and produces a different principal, rather than silently assuming
|
|
30
30
|
* the latent owner's identity.
|
|
@@ -47,8 +47,8 @@ import type { FrozenSnapshotRef } from '../../with-audit/portability/withdraw-ac
|
|
|
47
47
|
export interface LiberateOptions {
|
|
48
48
|
/** The id of the new owner principal the custodian mints by claiming ownership. */
|
|
49
49
|
readonly newOwnerId: string;
|
|
50
|
-
/** The
|
|
51
|
-
readonly
|
|
50
|
+
/** The secret that derives the new owner's KEK (the DEKs are re-wrapped under it). */
|
|
51
|
+
readonly newOwnerSecret: string;
|
|
52
52
|
/** Legal/contractual basis recorded in the audit (e.g. 'contractual-handover'). */
|
|
53
53
|
readonly legalBasis: string;
|
|
54
54
|
readonly factors?: FactorProofBundle;
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* Dev-mode persistent unlock —
|
|
3
3
|
*
|
|
4
4
|
* Solves the developer inner-loop friction: hot-reload destroys the session
|
|
5
|
-
* (page navigation semantics), forcing a
|
|
5
|
+
* (page navigation semantics), forcing a secret re-entry every refresh.
|
|
6
6
|
*
|
|
7
7
|
* This module provides an opt-in, deliberately-named escape hatch that lets
|
|
8
8
|
* developers store the keyring payload in sessionStorage or localStorage so
|
|
9
|
-
* the vault auto-unlocks on every page load — without a
|
|
9
|
+
* the vault auto-unlocks on every page load — without a secret,
|
|
10
10
|
* without a biometric prompt, without any OIDC flow.
|
|
11
11
|
*
|
|
12
12
|
* ⚠️ WARNING — this is a loaded footgun ⚠️
|
|
@@ -21,3 +21,5 @@ export type { DevUnlockOptions } from './dev-unlock.js';
|
|
|
21
21
|
export { withSession } from './active.js';
|
|
22
22
|
export type { SessionStrategy } from './strategy.js';
|
|
23
23
|
export { SessionExpiredError, SessionNotFoundError, SessionPolicyError, } from '../../kernel/errors.js';
|
|
24
|
+
/** The un-opted-in stub for this service — exported so callers can compare against it (#844). */
|
|
25
|
+
export { NO_SESSION } from './strategy.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Session tokens —
|
|
3
3
|
*
|
|
4
|
-
* After a vault is unlocked (via
|
|
4
|
+
* After a vault is unlocked (via secret, WebAuthn, OIDC, or magic-
|
|
5
5
|
* link), the caller can call `createSession()` to get a session token that
|
|
6
6
|
* allows re-establishing the KEK for the session lifetime without re-running
|
|
7
7
|
* PBKDF2 or any interactive auth challenge.
|
|
@@ -75,7 +75,7 @@ export interface CreateSessionOptions {
|
|
|
75
75
|
/**
|
|
76
76
|
* Create a session for an already-unlocked keyring.
|
|
77
77
|
*
|
|
78
|
-
* Call this after any successful unlock (
|
|
78
|
+
* Call this after any successful unlock (secret, WebAuthn, OIDC,
|
|
79
79
|
* magic-link). The returned `sessionId` is the handle for later
|
|
80
80
|
* `resolveSession()` and `revokeSession()` calls.
|
|
81
81
|
*
|
|
@@ -29,3 +29,5 @@
|
|
|
29
29
|
*/
|
|
30
30
|
export { withSync } from '../team/sync-active.js';
|
|
31
31
|
export type { SyncStrategy } from '../team/sync-strategy.js';
|
|
32
|
+
/** The un-opted-in stub for this service — exported so callers can compare against it (#844). */
|
|
33
|
+
export { NO_SYNC } from '../team/sync-strategy.js';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* FR-6 — Deed: sealed / hidden-owner provisioning.
|
|
3
3
|
*
|
|
4
4
|
* A **Deed** is a vault owned by a *latent* principal who never
|
|
5
|
-
* authenticates. The owner credential (the random
|
|
5
|
+
* authenticates. The owner credential (the random secret that
|
|
6
6
|
* derives `KEK_owner`) is minted machine-side and sealed under a
|
|
7
7
|
* **non-firm** {@link SealingKeyProvider} — that sealing boundary is
|
|
8
8
|
* the cryptographic *inalienability anchor*: whoever holds the
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Provisioning reuses the managed-mode seam:
|
|
15
15
|
* - {@link resolveManagedSecret} mints + seals + persists the random
|
|
16
|
-
*
|
|
16
|
+
* secret at `_meta/sealed-secret` (and unseals it on every
|
|
17
17
|
* subsequent open through the same provider).
|
|
18
18
|
* - {@link createOwnerKeyring} derives `KEK_owner` from that
|
|
19
|
-
*
|
|
19
|
+
* secret and writes the `_keyring/<ownerUserId>` file.
|
|
20
20
|
*
|
|
21
21
|
* On top of that, a Deed writes a `_meta/deed` **marker**. The marker
|
|
22
22
|
* is PLAINTEXT metadata — it records WHO the latent owner is and WHICH
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
*/
|
|
31
31
|
import type { NoydbStore } from '../../kernel/types.js';
|
|
32
32
|
import type { UnlockedKeyring } from './keyring.js';
|
|
33
|
-
import type { SealingKeyProvider } from './managed-
|
|
33
|
+
import type { SealingKeyProvider } from './managed-secret.js';
|
|
34
34
|
/** Reserved id for the Deed marker under `_meta`. */
|
|
35
35
|
export declare const DEED_RECORD_ID: "deed";
|
|
36
36
|
/**
|
|
@@ -60,7 +60,7 @@ export interface DeedMarker {
|
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
62
|
* Provision a Deed: a latent owner whose credential is sealed under
|
|
63
|
-
* `sealing` (a NON-firm provider). Mints + seals the owner
|
|
63
|
+
* `sealing` (a NON-firm provider). Mints + seals the owner secret
|
|
64
64
|
* via {@link resolveManagedSecret}, derives the owner keyring via
|
|
65
65
|
* {@link createOwnerKeyring}, then writes the plaintext `_meta/deed`
|
|
66
66
|
* marker. Returns the unlocked owner keyring.
|
|
@@ -68,8 +68,8 @@ export interface DeedMarker {
|
|
|
68
68
|
* The returned keyring is the only in-memory window onto `KEK_owner`
|
|
69
69
|
* for this call; the persistent re-entry point is the sealing provider
|
|
70
70
|
* (re-run {@link resolveManagedSecret} with the same provider to
|
|
71
|
-
* re-resolve the
|
|
72
|
-
* unlock — no interactive
|
|
71
|
+
* re-resolve the secret, then {@link createOwnerKeyring}/load to
|
|
72
|
+
* unlock — no interactive secret is ever required).
|
|
73
73
|
*
|
|
74
74
|
* There is deliberately no firm-controlled fallback: the marker's
|
|
75
75
|
* `sealedUnder` is the single cryptographic anchor of ownership.
|
|
@@ -85,7 +85,7 @@ export declare function loadDeedMarker(store: NoydbStore, vault: string): Promis
|
|
|
85
85
|
export declare function isDeedVault(store: NoydbStore, vault: string): Promise<boolean>;
|
|
86
86
|
/**
|
|
87
87
|
* Persist a {@link DeedMarker} at `_meta/deed`. Mirrors
|
|
88
|
-
* `
|
|
88
|
+
* `saveSealedSecret`'s envelope shape: a standard
|
|
89
89
|
* {@link EncryptedEnvelope} with AES-GCM bypassed (`_iv: ''`), the
|
|
90
90
|
* payload stored as plaintext JSON in `_data`. The marker is metadata,
|
|
91
91
|
* not a secret — sealing it would defeat its purpose (auditors /
|
|
@@ -20,8 +20,8 @@ export { loadKeyring, createOwnerKeyring, grant, revoke, changeSecret, listUsers
|
|
|
20
20
|
export type { BundleRecipient, ListUsersOptions } from './keyring.js';
|
|
21
21
|
export { enrollAuthenticator, removeAuthenticator, updateAuthenticator, findAuthenticator, } from './authenticators.js';
|
|
22
22
|
export type { EnrollAuthenticatorOptions, EnrollAuthenticatorWrappingKEKOptions, EnrollAuthenticatorWrappingDEKsOptions, UpdateAuthenticatorOptions, } from './authenticators.js';
|
|
23
|
-
export {
|
|
24
|
-
export type {
|
|
23
|
+
export { rotateSecret, recoverSecret, } from './rotate-recover.js';
|
|
24
|
+
export type { RotateSecretInput, RecoverSecretInput, RecoverSecretResult, RecoveryProof, SlotRewrapContext, SlotRewrapCeremony, } from './rotate-recover.js';
|
|
25
25
|
export { recoverUser } from './peer-recover.js';
|
|
26
26
|
export type { RecoverUserOptions } from './peer-recover.js';
|
|
27
27
|
export { mintPaperRecoveryEntry, unwrapDeksFromPaperEntry, loadPaperRecoveryEntries, savePaperRecoveryEntries, burnPaperRecoveryEntry, } from './recovery.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { NoydbStore, KeyringFile, KeyringAuthenticator, Role, Permissions, GrantOptions, RevokeOptions, UpdateUserOptions, UserInfo, ExportCapability, ExportFormat, ImportCapability, VaultPolicyOnDisk, UserEnvelope } from '../../kernel/types.js';
|
|
2
2
|
import { type EnclaveKey } from '../../kernel/enclave/index.js';
|
|
3
|
-
import { type
|
|
3
|
+
import { type SecretPolicy } from '../../kernel/validation.js';
|
|
4
4
|
/** In-memory representation of an unlocked keyring. */
|
|
5
5
|
export interface UnlockedKeyring {
|
|
6
6
|
readonly userId: string;
|
|
@@ -9,7 +9,7 @@ export interface UnlockedKeyring {
|
|
|
9
9
|
readonly permissions: Permissions;
|
|
10
10
|
readonly deks: Map<string, EnclaveKey>;
|
|
11
11
|
/**
|
|
12
|
-
* The KEK, when this keyring was unlocked via tier 1 (
|
|
12
|
+
* The KEK, when this keyring was unlocked via tier 1 (secret) or
|
|
13
13
|
* a wrap-KEK tier-2 method (WebAuthn / OIDC). `null` when the
|
|
14
14
|
* keyring was opened via:
|
|
15
15
|
*
|
|
@@ -72,7 +72,7 @@ export interface UnlockedKeyring {
|
|
|
72
72
|
/** Mint a fresh wrapped-canary string. Deterministic for a given KEK. */
|
|
73
73
|
export declare function mintKeyringCanary(kek: EnclaveKey): Promise<string>;
|
|
74
74
|
/** Load and unlock a user's keyring for a vault. */
|
|
75
|
-
export declare function loadKeyring(adapter: NoydbStore, vault: string, userId: string,
|
|
75
|
+
export declare function loadKeyring(adapter: NoydbStore, vault: string, userId: string, secret: string): Promise<UnlockedKeyring>;
|
|
76
76
|
/**
|
|
77
77
|
* Open-policy pre-gate: decide create-vs-fail-closed **before** any
|
|
78
78
|
* vault write. `openVault` must not self-provision an owner keyring into a
|
|
@@ -81,21 +81,21 @@ export declare function loadKeyring(adapter: NoydbStore, vault: string, userId:
|
|
|
81
81
|
* `store.list`. Returns when the open may proceed (the caller is a member, or
|
|
82
82
|
* the vault is genuinely-new and `create` is allowed, in which case the caller
|
|
83
83
|
* falls through to the normal `createOwnerKeyring` path); throws `NoAccessError`
|
|
84
|
-
* otherwise. Placed before managed-
|
|
84
|
+
* otherwise. Placed before managed-secret secret resolution (which persists
|
|
85
85
|
* on first open), so a fail-closed open writes nothing.
|
|
86
86
|
*/
|
|
87
87
|
export declare function assertKeyringOpenAllowed(store: NoydbStore, vault: string, userId: string, create: boolean): Promise<void>;
|
|
88
88
|
/**
|
|
89
89
|
* Create the initial owner keyring for a new vault.
|
|
90
90
|
*
|
|
91
|
-
* Pass `{ validate: true }` (or a `
|
|
91
|
+
* Pass `{ validate: true }` (or a `SecretPolicy`) to gate creation
|
|
92
92
|
* on the phrase-format strength rules — `Noydb` threads this from
|
|
93
|
-
* `NoydbOptions.
|
|
93
|
+
* `NoydbOptions.validateSecret`. Direct callers (CLI, scripts,
|
|
94
94
|
* test fixtures) opt in explicitly.
|
|
95
95
|
*/
|
|
96
|
-
export declare function createOwnerKeyring(adapter: NoydbStore, vault: string, userId: string,
|
|
96
|
+
export declare function createOwnerKeyring(adapter: NoydbStore, vault: string, userId: string, secret: string, secretOpts?: SecretPolicy & {
|
|
97
97
|
validate?: boolean;
|
|
98
|
-
|
|
98
|
+
allowWeakSecret?: boolean;
|
|
99
99
|
}): Promise<UnlockedKeyring>;
|
|
100
100
|
/** Grant access to a new user. Caller must have grant privilege. */
|
|
101
101
|
export declare function grant(adapter: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: GrantOptions): Promise<void>;
|
|
@@ -132,25 +132,44 @@ export declare function updateKeyringIdentity(adapter: NoydbStore, vault: string
|
|
|
132
132
|
* 2. Re-encrypt all records in affected collections
|
|
133
133
|
* 3. Re-wrap new DEKs for all remaining users
|
|
134
134
|
*/
|
|
135
|
-
export declare function rotateKeys(adapter: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, collections: string[]): Promise<void>;
|
|
136
135
|
/**
|
|
137
|
-
*
|
|
136
|
+
* What a DEK rotation leaves behind (#854).
|
|
138
137
|
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
138
|
+
* A member's DEKs are wrapped under that member's KEK, and a KEK derives only
|
|
139
|
+
* from that member's secret — so the caller cannot re-wrap a fresh DEK for
|
|
140
|
+
* anyone else. That is the zero-knowledge property working as designed, but it
|
|
141
|
+
* means rotation necessarily DROPS the rotated collections from every other
|
|
142
|
+
* member's keyring rather than re-keying them.
|
|
143
|
+
*
|
|
144
|
+
* `needsRegrant` names exactly who lost what, so the caller can re-run
|
|
145
|
+
* `grant()` instead of discovering the access loss later.
|
|
146
|
+
*/
|
|
147
|
+
export interface RotateResult {
|
|
148
|
+
/** (member, collection) pairs whose access was dropped by the rotation. */
|
|
149
|
+
readonly needsRegrant: ReadonlyArray<{
|
|
150
|
+
readonly userId: string;
|
|
151
|
+
readonly collection: string;
|
|
152
|
+
}>;
|
|
153
|
+
}
|
|
154
|
+
export declare function rotateKeys(adapter: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, collections: string[]): Promise<RotateResult>;
|
|
155
|
+
/**
|
|
156
|
+
* Change the user's secret. Re-wraps every DEK under the new KEK.
|
|
157
|
+
*
|
|
158
|
+
* Validates the new secret against the strength rules unless
|
|
159
|
+
* `allowWeakSecret: true` is passed. Mirrors `rotateSecret`'s
|
|
141
160
|
* default-on validation contract.
|
|
142
161
|
*
|
|
143
|
-
* `db.
|
|
144
|
-
* on top of this primitive and additionally requires the OLD
|
|
162
|
+
* `db.team.rotateSecret()` adds a `checkGate('rotate-secret')` step
|
|
163
|
+
* on top of this primitive and additionally requires the OLD secret
|
|
145
164
|
* for re-derivation; `changeSecret` reuses the cached unlocked KEK so
|
|
146
|
-
* the OLD
|
|
165
|
+
* the OLD secret is not retyped.
|
|
147
166
|
*/
|
|
148
|
-
export declare function changeSecret(adapter: NoydbStore, vault: string, keyring: UnlockedKeyring,
|
|
149
|
-
|
|
167
|
+
export declare function changeSecret(adapter: NoydbStore, vault: string, keyring: UnlockedKeyring, newSecret: string, secretOpts?: SecretPolicy & {
|
|
168
|
+
allowWeakSecret?: boolean;
|
|
150
169
|
}): Promise<UnlockedKeyring>;
|
|
151
170
|
/**
|
|
152
171
|
* Recipient slot in a re-keyed `.noydb` bundle. Each slot becomes its
|
|
153
|
-
* own keyring file inside the bundle, sealed with its own
|
|
172
|
+
* own keyring file inside the bundle, sealed with its own secret.
|
|
154
173
|
* Same role/permission semantics as `db.grant()` but no adapter side
|
|
155
174
|
* effect — the slot only exists inside the bundle bytes.
|
|
156
175
|
*
|
|
@@ -161,8 +180,8 @@ export interface BundleRecipient {
|
|
|
161
180
|
readonly id: string;
|
|
162
181
|
/** Optional display name. Defaults to `id`. */
|
|
163
182
|
readonly displayName?: string;
|
|
164
|
-
/**
|
|
165
|
-
readonly
|
|
183
|
+
/** Secret the recipient will type to unlock. */
|
|
184
|
+
readonly secret: string;
|
|
166
185
|
/** Role on the destination vault. Defaults to `'viewer'`. */
|
|
167
186
|
readonly role?: Role;
|
|
168
187
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Managed-
|
|
2
|
+
* Managed-secret mode — rubber-hose-resistant vaults.
|
|
3
3
|
*
|
|
4
|
-
* A vault mode where the
|
|
4
|
+
* A vault mode where the secret is machine-generated and never
|
|
5
5
|
* exposed to the user, sealed under a developer-provided
|
|
6
6
|
* {@link SealingKeyProvider} (macOS Keychain, Windows Credential
|
|
7
7
|
* Manager, libsecret, AWS KMS, …). The user has no secret to give
|
|
@@ -27,31 +27,31 @@
|
|
|
27
27
|
* implementation of both `RecipientSealer` and
|
|
28
28
|
* `SealingKeyProvider` using real WebCrypto RSA-OAEP + AES-GCM;
|
|
29
29
|
* safe for tests and same-process sender/recipient scenarios.
|
|
30
|
-
* - {@link
|
|
31
|
-
* plaintext envelope storage at `_meta/sealed-
|
|
30
|
+
* - {@link loadSealedSecret} / {@link saveSealedSecret} —
|
|
31
|
+
* plaintext envelope storage at `_meta/sealed-secret`.
|
|
32
32
|
* Mirrors the `_meta/handle` and `_meta/public-envelope` AES-
|
|
33
33
|
* GCM-bypassed patterns. The sealing layer (provider's job)
|
|
34
34
|
* is the security boundary; hub doesn't have a key to encrypt
|
|
35
35
|
* with at this layer — that's the whole point of the design.
|
|
36
36
|
* - {@link resolveManagedSecret} — orchestrates the "generate +
|
|
37
37
|
* seal + persist on first open; unseal on reopen" flow.
|
|
38
|
-
* Returns the plaintext
|
|
38
|
+
* Returns the plaintext secret string that the rest of the
|
|
39
39
|
* `createNoydb` keyring path consumes.
|
|
40
40
|
*
|
|
41
41
|
* Deferred to follow-ups:
|
|
42
|
-
* - Block `rotate-
|
|
42
|
+
* - Block `rotate-secret` policy gate under managed mode.
|
|
43
43
|
* - Mandatory strong-recovery enforcement.
|
|
44
44
|
* - Recovery flow under managed mode (generates fresh sealed phrase).
|
|
45
45
|
*
|
|
46
|
-
* @see https://github.com/vLannaAi/noy-db-docs/blob/main/content/docs/services/session-tiers.md → Managed-
|
|
46
|
+
* @see https://github.com/vLannaAi/noy-db-docs/blob/main/content/docs/services/session-tiers.md → Managed-secret mode
|
|
47
47
|
*
|
|
48
48
|
* @module
|
|
49
49
|
*/
|
|
50
50
|
import type { NoydbStore, RecipientSealer } from '../../kernel/types.js';
|
|
51
51
|
/**
|
|
52
52
|
* The contract concrete providers (per-platform key stores) implement
|
|
53
|
-
* to seal and unseal a hub-generated random
|
|
54
|
-
*
|
|
53
|
+
* to seal and unseal a hub-generated random secret. The plaintext
|
|
54
|
+
* secret NEVER leaves hub-controlled memory in unsealed form —
|
|
55
55
|
* the provider receives the bytes, returns opaque sealed bytes, and
|
|
56
56
|
* later reverses the operation. Hub treats the sealed bytes as
|
|
57
57
|
* fully opaque.
|
|
@@ -69,7 +69,7 @@ import type { NoydbStore, RecipientSealer } from '../../kernel/types.js';
|
|
|
69
69
|
export interface SealingKeyProvider {
|
|
70
70
|
/**
|
|
71
71
|
* Non-sensitive identifier disclosed in the persisted envelope.
|
|
72
|
-
* Surfaced to consumers via `
|
|
72
|
+
* Surfaced to consumers via `loadSealedSecret().providerId` so
|
|
73
73
|
* a vault opened with the wrong provider class can detect the
|
|
74
74
|
* mismatch and surface a clear error. NOT secret — fine to log.
|
|
75
75
|
*
|
|
@@ -78,8 +78,8 @@ export interface SealingKeyProvider {
|
|
|
78
78
|
* parses this; it's purely audit metadata.
|
|
79
79
|
*/
|
|
80
80
|
readonly id: string;
|
|
81
|
-
/** Seal raw
|
|
82
|
-
seal(
|
|
81
|
+
/** Seal raw secret bytes. Output bytes are opaque to hub. */
|
|
82
|
+
seal(secret: Uint8Array): Promise<Uint8Array>;
|
|
83
83
|
/**
|
|
84
84
|
* Reverse {@link seal}. MUST throw on tamper, wrong-provider, or
|
|
85
85
|
* any other failure — hub treats a thrown error as "this provider
|
|
@@ -90,7 +90,7 @@ export interface SealingKeyProvider {
|
|
|
90
90
|
/**
|
|
91
91
|
* In-memory test provider. NOT secure — uses a deterministic
|
|
92
92
|
* per-instance "key" (16-byte SHA-256 of `id`) XOR'd over the
|
|
93
|
-
*
|
|
93
|
+
* secret plus a 4-byte provider-id fingerprint prefix. The XOR is
|
|
94
94
|
* sufficient to make different `id` values produce mutually-unsealable
|
|
95
95
|
* outputs (the contract tests for that), but offers ZERO real
|
|
96
96
|
* confidentiality — never use outside tests.
|
|
@@ -104,7 +104,7 @@ export declare class MemorySealingKeyProvider implements SealingKeyProvider {
|
|
|
104
104
|
constructor(opts: {
|
|
105
105
|
id: string;
|
|
106
106
|
});
|
|
107
|
-
seal(
|
|
107
|
+
seal(secret: Uint8Array): Promise<Uint8Array>;
|
|
108
108
|
unseal(sealed: Uint8Array): Promise<Uint8Array>;
|
|
109
109
|
}
|
|
110
110
|
/**
|
|
@@ -201,17 +201,17 @@ export declare class MemoryRecipientSealer implements SealingKeyProvider, Recipi
|
|
|
201
201
|
seal(plaintext: Uint8Array): Promise<Uint8Array>;
|
|
202
202
|
unseal(bytes: Uint8Array): Promise<Uint8Array>;
|
|
203
203
|
}
|
|
204
|
-
/** Reserved id for the managed-
|
|
205
|
-
export declare const
|
|
206
|
-
/** Plaintext payload stored inside the `_meta/sealed-
|
|
207
|
-
export interface
|
|
204
|
+
/** Reserved id for the managed-secret envelope under `_meta`. */
|
|
205
|
+
export declare const SEALED_SECRET_RECORD_ID: "sealed-secret";
|
|
206
|
+
/** Plaintext payload stored inside the `_meta/sealed-secret` envelope. */
|
|
207
|
+
export interface SealedSecret {
|
|
208
208
|
readonly _noydb_sealed: 1;
|
|
209
209
|
readonly providerId: string;
|
|
210
210
|
/** Sealed bytes. Base64-encoded on the wire; decoded on load. */
|
|
211
211
|
readonly sealed: Uint8Array;
|
|
212
212
|
}
|
|
213
213
|
/**
|
|
214
|
-
* Wire-format envelope persisted at `_meta/sealed-
|
|
214
|
+
* Wire-format envelope persisted at `_meta/sealed-secret` for
|
|
215
215
|
* managed-mode vaults. The provider produces raw sealed bytes via
|
|
216
216
|
* {@link SealingKeyProvider.seal}; this wrapper carries the dispatch
|
|
217
217
|
* metadata hub needs to pick the right provider on the unseal path.
|
|
@@ -237,8 +237,8 @@ export interface SealedEnvelope {
|
|
|
237
237
|
readonly payload: string;
|
|
238
238
|
}
|
|
239
239
|
/**
|
|
240
|
-
* Parse a `_meta/sealed-
|
|
241
|
-
* in-memory {@link
|
|
240
|
+
* Parse a `_meta/sealed-secret` `_data` JSON string into the
|
|
241
|
+
* in-memory {@link SealedSecret} representation. Accepts both:
|
|
242
242
|
*
|
|
243
243
|
* 1. v1 wire format `{ v: 1, _noydb_sealed: 1, pid, payload }` —
|
|
244
244
|
* the current shape.
|
|
@@ -251,20 +251,20 @@ export interface SealedEnvelope {
|
|
|
251
251
|
*
|
|
252
252
|
* @internal — exported only for the migration safety-net test suite.
|
|
253
253
|
*/
|
|
254
|
-
export declare function parseSealedEnvelope(raw: unknown):
|
|
255
|
-
export declare function
|
|
254
|
+
export declare function parseSealedEnvelope(raw: unknown): SealedSecret | undefined;
|
|
255
|
+
export declare function saveSealedSecret(store: NoydbStore, vault: string, payload: {
|
|
256
256
|
readonly providerId: string;
|
|
257
257
|
readonly sealed: Uint8Array;
|
|
258
258
|
}): Promise<void>;
|
|
259
|
-
export declare function
|
|
259
|
+
export declare function loadSealedSecret(store: NoydbStore, vault: string): Promise<SealedSecret | undefined>;
|
|
260
260
|
/**
|
|
261
|
-
* Resolve the effective plaintext
|
|
261
|
+
* Resolve the effective plaintext secret string for a managed-mode
|
|
262
262
|
* vault. Two paths:
|
|
263
263
|
*
|
|
264
264
|
* 1. **First open (no envelope persisted):** generate a 256-bit random
|
|
265
265
|
* via `crypto.getRandomValues`, base64-encode for use as a
|
|
266
|
-
*
|
|
267
|
-
* provider, persist `_meta/sealed-
|
|
266
|
+
* secret string, seal the underlying bytes under the
|
|
267
|
+
* provider, persist `_meta/sealed-secret`, return the
|
|
268
268
|
* base64 string.
|
|
269
269
|
*
|
|
270
270
|
* 2. **Reopen (envelope exists):** read + unseal + decode → return.
|