@noy-db/hub 0.6.0-pre.1 → 0.6.0-pre.3
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/codemods/0.4.0-pre.json +659 -0
- package/dist/{api-67SBPMMH.js → api-RXUMEKT3.js} +6 -6
- package/dist/attestation/index.js +12 -12
- package/dist/attestation/index.js.map +1 -1
- package/dist/{backup-GAYWQAFN.js → backup-KULFZ2T4.js} +6 -6
- package/dist/blobs/index.js +5 -5
- package/dist/broker/index.js +6 -6
- package/dist/{bundle-handle-5OUAI7CV.js → bundle-handle-GFNHT52M.js} +2 -2
- package/dist/cargo/index.js +18 -18
- package/dist/{chunk-CYQOUTMY.js → chunk-2BMRJ6LQ.js} +2 -2
- package/dist/{chunk-HS7HNYBD.js → chunk-2DHSSLOD.js} +6 -6
- package/dist/{chunk-JH3OHQM4.js → chunk-2Z3NCLNX.js} +6 -6
- package/dist/{chunk-NVU7ZMPN.js → chunk-3IXIU6FP.js} +2 -2
- package/dist/{chunk-XBLKM73C.js → chunk-3JVXVJ7L.js} +8 -8
- package/dist/{chunk-FY343IZR.js → chunk-3URQC7EH.js} +3 -3
- package/dist/{chunk-BPTZ4K5L.js → chunk-4GZ6XOVW.js} +7 -7
- package/dist/{chunk-ROWL352P.js → chunk-4I72F5DF.js} +4 -4
- package/dist/{chunk-EK7DT5BT.js → chunk-4VUPLMZ6.js} +39 -3
- package/dist/chunk-4VUPLMZ6.js.map +1 -0
- package/dist/{chunk-LBGPO5RL.js → chunk-52JPHN5N.js} +4 -4
- package/dist/{chunk-27TCYH6G.js → chunk-5JY5TSVY.js} +3 -3
- package/dist/{chunk-27TCYH6G.js.map → chunk-5JY5TSVY.js.map} +1 -1
- package/dist/{chunk-ZXJXDHNK.js → chunk-5ZKS6ZE2.js} +2 -2
- package/dist/{chunk-ZXJXDHNK.js.map → chunk-5ZKS6ZE2.js.map} +1 -1
- package/dist/{chunk-MVOWXQHN.js → chunk-6BU3L4UE.js} +2 -2
- package/dist/{chunk-OSFPNKY4.js → chunk-6FJWSWFT.js} +2 -2
- package/dist/chunk-6FJWSWFT.js.map +1 -0
- package/dist/{chunk-CJ73OLMW.js → chunk-6HFM7EIT.js} +1 -1
- package/dist/chunk-6HFM7EIT.js.map +1 -0
- package/dist/{chunk-PGAPBZEK.js → chunk-6NVPFKN3.js} +4 -4
- package/dist/{chunk-24UICKTB.js → chunk-6SAFL5YE.js} +2 -2
- package/dist/chunk-6SAFL5YE.js.map +1 -0
- package/dist/{chunk-NQRJ5AJO.js → chunk-7H73RIE3.js} +2 -2
- package/dist/{chunk-NQCNSVGI.js → chunk-7MNBICB5.js} +3 -3
- package/dist/{chunk-T4GPR2IR.js → chunk-7TSYBD3E.js} +1 -1
- package/dist/chunk-7TSYBD3E.js.map +1 -0
- package/dist/{chunk-3CLZY46Y.js → chunk-7V2OGKES.js} +56 -56
- package/dist/chunk-7V2OGKES.js.map +1 -0
- package/dist/{chunk-MXZ5TSTR.js → chunk-AHCSWNVL.js} +6 -6
- package/dist/{chunk-V5C5NNBR.js → chunk-CDB2HVQW.js} +3 -3
- package/dist/{chunk-3HYWYLXL.js → chunk-CEJWMBXO.js} +1 -1
- package/dist/chunk-CEJWMBXO.js.map +1 -0
- package/dist/{chunk-2KIV7BEK.js → chunk-FDX7OWWI.js} +1 -1
- package/dist/chunk-FDX7OWWI.js.map +1 -0
- package/dist/{chunk-4MQDV3HZ.js → chunk-FFDNKRCY.js} +2 -2
- package/dist/{chunk-PP5CO2PR.js → chunk-FMQJZH4R.js} +2 -2
- package/dist/{chunk-JSRU5W2M.js → chunk-FZ6NYJ7L.js} +3 -3
- package/dist/{chunk-ZGGVOADG.js → chunk-G6S5VVHP.js} +2 -2
- package/dist/{chunk-OMSAULZM.js → chunk-HY6Y2P4Y.js} +9 -9
- package/dist/{chunk-46V67XP5.js → chunk-IQRP74OO.js} +2 -2
- package/dist/chunk-IQRP74OO.js.map +1 -0
- package/dist/{chunk-TFZ7LLOQ.js → chunk-J7FM3RAU.js} +4 -4
- package/dist/{chunk-ZWMO5GL5.js → chunk-JJNOLSG5.js} +3 -3
- package/dist/{chunk-KZ3KMDN3.js → chunk-LWSJG3LI.js} +1 -1
- package/dist/chunk-LWSJG3LI.js.map +1 -0
- package/dist/{chunk-LTU4FLHG.js → chunk-MYG6WIRJ.js} +4 -4
- package/dist/{chunk-SRGJET2F.js → chunk-NJDQ4YSV.js} +2 -2
- package/dist/{chunk-DPJTDNUF.js → chunk-O42AUQCP.js} +5 -5
- package/dist/{chunk-F3GVO44K.js → chunk-PDLLCOGD.js} +3 -3
- package/dist/{chunk-VBY6ZLJT.js → chunk-PL2GHSCM.js} +3 -3
- package/dist/{chunk-DCMQR46R.js → chunk-PNKHAKQ7.js} +3 -3
- package/dist/{chunk-3IIPWA75.js → chunk-Q2VEFHDQ.js} +2 -2
- package/dist/{chunk-ZK4CO2KZ.js → chunk-Q6TEJXBX.js} +4 -4
- package/dist/{chunk-GS5RT2KK.js → chunk-QULVCV3M.js} +2 -2
- package/dist/chunk-QULVCV3M.js.map +1 -0
- package/dist/{chunk-RLWY6Z44.js → chunk-RW3XKAF3.js} +3 -3
- package/dist/chunk-RW3XKAF3.js.map +1 -0
- package/dist/{chunk-4VCWI42L.js → chunk-SUFG5E73.js} +2 -2
- package/dist/{chunk-SKONR2OL.js → chunk-U5O6GIWZ.js} +2 -2
- package/dist/{chunk-HFKGIBMD.js → chunk-VZ3XFUQ7.js} +2 -2
- package/dist/{chunk-3UK6STWO.js → chunk-VZUVORWV.js} +3 -3
- package/dist/{chunk-3EO7RZLJ.js → chunk-W77KZHCW.js} +4 -4
- package/dist/{chunk-P7NGLLUF.js → chunk-WASHZV34.js} +2 -2
- package/dist/{chunk-JEM2IGS3.js → chunk-WDDHMAAO.js} +5 -5
- package/dist/{chunk-XB7LUDKM.js → chunk-WFUIE565.js} +3 -3
- package/dist/{chunk-RPXL6KSX.js → chunk-WLZ47GSL.js} +3 -3
- package/dist/{chunk-MJWCLSQL.js → chunk-X56RTUK3.js} +3 -3
- package/dist/{chunk-TLNNHG3A.js → chunk-XMC2ZTRD.js} +3 -3
- package/dist/{chunk-TLNNHG3A.js.map → chunk-XMC2ZTRD.js.map} +1 -1
- package/dist/{chunk-MC2LFTQM.js → chunk-XWX7GL56.js} +2 -2
- package/dist/{chunk-24ZLWWEO.js → chunk-YPYHVOXP.js} +1 -1
- package/dist/chunk-YPYHVOXP.js.map +1 -0
- package/dist/{chunk-2LGDCNFJ.js → chunk-Z45YRGFO.js} +1 -1
- package/dist/chunk-Z45YRGFO.js.map +1 -0
- package/dist/classified/index.js +3 -3
- package/dist/{classified-marker-MH3ON5OL.js → classified-marker-2KJAXRRO.js} +3 -3
- package/dist/{collection-facade-AHT7FATG.js → collection-facade-QEJIM6BC.js} +8 -8
- package/dist/consent/index.js +4 -4
- package/dist/cover/index.js +2 -2
- package/dist/custody/index.js +6 -6
- package/dist/{dead-filter-U575NGSH.js → dead-filter-DCB62VWW.js} +2 -2
- package/dist/{delegation-PDYL6RWT.js → delegation-MO7YZYJS.js} +4 -4
- package/dist/derivations/index.js +6 -6
- package/dist/{derive-AKT4KU36.js → derive-IUA6JFLB.js} +5 -5
- package/dist/directory/index.js +5 -5
- package/dist/{dispatch-4XIJSFTT.js → dispatch-5DN7ZJGM.js} +5 -5
- package/dist/{dispatch-N5HGVUGU.js → dispatch-MJ6SHB3Y.js} +9 -9
- package/dist/{enclave-OPK24QDR.js → enclave-JU4YIEPB.js} +4 -4
- package/dist/{executor-3JZ4POTW.js → executor-TZNM4GCW.js} +8 -8
- package/dist/{export-accessible-CPTP5STN.js → export-accessible-4S36PQNR.js} +7 -7
- package/dist/{extract-partition-TWXPHVU7.js → extract-partition-IO7FDZ2P.js} +10 -10
- package/dist/{fanout-sidecar-T2ZGLQFE.js → fanout-sidecar-NNAJQXMX.js} +4 -4
- package/dist/forget/index.js +4 -4
- package/dist/guards/index.js +1 -1
- package/dist/history/index.js +6 -6
- package/dist/i18n/index.js +6 -6
- package/dist/index.d.ts +1 -0
- package/dist/index.js +56 -54
- package/dist/index.js.map +1 -1
- package/dist/introspection/index.js +6 -6
- package/dist/{issue-N74C55X6.js → issue-RIVHSY2S.js} +6 -6
- package/dist/kernel/secret-mode.d.ts +1 -1
- package/dist/kernel/types.d.ts +41 -6
- package/dist/kernel/vault.d.ts +3 -3
- package/dist/{ledger-DONWFC5M.js → ledger-AETNF4OM.js} +6 -6
- package/dist/liberate-BAHOP2TQ.js +24 -0
- package/dist/{link-set-2TTP4VLO.js → link-set-E5HNY67I.js} +5 -5
- package/dist/{managed-secret-EAOYWRYF.js → managed-secret-CWQ6PND5.js} +3 -3
- package/dist/materialized-views/index.js +9 -9
- package/dist/{noydb-6W2XGQCS.js → noydb-QGPKEDXK.js} +27 -27
- package/dist/overlay-views/index.js +1 -1
- package/dist/periods/index.js +6 -6
- package/dist/pod/index.js +30 -30
- package/dist/policy/index.js +3 -3
- package/dist/port/with/collection-options.d.ts +1 -1
- package/dist/portability/index.js +6 -6
- package/dist/{post-register-ORQOQJCS.js → post-register-2XSSMGEQ.js} +4 -4
- package/dist/{register-LHETZRJM.js → register-4EFJCVYD.js} +11 -11
- package/dist/{registry-JRIN447B.js → registry-4SDHHOJ7.js} +6 -6
- package/dist/{registry-AMAZ6QRZ.js → registry-OYTFGWVK.js} +4 -4
- package/dist/{request-withdrawal-2DN2RGCO.js → request-withdrawal-KGXGDPVQ.js} +9 -9
- package/dist/{reveal-AG4SCHUQ.js → reveal-BW36KCOQ.js} +3 -3
- package/dist/{revoke-ZX4NM2CJ.js → revoke-JFN773KF.js} +6 -6
- package/dist/sealed-record/index.js +6 -6
- package/dist/search/index.js +1 -1
- package/dist/{seed-IRCDGIRK.js → seed-NPF3BZGQ.js} +6 -6
- package/dist/sequence/index.js +4 -4
- package/dist/session/index.js +3 -3
- package/dist/{signer-7KHD4OL2.js → signer-TA55QB6R.js} +5 -5
- package/dist/snapshots/index.js +5 -5
- package/dist/{stale-K734VACF.js → stale-4E3VZXGV.js} +5 -5
- package/dist/{storage-4H2GF6RQ.js → storage-V7MTFAQJ.js} +5 -5
- package/dist/{store-coordination-provider-4SKLSFUG.js → store-coordination-provider-GFCUOBR6.js} +3 -3
- package/dist/sync/index.js +4 -4
- package/dist/team/index.js +8 -8
- package/dist/tiers/index.js +4 -4
- package/dist/via/classified/descriptor.d.ts +1 -1
- package/dist/{walk-MQHYNDLZ.js → walk-3ZECBFDA.js} +7 -7
- package/dist/with-audit/attestation/index.d.ts +1 -1
- package/dist/with-audit/guards/with-guard.d.ts +1 -1
- package/dist/with-cargo/index.d.ts +1 -1
- package/dist/with-commit/history/ledger/entry.d.ts +1 -1
- package/dist/with-commit/numbering/descriptor.d.ts +1 -1
- package/dist/with-formula/derivations/with-derivation.d.ts +1 -1
- package/dist/with-formula/materialized-views/with-materialized-view.d.ts +3 -3
- package/dist/with-formula/overlay-views/with-overlayed-view.d.ts +1 -1
- package/dist/with-party/custody/index.d.ts +1 -1
- package/dist/with-party/directory/user-envelope/index.d.ts +1 -1
- package/dist/with-party/directory/user-envelope/storage.d.ts +1 -1
- package/dist/with-party/team/echo-ceremony.d.ts +3 -3
- package/dist/with-party/team/echo-secret.d.ts +2 -2
- package/dist/with-pod/bundle.d.ts +15 -0
- package/dist/with-shape/introspection/index.d.ts +1 -1
- package/dist/with-shape/introspection/types.d.ts +1 -1
- package/dist/with-shape/persisted-schemas/derive.d.ts +1 -1
- package/dist/with-shape/persisted-schemas/index.d.ts +1 -1
- package/dist/with-shape/persisted-schemas/types.d.ts +1 -1
- package/dist/{withdraw-accessible-JSDQHXHE.js → withdraw-accessible-7PG4DYQK.js} +8 -8
- package/package.json +6 -4
- package/dist/chunk-24UICKTB.js.map +0 -1
- package/dist/chunk-24ZLWWEO.js.map +0 -1
- package/dist/chunk-2KIV7BEK.js.map +0 -1
- package/dist/chunk-2LGDCNFJ.js.map +0 -1
- package/dist/chunk-3CLZY46Y.js.map +0 -1
- package/dist/chunk-3HYWYLXL.js.map +0 -1
- package/dist/chunk-46V67XP5.js.map +0 -1
- package/dist/chunk-CJ73OLMW.js.map +0 -1
- package/dist/chunk-EK7DT5BT.js.map +0 -1
- package/dist/chunk-GS5RT2KK.js.map +0 -1
- package/dist/chunk-KZ3KMDN3.js.map +0 -1
- package/dist/chunk-OSFPNKY4.js.map +0 -1
- package/dist/chunk-RLWY6Z44.js.map +0 -1
- package/dist/chunk-T4GPR2IR.js.map +0 -1
- package/dist/liberate-KICI7AJN.js +0 -24
- /package/dist/{api-67SBPMMH.js.map → api-RXUMEKT3.js.map} +0 -0
- /package/dist/{backup-GAYWQAFN.js.map → backup-KULFZ2T4.js.map} +0 -0
- /package/dist/{bundle-handle-5OUAI7CV.js.map → bundle-handle-GFNHT52M.js.map} +0 -0
- /package/dist/{chunk-CYQOUTMY.js.map → chunk-2BMRJ6LQ.js.map} +0 -0
- /package/dist/{chunk-HS7HNYBD.js.map → chunk-2DHSSLOD.js.map} +0 -0
- /package/dist/{chunk-JH3OHQM4.js.map → chunk-2Z3NCLNX.js.map} +0 -0
- /package/dist/{chunk-NVU7ZMPN.js.map → chunk-3IXIU6FP.js.map} +0 -0
- /package/dist/{chunk-XBLKM73C.js.map → chunk-3JVXVJ7L.js.map} +0 -0
- /package/dist/{chunk-FY343IZR.js.map → chunk-3URQC7EH.js.map} +0 -0
- /package/dist/{chunk-BPTZ4K5L.js.map → chunk-4GZ6XOVW.js.map} +0 -0
- /package/dist/{chunk-ROWL352P.js.map → chunk-4I72F5DF.js.map} +0 -0
- /package/dist/{chunk-LBGPO5RL.js.map → chunk-52JPHN5N.js.map} +0 -0
- /package/dist/{chunk-MVOWXQHN.js.map → chunk-6BU3L4UE.js.map} +0 -0
- /package/dist/{chunk-PGAPBZEK.js.map → chunk-6NVPFKN3.js.map} +0 -0
- /package/dist/{chunk-NQRJ5AJO.js.map → chunk-7H73RIE3.js.map} +0 -0
- /package/dist/{chunk-NQCNSVGI.js.map → chunk-7MNBICB5.js.map} +0 -0
- /package/dist/{chunk-MXZ5TSTR.js.map → chunk-AHCSWNVL.js.map} +0 -0
- /package/dist/{chunk-V5C5NNBR.js.map → chunk-CDB2HVQW.js.map} +0 -0
- /package/dist/{chunk-4MQDV3HZ.js.map → chunk-FFDNKRCY.js.map} +0 -0
- /package/dist/{chunk-PP5CO2PR.js.map → chunk-FMQJZH4R.js.map} +0 -0
- /package/dist/{chunk-JSRU5W2M.js.map → chunk-FZ6NYJ7L.js.map} +0 -0
- /package/dist/{chunk-ZGGVOADG.js.map → chunk-G6S5VVHP.js.map} +0 -0
- /package/dist/{chunk-OMSAULZM.js.map → chunk-HY6Y2P4Y.js.map} +0 -0
- /package/dist/{chunk-TFZ7LLOQ.js.map → chunk-J7FM3RAU.js.map} +0 -0
- /package/dist/{chunk-ZWMO5GL5.js.map → chunk-JJNOLSG5.js.map} +0 -0
- /package/dist/{chunk-LTU4FLHG.js.map → chunk-MYG6WIRJ.js.map} +0 -0
- /package/dist/{chunk-SRGJET2F.js.map → chunk-NJDQ4YSV.js.map} +0 -0
- /package/dist/{chunk-DPJTDNUF.js.map → chunk-O42AUQCP.js.map} +0 -0
- /package/dist/{chunk-F3GVO44K.js.map → chunk-PDLLCOGD.js.map} +0 -0
- /package/dist/{chunk-VBY6ZLJT.js.map → chunk-PL2GHSCM.js.map} +0 -0
- /package/dist/{chunk-DCMQR46R.js.map → chunk-PNKHAKQ7.js.map} +0 -0
- /package/dist/{chunk-3IIPWA75.js.map → chunk-Q2VEFHDQ.js.map} +0 -0
- /package/dist/{chunk-ZK4CO2KZ.js.map → chunk-Q6TEJXBX.js.map} +0 -0
- /package/dist/{chunk-4VCWI42L.js.map → chunk-SUFG5E73.js.map} +0 -0
- /package/dist/{chunk-SKONR2OL.js.map → chunk-U5O6GIWZ.js.map} +0 -0
- /package/dist/{chunk-HFKGIBMD.js.map → chunk-VZ3XFUQ7.js.map} +0 -0
- /package/dist/{chunk-3UK6STWO.js.map → chunk-VZUVORWV.js.map} +0 -0
- /package/dist/{chunk-3EO7RZLJ.js.map → chunk-W77KZHCW.js.map} +0 -0
- /package/dist/{chunk-P7NGLLUF.js.map → chunk-WASHZV34.js.map} +0 -0
- /package/dist/{chunk-JEM2IGS3.js.map → chunk-WDDHMAAO.js.map} +0 -0
- /package/dist/{chunk-XB7LUDKM.js.map → chunk-WFUIE565.js.map} +0 -0
- /package/dist/{chunk-RPXL6KSX.js.map → chunk-WLZ47GSL.js.map} +0 -0
- /package/dist/{chunk-MJWCLSQL.js.map → chunk-X56RTUK3.js.map} +0 -0
- /package/dist/{chunk-MC2LFTQM.js.map → chunk-XWX7GL56.js.map} +0 -0
- /package/dist/{classified-marker-MH3ON5OL.js.map → classified-marker-2KJAXRRO.js.map} +0 -0
- /package/dist/{collection-facade-AHT7FATG.js.map → collection-facade-QEJIM6BC.js.map} +0 -0
- /package/dist/{dead-filter-U575NGSH.js.map → dead-filter-DCB62VWW.js.map} +0 -0
- /package/dist/{delegation-PDYL6RWT.js.map → delegation-MO7YZYJS.js.map} +0 -0
- /package/dist/{derive-AKT4KU36.js.map → derive-IUA6JFLB.js.map} +0 -0
- /package/dist/{dispatch-4XIJSFTT.js.map → dispatch-5DN7ZJGM.js.map} +0 -0
- /package/dist/{dispatch-N5HGVUGU.js.map → dispatch-MJ6SHB3Y.js.map} +0 -0
- /package/dist/{enclave-OPK24QDR.js.map → enclave-JU4YIEPB.js.map} +0 -0
- /package/dist/{executor-3JZ4POTW.js.map → executor-TZNM4GCW.js.map} +0 -0
- /package/dist/{export-accessible-CPTP5STN.js.map → export-accessible-4S36PQNR.js.map} +0 -0
- /package/dist/{extract-partition-TWXPHVU7.js.map → extract-partition-IO7FDZ2P.js.map} +0 -0
- /package/dist/{fanout-sidecar-T2ZGLQFE.js.map → fanout-sidecar-NNAJQXMX.js.map} +0 -0
- /package/dist/{issue-N74C55X6.js.map → issue-RIVHSY2S.js.map} +0 -0
- /package/dist/{ledger-DONWFC5M.js.map → ledger-AETNF4OM.js.map} +0 -0
- /package/dist/{liberate-KICI7AJN.js.map → liberate-BAHOP2TQ.js.map} +0 -0
- /package/dist/{link-set-2TTP4VLO.js.map → link-set-E5HNY67I.js.map} +0 -0
- /package/dist/{managed-secret-EAOYWRYF.js.map → managed-secret-CWQ6PND5.js.map} +0 -0
- /package/dist/{noydb-6W2XGQCS.js.map → noydb-QGPKEDXK.js.map} +0 -0
- /package/dist/{post-register-ORQOQJCS.js.map → post-register-2XSSMGEQ.js.map} +0 -0
- /package/dist/{register-LHETZRJM.js.map → register-4EFJCVYD.js.map} +0 -0
- /package/dist/{registry-AMAZ6QRZ.js.map → registry-4SDHHOJ7.js.map} +0 -0
- /package/dist/{registry-JRIN447B.js.map → registry-OYTFGWVK.js.map} +0 -0
- /package/dist/{request-withdrawal-2DN2RGCO.js.map → request-withdrawal-KGXGDPVQ.js.map} +0 -0
- /package/dist/{reveal-AG4SCHUQ.js.map → reveal-BW36KCOQ.js.map} +0 -0
- /package/dist/{revoke-ZX4NM2CJ.js.map → revoke-JFN773KF.js.map} +0 -0
- /package/dist/{seed-IRCDGIRK.js.map → seed-NPF3BZGQ.js.map} +0 -0
- /package/dist/{signer-7KHD4OL2.js.map → signer-TA55QB6R.js.map} +0 -0
- /package/dist/{stale-K734VACF.js.map → stale-4E3VZXGV.js.map} +0 -0
- /package/dist/{storage-4H2GF6RQ.js.map → storage-V7MTFAQJ.js.map} +0 -0
- /package/dist/{store-coordination-provider-4SKLSFUG.js.map → store-coordination-provider-GFCUOBR6.js.map} +0 -0
- /package/dist/{walk-MQHYNDLZ.js.map → walk-3ZECBFDA.js.map} +0 -0
- /package/dist/{withdraw-accessible-JSDQHXHE.js.map → withdraw-accessible-7PG4DYQK.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/with-commit/history/ledger/entry.ts","../src/with-commit/history/ledger/hash.ts"],"sourcesContent":["/**\n * Ledger entry shape + canonical JSON + sha256 helpers.\n *\n * This file holds the PURE primitives used by the hash-chained ledger:\n * the entry type, the deterministic (sort-stable) JSON encoder, and\n * the sha256 hasher that produces `prevHash` and `ledger.head()`.\n *\n * Everything here is validator-free and side-effect free — the only\n * runtime dep is Web Crypto's `subtle.digest` for the sha256 call,\n * which we already use for every other hashing operation in the core.\n *\n * The hash chain property works like this:\n *\n * hash(entry[i]) = sha256(canonicalJSON(entry[i]))\n * entry[i+1].prevHash = hash(entry[i])\n *\n * Any modification to `entry[i]` (field values, field order, whitespace)\n * produces a different `hash(entry[i])`, which means `entry[i+1]`'s\n * stored `prevHash` no longer matches the recomputed hash, which means\n * `verify()` returns `{ ok: false, divergedAt: i + 1 }`. The chain is\n * append-only and tamper-evident without external anchoring.\n */\n\n/**\n * A single ledger entry in its plaintext form — what gets serialized,\n * hashed, and then encrypted with the ledger DEK before being written\n * to the `_ledger/` adapter collection.\n *\n * ## Why hash the ciphertext, not the plaintext?\n *\n * `payloadHash` is the sha256 of the record's ENCRYPTED envelope bytes,\n * not its plaintext. This matters:\n *\n * 1. **Zero-knowledge preserved.** A user (or a third party) can\n * verify the ledger against the stored envelopes without any\n * decryption keys. The adapter layer already holds only\n * ciphertext, so hashing the ciphertext keeps the ledger at the\n * same privacy level as the adapter.\n *\n * 2. **Determinism.** Plaintext → ciphertext is randomized by the\n * fresh per-write IV, so `hash(plaintext)` would need extra\n * normalization. `hash(ciphertext)` is already deterministic and\n * unique per write.\n *\n * 3. **Detection property.** If an attacker modifies even one byte of\n * the stored ciphertext (trying to flip a record), the hash\n * changes, the ledger's recorded `payloadHash` no longer matches,\n * and a data-integrity check fails. We don't do that check in\n * `verify()` today, but the\n * hook is there for a future `verifyIntegrity()` follow-up.\n *\n * Fields marked `op`, `collection`, `id`, `version`, `ts`, `actor` are\n * plaintext METADATA about the operation — NOT the record itself. The\n * entry is still encrypted at rest via the ledger DEK, but adapters\n * could theoretically infer operation patterns from the sizes and\n * timestamps. This is an accepted trade-off for the tamper-evidence\n * property; full ORAM-level privacy is out of scope for noy-db.\n */\nimport { sha256Hex as sha256HexBytes } from '../../../kernel/enclave/index.js'\n\nexport interface LedgerEntry {\n /**\n * Zero-based sequential position of this entry in the chain. The\n * canonical adapter key is this number zero-padded to 10 digits\n * (`\"0000000001\"`) so lexicographic ordering matches numeric order.\n */\n readonly index: number\n\n /**\n * Hex-encoded sha256 of the canonical JSON of the PREVIOUS entry.\n * The genesis entry (index 0) has `prevHash === ''` — the first\n * entry in a fresh vault has nothing to point back to.\n */\n readonly prevHash: string\n\n /**\n * Which kind of mutation this entry records. only supports\n * data operations (`put`, `delete`, `amendment`). Access-control\n * operations (`grant`, `revoke`, `rotate`) will be added in a\n * follow-up once the keyring write path is instrumented — that's\n * tracked in the epic issue.\n *\n * `'amendment'` is the multi-record audit entry written by the\n * guards service when an admin/owner uses `withTransactions(...)`\n * to repair a constraint-violating state. See `amendment` field\n * below for the structured payload.\n *\n * `'lifecycle'` records a non-data audit event (e.g. partition\n * handover) — `collection`/`id` are empty and the event detail\n * lives in `reason` (e.g. `'partition-handed-over:<sealId>'`). Like\n * `amendment`, it carries no data envelope, so `verifyBackupIntegrity`\n * skips it in the data cross-check (it still participates in the\n * tamper-evident chain).\n *\n * `'forget'` is the single summary entry written by `vault.forget()`\n * (GDPR crypto-shred). `collection`/`id` are empty and `version`\n * is 0 — a forget is not scoped to one record. `payloadHash` carries\n * `sha256Hex(subjectId)` so the ledger PROVES \"subject X existed and\n * was erased on date D\" without retaining the subject id or any\n * plaintext; `reason` holds a JSON summary of the shred counts. Like\n * `amendment`/`lifecycle` it carries no data envelope and is skipped\n * by the reconstruct walker (it still participates in the chain, so\n * `verify()` passes after a shred).\n */\n readonly op: 'put' | 'delete' | 'amendment' | 'lifecycle' | 'migration' | 'forget'\n\n /** The collection the mutation targeted. */\n readonly collection: string\n\n /** The record id the mutation targeted. */\n readonly id: string\n\n /**\n * The record version AFTER this mutation. For `put` this is the\n * newly assigned version; for `delete` this is the version that\n * was deleted (the last version visible to reads).\n */\n readonly version: number\n\n /** ISO timestamp of the mutation. */\n readonly ts: string\n\n /** User id of the actor who performed the mutation. */\n readonly actor: string\n\n /**\n * Hex-encoded sha256 over the encrypted envelope's `_data` field, plus its\n * sealed-field ciphertext map (`_sealed`) when the record carries one —\n * so the ledger attests to both the open body and every sealed\n * value. A record with no `_sealed` hashes `_data` alone.\n * For `put`, this is the hash of the new ciphertext. For `delete`,\n * it's the hash of the last visible ciphertext at deletion time, or the empty\n * string if nothing was there to delete. Hashing the ciphertext (not the\n * plaintext) preserves zero-knowledge — see the file docstring. The exact\n * recipe lives in `envelopePayloadHash` (`hash.ts`).\n */\n readonly payloadHash: string\n\n /**\n * Optional human-readable tag describing why this mutation happened.\n * Threaded through `collection.put(_, _, { reason })`. Common\n * values include `'import:csv'`, `'import:json'`, `'import:xlsx'` from\n * `as-*` ImportPlan.apply(), but consumers can use any string for\n * domain-specific audit filtering. Auto-strip via `canonicalJson` —\n * absent on the wire, never serialized as `null`.\n *\n * Audit consumers filter: `entries.filter(e => e.reason?.startsWith('import:'))`.\n */\n readonly reason?: string\n\n /**\n * Optional hex-encoded sha256 of the encrypted JSON Patch delta\n * blob stored alongside this entry in `_ledger_deltas/`. Present\n * only for `put` operations that had a previous version — the\n * genesis put of a new record, and every `delete`, leave this\n * field undefined.\n *\n * The delta payload itself lives in a sibling internal collection\n * (`_ledger_deltas/<paddedIndex>`) and is encrypted with the\n * ledger DEK. Callers use `ledger.loadDelta(index)` to decrypt and\n * deserialize it when reconstructing a historical version.\n *\n * Why optional instead of always-present: the first put of a\n * record has no previous version to diff against, so storing an\n * empty patch would be noise. For deletes there's no \"next\" state\n * to describe with a delta. Both cases set this field to undefined.\n *\n * Note: the canonical-JSON hasher treats `undefined` as invalid\n * (it's one of the guard rails), so on the wire this field is\n * either `{ deltaHash: '<hex>' }` or absent from the JSON\n * entirely — never `{ deltaHash: undefined }`.\n */\n readonly deltaHash?: string\n\n /**\n * Present only when `op === 'amendment'`. Records the human reason,\n * the role of the actor, the (collection, id, vBefore, vAfter) tuple\n * for every record touched, and which guard invariants passed.\n *\n * See design-history/2026-05-18-guards-design.md.\n */\n readonly amendment?: {\n readonly reason: string\n readonly role: 'admin' | 'owner'\n readonly changes: ReadonlyArray<{\n readonly collection: string\n readonly id: string\n readonly vBefore: number\n readonly vAfter: number\n }>\n readonly invariantsPassed: ReadonlyArray<string>\n }\n}\n\n/**\n * Canonical (sort-stable) JSON encoder.\n *\n * This function is the load-bearing primitive of the hash chain:\n * `sha256(canonicalJSON(entry))` must produce the same hex string\n * every time, on every machine, for the same logical entry — otherwise\n * `verify()` would return `{ ok: false }` on cross-platform reads.\n *\n * JavaScript's `JSON.stringify` is almost canonical, but NOT quite:\n * it preserves the insertion order of object keys, which means\n * `{a:1,b:2}` and `{b:2,a:1}` serialize differently. We fix this by\n * recursively walking objects and sorting their keys before\n * concatenation.\n *\n * Arrays keep their original order (reordering them would change\n * semantics). Numbers, strings, booleans, and `null` use the default\n * JSON encoding. `undefined` and functions are rejected — ledger\n * entries are plain data, and silently dropping `undefined` would\n * break the \"same input → same hash\" property if a caller forgot to\n * omit a field.\n *\n * Performance: one pass per nesting level; O(n log n) for key sorting\n * at each object. Entries are small (< 1 KB) so this is negligible\n * compared to the sha256 call.\n */\nexport function canonicalJson(value: unknown): string {\n if (value === null) return 'null'\n if (typeof value === 'boolean') return value ? 'true' : 'false'\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new Error(\n `canonicalJson: refusing to encode non-finite number ${String(value)}`,\n )\n }\n return JSON.stringify(value)\n }\n if (typeof value === 'string') return JSON.stringify(value)\n if (typeof value === 'bigint') {\n throw new Error('canonicalJson: BigInt is not JSON-serializable')\n }\n if (typeof value === 'undefined' || typeof value === 'function') {\n throw new Error(\n `canonicalJson: refusing to encode ${typeof value} — include all fields explicitly`,\n )\n }\n if (Array.isArray(value)) {\n return '[' + value.map((v) => canonicalJson(v)).join(',') + ']'\n }\n if (typeof value === 'object') {\n const obj = value as Record<string, unknown>\n const keys = Object.keys(obj).sort()\n const parts: string[] = []\n for (const key of keys) {\n parts.push(JSON.stringify(key) + ':' + canonicalJson(obj[key]))\n }\n return '{' + parts.join(',') + '}'\n }\n throw new Error(`canonicalJson: unexpected value type: ${typeof value}`)\n}\n\n/**\n * Compute a hex-encoded sha256 of a string via Web Crypto's subtle API.\n *\n * We use hex (not base64) for hashes because hex is case-insensitive,\n * fixed-length (64 chars), and easier to compare visually in debug\n * output. Base64 would save a few bytes in storage but every encrypted\n * ledger entry is already much larger than the hash itself.\n */\nexport async function sha256Hex(input: string): Promise<string> {\n return sha256HexBytes(new TextEncoder().encode(input))\n}\n\n/**\n * Compute the canonical hash of a ledger entry. Short wrapper around\n * `canonicalJson` + `sha256Hex`; callers use this instead of composing\n * the two functions every time, so any future change to the hashing\n * pipeline (e.g., adding a domain-separation prefix) lives in one place.\n */\nexport async function hashEntry(entry: LedgerEntry): Promise<string> {\n return sha256Hex(canonicalJson(entry))\n}\n\n/**\n * Pad an index to the canonical 10-digit form used as the adapter key.\n * Ten digits is enough for ~10 billion ledger entries per vault\n * — far beyond any realistic use case, but cheap enough that the extra\n * digits don't hurt storage.\n */\nexport function paddedIndex(index: number): string {\n return String(index).padStart(10, '0')\n}\n\n/** Parse a padded adapter key back into a number. Returns NaN on malformed input. */\nexport function parseIndex(key: string): number {\n return Number.parseInt(key, 10)\n}\n","/**\n * Envelope payload hash — pinned in its own leaf module so consumers\n * (DictionaryHandle, the active history strategy) can import it\n * without dragging in the `LedgerStore` class.\n *\n * see `constants.ts` for the broader rationale.\n *\n * @internal\n */\n\nimport type { EncryptedEnvelope } from '../../../kernel/types.js'\nimport { sha256Hex } from './entry.js'\nimport { envelopeBodyForHash } from '../../../kernel/enclave/index.js'\n\n/**\n * Compute the `payloadHash` value for an encrypted envelope. Used by\n * `LedgerStore.append` for both put (hash the new envelope) and\n * delete (hash the previous envelope) paths, and by\n * `DictionaryHandle` so its ledger entries match the same contract.\n *\n * Hashes the open `_data` ciphertext, plus the sealed-field ciphertext\n * map (`_sealed`) when a record carries one — so the ledger attests to\n * both the open body AND every sealed value … and the verify-digest\n * ciphertext map (`_vdig`), each bound only when present — the `_vdig`\n * binding is the temporal-rollback detector for the C1 splice class.\n * `rotateRecordCek` rewrites `_vdig` with no ledger entry, the same\n * pre-existing rotation property `_sealed`/`_cek` already have\n * (`verifyBackupIntegrity` flags rotated records until re-anchored).\n *\n * Returns the empty string when there is no envelope (delete of a\n * never-existed record). The empty string tolerated by the ledger\n * entry's `payloadHash` field as the canonical \"nothing here\" value.\n */\nexport async function envelopePayloadHash(\n envelope: EncryptedEnvelope | null,\n): Promise<string> {\n if (!envelope) return ''\n // Back-compat: a record with NO sealed fields hashes as sha256 of\n // `_data` alone — so every pre-existing ledger entry\n // and every non-sealed backup verifies byte-identically. A record WITH\n // `_sealed` widens the hash to also bind the sealed-field ciphertext, so the\n // ledger attests to sealed-value tamper/erasure (a dropped or swapped\n // `_sealed[field]` now diverges `verifyBackupIntegrity`'s data cross-check).\n // `envelopeBodyForHash` (the enclave barrel's C1 protected-body access\n // contract) derives this exact string — see its own doc for the\n // canonicalization recipe (sorted keys, independent of `_sealed`'s\n // field-insertion / store-serialization order).\n //\n // `_cek` is deliberately NOT bound: a tampered wrapped-CEK already self-\n // detects (it fails to unwrap), and `rotateRecordCek` rewrites `_cek` with no\n // ledger entry — binding it would make every legitimate rotation fail verify.\n //\n // RESIDUAL: a backup containing sealed records created BEFORE this change\n // stored `payloadHash` over `_data` only, so it will fail the data cross-check\n // and must be re-anchored (re-`put`/re-baseline). Sealed fields are new, so\n // this is expected to affect ~no real vault.\n //\n // The two branches are NOT domain-separated — D1 pins the no-`_sealed` branch\n // to exactly `sha256(_data)`, so it cannot carry a discriminator tag. An actor\n // with raw-store write access could therefore set a non-sealed record's `_data`\n // equal to the canonical-JSON string below and collide a sealed record's hash —\n // but doing so overwrites `_data` itself, which then no longer GCM-decrypts, so\n // it only suppresses the verify signal on an already-destroyed record; it cannot\n // silently erase one sealed field while leaving the record readable.\n return sha256Hex(envelopeBodyForHash(envelope))\n}\n"],"mappings":";;;;;;;;AA2NO,SAAS,cAAc,OAAwB;AACpD,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,OAAO,UAAU,UAAW,QAAO,QAAQ,SAAS;AACxD,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,YAAM,IAAI;AAAA,QACR,uDAAuD,OAAO,KAAK,CAAC;AAAA,MACtE;AAAA,IACF;AACA,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B;AACA,MAAI,OAAO,UAAU,SAAU,QAAO,KAAK,UAAU,KAAK;AAC1D,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,MAAI,OAAO,UAAU,eAAe,OAAO,UAAU,YAAY;AAC/D,UAAM,IAAI;AAAA,MACR,qCAAqC,OAAO,KAAK;AAAA,IACnD;AAAA,EACF;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,MAAM,IAAI,CAAC,MAAM,cAAc,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;AAAA,EAC9D;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,MAAM;AACZ,UAAM,OAAO,OAAO,KAAK,GAAG,EAAE,KAAK;AACnC,UAAM,QAAkB,CAAC;AACzB,eAAW,OAAO,MAAM;AACtB,YAAM,KAAK,KAAK,UAAU,GAAG,IAAI,MAAM,cAAc,IAAI,GAAG,CAAC,CAAC;AAAA,IAChE;AACA,WAAO,MAAM,MAAM,KAAK,GAAG,IAAI;AAAA,EACjC;AACA,QAAM,IAAI,MAAM,yCAAyC,OAAO,KAAK,EAAE;AACzE;AAUA,eAAsBA,WAAU,OAAgC;AAC9D,SAAO,UAAe,IAAI,YAAY,EAAE,OAAO,KAAK,CAAC;AACvD;AAQA,eAAsB,UAAU,OAAqC;AACnE,SAAOA,WAAU,cAAc,KAAK,CAAC;AACvC;AAQO,SAAS,YAAY,OAAuB;AACjD,SAAO,OAAO,KAAK,EAAE,SAAS,IAAI,GAAG;AACvC;AAGO,SAAS,WAAW,KAAqB;AAC9C,SAAO,OAAO,SAAS,KAAK,EAAE;AAChC;;;AChQA,eAAsB,oBACpB,UACiB;AACjB,MAAI,CAAC,SAAU,QAAO;AA4BtB,SAAOC,WAAU,oBAAoB,QAAQ,CAAC;AAChD;","names":["sha256Hex","sha256Hex"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
NOYDB_FORMAT_VERSION
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YPYHVOXP.js";
|
|
4
4
|
|
|
5
5
|
// src/kernel/enclave/record-keys/tombstone.ts
|
|
6
6
|
function isTombstoneShape(envelope) {
|
|
@@ -42,4 +42,4 @@ export {
|
|
|
42
42
|
isDeleteMarker,
|
|
43
43
|
buildDeleteMarker
|
|
44
44
|
};
|
|
45
|
-
//# sourceMappingURL=chunk-
|
|
45
|
+
//# sourceMappingURL=chunk-7H73RIE3.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
openEnvelopeJson
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3URQC7EH.js";
|
|
4
4
|
import {
|
|
5
5
|
encrypt
|
|
6
6
|
} from "./chunk-VCETL77O.js";
|
|
7
7
|
import {
|
|
8
8
|
NOYDB_FORMAT_VERSION
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-YPYHVOXP.js";
|
|
10
10
|
import {
|
|
11
11
|
SequenceContentionError,
|
|
12
12
|
SequenceNotEnabledError,
|
|
@@ -199,4 +199,4 @@ export {
|
|
|
199
199
|
resolveSequenceKey,
|
|
200
200
|
SequenceStore
|
|
201
201
|
};
|
|
202
|
-
//# sourceMappingURL=chunk-
|
|
202
|
+
//# sourceMappingURL=chunk-7MNBICB5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/kernel/via/graph.ts"],"sourcesContent":["// kernel/via/graph.ts — the per-vault ViaGraph dependency model (Via port phase C, #638).\n//\n// Metadata-only dependency graph over (collection, field) nodes: source-field\n// postures, derived-field edges, and the taint (effective-posture) algebra.\n// NEVER stores record values or key material — see\n// design-history/2026-07-11-via-phase-c-design.md §1/§2.\n\nimport { DerivationCycleError, MaterializedViewCycleError } from '../errors.js'\nimport type { ViaPosture } from './index.js'\n\n/** A (collection, field) node. Artifact-grain targets (rollup field, MV row-class,\n * overlay output) are modelled as a field node whose `field` is the artifact key. */\nexport interface FieldRef { readonly collection: string; readonly field: string }\n\nexport type EdgeKind = 'computed' | 'derivation' | 'rollup' | 'mv' | 'overlay' | 'ref'\n/** `'virtual'` (#638 Task 7) marks a `computed(fn, { mode: 'virtual' })` field's edge —\n * never stored (rides the `present` phase), so it can never be sealed at rest\n * ({@link ViaGraph.taintSealedFields} excludes it) and is always non-queryable\n * regardless of source posture ({@link ViaGraph.effectivePosture} clamps it). */\nexport type Grain = 'record' | 'aggregate' | 'virtual'\n\n/** Delete/forget-time referential policy for a `'ref'` edge (#650 Task 5, spec §4) — duplicated\n * (not imported) from `via/lookup/descriptor.ts`'s `OnDelete`: the kernel spine may not\n * statically import `via/**` (Check 14, `via-layering`). Keep the two in sync by hand. */\nexport type OnDelete = 'restrict' | 'cascade' | 'nullify'\n\n/** Plain (non-via) field baseline — max-permissive; taint only ever tightens. */\nexport const DEFAULT_POSTURE: ViaPosture =\n { encryptedAtRest: 'envelope', queryable: 'full', exportable: true, forgettable: false }\n\nconst QUERYABLE_RANK: Record<ViaPosture['queryable'], number> = {\n none: 0,\n 'det-exact': 1,\n ordered: 2,\n full: 3,\n}\n\n/** The per-axis \"most restrictive\" fold — pure, exported for direct unit testing. */\nexport function foldPosture(a: ViaPosture, b: ViaPosture): ViaPosture {\n return {\n encryptedAtRest: a.encryptedAtRest === 'sealed' || b.encryptedAtRest === 'sealed' ? 'sealed' : 'envelope',\n queryable: QUERYABLE_RANK[a.queryable] <= QUERYABLE_RANK[b.queryable] ? a.queryable : b.queryable,\n exportable: a.exportable && b.exportable,\n forgettable: a.forgettable || b.forgettable,\n }\n}\n\n/** Security-axes-only fold for a wildcard collection node (#642): sealed-wins encryptedAtRest,\n * AND exportable, OR forgettable — queryable is NOT folded (stays base.queryable; the sealed\n * clamp to 'none' is buildTaintOverlay's job, so inheriting `sealed` never over-restricts a\n * blob-adjacent output to unqueryable). Pure; exported for unit testing. Distinct from\n * {@link foldPosture} (which folds all four axes) — do NOT reuse foldPosture here. */\nexport function foldWildcardSecurity(base: ViaPosture, contributor: ViaPosture): ViaPosture {\n return {\n encryptedAtRest: base.encryptedAtRest === 'sealed' || contributor.encryptedAtRest === 'sealed' ? 'sealed' : 'envelope',\n queryable: base.queryable,\n exportable: base.exportable && contributor.exportable,\n forgettable: base.forgettable || contributor.forgettable,\n }\n}\n\n// the folded formula kinds a '*' source contributes its collection-fold to (ref keeps identity):\ntype FoldedKind = 'derivation' | 'rollup' | 'mv' | 'overlay'\nconst FOLDED_KINDS: ReadonlySet<EdgeKind> = new Set<FoldedKind>(['derivation', 'rollup', 'mv', 'overlay'])\n\n/** Whether `p` is exactly the plain, non-taint baseline (Task 3 — `taintProvenance`). */\nfunction isDefaultPosture(p: ViaPosture): boolean {\n return p.encryptedAtRest === DEFAULT_POSTURE.encryptedAtRest && p.queryable === DEFAULT_POSTURE.queryable &&\n p.exportable === DEFAULT_POSTURE.exportable && p.forgettable === DEFAULT_POSTURE.forgettable\n}\n\n/** One `_out` entry — a `source -> target` derived edge, carrying its OWN registration's\n * `kind` (#678). `kind` must be edge-local, not re-derived from `_in`: `_in` is single-slot\n * per target and can be overwritten by a LATER `registerDerived` call on the SAME target\n * (a dual-role target, e.g. #631's exempt {computed, lookup} field composition) — asking\n * `_in` for \"this target's current kind\" answers the wrong question for a specific edge. */\ninterface OutEdge { readonly target: FieldRef; readonly kind: EdgeKind }\n\n/** One registered `registerDerived` call — a target's whole in-edge set. */\ninterface DerivedEdge {\n readonly target: FieldRef\n readonly sources: readonly FieldRef[]\n readonly kind: EdgeKind\n readonly grain: Grain\n /** `'ref'` edges only — the referencing field's delete/forget policy (#650 Task 5). */\n readonly onDelete?: OnDelete\n /** `'ref'` edges only — the backing dimension's canonical-key FIELD NAME on its own row (matrix\n * tier's `lookup(dim, {key})`; always `'id'` for reserved/static tiers). Defaults to `'id'`\n * when absent — a referencing field always stores this field's VALUE, never the backing row's\n * PUT-id when the two differ (#650 Task 5, mirrors Task 3's membership review fix). */\n readonly keyField?: string\n}\n\nconst SEP = '\\0'\nconst EMPTY_SET: ReadonlySet<string> = new Set()\n\nfunction nodeId(ref: FieldRef): string {\n return `${ref.collection}${SEP}${ref.field}`\n}\n\n/** Inverse of `nodeId`, for building a human-readable cycle path. */\nfunction displayNodeId(id: string): string {\n const sep = id.indexOf(SEP)\n return `${id.slice(0, sep)}.${id.slice(sep + 1)}`\n}\n\n/** Metadata-only dependency graph, ONE per vault. Never stores values or key material. */\nexport class ViaGraph {\n /** Declared source-field postures (registerField), keyed by node id. */\n private readonly _posture = new Map<string, ViaPosture>()\n /** Every derived target's registration, keyed by the target's node id. */\n private readonly _in = new Map<string, DerivedEdge>()\n /** source node id -> derived edges that depend on it (dispatch/erasure), each carrying\n * its own registration's `kind` (#678 — see {@link OutEdge}). */\n private readonly _out = new Map<string, OutEdge[]>()\n /** Memoized effective posture per derived target node id. */\n private readonly _effectiveCache = new Map<string, ViaPosture>()\n /** Memoized whole-collection security-axes fold for `'*'` wildcard LEAF nodes (#642),\n * keyed by collection name — see {@link _wildcardContribution}. Cleared alongside\n * `_effectiveCache` on every `registerField`/`registerDerived` (a later-registered\n * field must re-fold on the next read — registration ordering is free). */\n private readonly _wildcardCache = new Map<string, ViaPosture>()\n /** Collections with at least one classified field (#638 Task 2 fix wave 2,\n * Finding I1 — the reconcile path's combined-state leak guard memory). */\n private readonly _classifiedCollections = new Set<string>()\n /** Computed field names declared with no `deps` entry, per collection\n * (Finding I1 — such a field registers no edge when no classified field is\n * present yet, so a LATER, separate reconcile call attaching classifiedFields\n * still needs to see it regardless of declaration order). */\n private readonly _depslessComputed = new Map<string, Set<string>>()\n\n /** Declare a source field's posture (money/i18n/classified/plain). Plain fields\n * default to `DEFAULT_POSTURE`; a later declaration for the same node wins-first (idempotent). */\n registerField(collection: string, field: string, posture: ViaPosture): void {\n const id = nodeId({ collection, field })\n if (this._posture.has(id)) return\n this._posture.set(id, posture)\n this._effectiveCache.clear()\n this._wildcardCache.clear()\n }\n\n /** A derived target depends on `sources` (may be cross-collection). `kind`/`grain`\n * drive dispatch + erasure semantics; sources drive taint. Re-registering the same\n * target replaces `_in` but does not prune stale `_out` edges — callers must\n * register each target at most once per graph lifetime. `onDelete`/`keyField` (#650 Task 5)\n * are meaningful only for `kind === 'ref'` edges — {@link referencingEdgesOf} reads them back. */\n registerDerived(target: FieldRef, sources: readonly FieldRef[], kind: EdgeKind, grain: Grain, onDelete?: OnDelete, keyField?: string): void {\n const id = nodeId(target)\n this._in.set(id, {\n target, sources, kind, grain,\n ...(onDelete !== undefined ? { onDelete } : {}),\n ...(keyField !== undefined ? { keyField } : {}),\n })\n for (const source of sources) {\n const sourceId = nodeId(source)\n const outEdge: OutEdge = { target, kind }\n const dependents = this._out.get(sourceId)\n if (dependents) dependents.push(outEdge)\n else this._out.set(sourceId, [outEdge])\n }\n this._effectiveCache.clear()\n this._wildcardCache.clear()\n }\n\n /** Whether `target` already has a registered in-edge — lets a caller skip\n * re-registering the same target (#638 Task 2 fix wave 2, Finding I2i:\n * `registerDerived`'s at-most-once contract must hold across repeated\n * identical `vault.collection()` calls, not just within a single one). */\n hasDerived(target: FieldRef): boolean {\n return this._in.has(nodeId(target))\n }\n\n /** Mark/query a collection as having declared at least one classified field. */\n markClassified(collection: string): void {\n this._classifiedCollections.add(collection)\n }\n\n isClassified(collection: string): boolean {\n return this._classifiedCollections.has(collection)\n }\n\n /** Mark/query a collection's depsless (no declared `deps`) computed\n * field names — see `_depslessComputed`'s doc comment above. */\n markDepslessComputed(collection: string, field: string): void {\n let set = this._depslessComputed.get(collection)\n if (!set) { set = new Set(); this._depslessComputed.set(collection, set) }\n set.add(field)\n }\n\n depslessComputedFields(collection: string): ReadonlySet<string> {\n return this._depslessComputed.get(collection) ?? EMPTY_SET\n }\n\n /** Every field name the graph already has memory of for `collection` — from an\n * EARLIER, separate `vault.collection()` call (registered postures, derived\n * targets, depsless-computed names) — regardless of which via feature declared\n * it. #645 — `via/graph-wiring.ts`'s reconcile-path `knownFields` universe\n * (`collectKnownFieldNames`) is scoped to THIS call's own options only, so a\n * computed field attached in a LATER call whose `deps` correctly names a field\n * declared in an EARLIER call was spuriously refused as \"unknown\"; this method\n * lets that call site union in the graph's cross-call memory. Excludes the `'*'`\n * wildcard target (an overlay/derivation whole-record fold node, never a real\n * record field — see {@link registerDerived}'s doc comment). */\n knownFieldNames(collection: string): ReadonlySet<string> {\n const out = new Set<string>()\n const prefix = `${collection}${SEP}`\n for (const id of this._posture.keys()) {\n if (id.startsWith(prefix)) out.add(id.slice(prefix.length))\n }\n for (const edge of this._in.values()) {\n if (edge.target.collection === collection && edge.target.field !== '*') out.add(edge.target.field)\n }\n const depsless = this._depslessComputed.get(collection)\n if (depsless) for (const field of depsless) out.add(field)\n return out\n }\n\n /** Reject cycles at declare time (vault open). Throws `DerivationCycleError` for a\n * derivation/rollup/computed cycle, `MaterializedViewCycleError` for an MV cycle —\n * same classes + message shape the registries throw today (behavior lock). */\n assertAcyclic(): void {\n const visited = new Set<string>()\n const stack: string[] = []\n\n /** #639 — containment expansion: writing a real field `f` on collection `C` is\n * a write to `C`, so it must ALSO reach every whole-record (`'*'`) dependent of\n * `C` — the missing reachability step that made mutual/rotating rollup cycles\n * invisible (a rollup target is always a real field node and never itself a\n * graph SOURCE, so the old `_out.get(id)`-only walk dead-ended on it).\n *\n * TRAVERSAL-LOCAL ONLY (law, #642): this is a virtual adjacency computed\n * during the DFS walk, reading `_out` only. It must NEVER be materialized via\n * `registerDerived` (no new `(C,f)→(C,'*')` edge) and must NEVER touch `_in` —\n * putting `(C,'*')` into `_in` would flip `_contribution('C\\0*')` from the\n * `_wildcardContribution` fold (`#642`) onto the `_computeEffective` path,\n * bleeding cycle-reachability taint into `foldWildcardSecurity`'s posture\n * fold. Posture folding (`_contribution`/`_computeEffective`/\n * `_wildcardContribution`) never reads `_out`, so an expansion that reads\n * `_out` only is provably unable to perturb it. */\n // #671 item 5 — exclude `kind:'ref'` consuming edges: mutual FK lookups (two\n // collections each referencing the other) are legal and must not be treated as a\n // derivation cycle. Ref edges exist for cascade/rename machinery\n // (`referencingEdgesOf`/delete-time restrict/cascade/nullify), never derivation\n // ordering, so they carry no ordering constraint here. #678 — `kind` is read off\n // THIS `_out` entry (edge-local), NOT re-derefed from `_in`: a dual-role target\n // (e.g. #631's exempt {computed, lookup} composition) can have its `_in` entry's\n // `kind` overwritten by a LATER `registerDerived` call for the SAME target, so\n // asking `_in` \"what kind is `t` registered as NOW\" wrongly excluded a real\n // computed edge from the DFS as if it were a ref edge, hiding a genuine\n // derivation cycle. Asking \"what kind is THIS specific edge\" is correct\n // regardless of what else was later registered for the target.\n const notRefEdge = (entry: OutEdge): boolean => entry.kind !== 'ref'\n const neighboursOf = (id: string): readonly FieldRef[] => {\n const own = (this._out.get(id) ?? []).filter(notRefEdge).map((entry) => entry.target)\n const sep = id.indexOf(SEP)\n if (id.slice(sep + 1) === '*') return own\n const wildcard = (this._out.get(`${id.slice(0, sep)}${SEP}*`) ?? []).filter(notRefEdge).map((entry) => entry.target)\n if (wildcard.length === 0) return own\n return [...own, ...wildcard]\n }\n\n const visit = (id: string): void => {\n const idx = stack.indexOf(id)\n if (idx !== -1) {\n const cycle = stack.slice(idx).concat(id)\n const isMv = cycle.some(cycleId => this._in.get(cycleId)?.kind === 'mv')\n const path = cycle.map(displayNodeId)\n if (isMv) throw new MaterializedViewCycleError(path)\n throw new DerivationCycleError(path)\n }\n if (visited.has(id)) return\n stack.push(id)\n for (const dependent of neighboursOf(id)) visit(nodeId(dependent))\n stack.pop()\n visited.add(id)\n }\n\n for (const id of this._out.keys()) visit(id)\n }\n\n /** A leaf (non-derived) node's own posture contribution: its declared posture,\n * or `DEFAULT_POSTURE` if never declared via `registerField`. */\n private _declaredPosture(id: string): ViaPosture {\n return this._posture.get(id) ?? DEFAULT_POSTURE\n }\n\n /** A node's posture contribution when folded into a dependent: recurse if it is itself\n * derived; else its declared/default posture — UNLESS it is a `'*'` LEAF node consumed\n * by a folded formula kind (#642, `derivation|rollup|mv|overlay`), in which case it\n * contributes its collection's whole-record security fold ({@link _wildcardContribution}).\n * `kind` is the CONSUMING edge's kind, threaded from {@link _computeEffective}. `'ref'`\n * edges (and the provenance-only untyped call, `kind` left `undefined`) keep `'*'` =\n * identity — the phase-D lookup reliance (`via/lookup/registry.ts:392-397`) that a\n * referencing field must not seal just because its dimension collection has a classified\n * column. */\n private _contribution(id: string, kind?: EdgeKind): ViaPosture {\n const edge = this._in.get(id)\n if (edge) return this._computeEffective(id, edge)\n if (kind !== undefined && FOLDED_KINDS.has(kind) && id.endsWith(`${SEP}*`)) {\n return this._wildcardContribution(id.slice(0, -2))\n }\n return this._declaredPosture(id)\n }\n\n /** Lazy fold (#642) of a collection's REGISTERED field postures on the security axes only\n * ({@link foldWildcardSecurity} — sealed-wins encryptedAtRest, AND exportable, OR\n * forgettable; queryable stays at DEFAULT_POSTURE's 'full', never folded), seeded at\n * DEFAULT_POSTURE. This is the collection-level posture a `'*'` LEAF node contributes to a\n * folded-kind formula edge (derivation/rollup/mv/overlay) — see {@link _contribution}. A\n * plain (unregistered) field contributes nothing (the identity), so the fold is strictly\n * more conservative than deps-based taint and never hits the KNOWN-LIMIT wall (it names no\n * fields — seam map §1d). Memoized per collection in `_wildcardCache`. */\n private _wildcardContribution(collection: string): ViaPosture {\n const cached = this._wildcardCache.get(collection)\n if (cached) return cached\n let result = DEFAULT_POSTURE\n const prefix = `${collection}${SEP}`\n for (const [id, posture] of this._posture) {\n if (!id.startsWith(prefix) || id === `${prefix}*`) continue\n result = foldWildcardSecurity(result, posture)\n }\n this._wildcardCache.set(collection, result)\n return result\n }\n\n private _computeEffective(id: string, edge: DerivedEdge): ViaPosture {\n const cached = this._effectiveCache.get(id)\n if (cached) return cached\n let result = DEFAULT_POSTURE\n for (const source of edge.sources) {\n result = foldPosture(result, this._contribution(nodeId(source), edge.kind))\n }\n // #638 Task 7 — a virtual field is computed fresh on every read and never\n // stored, so it is structurally unqueryable regardless of what its\n // sources' fold would otherwise permit (e.g. a money-sourced virtual\n // field must NOT inherit money's 'ordered' queryability — there is no\n // stored/indexed form to query against). Every OTHER axis (exportable/\n // forgettable/encryptedAtRest) still folds normally — the taint rule is\n // identical to a materialized field; only queryability is a fixed,\n // grain-level property, not a source-derived one.\n if (edge.grain === 'virtual' && result.queryable !== 'none') {\n result = { ...result, queryable: 'none' }\n }\n this._effectiveCache.set(id, result)\n return result\n }\n\n /** Strictest source posture on every axis, per §2. `undefined` when `target` has no\n * in-edges (not a derived field). Transitive: folds through chained derivations. */\n effectivePosture(target: FieldRef): ViaPosture | undefined {\n const id = nodeId(target)\n const edge = this._in.get(id)\n if (!edge) return undefined\n return this._computeEffective(id, edge)\n }\n\n /** Per-collection { field → effectivePosture } overlay the pipeline consumes (Task 3). */\n taintedPostures(collection: string): ReadonlyMap<string, ViaPosture> {\n const out = new Map<string, ViaPosture>()\n for (const edge of this._in.values()) {\n if (edge.target.collection !== collection) continue\n out.set(edge.target.field, this._computeEffective(nodeId(edge.target), edge))\n }\n return out\n }\n\n /** Materialized (`grain !== 'virtual'`) derived fields on `collection` whose effective\n * encryptedAtRest resolves to 'sealed' — the taint-seal set (Task 3). #638 Task 7\n * makes the `grain !== 'virtual'` filter meaningful: a `computed(fn, { mode: 'virtual' })`\n * field is never stored (rides the `present` phase, seam map Part 4's money-Formatted/\n * i18n-Label precedent), so it is EXCLUDED here even when its effective `encryptedAtRest`\n * folds to `'sealed'` — there is no envelope slot to seal. It still surfaces in\n * {@link taintedPostures} (query refusal via `postureFor`'s `queryable` clamp above, and\n * export refusal via `exportable`) — only the AT-REST SEALING ACTION is skipped. */\n taintSealedFields(collection: string): ReadonlySet<string> {\n const out = new Set<string>()\n for (const edge of this._in.values()) {\n if (edge.target.collection !== collection || edge.grain === 'virtual') continue\n const posture = this._computeEffective(nodeId(edge.target), edge)\n if (posture.encryptedAtRest === 'sealed') out.add(edge.target.field)\n }\n return out\n }\n\n /** Fields on `collection` whose registered edge is `grain === 'virtual'` (#638 Task 7) —\n * `via/graph-wiring.ts#applyTaintOverlay` intersects this with `exportable === false`\n * postures to know which virtual fields need PRESENT-TIME (not just export-time)\n * redaction, since a virtual field's value is only ever materialized inside `present()`. */\n virtualFields(collection: string): ReadonlySet<string> {\n const out = new Set<string>()\n for (const edge of this._in.values()) {\n if (edge.target.collection === collection && edge.grain === 'virtual') out.add(edge.target.field)\n }\n return out\n }\n\n /** Per-collection { field → immediate source field names that forced its\n * effective posture away from `DEFAULT_POSTURE` } — `describe()`'s\n * provenance (Task 3). Only the DIRECT declared sources are named (not the\n * ultimate origin several hops up a transitive chain); a source absent\n * from the result contributed nothing restrictive. */\n taintProvenance(collection: string): ReadonlyMap<string, readonly string[]> {\n const out = new Map<string, readonly string[]>()\n for (const edge of this._in.values()) {\n if (edge.target.collection !== collection) continue\n const forcedBy = edge.sources\n .filter((source) => !isDefaultPosture(this._contribution(nodeId(source))))\n .map((source) => source.field)\n if (forcedBy.length > 0) out.set(edge.target.field, forcedBy)\n }\n return out\n }\n\n private _targetsDependingOn(collection: string): ReadonlyArray<{ readonly target: FieldRef; readonly kind: EdgeKind; readonly grain: Grain }> {\n const out: Array<{ target: FieldRef; kind: EdgeKind; grain: Grain }> = []\n for (const edge of this._in.values()) {\n if (edge.sources.some(source => source.collection === collection)) {\n out.push({ target: edge.target, kind: edge.kind, grain: edge.grain })\n }\n }\n return out\n }\n\n /** Dispatch (Task 4): every derived target triggered by a write to `collection`. Excludes\n * `'ref'` edges (#650 Task 5 review, folded Minor) — a `'ref'` edge is consulted only by the\n * delete/forget-time restrict/cascade/nullify path ({@link referencingEdgesOf}), never by the\n * sync/cutover/restore dispatch wave (`runGraphDispatchWave`); counting it here defeated that\n * wave's zero-cost early-continue, costing every write to a referenced backing collection an\n * unconditional decrypt + two no-op dispatch passes. {@link derivedArtifactsOf} (erasure\n * fanout) still includes `'ref'` edges — the forget path genuinely needs them. */\n dependentsOf(collection: string): ReadonlyArray<{ readonly target: FieldRef; readonly kind: EdgeKind; readonly grain: Grain }> {\n return this._targetsDependingOn(collection).filter((edge) => edge.kind !== 'ref')\n }\n\n /** Erasure (Task 6): derived artifacts of a forgotten record whose source is `collection`. */\n derivedArtifactsOf(collection: string): ReadonlyArray<{ readonly target: FieldRef; readonly kind: EdgeKind; readonly grain: Grain }> {\n return this._targetsDependingOn(collection)\n }\n\n /** Referencing edges pointing AT a backing dimension (delete/forget-time restrict/cascade/\n * nullify, #650 Task 5) — an O(1) reverse lookup via the existing `_out` map (keyed at the\n * dimension's wildcard `field:'*'` node, the same convention every whole-collection source\n * already uses), NEVER a scan across collections or records. `backing` is the collection name\n * a lookup field's edge was registered against (a reserved dimension's `_dict_<name>`/\n * `_lookup_<name>` collection name, or a matrix dimension's own collection name). */\n referencingEdgesOf(backing: string): ReadonlyArray<{ readonly referencing: FieldRef; readonly onDelete: OnDelete; readonly keyField: string }> {\n const targets = this._out.get(nodeId({ collection: backing, field: '*' }))\n if (!targets) return []\n const out: Array<{ referencing: FieldRef; onDelete: OnDelete; keyField: string }> = []\n for (const entry of targets) {\n // #678 — `kind` is read directly off THIS `_out` entry (edge-local) instead of\n // re-derefing `_in`. This also fixes the symmetric ref-vanishes hazard: under a\n // registration order where a LATER `registerDerived` call for the same target\n // overwrites `_in`'s kind away from `'ref'`, the old `_in`-derefing check would\n // silently drop a genuine referencing edge from cascade/nullify delete machinery\n // even though this specific edge was truly registered as `'ref'`.\n if (entry.kind !== 'ref') continue\n const edge = this._in.get(nodeId(entry.target))\n if (edge?.onDelete !== undefined) {\n out.push({ referencing: entry.target, onDelete: edge.onDelete, keyField: edge.keyField ?? 'id' })\n }\n }\n return out\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -21,13 +21,13 @@ import {
|
|
|
21
21
|
} from "./chunk-GYGLAVCX.js";
|
|
22
22
|
import {
|
|
23
23
|
loadFence
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-6BU3L4UE.js";
|
|
25
25
|
import {
|
|
26
26
|
VectorSet,
|
|
27
27
|
buildPersistedIndexCallbacks,
|
|
28
28
|
encodeVecId,
|
|
29
29
|
syncTierSearch
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-G6S5VVHP.js";
|
|
31
31
|
import {
|
|
32
32
|
SchemaUpdateGate
|
|
33
33
|
} from "./chunk-6LJY7X5A.js";
|
|
@@ -35,12 +35,12 @@ import {
|
|
|
35
35
|
NO_CLASSIFIED,
|
|
36
36
|
guardClassifiedCompat,
|
|
37
37
|
resolveClassifiedFields
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-QULVCV3M.js";
|
|
39
39
|
import {
|
|
40
40
|
NO_TIERS,
|
|
41
41
|
classifySealedShred,
|
|
42
42
|
syncDerivedOutputs
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-6NVPFKN3.js";
|
|
44
44
|
import {
|
|
45
45
|
NO_PORTABILITY
|
|
46
46
|
} from "./chunk-FUHKW252.js";
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
} from "./chunk-DG27IUVI.js";
|
|
51
51
|
import {
|
|
52
52
|
saveSealedSecret
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-XWX7GL56.js";
|
|
54
54
|
import {
|
|
55
55
|
fallbackDerivationName,
|
|
56
56
|
jsonSchemaToFields
|
|
@@ -58,18 +58,18 @@ import {
|
|
|
58
58
|
import {
|
|
59
59
|
derivePersistedSchema,
|
|
60
60
|
isZod4Schema
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-Z45YRGFO.js";
|
|
62
62
|
import {
|
|
63
63
|
loadPersistedSchema
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-CDB2HVQW.js";
|
|
65
65
|
import {
|
|
66
66
|
CustodyApi,
|
|
67
67
|
NO_CUSTODY
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-XMC2ZTRD.js";
|
|
69
69
|
import {
|
|
70
70
|
DEFAULT_POSTURE,
|
|
71
71
|
ViaGraph
|
|
72
|
-
} from "./chunk-
|
|
72
|
+
} from "./chunk-7TSYBD3E.js";
|
|
73
73
|
import {
|
|
74
74
|
buildLookupAltIndex,
|
|
75
75
|
buildLookupSnapshotRows,
|
|
@@ -93,7 +93,7 @@ import {
|
|
|
93
93
|
selfWriteFieldEqual,
|
|
94
94
|
touchFor,
|
|
95
95
|
updateReferencingRecords
|
|
96
|
-
} from "./chunk-
|
|
96
|
+
} from "./chunk-5ZKS6ZE2.js";
|
|
97
97
|
import {
|
|
98
98
|
OverlayedCollection
|
|
99
99
|
} from "./chunk-OF3L2SD6.js";
|
|
@@ -110,7 +110,7 @@ import {
|
|
|
110
110
|
import {
|
|
111
111
|
NO_PERIODS,
|
|
112
112
|
purgeMarkersOn
|
|
113
|
-
} from "./chunk-
|
|
113
|
+
} from "./chunk-MYG6WIRJ.js";
|
|
114
114
|
import {
|
|
115
115
|
PERIODS_COLLECTION,
|
|
116
116
|
PERIOD_ARCHIVES_COLLECTION,
|
|
@@ -135,13 +135,13 @@ import {
|
|
|
135
135
|
InvertedIndex,
|
|
136
136
|
MemoryIndexStore,
|
|
137
137
|
NO_SEARCH
|
|
138
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-3JVXVJ7L.js";
|
|
139
139
|
import {
|
|
140
140
|
NO_SEQUENCE,
|
|
141
141
|
SEQUENCE_COLLECTION,
|
|
142
142
|
compileSequenceFormat,
|
|
143
143
|
resolveSequenceKey
|
|
144
|
-
} from "./chunk-
|
|
144
|
+
} from "./chunk-7MNBICB5.js";
|
|
145
145
|
import {
|
|
146
146
|
Query,
|
|
147
147
|
ScanBuilder
|
|
@@ -151,7 +151,7 @@ import {
|
|
|
151
151
|
NO_BLOBS,
|
|
152
152
|
createExportBlobsHandle,
|
|
153
153
|
runCompaction
|
|
154
|
-
} from "./chunk-
|
|
154
|
+
} from "./chunk-WASHZV34.js";
|
|
155
155
|
import {
|
|
156
156
|
LazyQuery,
|
|
157
157
|
NO_INDEXING,
|
|
@@ -180,7 +180,7 @@ import {
|
|
|
180
180
|
} from "./chunk-PVEWA2DU.js";
|
|
181
181
|
import {
|
|
182
182
|
dictCollectionName
|
|
183
|
-
} from "./chunk-
|
|
183
|
+
} from "./chunk-WFUIE565.js";
|
|
184
184
|
import {
|
|
185
185
|
NO_I18N,
|
|
186
186
|
getAtPath,
|
|
@@ -215,7 +215,7 @@ import {
|
|
|
215
215
|
saveShamirRecoveryEntries,
|
|
216
216
|
updateAuthenticator,
|
|
217
217
|
writeMagicLinkGrant
|
|
218
|
-
} from "./chunk-
|
|
218
|
+
} from "./chunk-O42AUQCP.js";
|
|
219
219
|
import {
|
|
220
220
|
assertKeyringOpenAllowed,
|
|
221
221
|
buildRecipientKeyringFile,
|
|
@@ -230,11 +230,11 @@ import {
|
|
|
230
230
|
listUsers,
|
|
231
231
|
loadKeyring,
|
|
232
232
|
updateKeyringIdentity
|
|
233
|
-
} from "./chunk-
|
|
233
|
+
} from "./chunk-RW3XKAF3.js";
|
|
234
234
|
import {
|
|
235
235
|
persistDirectoryConfig,
|
|
236
236
|
readDirectoryConfig
|
|
237
|
-
} from "./chunk-
|
|
237
|
+
} from "./chunk-5JY5TSVY.js";
|
|
238
238
|
import {
|
|
239
239
|
NO_BROKER,
|
|
240
240
|
buildCredentialBrokerHandle
|
|
@@ -255,7 +255,7 @@ import {
|
|
|
255
255
|
} from "./chunk-3FSX6LDG.js";
|
|
256
256
|
import {
|
|
257
257
|
sha256Hex
|
|
258
|
-
} from "./chunk-
|
|
258
|
+
} from "./chunk-6SAFL5YE.js";
|
|
259
259
|
import {
|
|
260
260
|
NO_FORGET,
|
|
261
261
|
addSubjectRef,
|
|
@@ -264,7 +264,7 @@ import {
|
|
|
264
264
|
readDottedPath,
|
|
265
265
|
rebuildSubjectIndex,
|
|
266
266
|
removeSubjectRef
|
|
267
|
-
} from "./chunk-
|
|
267
|
+
} from "./chunk-WLZ47GSL.js";
|
|
268
268
|
import {
|
|
269
269
|
NO_SEALED_RECORD
|
|
270
270
|
} from "./chunk-FAXZQ5UF.js";
|
|
@@ -278,20 +278,20 @@ import {
|
|
|
278
278
|
queryByDet,
|
|
279
279
|
resolveStableCek,
|
|
280
280
|
validateSchemaInput
|
|
281
|
-
} from "./chunk-
|
|
281
|
+
} from "./chunk-3URQC7EH.js";
|
|
282
282
|
import {
|
|
283
283
|
buildDeleteMarker,
|
|
284
284
|
buildTombstone,
|
|
285
285
|
isDeleteMarker,
|
|
286
286
|
isTombstone
|
|
287
|
-
} from "./chunk-
|
|
287
|
+
} from "./chunk-7H73RIE3.js";
|
|
288
288
|
import {
|
|
289
289
|
encrypt
|
|
290
290
|
} from "./chunk-VCETL77O.js";
|
|
291
291
|
import {
|
|
292
292
|
NOYDB_FORMAT_VERSION,
|
|
293
293
|
SealedHandle
|
|
294
|
-
} from "./chunk-
|
|
294
|
+
} from "./chunk-YPYHVOXP.js";
|
|
295
295
|
import {
|
|
296
296
|
AlreadyElevatedError,
|
|
297
297
|
AttestationError,
|
|
@@ -464,7 +464,7 @@ function validateSecretModeOptions(options) {
|
|
|
464
464
|
}
|
|
465
465
|
async function resolveEffectiveSecret(options, store, vault) {
|
|
466
466
|
if (options.secretMode === "managed") {
|
|
467
|
-
const { resolveManagedSecret } = await import("./managed-secret-
|
|
467
|
+
const { resolveManagedSecret } = await import("./managed-secret-CWQ6PND5.js");
|
|
468
468
|
return resolveManagedSecret(store, vault, options.sealingKey);
|
|
469
469
|
}
|
|
470
470
|
return options.secret;
|
|
@@ -482,7 +482,7 @@ function ownerKeyringOptions(options, secret) {
|
|
|
482
482
|
|
|
483
483
|
// src/port/by/default-provider.ts
|
|
484
484
|
async function createDefaultCoordinationProvider(store) {
|
|
485
|
-
const { StoreCoordinationProvider } = await import("./store-coordination-provider-
|
|
485
|
+
const { StoreCoordinationProvider } = await import("./store-coordination-provider-GFCUOBR6.js");
|
|
486
486
|
return new StoreCoordinationProvider(store);
|
|
487
487
|
}
|
|
488
488
|
|
|
@@ -3404,7 +3404,7 @@ var Collection = class {
|
|
|
3404
3404
|
}
|
|
3405
3405
|
}
|
|
3406
3406
|
if (this.materializedViewSource !== void 0) {
|
|
3407
|
-
const { resolveStaleMVOnRead } = await import("./stale-
|
|
3407
|
+
const { resolveStaleMVOnRead } = await import("./stale-4E3VZXGV.js");
|
|
3408
3408
|
await resolveStaleMVOnRead(this.materializedViewSource, this.name, this.#dispatchCtx({ collection: this.name, id: "resolve-on-read" }));
|
|
3409
3409
|
}
|
|
3410
3410
|
let record;
|
|
@@ -3934,7 +3934,7 @@ var Collection = class {
|
|
|
3934
3934
|
*/
|
|
3935
3935
|
async dispatchMaterializedViews(id, record, wave) {
|
|
3936
3936
|
if (this.materializedViewSource === void 0) return;
|
|
3937
|
-
const { dispatchMaterializedViews } = await import("./dispatch-
|
|
3937
|
+
const { dispatchMaterializedViews } = await import("./dispatch-5DN7ZJGM.js");
|
|
3938
3938
|
return dispatchMaterializedViews(this.#mvDispatchCtx(this.materializedViewSource), id, record, wave);
|
|
3939
3939
|
}
|
|
3940
3940
|
/**
|
|
@@ -4107,7 +4107,7 @@ var Collection = class {
|
|
|
4107
4107
|
* dispatch wave's per-target dedup; `undefined` on the local-write path (byte-identical). */
|
|
4108
4108
|
async dispatchDerivations(id, record, version, wave) {
|
|
4109
4109
|
if (this.derivationSource === void 0) return;
|
|
4110
|
-
const { dispatchDerivations } = await import("./dispatch-
|
|
4110
|
+
const { dispatchDerivations } = await import("./dispatch-MJ6SHB3Y.js");
|
|
4111
4111
|
return dispatchDerivations({
|
|
4112
4112
|
...this.#derivationDeleteCtx(this.derivationSource),
|
|
4113
4113
|
via: this.via,
|
|
@@ -4422,7 +4422,7 @@ var Collection = class {
|
|
|
4422
4422
|
*/
|
|
4423
4423
|
async dispatchArrayDerivationsOnDelete(id, eraseRecordShapeToo = false) {
|
|
4424
4424
|
if (this.derivationSource === void 0) return 0;
|
|
4425
|
-
const { dispatchArrayDerivationsOnDelete } = await import("./dispatch-
|
|
4425
|
+
const { dispatchArrayDerivationsOnDelete } = await import("./dispatch-MJ6SHB3Y.js");
|
|
4426
4426
|
return dispatchArrayDerivationsOnDelete(this.#derivationDeleteCtx(this.derivationSource), id, eraseRecordShapeToo);
|
|
4427
4427
|
}
|
|
4428
4428
|
/**
|
|
@@ -4436,7 +4436,7 @@ var Collection = class {
|
|
|
4436
4436
|
*/
|
|
4437
4437
|
async dispatchMaterializedViewsOnDelete(id) {
|
|
4438
4438
|
if (this.materializedViewSource === void 0) return { deleted: 0, residueUndecodable: [], residueDeclined: [] };
|
|
4439
|
-
const { dispatchMaterializedViewsOnDelete } = await import("./dispatch-
|
|
4439
|
+
const { dispatchMaterializedViewsOnDelete } = await import("./dispatch-5DN7ZJGM.js");
|
|
4440
4440
|
return dispatchMaterializedViewsOnDelete(this.#mvDispatchCtx(this.materializedViewSource), id);
|
|
4441
4441
|
}
|
|
4442
4442
|
/**
|
|
@@ -4456,7 +4456,7 @@ var Collection = class {
|
|
|
4456
4456
|
);
|
|
4457
4457
|
}
|
|
4458
4458
|
if (this.materializedViewSource !== void 0) {
|
|
4459
|
-
const { resolveStaleMVOnRead } = await import("./stale-
|
|
4459
|
+
const { resolveStaleMVOnRead } = await import("./stale-4E3VZXGV.js");
|
|
4460
4460
|
await resolveStaleMVOnRead(this.materializedViewSource, this.name, this.#dispatchCtx({ collection: this.name, id: "resolve-on-read" }));
|
|
4461
4461
|
}
|
|
4462
4462
|
await this.ensureHydrated();
|
|
@@ -5566,14 +5566,14 @@ var Collection = class {
|
|
|
5566
5566
|
/** C-A/R10: persist the classified marker once per classified handle (store I/O in config-drift.ts). */
|
|
5567
5567
|
async _ensureClassifiedMarker() {
|
|
5568
5568
|
if (this._markerPersisted || this.vdigFields === null) return;
|
|
5569
|
-
const { persistClassifiedMarkerForFields } = await import("./classified-marker-
|
|
5569
|
+
const { persistClassifiedMarkerForFields } = await import("./classified-marker-2KJAXRRO.js");
|
|
5570
5570
|
await persistClassifiedMarkerForFields(this.adapter, this.vault, this.name, this.vdigFields, await this.getDEK(this.name));
|
|
5571
5571
|
this._markerPersisted = true;
|
|
5572
5572
|
}
|
|
5573
5573
|
/** C-A/R10 drift signal — the marker's declared digest-only set, memoized to one store read per handle (see config-drift.ts). */
|
|
5574
5574
|
async _classifiedMarkerDigestOnly() {
|
|
5575
5575
|
if (this._markerDigestOnlyCache !== void 0) return this._markerDigestOnlyCache;
|
|
5576
|
-
const { readClassifiedMarkerDigestOnly } = await import("./classified-marker-
|
|
5576
|
+
const { readClassifiedMarkerDigestOnly } = await import("./classified-marker-2KJAXRRO.js");
|
|
5577
5577
|
this._markerDigestOnlyCache = await readClassifiedMarkerDigestOnly(this.adapter, this.vault, this.name, await this.getDEK(this.name));
|
|
5578
5578
|
return this._markerDigestOnlyCache;
|
|
5579
5579
|
}
|
|
@@ -7048,7 +7048,7 @@ var VaultLinks = class {
|
|
|
7048
7048
|
// src/with-shape/links/lazy-handle.ts
|
|
7049
7049
|
function makeLazyLinkSetHandle(d) {
|
|
7050
7050
|
let engine = null;
|
|
7051
|
-
const load = () => engine ??= import("./link-set-
|
|
7051
|
+
const load = () => engine ??= import("./link-set-E5HNY67I.js").then(
|
|
7052
7052
|
({ LinkSet }) => new LinkSet(d.adapter, d.vault, d.name, d.spec, d.encrypted, d.getDEK, d.actor, d.emitter, d.endpointExists)
|
|
7053
7053
|
);
|
|
7054
7054
|
return {
|
|
@@ -7695,7 +7695,7 @@ function declareSatellite(ctx, collectionName, options, existingRegistry) {
|
|
|
7695
7695
|
ctx.forEachSyncEngine((e) => e.remirrorPairResolvers([spec.base, spec.satellite]));
|
|
7696
7696
|
const registry = reg;
|
|
7697
7697
|
const baseSchema = ctx.getBaseSchema(spec.base);
|
|
7698
|
-
void import("./post-register-
|
|
7698
|
+
void import("./post-register-2XSSMGEQ.js").then((m) => m.postRegister(ctx.adapter, ctx.vaultName, spec, ctx.getDEK, baseSchema, registry)).catch(() => {
|
|
7699
7699
|
});
|
|
7700
7700
|
return reg;
|
|
7701
7701
|
}
|
|
@@ -8327,7 +8327,7 @@ var Vault = class {
|
|
|
8327
8327
|
* envelopes, subject to the `view-team-profiles` policy gate.
|
|
8328
8328
|
* - Reactive: `subscribe(id, cb)`, `live(id)` — fire on local writes.
|
|
8329
8329
|
*
|
|
8330
|
-
* @see
|
|
8330
|
+
* @see design-history/2026-05-05-user-envelope-design.md
|
|
8331
8331
|
*/
|
|
8332
8332
|
user;
|
|
8333
8333
|
/**
|
|
@@ -8339,7 +8339,7 @@ var Vault = class {
|
|
|
8339
8339
|
* - `liberate(opts)` — custodian-only: the audited claim of ownership over a
|
|
8340
8340
|
* sealed-owner (Deed) vault (mints a DISTINCT new owner; ledger-audited).
|
|
8341
8341
|
*
|
|
8342
|
-
* @see
|
|
8342
|
+
* @see design-history/2026-06-17-fr6-deed-custodian-liberate-design.md
|
|
8343
8343
|
*/
|
|
8344
8344
|
custody;
|
|
8345
8345
|
/** Re-derives an UnlockedKeyring from the adapter using the active user's secret; called by
|
|
@@ -8678,7 +8678,7 @@ var Vault = class {
|
|
|
8678
8678
|
const strategies = options.schemaUpdate ?? [];
|
|
8679
8679
|
const work = (async () => {
|
|
8680
8680
|
const dek = await this.getDEK(collectionName);
|
|
8681
|
-
const { persistSchemaIfNeeded } = await import("./register-
|
|
8681
|
+
const { persistSchemaIfNeeded } = await import("./register-4EFJCVYD.js");
|
|
8682
8682
|
const result = await persistSchemaIfNeeded({
|
|
8683
8683
|
store: this.adapter,
|
|
8684
8684
|
vault: this.name,
|
|
@@ -8828,7 +8828,7 @@ var Vault = class {
|
|
|
8828
8828
|
const work = (async () => {
|
|
8829
8829
|
try {
|
|
8830
8830
|
const dek = await this.getDEK(collectionName);
|
|
8831
|
-
await (await import("./register-
|
|
8831
|
+
await (await import("./register-4EFJCVYD.js")).persistSchemaIfNeeded({
|
|
8832
8832
|
store: this.adapter,
|
|
8833
8833
|
vault: this.name,
|
|
8834
8834
|
collectionName,
|
|
@@ -9504,7 +9504,7 @@ var Vault = class {
|
|
|
9504
9504
|
*/
|
|
9505
9505
|
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
|
|
9506
9506
|
async _loadPodSigner() {
|
|
9507
|
-
const { loadSigner } = await import("./signer-
|
|
9507
|
+
const { loadSigner } = await import("./signer-TA55QB6R.js");
|
|
9508
9508
|
return loadSigner(this.adapter, this.name, this.getDEK);
|
|
9509
9509
|
}
|
|
9510
9510
|
async writeExportAudit(entry) {
|
|
@@ -10015,7 +10015,7 @@ var Vault = class {
|
|
|
10015
10015
|
async _initDerivations(handles) {
|
|
10016
10016
|
if (handles.length === 0) return;
|
|
10017
10017
|
const [{ DerivationRegistry }, { ReadOnlyVaultFacade }] = await Promise.all([
|
|
10018
|
-
import("./registry-
|
|
10018
|
+
import("./registry-4SDHHOJ7.js"),
|
|
10019
10019
|
import("./read-only-facade-CHCKSEPD.js")
|
|
10020
10020
|
]);
|
|
10021
10021
|
const registry = new DerivationRegistry();
|
|
@@ -10047,7 +10047,7 @@ var Vault = class {
|
|
|
10047
10047
|
*/
|
|
10048
10048
|
async _initMaterializedViews(handles) {
|
|
10049
10049
|
if (handles.length === 0) return;
|
|
10050
|
-
const { MaterializedViewRegistry } = await import("./registry-
|
|
10050
|
+
const { MaterializedViewRegistry } = await import("./registry-OYTFGWVK.js");
|
|
10051
10051
|
const registry = new MaterializedViewRegistry();
|
|
10052
10052
|
this.materializedViewRegistry = registry;
|
|
10053
10053
|
const db = this;
|
|
@@ -10134,14 +10134,14 @@ var Vault = class {
|
|
|
10134
10134
|
if (!reg) {
|
|
10135
10135
|
throw new Error(`refreshView: no MV registered with name "${name}"`);
|
|
10136
10136
|
}
|
|
10137
|
-
const { MaterializedViewExecutor } = await import("./executor-
|
|
10137
|
+
const { MaterializedViewExecutor } = await import("./executor-TZNM4GCW.js");
|
|
10138
10138
|
const result = await MaterializedViewExecutor.refresh(reg, {
|
|
10139
10139
|
getCollection: (n) => this.collection(n),
|
|
10140
10140
|
getActiveTxContext: () => this.noydb._activeTxContextOrNull,
|
|
10141
10141
|
getQueryContext: () => this,
|
|
10142
10142
|
dispatchCtx: this._dispatchCtx({ collection: name, id: "refreshView" })
|
|
10143
10143
|
});
|
|
10144
|
-
const { clearMVStaleFully } = await import("./stale-
|
|
10144
|
+
const { clearMVStaleFully } = await import("./stale-4E3VZXGV.js");
|
|
10145
10145
|
await clearMVStaleFully(this.adapter, this.name, registry, name);
|
|
10146
10146
|
return result;
|
|
10147
10147
|
}
|
|
@@ -10181,7 +10181,7 @@ var Vault = class {
|
|
|
10181
10181
|
if (!outSpec) continue;
|
|
10182
10182
|
const outputColl = this.collection(outSpec.collection);
|
|
10183
10183
|
if (out.kind === "array") {
|
|
10184
|
-
const { loadFanoutSidecar, saveFanoutSidecar } = await import("./fanout-sidecar-
|
|
10184
|
+
const { loadFanoutSidecar, saveFanoutSidecar } = await import("./fanout-sidecar-NNAJQXMX.js");
|
|
10185
10185
|
const prior = await loadFanoutSidecar(this.adapter, this.name, spec.source, id, key, this.getDEK, this.encrypted);
|
|
10186
10186
|
const prevKeys = new Set(prior?.keys ?? []);
|
|
10187
10187
|
const newKeysList = out.entries.map((e) => e.key);
|
|
@@ -10408,7 +10408,7 @@ var Vault = class {
|
|
|
10408
10408
|
* collection.
|
|
10409
10409
|
*/
|
|
10410
10410
|
async delegate(opts) {
|
|
10411
|
-
const { issueDelegation, DELEGATIONS_COLLECTION } = await import("./delegation-
|
|
10411
|
+
const { issueDelegation, DELEGATIONS_COLLECTION } = await import("./delegation-MO7YZYJS.js");
|
|
10412
10412
|
if (!this.keyring.kek) {
|
|
10413
10413
|
throw new ValidationError(
|
|
10414
10414
|
"issueDelegation: keyring.kek is null \u2014 issuing a delegation requires a tier-1 unlock. Re-authenticate at tier 1 (secret) first."
|
|
@@ -10430,7 +10430,7 @@ var Vault = class {
|
|
|
10430
10430
|
* if the id does not exist.
|
|
10431
10431
|
*/
|
|
10432
10432
|
async revokeDelegation(id) {
|
|
10433
|
-
const { revokeDelegation, DELEGATIONS_COLLECTION } = await import("./delegation-
|
|
10433
|
+
const { revokeDelegation, DELEGATIONS_COLLECTION } = await import("./delegation-MO7YZYJS.js");
|
|
10434
10434
|
await revokeDelegation(this.adapter, this.name, id);
|
|
10435
10435
|
void DELEGATIONS_COLLECTION;
|
|
10436
10436
|
}
|
|
@@ -10675,10 +10675,10 @@ var Vault = class {
|
|
|
10675
10675
|
* - `sampled`: inferred from decrypted records (deferred to a follow-up)
|
|
10676
10676
|
* - `unknown`: no schema info available
|
|
10677
10677
|
*
|
|
10678
|
-
* @see
|
|
10678
|
+
* @see design-history/2026-05-22-schema-dump-design.md
|
|
10679
10679
|
*/
|
|
10680
10680
|
async dumpSchema(opts = {}) {
|
|
10681
|
-
const { dumpVaultSchema } = await import("./walk-
|
|
10681
|
+
const { dumpVaultSchema } = await import("./walk-3ZECBFDA.js");
|
|
10682
10682
|
return dumpVaultSchema(this, opts);
|
|
10683
10683
|
}
|
|
10684
10684
|
/**
|
|
@@ -10774,7 +10774,7 @@ var Vault = class {
|
|
|
10774
10774
|
* separate vault instances now.
|
|
10775
10775
|
*/
|
|
10776
10776
|
async getBundleHandle() {
|
|
10777
|
-
const { buildBundleHandle } = await import("./bundle-handle-
|
|
10777
|
+
const { buildBundleHandle } = await import("./bundle-handle-GFNHT52M.js");
|
|
10778
10778
|
return buildBundleHandle(this.adapter, this.name);
|
|
10779
10779
|
}
|
|
10780
10780
|
/**
|
|
@@ -10806,7 +10806,7 @@ var Vault = class {
|
|
|
10806
10806
|
* both modes round-trip cleanly.
|
|
10807
10807
|
*/
|
|
10808
10808
|
async dump() {
|
|
10809
|
-
const { dumpVault } = await import("./backup-
|
|
10809
|
+
const { dumpVault } = await import("./backup-KULFZ2T4.js");
|
|
10810
10810
|
return dumpVault(this.backupContext());
|
|
10811
10811
|
}
|
|
10812
10812
|
/**
|
|
@@ -10858,7 +10858,7 @@ var Vault = class {
|
|
|
10858
10858
|
* — there's no chain to verify against.
|
|
10859
10859
|
*/
|
|
10860
10860
|
async load(backupJson) {
|
|
10861
|
-
const { loadVault } = await import("./backup-
|
|
10861
|
+
const { loadVault } = await import("./backup-KULFZ2T4.js");
|
|
10862
10862
|
return loadVault(this.backupContext(), backupJson);
|
|
10863
10863
|
}
|
|
10864
10864
|
/**
|
|
@@ -10890,7 +10890,7 @@ var Vault = class {
|
|
|
10890
10890
|
* way to detect tampering of an in-place vault.
|
|
10891
10891
|
*/
|
|
10892
10892
|
async verifyBackupIntegrity() {
|
|
10893
|
-
const { verifyBackupIntegrity } = await import("./backup-
|
|
10893
|
+
const { verifyBackupIntegrity } = await import("./backup-KULFZ2T4.js");
|
|
10894
10894
|
return verifyBackupIntegrity(this.backupContext());
|
|
10895
10895
|
}
|
|
10896
10896
|
/**
|
|
@@ -11108,7 +11108,7 @@ var Vault = class {
|
|
|
11108
11108
|
* is the live validator object, not a serialization of it).
|
|
11109
11109
|
*/
|
|
11110
11110
|
async exportJSON(opts = {}) {
|
|
11111
|
-
const { exportVaultJSON } = await import("./backup-
|
|
11111
|
+
const { exportVaultJSON } = await import("./backup-KULFZ2T4.js");
|
|
11112
11112
|
return exportVaultJSON(this.backupContext(), opts);
|
|
11113
11113
|
}
|
|
11114
11114
|
};
|
|
@@ -14328,7 +14328,7 @@ async function createNoydb(options) {
|
|
|
14328
14328
|
if (!options.store) options = { ...options, store: memoryStore() };
|
|
14329
14329
|
validateSecretModeOptions(options);
|
|
14330
14330
|
if (!options.coordinationStrategy) options = { ...options, coordinationStrategy: await createDefaultCoordinationProvider(options.store) };
|
|
14331
|
-
if (!options.userApiFactory) options = { ...options, userApiFactory: (await import("./api-
|
|
14331
|
+
if (!options.userApiFactory) options = { ...options, userApiFactory: (await import("./api-RXUMEKT3.js")).createUserApi };
|
|
14332
14332
|
if (!options.policyFactory) {
|
|
14333
14333
|
const policyModule = await import("./policy/index.js");
|
|
14334
14334
|
options = { ...options, policyFactory: policyModule.createNoydbPolicy, policyCheckGateFn: policyModule.checkGate };
|
|
@@ -14363,4 +14363,4 @@ export {
|
|
|
14363
14363
|
Noydb,
|
|
14364
14364
|
createNoydb
|
|
14365
14365
|
};
|
|
14366
|
-
//# sourceMappingURL=chunk-
|
|
14366
|
+
//# sourceMappingURL=chunk-7V2OGKES.js.map
|