@noy-db/hub 0.2.0-pre.9 → 0.3.0-pre.2
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 +129 -3
- package/dist/adapter/index.d.ts +5 -0
- package/dist/adapter/index.js +15 -0
- package/dist/aggregate/index.d.ts +6 -2
- package/dist/aggregate/index.js +24 -16
- package/dist/aggregate/index.js.map +1 -1
- package/dist/api-RW3KP7WU.js +14 -0
- package/dist/as/index.d.ts +7 -0
- package/dist/as/index.js +24 -0
- package/dist/at/index.d.ts +5 -0
- package/dist/at/index.js +1 -0
- package/dist/attestation/index.d.ts +15 -47
- package/dist/attestation/index.js +54 -10
- package/dist/attestation/index.js.map +1 -1
- package/dist/backup-KMJQ66MF.js +219 -0
- package/dist/backup-KMJQ66MF.js.map +1 -0
- package/dist/blobs/index.d.ts +6 -8
- package/dist/blobs/index.js +19 -12
- package/dist/blobs/index.js.map +1 -1
- package/dist/bundle/index.d.ts +16 -70
- package/dist/bundle/index.js +39 -476
- package/dist/bundle/index.js.map +1 -1
- package/dist/{ulid-CJ8RzRrm.d.ts → bundle-PwBGkhpe.d.ts} +31 -86
- package/dist/by/index.d.ts +1 -0
- package/dist/by/index.js +11 -0
- package/dist/cargo/index.d.ts +9 -0
- package/dist/cargo/index.js +89 -0
- package/dist/chunk-26LGBE4T.js +42 -0
- package/dist/chunk-26LGBE4T.js.map +1 -0
- package/dist/{chunk-K3DK3NU5.js → chunk-3YFXJ3ZP.js} +20 -5
- package/dist/chunk-3YFXJ3ZP.js.map +1 -0
- package/dist/chunk-4Q6HSHHL.js +90 -0
- package/dist/chunk-4Q6HSHHL.js.map +1 -0
- package/dist/chunk-5LUY7UTV.js +380 -0
- package/dist/chunk-5LUY7UTV.js.map +1 -0
- package/dist/chunk-5N6CZTCY.js +367 -0
- package/dist/chunk-5N6CZTCY.js.map +1 -0
- package/dist/chunk-5O3AOPDT.js +992 -0
- package/dist/chunk-5O3AOPDT.js.map +1 -0
- package/dist/chunk-5R3ERCDH.js +239 -0
- package/dist/chunk-5R3ERCDH.js.map +1 -0
- package/dist/chunk-5TDJ56JE.js +32 -0
- package/dist/chunk-5TDJ56JE.js.map +1 -0
- package/dist/{chunk-T7JEBOGN.js → chunk-62QYRORB.js} +18 -11
- package/dist/chunk-62QYRORB.js.map +1 -0
- package/dist/{chunk-J66GRPNH.js → chunk-6S7T6WC4.js} +2 -2
- package/dist/chunk-6S7T6WC4.js.map +1 -0
- package/dist/chunk-76722EBH.js +451 -0
- package/dist/chunk-76722EBH.js.map +1 -0
- package/dist/{chunk-Z6FNBOTC.js → chunk-AIWULCUO.js} +13 -17
- package/dist/chunk-AIWULCUO.js.map +1 -0
- package/dist/{chunk-O3VZPBZG.js → chunk-AQTBSL7R.js} +47 -11
- package/dist/chunk-AQTBSL7R.js.map +1 -0
- package/dist/chunk-AURFOK3D.js +35 -0
- package/dist/chunk-AURFOK3D.js.map +1 -0
- package/dist/{chunk-53XBRIRT.js → chunk-AXRXJTE2.js} +9 -9
- package/dist/chunk-AXRXJTE2.js.map +1 -0
- package/dist/chunk-AZAOEIKW.js +155 -0
- package/dist/chunk-AZAOEIKW.js.map +1 -0
- package/dist/{chunk-HNRHLRDC.js → chunk-BG3SPSR4.js} +3 -3
- package/dist/chunk-BG3SPSR4.js.map +1 -0
- package/dist/chunk-BGIZAFY7.js +1 -0
- package/dist/chunk-CHFZDSE4.js +1 -0
- package/dist/{chunk-DJHHA6XH.js → chunk-CMGR4ZEW.js} +50 -20
- package/dist/chunk-CMGR4ZEW.js.map +1 -0
- package/dist/chunk-CWPPNPOH.js +23 -0
- package/dist/chunk-CWPPNPOH.js.map +1 -0
- package/dist/{chunk-QODLLGQ7.js → chunk-DFEMTNPJ.js} +371 -38
- package/dist/chunk-DFEMTNPJ.js.map +1 -0
- package/dist/{chunk-ZYWZWG6G.js → chunk-DGDI2D4M.js} +10 -10
- package/dist/chunk-DGDI2D4M.js.map +1 -0
- package/dist/{chunk-SYMWGEET.js → chunk-EIZUR2XW.js} +3 -3
- package/dist/chunk-EIZUR2XW.js.map +1 -0
- package/dist/{chunk-BVRYKATC.js → chunk-FISN7WE4.js} +36 -33
- package/dist/chunk-FISN7WE4.js.map +1 -0
- package/dist/chunk-GHVIKOHT.js +1 -0
- package/dist/chunk-GYGWYIOZ.js +200 -0
- package/dist/chunk-GYGWYIOZ.js.map +1 -0
- package/dist/chunk-HCIPRAGS.js +45 -0
- package/dist/chunk-HCIPRAGS.js.map +1 -0
- package/dist/{chunk-PX35GA7L.js → chunk-I2NOIW44.js} +10 -10
- package/dist/chunk-I2NOIW44.js.map +1 -0
- package/dist/{chunk-OIF6LZUR.js → chunk-I3TIKTJO.js} +3 -3
- package/dist/chunk-I3TIKTJO.js.map +1 -0
- package/dist/chunk-I7FD46FF.js +9 -0
- package/dist/chunk-I7FD46FF.js.map +1 -0
- package/dist/chunk-IAGBDSCS.js +40 -0
- package/dist/chunk-IAGBDSCS.js.map +1 -0
- package/dist/{chunk-JWRVQKRZ.js → chunk-IELYAOGG.js} +6 -18
- package/dist/chunk-IELYAOGG.js.map +1 -0
- package/dist/chunk-IGUYVGGI.js +205 -0
- package/dist/chunk-IGUYVGGI.js.map +1 -0
- package/dist/{chunk-U26HQ6KJ.js → chunk-IO6GRPT6.js} +4 -4
- package/dist/chunk-IO6GRPT6.js.map +1 -0
- package/dist/chunk-IPB7FTQX.js +273 -0
- package/dist/chunk-IPB7FTQX.js.map +1 -0
- package/dist/chunk-ITNUCOXM.js +148 -0
- package/dist/chunk-ITNUCOXM.js.map +1 -0
- package/dist/{chunk-WPLVTJ5D.js → chunk-IUEN57TV.js} +10 -10
- package/dist/chunk-IUEN57TV.js.map +1 -0
- package/dist/{chunk-DL3HWOQ5.js → chunk-JNUWZ6D3.js} +9 -9
- package/dist/chunk-JNUWZ6D3.js.map +1 -0
- package/dist/chunk-K2WCO3NX.js +1 -0
- package/dist/chunk-KVOXU4T5.js +30 -0
- package/dist/chunk-KVOXU4T5.js.map +1 -0
- package/dist/chunk-KXGNJJXB.js +135 -0
- package/dist/chunk-KXGNJJXB.js.map +1 -0
- package/dist/chunk-LB7FD65R.js +163 -0
- package/dist/chunk-LB7FD65R.js.map +1 -0
- package/dist/{chunk-22DWZL57.js → chunk-LFLXAY2W.js} +43 -218
- package/dist/chunk-LFLXAY2W.js.map +1 -0
- package/dist/chunk-LMTH2RM6.js +129 -0
- package/dist/chunk-LMTH2RM6.js.map +1 -0
- package/dist/{aggregate/index.cjs → chunk-LV7M27WM.js} +390 -219
- package/dist/chunk-LV7M27WM.js.map +1 -0
- package/dist/{chunk-PE2FR4J3.js → chunk-LXQT4WMP.js} +16 -18
- package/dist/chunk-LXQT4WMP.js.map +1 -0
- package/dist/chunk-M2YKN37S.js +524 -0
- package/dist/chunk-M2YKN37S.js.map +1 -0
- package/dist/chunk-M6OST55S.js +14 -0
- package/dist/chunk-M6OST55S.js.map +1 -0
- package/dist/{chunk-F3GDRNUT.js → chunk-MD3Y6J3L.js} +35 -69
- package/dist/chunk-MD3Y6J3L.js.map +1 -0
- package/dist/{chunk-XJFLDA7A.js → chunk-MTMJVJ5W.js} +8 -7
- package/dist/chunk-MTMJVJ5W.js.map +1 -0
- package/dist/{chunk-DFMLEQZB.js → chunk-NF5JWERG.js} +5 -10
- package/dist/chunk-NF5JWERG.js.map +1 -0
- package/dist/{chunk-DO7C2TOG.js → chunk-PKHL44ER.js} +3 -3
- package/dist/{chunk-DO7C2TOG.js.map → chunk-PKHL44ER.js.map} +1 -1
- package/dist/{chunk-6CME4UEK.js → chunk-PSHOXR6C.js} +7008 -4827
- package/dist/chunk-PSHOXR6C.js.map +1 -0
- package/dist/chunk-PSMV73A5.js +117 -0
- package/dist/chunk-PSMV73A5.js.map +1 -0
- package/dist/chunk-PY4KJPYU.js +9 -0
- package/dist/chunk-PY4KJPYU.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/{chunk-DE6GKS6G.js → chunk-Q7SS3IME.js} +50 -9
- package/dist/chunk-Q7SS3IME.js.map +1 -0
- package/dist/chunk-QHJW5EXU.js +54 -0
- package/dist/chunk-QHJW5EXU.js.map +1 -0
- package/dist/chunk-QZISFCVG.js +233 -0
- package/dist/chunk-QZISFCVG.js.map +1 -0
- package/dist/{chunk-NONAAENK.js → chunk-RUEKROOS.js} +11 -4
- package/dist/chunk-RUEKROOS.js.map +1 -0
- package/dist/chunk-RUIMKQTA.js +23 -0
- package/dist/chunk-RUIMKQTA.js.map +1 -0
- package/dist/{chunk-TFBP23BX.js → chunk-SKF73JOP.js} +66 -7
- package/dist/chunk-SKF73JOP.js.map +1 -0
- package/dist/chunk-SM3AVUHC.js +42 -0
- package/dist/chunk-SM3AVUHC.js.map +1 -0
- package/dist/{chunk-ML236QKC.js → chunk-SMXWYP24.js} +5 -5
- package/dist/chunk-SMXWYP24.js.map +1 -0
- package/dist/chunk-SRB2XEWB.js +148 -0
- package/dist/chunk-SRB2XEWB.js.map +1 -0
- package/dist/chunk-SVLR4POP.js +64 -0
- package/dist/chunk-SVLR4POP.js.map +1 -0
- package/dist/chunk-TA66UMI4.js +123 -0
- package/dist/chunk-TA66UMI4.js.map +1 -0
- package/dist/chunk-TEILUWOI.js +664 -0
- package/dist/chunk-TEILUWOI.js.map +1 -0
- package/dist/chunk-TJYQIGAP.js +82 -0
- package/dist/chunk-TJYQIGAP.js.map +1 -0
- package/dist/{chunk-H2X3ISXG.js → chunk-UAG5KWVA.js} +7 -7
- package/dist/chunk-UAG5KWVA.js.map +1 -0
- package/dist/chunk-UDRIWL7A.js +382 -0
- package/dist/chunk-UDRIWL7A.js.map +1 -0
- package/dist/{chunk-2GLDA55J.js → chunk-UIU2THRG.js} +498 -133
- package/dist/chunk-UIU2THRG.js.map +1 -0
- package/dist/{chunk-3YPCK6JX.js → chunk-UPJNJGGA.js} +165 -423
- package/dist/chunk-UPJNJGGA.js.map +1 -0
- package/dist/chunk-UV5MFVO3.js +21 -0
- package/dist/chunk-UV5MFVO3.js.map +1 -0
- package/dist/{chunk-2WUSG3IT.js → chunk-V7RWQRG7.js} +5 -5
- package/dist/chunk-V7RWQRG7.js.map +1 -0
- package/dist/{chunk-VTKGMEPP.js → chunk-VCTFO5CO.js} +13 -3
- package/dist/chunk-VCTFO5CO.js.map +1 -0
- package/dist/{chunk-5T22KDPN.js → chunk-VFQGRQIH.js} +8 -8
- package/dist/chunk-VFQGRQIH.js.map +1 -0
- package/dist/{chunk-2QR2PQTT.js → chunk-VQNJ7UZL.js} +5 -3
- package/dist/chunk-VQNJ7UZL.js.map +1 -0
- package/dist/{chunk-DONMZAD2.js → chunk-WWGT2MDV.js} +43 -165
- package/dist/chunk-WWGT2MDV.js.map +1 -0
- package/dist/{chunk-EMIGCR7X.js → chunk-WXSYDNBT.js} +2 -2
- package/dist/chunk-WXSYDNBT.js.map +1 -0
- package/dist/chunk-WYSO2NIH.js +30 -0
- package/dist/chunk-WYSO2NIH.js.map +1 -0
- package/dist/chunk-XXYIOFUB.js +164 -0
- package/dist/chunk-XXYIOFUB.js.map +1 -0
- package/dist/{chunk-3BFJOWSU.js → chunk-Y22T3KQE.js} +35 -7
- package/dist/chunk-Y22T3KQE.js.map +1 -0
- package/dist/{chunk-A3JMGXPG.js → chunk-YMUGBZN2.js} +2 -2
- package/dist/chunk-YMUGBZN2.js.map +1 -0
- package/dist/{chunk-I5FOWO4J.js → chunk-ZCGAHGUS.js} +52 -73
- package/dist/chunk-ZCGAHGUS.js.map +1 -0
- package/dist/{chunk-FZU343FL.js → chunk-ZJADGNYF.js} +2 -2
- package/dist/chunk-ZJADGNYF.js.map +1 -0
- package/dist/{chunk-B6PB7JLN.js → chunk-ZYUC53LT.js} +427 -6
- package/dist/chunk-ZYUC53LT.js.map +1 -0
- package/dist/collection-facade-GQAOGJP2.js +33 -0
- package/dist/consent/index.d.ts +5 -7
- package/dist/consent/index.js +7 -5
- package/dist/consent/index.js.map +1 -1
- package/dist/crdt/index.d.ts +6 -2
- package/dist/crdt/index.js +3 -2
- package/dist/crdt/index.js.map +1 -1
- package/dist/decrypt-partition-IHtxEnTi.d.ts +21 -0
- package/dist/delegation-UL5HKLER.js +19 -0
- package/dist/derivations/index.d.ts +7 -9
- package/dist/derivations/index.js +11 -6
- package/dist/describe/index.d.ts +1 -0
- package/dist/describe/index.js +1 -0
- package/dist/describe-Ccd1hS7a.d.ts +143 -0
- package/dist/{dev-unlock-B4kDxep_.d.ts → dev-unlock-h0K-UZTk.d.ts} +1 -1
- package/dist/discriminant-BN9REW3o.d.ts +60 -0
- package/dist/enclave-UL5LW66V.js +88 -0
- package/dist/executor-2FWQRLMG.js +15 -0
- package/dist/executor-QZ7BXICW.js +9 -0
- package/dist/executor-Z5ZLJVTV.js +9 -0
- package/dist/export-accessible-KRV5W4GH.js +17 -0
- package/dist/extract-partition-GLKBOXFQ.js +30 -0
- package/dist/{fanout-sidecar-OKPMMPLG.js → fanout-sidecar-GF3DJ6KR.js} +34 -14
- package/dist/fanout-sidecar-GF3DJ6KR.js.map +1 -0
- package/dist/forget/index.d.ts +36 -0
- package/dist/forget/index.js +19 -0
- package/dist/forget/index.js.map +1 -0
- package/dist/guards/index.d.ts +13 -9
- package/dist/guards/index.js +12 -5
- package/dist/{hash-DdpVypUp.d.cts → hash-CdSr06sm.d.ts} +5 -1
- package/dist/history/index.d.ts +6 -8
- package/dist/history/index.js +19 -12
- package/dist/history/index.js.map +1 -1
- package/dist/i18n/index.d.ts +5 -7
- package/dist/i18n/index.js +104 -15
- package/dist/i18n/index.js.map +1 -1
- package/dist/in/index.d.ts +5 -0
- package/dist/in/index.js +1 -0
- package/dist/in/index.js.map +1 -0
- package/dist/index-B9QdHytu.d.ts +123 -0
- package/dist/index-CGLLRtFc.d.ts +123 -0
- package/dist/{types-Df28QFKb.d.ts → index-_6At2_9_.d.ts} +16270 -8358
- package/dist/index.d.ts +1088 -450
- package/dist/index.js +1165 -293
- package/dist/index.js.map +1 -1
- package/dist/indexing/index.d.ts +6 -3
- package/dist/indexing/index.js +6 -5
- package/dist/indexing/index.js.map +1 -1
- package/dist/issue-Y6UVIR43.js +13 -0
- package/dist/issue-Y6UVIR43.js.map +1 -0
- package/dist/kernel/index.d.ts +32 -0
- package/dist/kernel/index.js +53 -0
- package/dist/kernel/index.js.map +1 -0
- package/dist/{ledger-TMRZYNVJ.js → ledger-RYI35CDS.js} +12 -9
- package/dist/ledger-RYI35CDS.js.map +1 -0
- package/dist/liberate-CRPZEV7O.js +18 -0
- package/dist/liberate-CRPZEV7O.js.map +1 -0
- package/dist/materialized-views/index.d.ts +6 -19
- package/dist/materialized-views/index.js +16 -12
- package/dist/mime-magic-B4RoFj3B.d.ts +103 -0
- package/dist/noydb-LDEBLNHY.js +50 -0
- package/dist/noydb-LDEBLNHY.js.map +1 -0
- package/dist/on/index.d.ts +5 -0
- package/dist/on/index.js +11 -0
- package/dist/on/index.js.map +1 -0
- package/dist/overlay-views/index.d.ts +27 -11
- package/dist/overlay-views/index.js +7 -6
- package/dist/periods/index.d.ts +5 -7
- package/dist/periods/index.js +13 -9
- package/dist/pod/index.d.ts +63 -0
- package/dist/pod/index.js +61 -0
- package/dist/pod/index.js.map +1 -0
- package/dist/policy-IXK4FVXP.js +41 -0
- package/dist/policy-IXK4FVXP.js.map +1 -0
- package/dist/portability/index.d.ts +20 -0
- package/dist/portability/index.js +43 -0
- package/dist/portability/index.js.map +1 -0
- package/dist/{public-envelope-BW6OXORV.js → public-envelope-JHDQCPSX.js} +6 -5
- package/dist/public-envelope-JHDQCPSX.js.map +1 -0
- package/dist/query/index.d.ts +5 -3
- package/dist/query/index.js +21 -13
- package/dist/read-only-facade-5ADRJVTM.js +8 -0
- package/dist/read-only-facade-5ADRJVTM.js.map +1 -0
- package/dist/registry-45RJNWGU.js +9 -0
- package/dist/registry-45RJNWGU.js.map +1 -0
- package/dist/registry-5GRV5VXI.js +13 -0
- package/dist/registry-5GRV5VXI.js.map +1 -0
- package/dist/registry-VW6P6A3J.js +8 -0
- package/dist/registry-VW6P6A3J.js.map +1 -0
- package/dist/registry-WEUCHBO4.js +11 -0
- package/dist/registry-WEUCHBO4.js.map +1 -0
- package/dist/request-withdrawal-GBPH2FDY.js +25 -0
- package/dist/request-withdrawal-GBPH2FDY.js.map +1 -0
- package/dist/revoke-TUFRGI6S.js +18 -0
- package/dist/revoke-TUFRGI6S.js.map +1 -0
- package/dist/sealed-record/index.d.ts +69 -0
- package/dist/sealed-record/index.js +65 -0
- package/dist/sealed-record/index.js.map +1 -0
- package/dist/session/index.d.ts +6 -8
- package/dist/session/index.js +7 -5
- package/dist/session/index.js.map +1 -1
- package/dist/shadow/index.d.ts +5 -7
- package/dist/shadow/index.js +4 -3
- package/dist/shadow/index.js.map +1 -1
- package/dist/{signer-72QAUSVW.js → signer-PNKTBVF7.js} +6 -5
- package/dist/signer-PNKTBVF7.js.map +1 -0
- package/dist/snapshots/index.d.ts +6 -8
- package/dist/snapshots/index.js +13 -11
- package/dist/snapshots/index.js.map +1 -1
- package/dist/{stale-6ZDBTQT7.js → stale-3JWHNDIY.js} +3 -2
- package/dist/stale-3JWHNDIY.js.map +1 -0
- package/dist/store-coordination-provider-3I7XWZZK.js +142 -0
- package/dist/store-coordination-provider-3I7XWZZK.js.map +1 -0
- package/dist/subject-index-O75wKshW.d.ts +362 -0
- package/dist/sync/index.d.ts +4 -6
- package/dist/sync/index.js +7 -6
- package/dist/sync/index.js.map +1 -1
- package/dist/team/index.d.ts +5 -7
- package/dist/team/index.js +20 -16
- package/dist/tiers/index.d.ts +5 -0
- package/dist/tiers/index.js +33 -0
- package/dist/tiers/index.js.map +1 -0
- package/dist/to/index.d.ts +5 -0
- package/dist/to/index.js +17 -0
- package/dist/to/index.js.map +1 -0
- package/dist/transition-guard-DqodPNKw.d.ts +165 -0
- package/dist/tx/index.d.ts +23 -9
- package/dist/tx/index.js +13 -8
- package/dist/tx/index.js.map +1 -1
- package/dist/ui/index.d.ts +1 -0
- package/dist/ui/index.js +1 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ulid-DRH25k3y.d.ts +66 -0
- package/dist/ulid-PTAIMDG4.js +10 -0
- package/dist/ulid-PTAIMDG4.js.map +1 -0
- package/dist/util/index.d.ts +2 -0
- package/dist/util/index.js +7 -2
- package/dist/util/index.js.map +1 -1
- package/dist/vault-diff-BtpiBvic.d.ts +147 -0
- package/dist/with/index.d.ts +38 -0
- package/dist/with/index.js +25 -0
- package/dist/with/index.js.map +1 -0
- package/dist/{with-materialized-view-BLkQxoQN.d.ts → with-materialized-view-DMmWtYfJ.d.ts} +1 -1
- package/dist/{with-overlayed-view-CRsSEwHR.d.ts → with-overlayed-view-D_IB2nkM.d.ts} +2 -3
- package/dist/with-rollup-em2wxoHP.d.ts +47 -0
- package/dist/withdraw-accessible-FFS46EOD.js +22 -0
- package/dist/withdraw-accessible-FFS46EOD.js.map +1 -0
- package/dist/zod-HAJM7LMS.js +14763 -0
- package/dist/zod-HAJM7LMS.js.map +1 -0
- package/package.json +121 -201
- package/dist/aggregate/index.cjs.map +0 -1
- package/dist/aggregate/index.d.cts +0 -38
- package/dist/attestation/index.cjs +0 -305
- package/dist/attestation/index.cjs.map +0 -1
- package/dist/attestation/index.d.cts +0 -52
- package/dist/blobs/index.cjs +0 -1480
- package/dist/blobs/index.cjs.map +0 -1
- package/dist/blobs/index.d.cts +0 -46
- package/dist/bundle/index.cjs +0 -19264
- package/dist/bundle/index.cjs.map +0 -1
- package/dist/bundle/index.d.cts +0 -176
- package/dist/chunk-22DWZL57.js.map +0 -1
- package/dist/chunk-2GLDA55J.js.map +0 -1
- package/dist/chunk-2QR2PQTT.js.map +0 -1
- package/dist/chunk-2WUSG3IT.js.map +0 -1
- package/dist/chunk-3BFJOWSU.js.map +0 -1
- package/dist/chunk-3YPCK6JX.js.map +0 -1
- package/dist/chunk-53XBRIRT.js.map +0 -1
- package/dist/chunk-5T22KDPN.js.map +0 -1
- package/dist/chunk-5XHKQ56N.js +0 -340
- package/dist/chunk-5XHKQ56N.js.map +0 -1
- package/dist/chunk-6CME4UEK.js.map +0 -1
- package/dist/chunk-6STK5TQP.js +0 -139
- package/dist/chunk-6STK5TQP.js.map +0 -1
- package/dist/chunk-A3JMGXPG.js.map +0 -1
- package/dist/chunk-B6PB7JLN.js.map +0 -1
- package/dist/chunk-BVRYKATC.js.map +0 -1
- package/dist/chunk-DE6GKS6G.js.map +0 -1
- package/dist/chunk-DFMLEQZB.js.map +0 -1
- package/dist/chunk-DJHHA6XH.js.map +0 -1
- package/dist/chunk-DL3HWOQ5.js.map +0 -1
- package/dist/chunk-DONMZAD2.js.map +0 -1
- package/dist/chunk-EMIGCR7X.js.map +0 -1
- package/dist/chunk-F3GDRNUT.js.map +0 -1
- package/dist/chunk-FZU343FL.js.map +0 -1
- package/dist/chunk-H2X3ISXG.js.map +0 -1
- package/dist/chunk-HNRHLRDC.js.map +0 -1
- package/dist/chunk-I5FOWO4J.js.map +0 -1
- package/dist/chunk-J66GRPNH.js.map +0 -1
- package/dist/chunk-JWRVQKRZ.js.map +0 -1
- package/dist/chunk-K3DK3NU5.js.map +0 -1
- package/dist/chunk-ML236QKC.js.map +0 -1
- package/dist/chunk-NONAAENK.js.map +0 -1
- package/dist/chunk-O3VZPBZG.js.map +0 -1
- package/dist/chunk-OIF6LZUR.js.map +0 -1
- package/dist/chunk-OQ6PIGHA.js +0 -19
- package/dist/chunk-OQ6PIGHA.js.map +0 -1
- package/dist/chunk-PE2FR4J3.js.map +0 -1
- package/dist/chunk-PP6W64Y3.js +0 -275
- package/dist/chunk-PP6W64Y3.js.map +0 -1
- package/dist/chunk-PX35GA7L.js.map +0 -1
- package/dist/chunk-QEILDE6R.js +0 -793
- package/dist/chunk-QEILDE6R.js.map +0 -1
- package/dist/chunk-QODLLGQ7.js.map +0 -1
- package/dist/chunk-RAZ4OVLL.js +0 -51
- package/dist/chunk-RAZ4OVLL.js.map +0 -1
- package/dist/chunk-SYMWGEET.js.map +0 -1
- package/dist/chunk-T7JEBOGN.js.map +0 -1
- package/dist/chunk-TFBP23BX.js.map +0 -1
- package/dist/chunk-TV3YZ35S.js +0 -90
- package/dist/chunk-TV3YZ35S.js.map +0 -1
- package/dist/chunk-U26HQ6KJ.js.map +0 -1
- package/dist/chunk-UF3BUNQZ.js +0 -1
- package/dist/chunk-UMLVJTYV.js +0 -20
- package/dist/chunk-UMLVJTYV.js.map +0 -1
- package/dist/chunk-VTKGMEPP.js.map +0 -1
- package/dist/chunk-W6EQLGMB.js +0 -100
- package/dist/chunk-W6EQLGMB.js.map +0 -1
- package/dist/chunk-WIRRPTFH.js +0 -17
- package/dist/chunk-WIRRPTFH.js.map +0 -1
- package/dist/chunk-WPLVTJ5D.js.map +0 -1
- package/dist/chunk-XJFLDA7A.js.map +0 -1
- package/dist/chunk-Z6FNBOTC.js.map +0 -1
- package/dist/chunk-ZYWZWG6G.js.map +0 -1
- package/dist/consent/index.cjs +0 -204
- package/dist/consent/index.cjs.map +0 -1
- package/dist/consent/index.d.cts +0 -25
- package/dist/crdt/index.cjs +0 -152
- package/dist/crdt/index.cjs.map +0 -1
- package/dist/crdt/index.d.cts +0 -30
- package/dist/crypto-HTZ4FJOP.js +0 -44
- package/dist/delegation-RI54P6I5.js +0 -17
- package/dist/derivations/index.cjs +0 -351
- package/dist/derivations/index.cjs.map +0 -1
- package/dist/derivations/index.d.cts +0 -72
- package/dist/dev-unlock-BIoEFbwm.d.cts +0 -263
- package/dist/executor-5PNY7LGW.js +0 -8
- package/dist/executor-B4QIYGZX.js +0 -8
- package/dist/executor-BWXXDQ7K.js +0 -11
- package/dist/fanout-sidecar-OKPMMPLG.js.map +0 -1
- package/dist/guards/index.cjs +0 -322
- package/dist/guards/index.cjs.map +0 -1
- package/dist/guards/index.d.cts +0 -31
- package/dist/hash-HJqD14vS.d.ts +0 -63
- package/dist/history/index.cjs +0 -1222
- package/dist/history/index.cjs.map +0 -1
- package/dist/history/index.d.cts +0 -63
- package/dist/i18n/index.cjs +0 -1100
- package/dist/i18n/index.cjs.map +0 -1
- package/dist/i18n/index.d.cts +0 -39
- package/dist/index-4fBVt8j9.d.cts +0 -2387
- package/dist/index-D8I_pyJD.d.ts +0 -2387
- package/dist/index.cjs +0 -24487
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -776
- package/dist/indexing/index.cjs +0 -742
- package/dist/indexing/index.cjs.map +0 -1
- package/dist/indexing/index.d.cts +0 -36
- package/dist/issue-VGDPP4B5.js +0 -12
- package/dist/lazy-builder-7tIpFyWN.d.ts +0 -304
- package/dist/lazy-builder-wY4pMCEe.d.cts +0 -304
- package/dist/materialized-views/index.cjs +0 -854
- package/dist/materialized-views/index.cjs.map +0 -1
- package/dist/materialized-views/index.d.cts +0 -186
- package/dist/mime-magic-CBBSOkjm.d.cts +0 -50
- package/dist/mime-magic-CBBSOkjm.d.ts +0 -50
- package/dist/noydb-G725ZSZG.js +0 -34
- package/dist/overlay-views/index.cjs +0 -359
- package/dist/overlay-views/index.cjs.map +0 -1
- package/dist/overlay-views/index.d.cts +0 -82
- package/dist/periods/index.cjs +0 -1041
- package/dist/periods/index.cjs.map +0 -1
- package/dist/periods/index.d.cts +0 -22
- package/dist/predicate-BSAGEyu5.d.cts +0 -209
- package/dist/predicate-BSAGEyu5.d.ts +0 -209
- package/dist/query/index.cjs +0 -2375
- package/dist/query/index.cjs.map +0 -1
- package/dist/query/index.d.cts +0 -3
- package/dist/read-only-facade-ITU6L7BL.js +0 -7
- package/dist/registry-3QP3YKQS.js +0 -8
- package/dist/registry-DKEXOJVO.js +0 -7
- package/dist/registry-OJIOSBV6.js +0 -10
- package/dist/registry-USRVT6YF.js +0 -8
- package/dist/revoke-JCC7N56X.js +0 -17
- package/dist/session/index.cjs +0 -495
- package/dist/session/index.cjs.map +0 -1
- package/dist/session/index.d.cts +0 -46
- package/dist/shadow/index.cjs +0 -133
- package/dist/shadow/index.cjs.map +0 -1
- package/dist/shadow/index.d.cts +0 -17
- package/dist/snapshots/index.cjs +0 -937
- package/dist/snapshots/index.cjs.map +0 -1
- package/dist/snapshots/index.d.cts +0 -28
- package/dist/store/index.cjs +0 -1083
- package/dist/store/index.cjs.map +0 -1
- package/dist/store/index.d.cts +0 -492
- package/dist/store/index.d.ts +0 -492
- package/dist/store/index.js +0 -37
- package/dist/strategy-BSxFXGzb.d.cts +0 -110
- package/dist/strategy-BSxFXGzb.d.ts +0 -110
- package/dist/strategy-DSTrsZ8t.d.cts +0 -601
- package/dist/strategy-DSTrsZ8t.d.ts +0 -601
- package/dist/sync/index.cjs +0 -1062
- package/dist/sync/index.cjs.map +0 -1
- package/dist/sync/index.d.cts +0 -43
- package/dist/team/index.cjs +0 -2798
- package/dist/team/index.cjs.map +0 -1
- package/dist/team/index.d.cts +0 -118
- package/dist/tx/index.cjs +0 -544
- package/dist/tx/index.cjs.map +0 -1
- package/dist/tx/index.d.cts +0 -21
- package/dist/types-DyXYr8rE.d.cts +0 -12818
- package/dist/ulid-COREQ2RQ.js +0 -9
- package/dist/ulid-Drr7ykr6.d.cts +0 -603
- package/dist/util/index.cjs +0 -230
- package/dist/util/index.cjs.map +0 -1
- package/dist/util/index.d.cts +0 -77
- package/dist/with-derivation-DFnFByiQ.d.ts +0 -13
- package/dist/with-derivation-DU3Sjazm.d.cts +0 -13
- package/dist/with-guard-ByyxmEe7.d.cts +0 -18
- package/dist/with-guard-qube6BMI.d.ts +0 -18
- package/dist/with-materialized-view-BmEToIR1.d.cts +0 -27
- package/dist/with-overlayed-view-BMsQQbWm.d.cts +0 -13
- /package/dist/{store → adapter}/index.js.map +0 -0
- /package/dist/{chunk-UF3BUNQZ.js.map → api-RW3KP7WU.js.map} +0 -0
- /package/dist/{crypto-HTZ4FJOP.js.map → as/index.js.map} +0 -0
- /package/dist/{delegation-RI54P6I5.js.map → at/index.js.map} +0 -0
- /package/dist/{executor-5PNY7LGW.js.map → by/index.js.map} +0 -0
- /package/dist/{executor-B4QIYGZX.js.map → cargo/index.js.map} +0 -0
- /package/dist/{executor-BWXXDQ7K.js.map → chunk-BGIZAFY7.js.map} +0 -0
- /package/dist/{issue-VGDPP4B5.js.map → chunk-CHFZDSE4.js.map} +0 -0
- /package/dist/{ledger-TMRZYNVJ.js.map → chunk-GHVIKOHT.js.map} +0 -0
- /package/dist/{noydb-G725ZSZG.js.map → chunk-K2WCO3NX.js.map} +0 -0
- /package/dist/{public-envelope-BW6OXORV.js.map → chunk-PZ5AY32C.js.map} +0 -0
- /package/dist/{read-only-facade-ITU6L7BL.js.map → collection-facade-GQAOGJP2.js.map} +0 -0
- /package/dist/{registry-3QP3YKQS.js.map → delegation-UL5HKLER.js.map} +0 -0
- /package/dist/{registry-DKEXOJVO.js.map → describe/index.js.map} +0 -0
- /package/dist/{registry-OJIOSBV6.js.map → enclave-UL5LW66V.js.map} +0 -0
- /package/dist/{registry-USRVT6YF.js.map → executor-2FWQRLMG.js.map} +0 -0
- /package/dist/{revoke-JCC7N56X.js.map → executor-QZ7BXICW.js.map} +0 -0
- /package/dist/{signer-72QAUSVW.js.map → executor-Z5ZLJVTV.js.map} +0 -0
- /package/dist/{stale-6ZDBTQT7.js.map → export-accessible-KRV5W4GH.js.map} +0 -0
- /package/dist/{ulid-COREQ2RQ.js.map → extract-partition-GLKBOXFQ.js.map} +0 -0
package/dist/history/index.js
CHANGED
|
@@ -2,20 +2,25 @@ import {
|
|
|
2
2
|
CollectionInstant,
|
|
3
3
|
VaultInstant,
|
|
4
4
|
clearHistory,
|
|
5
|
-
diff,
|
|
6
|
-
formatDiff,
|
|
7
5
|
getHistory,
|
|
8
6
|
getVersionEnvelope,
|
|
9
7
|
pruneHistory,
|
|
10
|
-
saveHistory
|
|
11
|
-
|
|
8
|
+
saveHistory,
|
|
9
|
+
tombstoneHistory
|
|
10
|
+
} from "../chunk-MD3Y6J3L.js";
|
|
11
|
+
import {
|
|
12
|
+
diff,
|
|
13
|
+
formatDiff
|
|
14
|
+
} from "../chunk-SVLR4POP.js";
|
|
12
15
|
import {
|
|
13
|
-
LEDGER_COLLECTION,
|
|
14
|
-
LEDGER_DELTAS_COLLECTION,
|
|
15
16
|
LedgerStore,
|
|
16
17
|
applyPatch,
|
|
17
18
|
computePatch
|
|
18
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-LXQT4WMP.js";
|
|
20
|
+
import {
|
|
21
|
+
LEDGER_COLLECTION,
|
|
22
|
+
LEDGER_DELTAS_COLLECTION
|
|
23
|
+
} from "../chunk-I7FD46FF.js";
|
|
19
24
|
import {
|
|
20
25
|
canonicalJson,
|
|
21
26
|
envelopePayloadHash,
|
|
@@ -23,12 +28,13 @@ import {
|
|
|
23
28
|
paddedIndex,
|
|
24
29
|
parseIndex,
|
|
25
30
|
sha256Hex
|
|
26
|
-
} from "../chunk-
|
|
27
|
-
import "../chunk-
|
|
28
|
-
import "../chunk-
|
|
29
|
-
import "../chunk-
|
|
31
|
+
} from "../chunk-AIWULCUO.js";
|
|
32
|
+
import "../chunk-5O3AOPDT.js";
|
|
33
|
+
import "../chunk-5TDJ56JE.js";
|
|
34
|
+
import "../chunk-ZYUC53LT.js";
|
|
35
|
+
import "../chunk-PZ5AY32C.js";
|
|
30
36
|
|
|
31
|
-
// src/history/active.ts
|
|
37
|
+
// src/with-commit/history/active.ts
|
|
32
38
|
function withHistory() {
|
|
33
39
|
return {
|
|
34
40
|
saveHistory,
|
|
@@ -36,6 +42,7 @@ function withHistory() {
|
|
|
36
42
|
getVersionEnvelope,
|
|
37
43
|
pruneHistory,
|
|
38
44
|
clearHistory,
|
|
45
|
+
tombstoneHistory,
|
|
39
46
|
envelopePayloadHash,
|
|
40
47
|
computePatch,
|
|
41
48
|
diff,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/history/active.ts"],"sourcesContent":["/**\n * Active history strategy — `withHistory()` returns the real\n * implementation that wires per-record snapshots, the hash-chained\n * audit ledger, JSON-patch deltas, and time-machine reads into the\n * core write/read paths.\n *\n * Consumers opt in by:\n *\n * ```ts\n * import { createNoydb } from '@noy-db/hub'\n * import { withHistory } from '@noy-db/hub/history'\n *\n * const db = await createNoydb({\n * store: ...,\n * user: ...,\n * historyStrategy: withHistory(),\n * })\n * ```\n *\n * The factory is a thin wrapper that delegates to the existing\n * `history.ts`, `diff.ts`, `ledger/store.ts`, `ledger/patch.ts`, and\n * `time-machine.ts` modules. Splitting the import chain through this\n * file is what lets `tsup` tree-shake the heavy modules out of the\n * default `@noy-db/hub` bundle when no `withHistory()` import is\n * present in the consumer.\n *\n * @public\n */\n\nimport type { HistoryStrategy, BuildLedgerOptions } from './strategy.js'\nimport {\n saveHistory,\n getHistory,\n getVersionEnvelope,\n pruneHistory,\n clearHistory,\n} from './history.js'\nimport { diff as computeDiff } from './diff.js'\nimport { LedgerStore, envelopePayloadHash } from './ledger/store.js'\nimport { computePatch } from './ledger/patch.js'\nimport { VaultInstant } from './time-machine.js'\n\n/**\n * Build the active history strategy. Today the factory takes no\n * options; per-collection retention tuning still flows through\n * `HistoryConfig` on `Vault.collection()` / `vault.openVault()`.\n *\n * Future option slots (kept off the LTS surface for now):\n * - global maxVersions cap\n * - global beforeDate prune cadence\n * - ledger encryption toggle (today inferred from vault.encrypted)\n */\nexport function withHistory(): HistoryStrategy {\n return {\n saveHistory,\n getHistoryEntries: getHistory,\n getVersionEnvelope,\n pruneHistory,\n clearHistory,\n envelopePayloadHash,\n computePatch,\n diff: computeDiff,\n buildLedger(opts: BuildLedgerOptions): LedgerStore {\n return new LedgerStore({\n adapter: opts.adapter,\n vault: opts.vault,\n encrypted: opts.encrypted,\n getDEK: opts.getDEK,\n actor: opts.actor,\n })\n },\n buildVaultInstant(engine, timestamp): VaultInstant {\n return new VaultInstant(engine, timestamp)\n },\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/with-commit/history/active.ts"],"sourcesContent":["/**\n * Active history strategy — `withHistory()` returns the real\n * implementation that wires per-record snapshots, the hash-chained\n * audit ledger, JSON-patch deltas, and time-machine reads into the\n * core write/read paths.\n *\n * Consumers opt in by:\n *\n * ```ts\n * import { createNoydb } from '@noy-db/hub'\n * import { withHistory } from '@noy-db/hub/history'\n *\n * const db = await createNoydb({\n * store: ...,\n * user: ...,\n * historyStrategy: withHistory(),\n * })\n * ```\n *\n * The factory is a thin wrapper that delegates to the existing\n * `history.ts`, `diff.ts`, `ledger/store.ts`, `ledger/patch.ts`, and\n * `time-machine.ts` modules. Splitting the import chain through this\n * file is what lets `tsup` tree-shake the heavy modules out of the\n * default `@noy-db/hub` bundle when no `withHistory()` import is\n * present in the consumer.\n *\n * @public\n */\n\nimport type { HistoryStrategy, BuildLedgerOptions } from './strategy.js'\nimport {\n saveHistory,\n getHistory,\n getVersionEnvelope,\n pruneHistory,\n clearHistory,\n tombstoneHistory,\n} from './history.js'\nimport { diff as computeDiff } from './diff.js'\nimport { LedgerStore, envelopePayloadHash } from './ledger/store.js'\nimport { computePatch } from './ledger/patch.js'\nimport { VaultInstant } from './time-machine.js'\n\n/**\n * Build the active history strategy. Today the factory takes no\n * options; per-collection retention tuning still flows through\n * `HistoryConfig` on `Vault.collection()` / `vault.openVault()`.\n *\n * Future option slots (kept off the LTS surface for now):\n * - global maxVersions cap\n * - global beforeDate prune cadence\n * - ledger encryption toggle (today inferred from vault.encrypted)\n */\nexport function withHistory(): HistoryStrategy {\n return {\n saveHistory,\n getHistoryEntries: getHistory,\n getVersionEnvelope,\n pruneHistory,\n clearHistory,\n tombstoneHistory,\n envelopePayloadHash,\n computePatch,\n diff: computeDiff,\n buildLedger(opts: BuildLedgerOptions): LedgerStore {\n return new LedgerStore({\n adapter: opts.adapter,\n vault: opts.vault,\n encrypted: opts.encrypted,\n getDEK: opts.getDEK,\n actor: opts.actor,\n })\n },\n buildVaultInstant(engine, timestamp): VaultInstant {\n return new VaultInstant(engine, timestamp)\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDO,SAAS,cAA+B;AAC7C,SAAO;AAAA,IACL;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,MAAuC;AACjD,aAAO,IAAI,YAAY;AAAA,QACrB,SAAS,KAAK;AAAA,QACd,OAAO,KAAK;AAAA,QACZ,WAAW,KAAK;AAAA,QAChB,QAAQ,KAAK;AAAA,QACb,OAAO,KAAK;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IACA,kBAAkB,QAAQ,WAAyB;AACjD,aAAO,IAAI,aAAa,QAAQ,SAAS;AAAA,IAC3C;AAAA,EACF;AACF;","names":[]}
|
package/dist/i18n/index.d.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { I as I18nStrategy } from '../
|
|
2
|
-
export { D as DICT_COLLECTION_PREFIX, a as DictEntry, b as DictKeyDescriptor, c as
|
|
3
|
-
|
|
4
|
-
import '../
|
|
5
|
-
import '../
|
|
6
|
-
import '../strategy-DSTrsZ8t.js';
|
|
7
|
-
import '../strategy-BSxFXGzb.js';
|
|
1
|
+
import { I as I18nStrategy } from '../index-_6At2_9_.js';
|
|
2
|
+
export { D as DICT_COLLECTION_PREFIX, a as DictEntry, b as DictKeyDescriptor, c as DictKeyInUseError, d as DictKeyMissingError, e as DictionaryHandle, f as DictionaryOptions, g as I18nMap, h as I18nTextDescriptor, i as I18nTextOptions, L as Layer, j as LocaleNotSpecifiedError, M as MissingTranslationError, O as OnMissing, k as OnMissingPolicy, R as ReservedCollectionNameError, l as ResolveI18nOptions, S as ScriptViolationError, m as ScriptWarning, n as StaticDictDescriptor, o as StaticDictReadonlyError, T as TranslatorNotConfiguredError, U as UnknownDictCodeError, p as applyI18nLocale, q as dictCollectionName, r as dictKey, s as enforceScript, t as getAtPath, u as i18nText, v as inferScripts, w as isDictCollectionName, x as isDictKeyDescriptor, y as isI18nTextDescriptor, z as isStaticDictDescriptor, A as resolveI18nText, B as resolvePolicy, C as setAtPathInPlace, E as staticDict, F as stripI18nFilled, G as validateI18nTextValue } from '../index-_6At2_9_.js';
|
|
3
|
+
import '../subject-index-O75wKshW.js';
|
|
4
|
+
import '../describe-Ccd1hS7a.js';
|
|
5
|
+
import '../index-B9QdHytu.js';
|
|
8
6
|
import '@noy-db/attestation';
|
|
9
7
|
|
|
10
8
|
/**
|
package/dist/i18n/index.js
CHANGED
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
enforceScript,
|
|
3
|
-
inferScripts
|
|
4
|
-
} from "../chunk-6STK5TQP.js";
|
|
5
1
|
import {
|
|
6
2
|
DICT_COLLECTION_PREFIX,
|
|
7
3
|
DictionaryHandle,
|
|
8
|
-
applyI18nLocale,
|
|
9
4
|
dictCollectionName,
|
|
10
5
|
dictKey,
|
|
11
|
-
getAtPath,
|
|
12
|
-
i18nText,
|
|
13
6
|
isDictCollectionName,
|
|
14
7
|
isDictKeyDescriptor,
|
|
8
|
+
isStaticDictDescriptor,
|
|
9
|
+
staticDict
|
|
10
|
+
} from "../chunk-LFLXAY2W.js";
|
|
11
|
+
import "../chunk-WWGT2MDV.js";
|
|
12
|
+
import "../chunk-ITNUCOXM.js";
|
|
13
|
+
import "../chunk-AIWULCUO.js";
|
|
14
|
+
import "../chunk-5O3AOPDT.js";
|
|
15
|
+
import "../chunk-5TDJ56JE.js";
|
|
16
|
+
import {
|
|
17
|
+
applyI18nLocale,
|
|
18
|
+
enforceScript,
|
|
19
|
+
getAtPath,
|
|
20
|
+
i18nText,
|
|
21
|
+
inferScripts,
|
|
15
22
|
isI18nTextDescriptor,
|
|
16
23
|
resolveI18nText,
|
|
17
24
|
resolvePolicy,
|
|
18
25
|
setAtPathInPlace,
|
|
26
|
+
stripI18nFilled,
|
|
19
27
|
validateI18nTextValue
|
|
20
|
-
} from "../chunk-
|
|
21
|
-
import "../chunk-DONMZAD2.js";
|
|
22
|
-
import "../chunk-Z6FNBOTC.js";
|
|
23
|
-
import "../chunk-WIRRPTFH.js";
|
|
24
|
-
import "../chunk-PP6W64Y3.js";
|
|
28
|
+
} from "../chunk-5LUY7UTV.js";
|
|
25
29
|
import {
|
|
26
30
|
DictKeyInUseError,
|
|
27
31
|
DictKeyMissingError,
|
|
@@ -29,15 +33,95 @@ import {
|
|
|
29
33
|
MissingTranslationError,
|
|
30
34
|
ReservedCollectionNameError,
|
|
31
35
|
ScriptViolationError,
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
StaticDictReadonlyError,
|
|
37
|
+
TranslatorNotConfiguredError,
|
|
38
|
+
UnknownDictCodeError
|
|
39
|
+
} from "../chunk-ZYUC53LT.js";
|
|
40
|
+
import "../chunk-PZ5AY32C.js";
|
|
41
|
+
|
|
42
|
+
// src/with-shape/i18n/densify.ts
|
|
43
|
+
var MARKER = "_i18nFilled";
|
|
44
|
+
function priorFilled(prior, field) {
|
|
45
|
+
if (!prior) return /* @__PURE__ */ new Set();
|
|
46
|
+
const marker = prior[MARKER];
|
|
47
|
+
return new Set(marker?.[field] ?? []);
|
|
48
|
+
}
|
|
49
|
+
function singleLeaf(record, field) {
|
|
50
|
+
const leaves = getAtPath(record, field);
|
|
51
|
+
if (leaves.length !== 1) return void 0;
|
|
52
|
+
const leaf = leaves[0];
|
|
53
|
+
if (!leaf || typeof leaf !== "object" || Array.isArray(leaf)) return void 0;
|
|
54
|
+
return leaf;
|
|
55
|
+
}
|
|
56
|
+
function computeExemptFills(prior, incoming, fields) {
|
|
57
|
+
const out = /* @__PURE__ */ new Map();
|
|
58
|
+
if (!prior) return out;
|
|
59
|
+
for (const field of Object.keys(fields)) {
|
|
60
|
+
const filled = priorFilled(prior, field);
|
|
61
|
+
if (filled.size === 0) continue;
|
|
62
|
+
const priorLeaf = singleLeaf(prior, field);
|
|
63
|
+
const incLeaf = singleLeaf(incoming, field);
|
|
64
|
+
if (!priorLeaf || !incLeaf) continue;
|
|
65
|
+
const exempt = /* @__PURE__ */ new Set();
|
|
66
|
+
for (const loc of filled) {
|
|
67
|
+
if (incLeaf[loc] !== void 0 && incLeaf[loc] !== "" && incLeaf[loc] === priorLeaf[loc]) {
|
|
68
|
+
exempt.add(loc);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (exempt.size > 0) out.set(field, exempt);
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
function densify(record, prior, fields) {
|
|
76
|
+
let marker = record[MARKER];
|
|
77
|
+
for (const [field, descriptor] of Object.entries(fields)) {
|
|
78
|
+
const leaf = singleLeaf(record, field);
|
|
79
|
+
if (!leaf) continue;
|
|
80
|
+
const { languages, substitute, smartSubstitute } = descriptor.options;
|
|
81
|
+
const filledSet = priorFilled(prior, field);
|
|
82
|
+
const priorLeaf = singleLeaf(prior ?? {}, field);
|
|
83
|
+
const isUnchangedFill = (loc) => filledSet.has(loc) && priorLeaf?.[loc] !== void 0 && leaf[loc] === priorLeaf[loc];
|
|
84
|
+
const authored = {};
|
|
85
|
+
for (const [loc, val] of Object.entries(leaf)) {
|
|
86
|
+
if (typeof val === "string" && val !== "" && !isUnchangedFill(loc)) authored[loc] = val;
|
|
87
|
+
}
|
|
88
|
+
const filled = [];
|
|
89
|
+
for (const loc of languages) {
|
|
90
|
+
if (authored[loc] !== void 0) continue;
|
|
91
|
+
const sub = resolveI18nText(authored, loc, void 0, field, {
|
|
92
|
+
policy: "substitute",
|
|
93
|
+
substitute: substitute ?? ["any"],
|
|
94
|
+
...smartSubstitute ? { smartSubstitute } : {}
|
|
95
|
+
});
|
|
96
|
+
if (typeof sub === "string" && sub !== "") {
|
|
97
|
+
leaf[loc] = sub;
|
|
98
|
+
filled.push(loc);
|
|
99
|
+
} else if (isUnchangedFill(loc)) {
|
|
100
|
+
delete leaf[loc];
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (filled.length > 0) {
|
|
104
|
+
marker ??= {};
|
|
105
|
+
marker[field] = filled;
|
|
106
|
+
} else if (marker) {
|
|
107
|
+
delete marker[field];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (marker && Object.keys(marker).length > 0) {
|
|
111
|
+
record[MARKER] = marker;
|
|
112
|
+
} else {
|
|
113
|
+
delete record[MARKER];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
34
116
|
|
|
35
|
-
// src/i18n/active.ts
|
|
117
|
+
// src/with-shape/i18n/active.ts
|
|
36
118
|
function withI18n() {
|
|
37
119
|
return {
|
|
38
120
|
applyI18nLocale,
|
|
39
121
|
validateI18nTextValue,
|
|
40
122
|
enforceScript,
|
|
123
|
+
computeExemptFills,
|
|
124
|
+
densify,
|
|
41
125
|
buildDictionaryHandle(opts) {
|
|
42
126
|
return new DictionaryHandle(
|
|
43
127
|
opts.adapter,
|
|
@@ -63,7 +147,9 @@ export {
|
|
|
63
147
|
MissingTranslationError,
|
|
64
148
|
ReservedCollectionNameError,
|
|
65
149
|
ScriptViolationError,
|
|
150
|
+
StaticDictReadonlyError,
|
|
66
151
|
TranslatorNotConfiguredError,
|
|
152
|
+
UnknownDictCodeError,
|
|
67
153
|
applyI18nLocale,
|
|
68
154
|
dictCollectionName,
|
|
69
155
|
dictKey,
|
|
@@ -74,9 +160,12 @@ export {
|
|
|
74
160
|
isDictCollectionName,
|
|
75
161
|
isDictKeyDescriptor,
|
|
76
162
|
isI18nTextDescriptor,
|
|
163
|
+
isStaticDictDescriptor,
|
|
77
164
|
resolveI18nText,
|
|
78
165
|
resolvePolicy,
|
|
79
166
|
setAtPathInPlace,
|
|
167
|
+
staticDict,
|
|
168
|
+
stripI18nFilled,
|
|
80
169
|
validateI18nTextValue,
|
|
81
170
|
withI18n
|
|
82
171
|
};
|
package/dist/i18n/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/i18n/active.ts"],"sourcesContent":["/**\n * Active i18n strategy — `withI18n()` returns the real implementation\n * that wires multi-locale resolution, i18nText validation, and the\n * `DictionaryHandle` for `dictKey` fields into the core read/write\n * paths.\n *\n * Consumers opt in by:\n *\n * ```ts\n * import { createNoydb } from '@noy-db/hub'\n * import { withI18n } from '@noy-db/hub/i18n'\n *\n * const db = await createNoydb({\n * store: ...,\n * user: ...,\n * i18nStrategy: withI18n(),\n * })\n * ```\n *\n * The factory delegates to the existing `core.ts` and `dictionary.ts`\n * modules. Splitting the import chain through this file is what lets\n * tsup tree-shake the `~854 LOC` of dictionary + locale resolution\n * out of the default bundle when no `withI18n()` import is present.\n *\n * @public\n */\n\nimport type { I18nStrategy, BuildDictionaryHandleOptions } from './strategy.js'\nimport { applyI18nLocale, validateI18nTextValue } from './core.js'\nimport { enforceScript } from './script.js'\nimport { DictionaryHandle } from './dictionary.js'\n\nexport function withI18n(): I18nStrategy {\n return {\n applyI18nLocale,\n validateI18nTextValue,\n enforceScript,\n buildDictionaryHandle<Keys extends string = string>(\n opts: BuildDictionaryHandleOptions<Keys>,\n ): DictionaryHandle<Keys> {\n return new DictionaryHandle<Keys>(\n opts.adapter,\n opts.compartmentName,\n opts.dictionaryName,\n opts.keyring,\n opts.getDEK,\n opts.encrypted,\n opts.ledger,\n opts.options,\n opts.findAndUpdateReferences,\n opts.emitter,\n )\n },\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/with-shape/i18n/densify.ts","../../src/with-shape/i18n/active.ts"],"sourcesContent":["/**\n * `densifyOnWrite` — eager-fill empty i18n slots from each field's\n * substitute chain at write time, recording provenance in the internal\n * `_i18nFilled` marker (decision A: dense map + prior-read).\n *\n * Pure functions over plain records; all DB wiring lives in collection.ts.\n * Only single-leaf i18n fields are supported (array-wildcard paths are\n * skipped, mirroring auto-translate).\n */\nimport { getAtPath, resolveI18nText } from './core.js'\nimport type { I18nTextDescriptor } from './core.js'\n\nconst MARKER = '_i18nFilled'\n\ntype Leaf = Record<string, string>\n\n/** Locales recorded as densify-filled on the prior record for `field`. */\nfunction priorFilled(prior: Record<string, unknown> | undefined, field: string): Set<string> {\n if (!prior) return new Set()\n const marker = prior[MARKER] as Record<string, string[]> | undefined\n return new Set(marker?.[field] ?? [])\n}\n\n/** The single leaf map for `field`, or undefined for absent / array-wildcard / non-object. */\nfunction singleLeaf(record: Record<string, unknown>, field: string): Leaf | undefined {\n const leaves = getAtPath(record, field)\n if (leaves.length !== 1) return undefined\n const leaf = leaves[0]\n if (!leaf || typeof leaf !== 'object' || Array.isArray(leaf)) return undefined\n return leaf as Leaf\n}\n\n/**\n * Per field, the locales that are UNCHANGED round-tripped densify fills — i.e.\n * marked filled on the prior record AND identical in the incoming record.\n * These are exempt from write-time script enforcement (they are derived copies,\n * not authored text). Slots the user changed are NOT exempt (validated as authored).\n */\nexport function computeExemptFills(\n prior: Record<string, unknown> | undefined,\n incoming: Record<string, unknown>,\n fields: Record<string, I18nTextDescriptor>,\n): Map<string, Set<string>> {\n const out = new Map<string, Set<string>>()\n if (!prior) return out\n for (const field of Object.keys(fields)) {\n const filled = priorFilled(prior, field)\n if (filled.size === 0) continue\n const priorLeaf = singleLeaf(prior, field)\n const incLeaf = singleLeaf(incoming, field)\n if (!priorLeaf || !incLeaf) continue\n const exempt = new Set<string>()\n for (const loc of filled) {\n if (incLeaf[loc] !== undefined && incLeaf[loc] !== '' && incLeaf[loc] === priorLeaf[loc]) {\n exempt.add(loc)\n }\n }\n if (exempt.size > 0) out.set(field, exempt)\n }\n return out\n}\n\n/**\n * Mutate `record` in place: fill empty declared-language slots for each\n * densify-enabled field from the field's substitute chain, recompute unchanged\n * prior fills, clear marks for slots that became authored, and write the\n * resulting `_i18nFilled` marker (removed when empty).\n *\n * `prior` is read-only — it is never mutated.\n *\n * Provenance uses value-equality (decision A): a slot counts as an unchanged\n * fill when it was prior-marked AND its value still equals the prior value. A\n * consequence is that re-authoring a value byte-identical to the existing fill\n * keeps it classified as a fill (the visible value is unchanged either way; the\n * slot stays script-exempt and will auto-refresh if its source later changes).\n * This is inherent to value-equality provenance, not a bug.\n */\nexport function densify(\n record: Record<string, unknown>,\n prior: Record<string, unknown> | undefined,\n fields: Record<string, I18nTextDescriptor>,\n): void {\n let marker = record[MARKER] as Record<string, string[]> | undefined\n\n for (const [field, descriptor] of Object.entries(fields)) {\n const leaf = singleLeaf(record, field)\n if (!leaf) continue\n const { languages, substitute, smartSubstitute } = descriptor.options\n const filledSet = priorFilled(prior, field)\n const priorLeaf = singleLeaf(prior ?? {}, field)\n const isUnchangedFill = (loc: string): boolean =>\n filledSet.has(loc) && priorLeaf?.[loc] !== undefined && leaf[loc] === priorLeaf[loc]\n\n // Authored source = present, non-empty, NOT an unchanged prior fill.\n const authored: Leaf = {}\n for (const [loc, val] of Object.entries(leaf)) {\n if (typeof val === 'string' && val !== '' && !isUnchangedFill(loc)) authored[loc] = val\n }\n\n const filled: string[] = []\n for (const loc of languages) {\n if (authored[loc] !== undefined) continue // real value present → not a fill\n const sub = resolveI18nText(authored, loc, undefined, field, {\n policy: 'substitute',\n substitute: substitute ?? ['any'],\n ...(smartSubstitute ? { smartSubstitute } : {}),\n })\n if (typeof sub === 'string' && sub !== '') {\n leaf[loc] = sub\n filled.push(loc)\n } else if (isUnchangedFill(loc)) {\n delete leaf[loc] // stale fill with no source left → drop it\n }\n }\n\n if (filled.length > 0) {\n marker ??= {}\n marker[field] = filled\n } else if (marker) {\n delete marker[field]\n }\n }\n\n if (marker && Object.keys(marker).length > 0) {\n record[MARKER] = marker\n } else {\n delete record[MARKER]\n }\n}\n","/**\n * Active i18n strategy — `withI18n()` returns the real implementation\n * that wires multi-locale resolution, i18nText validation, and the\n * `DictionaryHandle` for `dictKey` fields into the core read/write\n * paths.\n *\n * Consumers opt in by:\n *\n * ```ts\n * import { createNoydb } from '@noy-db/hub'\n * import { withI18n } from '@noy-db/hub/i18n'\n *\n * const db = await createNoydb({\n * store: ...,\n * user: ...,\n * i18nStrategy: withI18n(),\n * })\n * ```\n *\n * The factory delegates to the existing `core.ts` and `dictionary.ts`\n * modules. Splitting the import chain through this file is what lets\n * tsup tree-shake the `~854 LOC` of dictionary + locale resolution\n * out of the default bundle when no `withI18n()` import is present.\n *\n * @public\n */\n\nimport type { I18nStrategy, BuildDictionaryHandleOptions } from './strategy.js'\nimport { applyI18nLocale, validateI18nTextValue } from './core.js'\nimport { enforceScript } from './script.js'\nimport { computeExemptFills, densify } from './densify.js'\nimport { DictionaryHandle } from './dictionary.js'\n\nexport function withI18n(): I18nStrategy {\n return {\n applyI18nLocale,\n validateI18nTextValue,\n enforceScript,\n computeExemptFills,\n densify,\n buildDictionaryHandle<Keys extends string = string>(\n opts: BuildDictionaryHandleOptions<Keys>,\n ): DictionaryHandle<Keys> {\n return new DictionaryHandle<Keys>(\n opts.adapter,\n opts.compartmentName,\n opts.dictionaryName,\n opts.keyring,\n opts.getDEK,\n opts.encrypted,\n opts.ledger,\n opts.options,\n opts.findAndUpdateReferences,\n opts.emitter,\n )\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,IAAM,SAAS;AAKf,SAAS,YAAY,OAA4C,OAA4B;AAC3F,MAAI,CAAC,MAAO,QAAO,oBAAI,IAAI;AAC3B,QAAM,SAAS,MAAM,MAAM;AAC3B,SAAO,IAAI,IAAI,SAAS,KAAK,KAAK,CAAC,CAAC;AACtC;AAGA,SAAS,WAAW,QAAiC,OAAiC;AACpF,QAAM,SAAS,UAAU,QAAQ,KAAK;AACtC,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAM,OAAO,OAAO,CAAC;AACrB,MAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI,EAAG,QAAO;AACrE,SAAO;AACT;AAQO,SAAS,mBACd,OACA,UACA,QAC0B;AAC1B,QAAM,MAAM,oBAAI,IAAyB;AACzC,MAAI,CAAC,MAAO,QAAO;AACnB,aAAW,SAAS,OAAO,KAAK,MAAM,GAAG;AACvC,UAAM,SAAS,YAAY,OAAO,KAAK;AACvC,QAAI,OAAO,SAAS,EAAG;AACvB,UAAM,YAAY,WAAW,OAAO,KAAK;AACzC,UAAM,UAAU,WAAW,UAAU,KAAK;AAC1C,QAAI,CAAC,aAAa,CAAC,QAAS;AAC5B,UAAM,SAAS,oBAAI,IAAY;AAC/B,eAAW,OAAO,QAAQ;AACxB,UAAI,QAAQ,GAAG,MAAM,UAAa,QAAQ,GAAG,MAAM,MAAM,QAAQ,GAAG,MAAM,UAAU,GAAG,GAAG;AACxF,eAAO,IAAI,GAAG;AAAA,MAChB;AAAA,IACF;AACA,QAAI,OAAO,OAAO,EAAG,KAAI,IAAI,OAAO,MAAM;AAAA,EAC5C;AACA,SAAO;AACT;AAiBO,SAAS,QACd,QACA,OACA,QACM;AACN,MAAI,SAAS,OAAO,MAAM;AAE1B,aAAW,CAAC,OAAO,UAAU,KAAK,OAAO,QAAQ,MAAM,GAAG;AACxD,UAAM,OAAO,WAAW,QAAQ,KAAK;AACrC,QAAI,CAAC,KAAM;AACX,UAAM,EAAE,WAAW,YAAY,gBAAgB,IAAI,WAAW;AAC9D,UAAM,YAAY,YAAY,OAAO,KAAK;AAC1C,UAAM,YAAY,WAAW,SAAS,CAAC,GAAG,KAAK;AAC/C,UAAM,kBAAkB,CAAC,QACvB,UAAU,IAAI,GAAG,KAAK,YAAY,GAAG,MAAM,UAAa,KAAK,GAAG,MAAM,UAAU,GAAG;AAGrF,UAAM,WAAiB,CAAC;AACxB,eAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC7C,UAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM,CAAC,gBAAgB,GAAG,EAAG,UAAS,GAAG,IAAI;AAAA,IACtF;AAEA,UAAM,SAAmB,CAAC;AAC1B,eAAW,OAAO,WAAW;AAC3B,UAAI,SAAS,GAAG,MAAM,OAAW;AACjC,YAAM,MAAM,gBAAgB,UAAU,KAAK,QAAW,OAAO;AAAA,QAC3D,QAAQ;AAAA,QACR,YAAY,cAAc,CAAC,KAAK;AAAA,QAChC,GAAI,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;AAAA,MAC/C,CAAC;AACD,UAAI,OAAO,QAAQ,YAAY,QAAQ,IAAI;AACzC,aAAK,GAAG,IAAI;AACZ,eAAO,KAAK,GAAG;AAAA,MACjB,WAAW,gBAAgB,GAAG,GAAG;AAC/B,eAAO,KAAK,GAAG;AAAA,MACjB;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,GAAG;AACrB,iBAAW,CAAC;AACZ,aAAO,KAAK,IAAI;AAAA,IAClB,WAAW,QAAQ;AACjB,aAAO,OAAO,KAAK;AAAA,IACrB;AAAA,EACF;AAEA,MAAI,UAAU,OAAO,KAAK,MAAM,EAAE,SAAS,GAAG;AAC5C,WAAO,MAAM,IAAI;AAAA,EACnB,OAAO;AACL,WAAO,OAAO,MAAM;AAAA,EACtB;AACF;;;AC/FO,SAAS,WAAyB;AACvC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,sBACE,MACwB;AACxB,aAAO,IAAI;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { ey as ChangeEvent, ci as Collection, gg as LiveQuery, gR as Noydb, dS as Query, V as Vault } from '../index-_6At2_9_.js';
|
|
2
|
+
import '../subject-index-O75wKshW.js';
|
|
3
|
+
import '../describe-Ccd1hS7a.js';
|
|
4
|
+
import '../index-B9QdHytu.js';
|
|
5
|
+
import '@noy-db/attestation';
|
package/dist/in/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hub-level write lifecycle hooks. `onBeforeWrite` may abort (throw);
|
|
3
|
+
* `onAfterWrite` is awaited and its errors are warned, not thrown. A
|
|
4
|
+
* re-entrancy flag suppresses nested firing so a handler that writes can't
|
|
5
|
+
* loop. Held on the Noydb instance, threaded into every Collection.
|
|
6
|
+
*/
|
|
7
|
+
interface WriteEvent {
|
|
8
|
+
readonly op: 'create' | 'update' | 'delete';
|
|
9
|
+
readonly vault: string;
|
|
10
|
+
readonly collection: string;
|
|
11
|
+
readonly docId: string;
|
|
12
|
+
readonly before: unknown;
|
|
13
|
+
readonly after: unknown;
|
|
14
|
+
readonly baseVersion: number;
|
|
15
|
+
readonly version: number;
|
|
16
|
+
readonly userId: string;
|
|
17
|
+
readonly timestamp: number;
|
|
18
|
+
readonly txId: string;
|
|
19
|
+
}
|
|
20
|
+
type WriteHook = (event: WriteEvent) => void | Promise<void>;
|
|
21
|
+
type Unsubscribe = () => void;
|
|
22
|
+
declare class WriteHookRegistry {
|
|
23
|
+
#private;
|
|
24
|
+
/** True while handlers are running — used by the write path to skip nested firing. */
|
|
25
|
+
get suppressed(): boolean;
|
|
26
|
+
/** True when any hook is registered (cheap gate for the write path). */
|
|
27
|
+
get hasHandlers(): boolean;
|
|
28
|
+
onBeforeWrite(handler: WriteHook): Unsubscribe;
|
|
29
|
+
onAfterWrite(handler: WriteHook): Unsubscribe;
|
|
30
|
+
/** Run before-hooks (awaited, in order). A throw propagates and aborts the write. */
|
|
31
|
+
runBefore(event: WriteEvent): Promise<void>;
|
|
32
|
+
/** Run after-hooks (awaited, in order). Per-handler errors are warned, not thrown. */
|
|
33
|
+
runAfter(event: WriteEvent): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Kernel coordination port — the injected `CoordinationProvider` seam for the
|
|
38
|
+
* schema-fence drain-barrier.
|
|
39
|
+
*
|
|
40
|
+
* The kernel defines this port; `@noy-db/by-tabs` / `@noy-db/by-peer` implement
|
|
41
|
+
* it for real-time quorum, and an external orchestrator (`@klum-db/lobby`)
|
|
42
|
+
* drives it through the `Noydb` handle without ever naming a `by-*` package.
|
|
43
|
+
* The dependency arrow is `by-* → kernel ← klum`, the app at the apex.
|
|
44
|
+
*
|
|
45
|
+
* This module carries only the port TYPES plus two pure-ish helpers:
|
|
46
|
+
* {@link isQuorum} (a pure quorum predicate extracted from the legacy
|
|
47
|
+
* `activeQuiesced`) and {@link runDrainBarrier} (the reusable barrier protocol
|
|
48
|
+
* the migration cutover and klum both call).
|
|
49
|
+
*
|
|
50
|
+
* @module
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
/** Vault fence state (the existing FenceDoc shape). */
|
|
54
|
+
interface FenceState {
|
|
55
|
+
readonly currentSchemaVersion: number;
|
|
56
|
+
readonly fenceState: 'normal' | 'draining' | 'migrating' | 'complete';
|
|
57
|
+
}
|
|
58
|
+
/** A writer's presence + ack, tagged with the session that owns it. */
|
|
59
|
+
interface WriterPresence {
|
|
60
|
+
/** = today's clientId (one per tab/peer). */
|
|
61
|
+
readonly writerId: string;
|
|
62
|
+
/** Groups one user's writers across vaults (consolidation is klum's job). */
|
|
63
|
+
readonly sessionId: string;
|
|
64
|
+
readonly lastSeen: number;
|
|
65
|
+
readonly quiescedAtVersion: number | null;
|
|
66
|
+
}
|
|
67
|
+
/** Session-addressable drain-barrier coordination transport. Per-vault ops. */
|
|
68
|
+
interface CoordinationProvider {
|
|
69
|
+
/** orchestrator → all writers */
|
|
70
|
+
setFence(vault: string, fence: FenceState): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Fresh one-shot fence read for the write-path gate (`assertWritable`).
|
|
73
|
+
* A direct read (not a cached `observeFence` snapshot) avoids a staleness
|
|
74
|
+
* window and keeps the timing-sensitive cutover gate exact. The store
|
|
75
|
+
* default reads `_meta/schema-fence`; `by-*` return their last-pushed fence.
|
|
76
|
+
*/
|
|
77
|
+
readFence(vault: string): Promise<FenceState>;
|
|
78
|
+
/** writer observes fence changes (default: poll-emit; by-*: push) */
|
|
79
|
+
observeFence(vault: string, onChange: (f: FenceState) => void): Unsubscribe;
|
|
80
|
+
/** writer → orchestrator: presence + ack (heartbeat + quiescedAtVersion) */
|
|
81
|
+
reportPresence(vault: string, p: WriterPresence): Promise<void>;
|
|
82
|
+
/** orchestrator observes presence changes (default: poll-emit; by-*: push) */
|
|
83
|
+
observePresence(vault: string, onChange: (writers: readonly WriterPresence[]) => void): Unsubscribe;
|
|
84
|
+
/** orchestrator one-shot snapshot of reachable writers (quorum input) */
|
|
85
|
+
reachableWriters(vault: string, o: {
|
|
86
|
+
staleMs: number;
|
|
87
|
+
now: number;
|
|
88
|
+
}): Promise<readonly WriterPresence[]>;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Pure quorum predicate: true when every writer (other than `excludeWriterId`)
|
|
92
|
+
* has acked at exactly `generation`. An empty set is trivially a quorum.
|
|
93
|
+
*
|
|
94
|
+
* Extracted from the legacy `activeQuiesced` store-polling check so the
|
|
95
|
+
* migration cutover, the store default provider, and `by-*` real-time
|
|
96
|
+
* providers all share one definition of "everyone has drained".
|
|
97
|
+
*/
|
|
98
|
+
declare function isQuorum(writers: readonly WriterPresence[], generation: number, excludeWriterId?: string): boolean;
|
|
99
|
+
/** Inputs for {@link runDrainBarrier}. */
|
|
100
|
+
interface DrainBarrierOptions {
|
|
101
|
+
readonly vault: string;
|
|
102
|
+
readonly generation: number;
|
|
103
|
+
readonly writerId: string;
|
|
104
|
+
readonly onFlush: () => Promise<void>;
|
|
105
|
+
readonly staleMs: number;
|
|
106
|
+
readonly quiesceTimeoutMs: number;
|
|
107
|
+
readonly now: () => number;
|
|
108
|
+
/** Optional seam (mainly for deterministic tests) run before each poll tick. */
|
|
109
|
+
readonly onPoll?: () => Promise<void>;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The reusable drain-barrier protocol shared by the migration cutover and klum:
|
|
113
|
+
*
|
|
114
|
+
* drain self → setFence(draining) → await quorum (presence push + isQuorum,
|
|
115
|
+
* polling as a fallback, or timeout) → run() → release-by-caller.
|
|
116
|
+
*
|
|
117
|
+
* Resolves once every reachable writer (excluding `writerId`) has quiesced at
|
|
118
|
+
* `generation`, at which point `run` is invoked exactly once. Rejects with
|
|
119
|
+
* {@link QuiesceTimeoutError} if `quiesceTimeoutMs` elapses first.
|
|
120
|
+
*/
|
|
121
|
+
declare function runDrainBarrier(provider: CoordinationProvider, o: DrainBarrierOptions, run: () => Promise<void>): Promise<void>;
|
|
122
|
+
|
|
123
|
+
export { type CoordinationProvider as C, type DrainBarrierOptions as D, type FenceState as F, type Unsubscribe as U, type WriteEvent as W, type WriteHook as a, WriteHookRegistry as b, type WriterPresence as c, isQuorum as i, runDrainBarrier as r };
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { cT as NoydbStore, dg as SealingKeyProvider, cF as UnlockedKeyring, ex as CargoStrategy } from './index-_6At2_9_.js';
|
|
2
|
+
import './ulid-DRH25k3y.js';
|
|
3
|
+
import './index-B9QdHytu.js';
|
|
4
|
+
import './kernel/index.js';
|
|
5
|
+
import './describe-Ccd1hS7a.js';
|
|
6
|
+
import './vault-diff-BtpiBvic.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Hub-core constants that must be referenceable without pulling any
|
|
10
|
+
* service chunk. Kept import-free.
|
|
11
|
+
*/
|
|
12
|
+
/** Reserved fleet-wide control-plane vault name. Hub reserves it for an outward orchestration framework's state/control-plane vault. */
|
|
13
|
+
declare const STATE_VAULT_NAME = "__noydb_state__";
|
|
14
|
+
/**
|
|
15
|
+
* Soft cap on the JSON-serialized user-envelope payload size. Generous (a
|
|
16
|
+
* typical profile + preferences + small app annex is ~1 KiB); rejects
|
|
17
|
+
* accidental "stuff app state in here" anti-patterns.
|
|
18
|
+
*/
|
|
19
|
+
declare const USER_ENVELOPE_MAX_BYTES: number;
|
|
20
|
+
/**
|
|
21
|
+
* Reserved store collection name for user envelopes. Starts with `_` so the
|
|
22
|
+
* keyring grant machinery propagates the DEK to every granted user via the
|
|
23
|
+
* existing system-collection DEK propagation path in `team/keyring.ts`.
|
|
24
|
+
*/
|
|
25
|
+
declare const USER_ENVELOPE_COLLECTION = "_users";
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* FR-6 — Deed: sealed / hidden-owner provisioning.
|
|
29
|
+
*
|
|
30
|
+
* A **Deed** is a vault owned by a *latent* principal who never
|
|
31
|
+
* authenticates. The owner credential (the random passphrase that
|
|
32
|
+
* derives `KEK_owner`) is minted machine-side and sealed under a
|
|
33
|
+
* **non-firm** {@link SealingKeyProvider} — that sealing boundary is
|
|
34
|
+
* the cryptographic *inalienability anchor*: whoever holds the
|
|
35
|
+
* provider (the client / their KMS) is the only party that can ever
|
|
36
|
+
* re-derive `KEK_owner`. A firm-side custodian operates the vault
|
|
37
|
+
* fully but can never reach the owner key — there is deliberately NO
|
|
38
|
+
* firm-controlled fallback.
|
|
39
|
+
*
|
|
40
|
+
* Provisioning reuses the managed-mode seam:
|
|
41
|
+
* - {@link resolveManagedSecret} mints + seals + persists the random
|
|
42
|
+
* passphrase at `_meta/sealed-passphrase` (and unseals it on every
|
|
43
|
+
* subsequent open through the same provider).
|
|
44
|
+
* - {@link createOwnerKeyring} derives `KEK_owner` from that
|
|
45
|
+
* passphrase and writes the `_keyring/<ownerUserId>` file.
|
|
46
|
+
*
|
|
47
|
+
* On top of that, a Deed writes a `_meta/deed` **marker**. The marker
|
|
48
|
+
* is PLAINTEXT metadata — it records WHO the latent owner is and WHICH
|
|
49
|
+
* sealing boundary protects them, so it must be readable without
|
|
50
|
+
* unlocking the vault (a custodian or auditor inspecting the vault must
|
|
51
|
+
* be able to see "this is a Deed vault, owner = X, sealed under Y"
|
|
52
|
+
* without any key). The marker itself is therefore never sealed; only
|
|
53
|
+
* the owner *credential* is.
|
|
54
|
+
*
|
|
55
|
+
* @module
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
/** Reserved id for the Deed marker under `_meta`. */
|
|
59
|
+
declare const DEED_RECORD_ID: "deed";
|
|
60
|
+
/**
|
|
61
|
+
* Plaintext metadata recording a vault's latent-owner Deed. Persisted
|
|
62
|
+
* at `_meta/deed`. Readable without unlocking the vault by design — it
|
|
63
|
+
* carries no secret material, only the identity of the latent owner
|
|
64
|
+
* and the sealing boundary that anchors inalienability.
|
|
65
|
+
*/
|
|
66
|
+
interface DeedMarker {
|
|
67
|
+
/** The latent owner principal — the user id of the `_keyring/<id>` owner file. */
|
|
68
|
+
readonly ownerUserId: string;
|
|
69
|
+
/**
|
|
70
|
+
* The `SealingKeyProvider.id` the owner credential is sealed under.
|
|
71
|
+
* The inalienability anchor: only the holder of this (non-firm)
|
|
72
|
+
* provider can re-derive `KEK_owner`. Audit metadata — never secret.
|
|
73
|
+
*/
|
|
74
|
+
readonly sealedUnder: string;
|
|
75
|
+
/** Always `true` for a Deed — the owner never authenticates interactively. */
|
|
76
|
+
readonly latent: true;
|
|
77
|
+
/** ISO-8601 timestamp the Deed was issued. */
|
|
78
|
+
readonly issuedAt: string;
|
|
79
|
+
/**
|
|
80
|
+
* ISO-8601 timestamp the vault was liberated (a new owner claimed it
|
|
81
|
+
* via the audited Liberate ceremony), if any. Absent until liberation.
|
|
82
|
+
*/
|
|
83
|
+
readonly liberatedAt?: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Provision a Deed: a latent owner whose credential is sealed under
|
|
87
|
+
* `sealing` (a NON-firm provider). Mints + seals the owner passphrase
|
|
88
|
+
* via {@link resolveManagedSecret}, derives the owner keyring via
|
|
89
|
+
* {@link createOwnerKeyring}, then writes the plaintext `_meta/deed`
|
|
90
|
+
* marker. Returns the unlocked owner keyring.
|
|
91
|
+
*
|
|
92
|
+
* The returned keyring is the only in-memory window onto `KEK_owner`
|
|
93
|
+
* for this call; the persistent re-entry point is the sealing provider
|
|
94
|
+
* (re-run {@link resolveManagedSecret} with the same provider to
|
|
95
|
+
* re-resolve the passphrase, then {@link createOwnerKeyring}/load to
|
|
96
|
+
* unlock — no interactive passphrase is ever required).
|
|
97
|
+
*
|
|
98
|
+
* There is deliberately no firm-controlled fallback: the marker's
|
|
99
|
+
* `sealedUnder` is the single cryptographic anchor of ownership.
|
|
100
|
+
*/
|
|
101
|
+
declare function createDeedOwner(store: NoydbStore, vault: string, ownerUserId: string, sealing: SealingKeyProvider): Promise<UnlockedKeyring>;
|
|
102
|
+
/**
|
|
103
|
+
* Read the {@link DeedMarker} from `_meta/deed`, or `null` if the vault
|
|
104
|
+
* has no Deed marker (i.e. it is not a Deed vault). Plaintext read — no
|
|
105
|
+
* unlocking required.
|
|
106
|
+
*/
|
|
107
|
+
declare function loadDeedMarker(store: NoydbStore, vault: string): Promise<DeedMarker | null>;
|
|
108
|
+
/** Whether `vault` carries a Deed marker (a sealed/latent owner). */
|
|
109
|
+
declare function isDeedVault(store: NoydbStore, vault: string): Promise<boolean>;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Enable the cargo (partition extraction) capability.
|
|
113
|
+
* Pass to `createNoydb({ cargoStrategy: withCargo() })` to make the source-side
|
|
114
|
+
* `extractPartition(vault, ...)` free function live. The extraction crypto
|
|
115
|
+
* engine is dynamically imported here, so it stays out of the floor bundle
|
|
116
|
+
* until opted in. The recipient-side `adoptPartition` /
|
|
117
|
+
* `decryptExtractedPartition` free functions — and `diffVault` (shared
|
|
118
|
+
* import/merge infra) — are ungated and unaffected.
|
|
119
|
+
*/
|
|
120
|
+
|
|
121
|
+
declare function withCargo(): CargoStrategy;
|
|
122
|
+
|
|
123
|
+
export { DEED_RECORD_ID as D, STATE_VAULT_NAME as S, USER_ENVELOPE_COLLECTION as U, type DeedMarker as a, USER_ENVELOPE_MAX_BYTES as b, createDeedOwner as c, isDeedVault as i, loadDeedMarker as l, withCargo as w };
|