@laceio/sdk 0.1.1 → 0.1.2-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{TransactionBuilder-DrB3NVTi.cjs → TransactionBuilder-CCjOn7NA.cjs} +42 -0
- package/dist/{TransactionBuilder-V6aLx4SV.js → TransactionBuilder-CIzdw18M.js} +1 -1
- package/dist/{_polyfill-buffer-patch-BnPVerlG.cjs → _polyfill-buffer-patch-CM8X7JiY.cjs} +21 -2
- package/dist/_polyfill-buffer-patch-yNxN4d5E.js +1467 -0
- package/dist/_web-crypto-random-bytes-Bo-GTcRS.js +197 -0
- package/dist/acc-module-4iIUv6My.cjs +27654 -0
- package/dist/acc-module-Cmj8EsIb.js +27624 -0
- package/dist/account-BOQruszJ.js +6 -0
- package/dist/account-BUOj4pYJ.cjs +11 -0
- package/dist/account-call-7wnopBq0.cjs +5 -0
- package/dist/account-call-B9d_2Xwi.js +4 -0
- package/dist/account-call-Bd4Rpbvt.cjs +323 -0
- package/dist/account-call-C3CkDqEC.js +276 -0
- package/dist/account-guards-BtjTGxDZ.cjs +42 -0
- package/dist/account-guards-D9Lu5T3W.js +36 -0
- package/dist/account-tokens-DvkOFVON.js +16 -0
- package/dist/account-tokens-nwcvwLu4.cjs +21 -0
- package/dist/{activity-type.stable-BJEfeLxL.cjs → activity-type-Ch6ljxBy.cjs} +2 -1
- package/dist/{activity-type.stable-C76_hWd7.js → activity-type-GsJGWs-3.js} +2 -1
- package/dist/address-B9ntKL8K.js +13761 -0
- package/dist/address-BXp-mY8H.cjs +11270 -0
- package/dist/{address-book-address-validator-DIUolI-s.js → address-book-address-validator-0J9XAADH.js} +2 -2
- package/dist/address-book-address-validator-DK0dnsRS.cjs +41 -0
- package/dist/address-book-address-validator-Di_ywo8M.js +39 -0
- package/dist/{address-book-address-validator-DNwQGlOB.cjs → address-book-address-validator-Dte_YQ2L.cjs} +2 -2
- package/dist/artefact-loader-BWWYAD7E.cjs +183 -0
- package/dist/artefact-loader-Dik4HIfv.js +160 -0
- package/dist/auto-dismiss-failure-on-success-C-qoJuid.cjs +37 -0
- package/dist/auto-dismiss-failure-on-success-s8MGDEIu.js +31 -0
- package/dist/bip32-D6wd_QMn.cjs +3851 -0
- package/dist/bitcoin-data-provider-BYPSmuZS.js +21 -0
- package/dist/bitcoin-data-provider-w1oEDSU3.cjs +26 -0
- package/dist/bitcoin.cjs +45 -0
- package/dist/bitcoin.d.ts +29906 -1
- package/dist/bitcoin.js +20 -0
- package/dist/{blockfrost-tx-submit-provider-DPTrapz-.js → blockfrost-tx-submit-provider-CBWQ0wK9.js} +5 -157
- package/dist/{blockfrost-tx-submit-provider-BAIzV5o3.cjs → blockfrost-tx-submit-provider-CLNQ5ycR.cjs} +3 -167
- package/dist/bn-d3nSOIf7.cjs +2553 -0
- package/dist/browser-B1eMbDwh.js +7468 -0
- package/dist/bytes.vo-BB7_4JK6.js +23 -0
- package/dist/bytes.vo-BNRquqaO.cjs +34 -0
- package/dist/cardano-DfPwhwm-.js +3 -0
- package/dist/{cardano-network-id.vo-DSxrFk9S.cjs → cardano-network-id.vo-BEDPn6Li.cjs} +1 -1
- package/dist/{cardano-network-id.vo-CK1tNQDg.js → cardano-network-id.vo-Cfpvbod9.js} +1 -1
- package/dist/cardano.cjs +22 -18
- package/dist/cardano.d.ts +16956 -1716
- package/dist/cardano.js +16 -11
- package/dist/client-DXBLHk7K.cjs +808 -0
- package/dist/codecs-Cswkg7Tm.cjs +4051 -0
- package/dist/codecs-Dc1Krpbt.js +3903 -0
- package/dist/{const-C84qHkjp.js → const-BJfIK_G-.js} +4 -4
- package/dist/const-BhYOdznB.cjs +42 -0
- package/dist/const-BsnjG2_Q.cjs +32071 -0
- package/dist/const-CUnCl5U0.js +13 -0
- package/dist/{const-DXk2tFyv.js → const-CjmfjBP3.js} +1 -1
- package/dist/{const-BDEg2Trq.cjs → const-D-eZIS4n.cjs} +4 -4
- package/dist/const-D0CbQlo4.js +154 -0
- package/dist/{const-BY8B3_0_.cjs → const-iwzZEE_w.cjs} +1 -1
- package/dist/contract-1R86jhSw.js +171 -0
- package/dist/contract-MKLzYVkW.cjs +189 -0
- package/dist/create-add-accounts-Brqk84vF.js +102 -0
- package/dist/create-add-accounts-DzXIh7Ot.cjs +114 -0
- package/dist/{delegation-tx-builder-CRpLP6jH.cjs → delegation-tx-builder-CCjiakoy.cjs} +6 -6
- package/dist/{delegation-tx-builder-CGVqlaFE.js → delegation-tx-builder-DZFjHDS8.js} +5 -5
- package/dist/{deregistration-tx-builder-B-CrUyX6.js → deregistration-tx-builder-Bf6xAYp4.js} +5 -5
- package/dist/{deregistration-tx-builder-DZGwB4cz.cjs → deregistration-tx-builder-CQP35yex.cjs} +6 -6
- package/dist/device-commitment-hex.vo-5wFtQvDS.js +26 -0
- package/dist/device-commitment-hex.vo-CT3RmAug.cjs +31 -0
- package/dist/device-readers-CUHYoYOH.js +145 -0
- package/dist/device-readers-CdxS2btd.cjs +168 -0
- package/dist/device-readers-D_JZeNL2.cjs +8 -0
- package/dist/device-readers-DwSNCGPP.js +4 -0
- package/dist/dist-BMi5ZjEq.cjs +43175 -0
- package/dist/dist-BtIq4XFn.cjs +535 -0
- package/dist/dist-C3SHC_Ho.cjs +1394 -0
- package/dist/dist-CykEjYEX.cjs +3814 -0
- package/dist/dist-Dcsxh3be.cjs +3452 -0
- package/dist/dist-DqJfSlTd.cjs +4413 -0
- package/dist/dist-nTZ70qj7.cjs +1306 -0
- package/dist/{earn-rewards-tx-builder-BDbTDZmD.js → earn-rewards-tx-builder-Bsga3yFb.js} +5 -5
- package/dist/{earn-rewards-tx-builder-D5sUT5v8.cjs → earn-rewards-tx-builder-GuxofYns.cjs} +6 -6
- package/dist/enc-key-circuits-B7BjgUL9.js +13 -0
- package/dist/enc-key-circuits-BLrZrBVI.cjs +24 -0
- package/dist/english-Byb9M0E_.cjs +2057 -0
- package/dist/envelopes-BGoO_v8m.js +1621 -0
- package/dist/envelopes-CH25R-DN.cjs +1722 -0
- package/dist/errors-BIftM8ZN.cjs +688 -0
- package/dist/errors-DSq5wUwt.js +466 -0
- package/dist/esm-HBSUQw3w.js +384 -0
- package/dist/esm-LZuaZjMf.cjs +389 -0
- package/dist/experimental.cjs +7349 -0
- package/dist/experimental.d.ts +86273 -0
- package/dist/experimental.js +7184 -0
- package/dist/gated-call-CDCVZIK-.cjs +5 -0
- package/dist/gated-call-D-tT7P_t.js +722 -0
- package/dist/gated-call-D_VT2quk.js +4 -0
- package/dist/gated-call-DgJm1Mi_.cjs +787 -0
- package/dist/grant-circuits-DswmW3nI.cjs +71 -0
- package/dist/grant-circuits-Jxb5y1HW.js +42 -0
- package/dist/grant-rules-By07_eDi.js +6824 -0
- package/dist/grant-rules-BzVTWXS7.cjs +7099 -0
- package/dist/grant-spend-B3Md9L0n.js +215 -0
- package/dist/grant-spend-oWmzRsjH.cjs +217 -0
- package/dist/grant-status-B2y49iIu.js +2688 -0
- package/dist/grant-status-DOr3t_u8.cjs +2820 -0
- package/dist/grants-2BZ-qEVQ.js +5 -0
- package/dist/grants-BPoLSiMt.cjs +18 -0
- package/dist/grants-BoI5uwSF.cjs +272 -0
- package/dist/grants-CtofFu-e.js +213 -0
- package/dist/{group-cardano-addresses-by-account-B533oVXR.cjs → group-cardano-addresses-by-account-Bp0g4wEY.cjs} +3 -39
- package/dist/{group-cardano-addresses-by-account-RHKoEskR.js → group-cardano-addresses-by-account-SR8MMrZf.js} +5 -35
- package/dist/{guarded-transaction-signer-Bxl6_XNd.cjs → guarded-transaction-signer-MFpPg98D.cjs} +17 -18
- package/dist/{guarded-transaction-signer-CpKLj8Kp.js → guarded-transaction-signer-P6Rp1faj.js} +8 -15
- package/dist/hex-D9ITYbwt.cjs +263 -0
- package/dist/hex-mkXcV3pN.js +191 -0
- package/dist/http-client-B3N-TMxu.cjs +167 -0
- package/dist/http-client-TRlhDZGh.js +155 -0
- package/dist/identity-BMLuufva.cjs +263 -0
- package/dist/identity-DII6f-h7.js +233 -0
- package/dist/in-memory-wallet-integration-B2xzxORj.cjs +20741 -0
- package/dist/in-memory-wallet-integration-CBRiPjLO.js +130 -0
- package/dist/in-memory-wallet-integration-CULUB5Tf.cjs +240 -0
- package/dist/{in-memory-wallet-integration-D-qn65Kx.js → in-memory-wallet-integration-ChIOirMW.js} +5 -2
- package/dist/{in-memory-wallet-integration-Croiuopx.js → in-memory-wallet-integration-CljprQQV.js} +7 -104
- package/dist/{in-memory-wallet-integration-DVh9sRXa.cjs → in-memory-wallet-integration-Cm6P8sk6.cjs} +3 -2
- package/dist/in-memory-wallet-integration-TM9bBphA.js +20738 -0
- package/dist/{in-memory-wallet-integration-CnLYeX4-.cjs → in-memory-wallet-integration-t9I00R_V.cjs} +17 -108
- package/dist/index.cjs +84 -47
- package/dist/index.d.ts +37496 -10033
- package/dist/index.js +52 -24
- package/dist/{init-CLHuAMB-.js → init-0zzs9aqU.js} +4 -4
- package/dist/{init-U8c9yHYx.cjs → init-5KcGcBb5.cjs} +1 -1
- package/dist/init-8v_n8boO.js +1177 -0
- package/dist/{init-CigestoM.js → init-B3-1ghyx.js} +2 -2
- package/dist/init-B8U3ABhS.cjs +107 -0
- package/dist/init-BJn-8_hf.js +141 -0
- package/dist/init-BPU3j8sT.cjs +6 -0
- package/dist/init-BRzH6xu-2.cjs +2797 -0
- package/dist/init-BmzfDaKL.js +1142 -0
- package/dist/{init-C-jErzp5.cjs → init-BopV9ed4.cjs} +2 -2
- package/dist/init-BpHTq2R5.js +105 -0
- package/dist/init-BpSITBfF.js +39 -0
- package/dist/{init-DX4WyB0R.cjs → init-BrdVzxei.cjs} +3 -3
- package/dist/{init-LfyMo-sS.cjs → init-BwkU0ruo.cjs} +2 -2
- package/dist/{init-CB__aLD7.cjs → init-C-G32J12.cjs} +2 -2
- package/dist/init-C00gw1zi.js +422 -0
- package/dist/{init-TkPq_Ny_.js → init-C2RgrfZe.js} +1 -1
- package/dist/{init-DcYY6zMD.js → init-C8URA2OX.js} +1 -1
- package/dist/init-CDkRynJa.js +2796 -0
- package/dist/{init-Cg9XdAru.js → init-CNM5m7M2.js} +4 -4
- package/dist/init-CR7BfztQ.cjs +18 -0
- package/dist/{init-CSHwHnfg.cjs → init-CSDpdu0Q.cjs} +2 -2
- package/dist/{init-aJHl-7AO.js → init-CX0AMQUn.js} +2 -2
- package/dist/{init-FMGDET-9.js → init-CfTbSEKy.js} +259 -60
- package/dist/{init-CR6tpw1B.js → init-Cigr_tKx.js} +47 -43
- package/dist/init-CuW7rHNA.js +3584 -0
- package/dist/{init-CFYsq82V.js → init-CyAY4Lzl.js} +1 -1
- package/dist/init-Cz0rz5fU.cjs +3585 -0
- package/dist/{init-BKhH6mVR.cjs → init-D6BxBs7e.cjs} +1 -1
- package/dist/init-D8OeObDF.cjs +1141 -0
- package/dist/init-D9g1HXYf.cjs +40 -0
- package/dist/{init-CNLGJJRx.js → init-DA7zmptx.js} +1 -1
- package/dist/{init-DkIc5nqF.cjs → init-DFMiP2ZH.cjs} +1 -1
- package/dist/{init-zSzCjoor.js → init-DFjT8YvT.js} +4 -4
- package/dist/init-DGjXwWs2.cjs +143 -0
- package/dist/init-DHrCbpkW.cjs +121 -0
- package/dist/{init-B64zCLxG.cjs → init-DUF4ar8P.cjs} +4 -4
- package/dist/init-DlqJuHhl.js +119 -0
- package/dist/{init-y2Ra0vZP.js → init-Dnsv155v.js} +3 -3
- package/dist/init-DrRdf5sZ.cjs +1176 -0
- package/dist/init-DuYENxci.js +17 -0
- package/dist/{init-D6DBUsD3.cjs → init-Dv3zKj0r.cjs} +4 -4
- package/dist/{init-BtzMZ7Pk.cjs → init-Dy-05ktr.cjs} +1 -1
- package/dist/{init-BsCBAGWf.cjs → init-EP0CUWNK.cjs} +2 -2
- package/dist/{init-BJVU54pI.cjs → init-EhzD7a8i.cjs} +1 -1
- package/dist/{init-w9GEs73W.js → init-Fw89ZmrR.js} +2 -2
- package/dist/init-GsT2AEa4.cjs +424 -0
- package/dist/{init-Rxohwpmu.js → init-NCjgwCZy.js} +2 -2
- package/dist/{init-DxUHsN53.cjs → init-NdhG_VrF.cjs} +6 -6
- package/dist/{init-DDdhguVC.js → init-SZ01tARX2.js} +2 -2
- package/dist/{init-BAJJzBza.js → init-Y3mkB4XS.js} +2 -2
- package/dist/init-c4l6r-o-.js +5 -0
- package/dist/{init-Dku4b2lG.js → init-kEfUTuG2.js} +1 -1
- package/dist/{init-C7IeJwQR.cjs → init-lzHt4Cli.cjs} +256 -59
- package/dist/{init-anYu6XB7.cjs → init-rmt7-fQE.cjs} +2 -2
- package/dist/{init-C4Bkib9u.cjs → init-zU-_9Gsp.cjs} +67 -65
- package/dist/{is-retriable-error-BU0e3hVI.js → is-retriable-error-BUiVJDwH.js} +1 -1
- package/dist/{is-retriable-error-CeeuHqDa.cjs → is-retriable-error-Dpt860if.cjs} +1 -1
- package/dist/jubjub-authoriser-D7zDXu3V.js +86 -0
- package/dist/jubjub-authoriser-Dgu6o3Sv.cjs +87 -0
- package/dist/key-source-5oUBFiC7.cjs +583 -0
- package/dist/key-source-B08HukZg.js +2550 -0
- package/dist/keyDerivation-D3k9XyHg.js +4077 -0
- package/dist/keyDerivation-u0nBA93T.cjs +274 -0
- package/dist/{lace-context-CZcNHr4M.js → lace-context-BZciB9c7.js} +4 -4
- package/dist/{lace-context-fJTDghdp.cjs → lace-context-DgR6vLli.cjs} +4 -4
- package/dist/lib--iqvW4O_.js +2354 -0
- package/dist/lib-Yk6Upl5D.cjs +2359 -0
- package/dist/{libsodium-wrappers-UH0LaOUE.js → libsodium-wrappers-BhbOA8dQ.js} +3 -1647
- package/dist/midnight-account-id.vo-0x9X-r3l.cjs +10 -0
- package/dist/midnight-account-id.vo-DjCAGcqc.js +5 -0
- package/dist/midnight-engine-DpemplKO.js +5 -0
- package/dist/midnight-engine-xU1wotne.cjs +6 -0
- package/dist/midnight-wallet-DIsAlSn6.js +18 -0
- package/dist/midnight-wallet-XTZc2li7.cjs +24 -0
- package/dist/midnight.cjs +1408 -0
- package/dist/midnight.d.ts +28934 -0
- package/dist/midnight.js +1352 -0
- package/dist/modules-cardano-B1nDUWqy.js +995 -0
- package/dist/modules-cardano-BYeYHrRm.cjs +1108 -0
- package/dist/node-relay-DWe1U0w2.cjs +49 -0
- package/dist/node-relay-h4i5IlAQ.js +48 -0
- package/dist/outputs-Bd2yZVjx.js +720 -0
- package/dist/outputs-CJoQBIA2.cjs +990 -0
- package/dist/pbkdf2-CIW-oWrm.cjs +1337 -0
- package/dist/pending-operation-B0_P78Jo.cjs +26 -0
- package/dist/pending-operation-BIS6mpjB.js +21 -0
- package/dist/providers-FjhM47BH.cjs +388 -0
- package/dist/providers-WtiSuxFu.js +365 -0
- package/dist/redacted-BmE2aXqr.js +81 -0
- package/dist/redacted-CRZJLS3w.cjs +86 -0
- package/dist/{retry-config-DC5IMaH7.cjs → retry-config-BaCfVC1H.cjs} +1 -1
- package/dist/{retry-config-BcUmMS--.js → retry-config-Dmgt28wM.js} +1 -1
- package/dist/safe-buffer-B_vMqJWU.js +43 -0
- package/dist/safe-buffer-DYOwEfHB.cjs +48 -0
- package/dist/sdk-Cb-gZnS9.js +1241 -0
- package/dist/sdk-DffwmX8b.cjs +1439 -0
- package/dist/sdk-init-Bln9rFtn.js +4138 -0
- package/dist/sdk-init-CYViTJY_.cjs +3841 -0
- package/dist/{seam-cardano-CATqBEyK.js → seam-cardano-B_etH4F4.js} +1 -1
- package/dist/{bytes.vo-TgiwogWF.js → secret-box-DUR0ACYz.js} +3 -25
- package/dist/{bytes.vo-Ck5u40RA.cjs → secret-box-DrjLZuS1.cjs} +1 -35
- package/dist/send-proof-progress-C-ljq1x5.js +30 -0
- package/dist/send-proof-progress-vmsaSfbz.cjs +47 -0
- package/dist/side-effects-BnqYz7Nl.js +768 -0
- package/dist/side-effects-CngaeXi0.cjs +804 -0
- package/dist/sign-bitcoin-transaction-with-seed-D4z62-jV.js +147 -0
- package/dist/sign-bitcoin-transaction-with-seed-DsLYXnCY.cjs +158 -0
- package/dist/signer-3fk8lZtE.cjs +7 -0
- package/dist/signer-CsL28DrK.cjs +121 -0
- package/dist/signer-DGluibtn.js +92 -0
- package/dist/signer-RqB5pu3K.js +2 -0
- package/dist/signer-factory-BA7WFJVZ.js +282 -0
- package/dist/signer-factory-Cwd6o-lG.cjs +281 -0
- package/dist/{signer-factory-9URFliA5.js → signer-factory-DObB55D4.js} +6 -3
- package/dist/signer-factory-DhZiE03y.cjs +149 -0
- package/dist/{signer-factory-BWGUmnvm.cjs → signer-factory-Ds6G2AZk.cjs} +4 -3
- package/dist/signer-factory-hzSRaIw2.js +148 -0
- package/dist/{slice-CuHUaPZx.cjs → slice-7G2xxYKJ.cjs} +3 -3
- package/dist/{slice-DZmQJNV8.cjs → slice-B4CdYoPu.cjs} +2 -2
- package/dist/slice-BPNuHKfw.js +9091 -0
- package/dist/{slice-DGcNrbPR.cjs → slice-Bg6HEr3K.cjs} +4 -4
- package/dist/{slice-DtaO72qY.cjs → slice-Bs2aMERu.cjs} +3 -3
- package/dist/{slice-HeHCv3bl.cjs → slice-C34iOOUH.cjs} +7 -7
- package/dist/{slice-Do2R2CYW.cjs → slice-C9TT5KhY.cjs} +6 -6
- package/dist/{slice-eIwcwKHI.js → slice-CK07EBCo.js} +4 -4
- package/dist/{slice-CnyWevM9.js → slice-CU80pbiu.js} +3 -3
- package/dist/{slice-CobanYgn.js → slice-CwyYrh1H.js} +2 -2
- package/dist/slice-Czfp6t84.cjs +436 -0
- package/dist/{slice-d0p6-xj5.js → slice-D-9aPKG-.js} +6 -6
- package/dist/{slice-maaskdUn.js → slice-DBpJ2QGf.js} +6 -6
- package/dist/{slice-mxLQ_FeY.cjs → slice-DTZTiJle.cjs} +352 -39
- package/dist/{slice-zJ9XVYjZ.js → slice-Da426sf9.js} +1 -1
- package/dist/{slice-D11m2EKl.cjs → slice-DayJvMRD.cjs} +1 -1
- package/dist/slice-DnBWfA-k.cjs +9109 -0
- package/dist/{slice-oqm_r1cS.cjs → slice-DnG-yvpI.cjs} +2 -2
- package/dist/{slice-BNu73oBa.js → slice-DyNs7oWp.js} +2 -2
- package/dist/{slice-CB4SnzMm.js → slice-GwiiJRoq.js} +3 -3
- package/dist/slice-oWnc7YVD.js +412 -0
- package/dist/{slice-B2PhoWAg.js → slice-qt0uBExh.js} +325 -37
- package/dist/slice-t8Gzj55G2.cjs +106 -0
- package/dist/slice-t8Q1cHm-.js +88 -0
- package/dist/src-BDzYIksE.cjs +20637 -0
- package/dist/src-BFoefPv_.js +20755 -0
- package/dist/store-B1Lq3cEf.cjs +66 -0
- package/dist/store-DuBG8qh5.js +37 -0
- package/dist/submit-Bs77dPn_.cjs +413 -0
- package/dist/submit-DOv8Z0Vf.js +336 -0
- package/dist/submit-bitcoin-tx-D6oYgH5S.js +983 -0
- package/dist/submit-bitcoin-tx-goFuRL7K.cjs +1049 -0
- package/dist/{sync-operation-utils-BYXLO80m.js → sync-operation-utils-31iFLExW.js} +2 -38
- package/dist/{sync-operation-utils-SdPbwFoD.cjs → sync-operation-utils-COIZ66-I.cjs} +1 -67
- package/dist/token-id-mapper-Bnds3xKH.cjs +18 -0
- package/dist/{token-id-mapper-DsPAL6Nh.cjs → token-id-mapper-CVyQJUKY.cjs} +2 -2
- package/dist/token-id-mapper-CnKHQ8DV.js +16 -0
- package/dist/{token-id-mapper-B2ivlLv3.js → token-id-mapper-D29Ggv8h.js} +2 -2
- package/dist/tokens-Cevp7rdU.cjs +62 -0
- package/dist/tokens-Diw4MLRM.js +44 -0
- package/dist/types-B8uiJn-X.js +12 -0
- package/dist/types-BHC12eSa.js +33 -0
- package/dist/types-CJT6XF2c.js +10 -0
- package/dist/types-CLRUYpfe.cjs +23 -0
- package/dist/types-Cc3mC8u0.cjs +50 -0
- package/dist/types-DWbVZpnF.cjs +15 -0
- package/dist/unwrap-provider-result-BZSiwabU.js +32 -0
- package/dist/unwrap-provider-result-ZqfBsTkk.cjs +39 -0
- package/dist/{util-CGzqQ8IV.cjs → util-Bu4W5lF4.cjs} +1 -1
- package/dist/{util-BaLzwa32.js → util-Cp5cZkfK.js} +1 -1
- package/dist/{utils-o8aMjfln.js → utils-BfBEUvWA.js} +2 -2
- package/dist/utils-DFwzEvbv.js +65 -0
- package/dist/{utils-5JvjbqH3.cjs → utils-DsElZgCI.cjs} +7 -1
- package/dist/utils-IXxR-Djh.cjs +112 -0
- package/dist/v8Signatures-CO_Uloy7.cjs +71 -0
- package/dist/{vote-delegation-tx-builder-BpEMSti4.cjs → vote-delegation-tx-builder-BUg1S2Ep.cjs} +6 -6
- package/dist/{vote-delegation-tx-builder-CmKv6GoG.js → vote-delegation-tx-builder-C6FiS7zI.js} +5 -5
- package/dist/watch-CUEvcP-V.js +21997 -0
- package/dist/watch-DMF2s-II.cjs +52281 -0
- package/package.json +96 -4
- package/dist/account-guards.stable-B1DSSh9D.cjs +0 -10
- package/dist/account-guards.stable-JRQ5qx2V.js +0 -5
- package/dist/codecs-B7X9pAsK.cjs +0 -1945
- package/dist/codecs-CC1Xjntz.js +0 -1882
- package/dist/init-Bv53hpLM.js +0 -19
- package/dist/init-CRbjI7p1.js +0 -3494
- package/dist/init-DAna1KCg.cjs +0 -3495
- package/dist/init-DGe47B22.cjs +0 -364
- package/dist/init-DMtyvYfC.cjs +0 -21
- package/dist/init-TkPDD750.js +0 -363
- package/dist/modules-cardano-BDvuL4Xx.js +0 -5248
- package/dist/modules-cardano-D2G3De2P.cjs +0 -5432
- package/dist/slice-CGVHXHDt.cjs +0 -125
- package/dist/slice-DhvF7L6X.js +0 -107
- /package/dist/{account-id.vo-LvCBVn5r.cjs → account-id.vo-DwqFjK5u.cjs} +0 -0
- /package/dist/{account-id.vo-MYSI7YFm.js → account-id.vo-OPz2v-JZ.js} +0 -0
- /package/dist/{actions-DdGbj7c7.cjs → actions-B2BJ4RTy.cjs} +0 -0
- /package/dist/{actions-9QSQR-GB.js → actions-iLXdgL5Y.js} +0 -0
- /package/dist/{apply-vkey-witnesses-ClZbpk5w.js → apply-vkey-witnesses-BKx3lcs0.js} +0 -0
- /package/dist/{apply-vkey-witnesses-CLzVSWxl.cjs → apply-vkey-witnesses-ZnFS0jnJ.cjs} +0 -0
- /package/dist/{asyncoption-Cw07zPH7.js → asyncoption-CruEYOBI.js} +0 -0
- /package/dist/{asyncoption-DYoGuQfP.cjs → asyncoption-i0VbqVTq.cjs} +0 -0
- /package/dist/{bignum.vo-B0rK_PQ1.js → bignum.vo-CEXOIew0.js} +0 -0
- /package/dist/{bignum.vo-DsG3kNiZ.cjs → bignum.vo-hx2kuqlA.cjs} +0 -0
- /package/dist/{bip32ed25519-1ApqeAZk.cjs → bip32ed25519-B7Yat217.cjs} +0 -0
- /package/dist/{bip32ed25519-DetAdGwD.js → bip32ed25519-FQ8qvdcq.js} +0 -0
- /package/dist/{blake2b-DOEVc57D.js → blake2b-BiQTw3GC.js} +0 -0
- /package/dist/{blake2b-B9tftbvG.cjs → blake2b-DEeVUdKR.cjs} +0 -0
- /package/dist/{blockchain-network-id.vo-BXpZhvvQ.cjs → blockchain-network-id.vo-BAKEwGjG.cjs} +0 -0
- /package/dist/{blockchain-network-id.vo-DNRkuT5B.js → blockchain-network-id.vo-CiVykuqG.js} +0 -0
- /package/dist/{blockingWithLatestFrom-C5wp_uA-.js → blockingWithLatestFrom-Cd8c8EPG.js} +0 -0
- /package/dist/{blockingWithLatestFrom-DY8OPg0w.cjs → blockingWithLatestFrom-D8kBPBMX.cjs} +0 -0
- /package/dist/{cardano-network-id-to-network-type-CrZfUcyP.js → cardano-network-id-to-network-type-BWwzeEtM.js} +0 -0
- /package/dist/{cardano-network-id-to-network-type-BDTF-HmK.cjs → cardano-network-id-to-network-type-C0ufJOyE.cjs} +0 -0
- /package/dist/{cardano-tx-id.vo-BPhV-AmZ.cjs → cardano-tx-id.vo-TLjJZHCI.cjs} +0 -0
- /package/dist/{cardano-tx-id.vo-DF9NzZXk.js → cardano-tx-id.vo-eVnKuzlm.js} +0 -0
- /package/dist/{composite-signer-factory-_46QsNBz.js → composite-signer-factory-CR8YHA1y.js} +0 -0
- /package/dist/{composite-signer-factory-BpF1mIYA.cjs → composite-signer-factory-m5cVs9h_.cjs} +0 -0
- /package/dist/{error-CNIquqT5.cjs → error-Cb3EnD0u.cjs} +0 -0
- /package/dist/{error-BCp9NkPi.js → error-DIZOY2Lw.js} +0 -0
- /package/dist/{esm-browser-C93Q-EOI.js → esm-browser-MG97cre9.js} +0 -0
- /package/dist/{esm-browser-DTc9IK3D.cjs → esm-browser-bweqfBlL.cjs} +0 -0
- /package/dist/{feature-flag-key.vo-ofrB6ZVQ.js → feature-flag-key.vo-DN_-4-sG.js} +0 -0
- /package/dist/{feature-flag-key.vo-BPz-ZAp6.cjs → feature-flag-key.vo-RlfHL3hq.cjs} +0 -0
- /package/dist/{first-state-of-status-OROkXcRv.cjs → first-state-of-status-CbT7hPa4.cjs} +0 -0
- /package/dist/{first-state-of-status-DQnMT3ya.js → first-state-of-status-unPynOuM.js} +0 -0
- /package/dist/{init-Es3wHW7D.js → init-829HRYcz.js} +0 -0
- /package/dist/{init-CKipPE_c.js → init-A-VyGSNW2.js} +0 -0
- /package/dist/{init-DFQQ9dTW.cjs → init-Atisw4x2.cjs} +0 -0
- /package/dist/{init-C5CEZ1m0.cjs → init-BFcvPHL-.cjs} +0 -0
- /package/dist/{init-IAk_CkGa.cjs → init-BgNobbNq.cjs} +0 -0
- /package/dist/{init-cqN3uX2j.js → init-atCFur0v.js} +0 -0
- /package/dist/{is-redux-persist-state-CTn3WZVh.cjs → is-redux-persist-state-BCFnSm36.cjs} +0 -0
- /package/dist/{is-redux-persist-state-Cxcd0_bM.js → is-redux-persist-state-yBfq0h_E.js} +0 -0
- /package/dist/{key-value-store-8cMzeNyG.js → key-value-store--W3SrMaw.js} +0 -0
- /package/dist/{key-value-store-DUAepXQf.cjs → key-value-store-C2Xt5Emp.cjs} +0 -0
- /package/dist/{repo-slice-WxetRhMY.cjs → repo-slice-7X4AYYVm.cjs} +0 -0
- /package/dist/{repo-slice-DwyMhCR1.js → repo-slice-RxFm0zDZ.js} +0 -0
- /package/dist/{reselect-CRDqmQY9.cjs → reselect-Bd94u0K-.cjs} +0 -0
- /package/dist/{reselect-C06X06oX.js → reselect-CGoLzEPv.js} +0 -0
- /package/dist/{serializable-B8GahgE1.js → serializable-BHdKIgk3.js} +0 -0
- /package/dist/{serializable-CRdnFaLZ.cjs → serializable-BxHkoPdk.cjs} +0 -0
- /package/dist/{slice-D11FHQuQ.cjs → slice-BiRsDKOK.cjs} +0 -0
- /package/dist/{slice-Be7hj4Iy.js → slice-Bk0Sv05J.js} +0 -0
- /package/dist/{slice-FioKeHtA.cjs → slice-Dqw1ecum.cjs} +0 -0
- /package/dist/{slice-B87b52iM.js → slice-obCSLm1x.js} +0 -0
- /package/dist/{src-vq1wS9sZ.js → src-BlxEp6Mm.js} +0 -0
- /package/dist/{src-BTPIvlDI.cjs → src-Cqp0B2M_.cjs} +0 -0
- /package/dist/{time.vo-CQ8pSXz2.cjs → time.vo-D3wWRw9L.cjs} +0 -0
- /package/dist/{time.vo-DkYYGYp6.js → time.vo-tNheinXm.js} +0 -0
- /package/dist/{toEmpty-CgAl3097.js → toEmpty-8Zax1MPd.js} +0 -0
- /package/dist/{toEmpty-DAMmNB5r.cjs → toEmpty-CYAbupM4.cjs} +0 -0
- /package/dist/{token-id.vo-ClsroxHO.js → token-id.vo-Bvwhr3ZE.js} +0 -0
- /package/dist/{token-id.vo-BxG9TG0O.cjs → token-id.vo-DXv5uS9n.cjs} +0 -0
- /package/dist/{util-DxzlYNS5.js → util-C8a4fA9p.js} +0 -0
- /package/dist/{util-CmdAhheh.cjs → util-CzeB3hfa.cjs} +0 -0
- /package/dist/{util-selector-CcK-GAdE.js → util-selector-BSTsxgne.js} +0 -0
- /package/dist/{util-selector-BcAncU4L.cjs → util-selector-BWPH68_l.cjs} +0 -0
- /package/dist/{while-active-BpppWuCs.js → while-active-B0lWy_6l.js} +0 -0
- /package/dist/{while-active-Dhc2LwOm.cjs → while-active-Dsowp0Fi.cjs} +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { n as import_buffer, r as init__polyfill_buffer_patch } from "./_polyfill-buffer-patch-yNxN4d5E.js";
|
|
2
|
+
import { t as SecretBox } from "./secret-box-DUR0ACYz.js";
|
|
3
|
+
import { CustomError } from "ts-custom-error";
|
|
4
|
+
//#region ../../packages/contract/network/src/resolve-blockchain-network-targets.ts
|
|
5
|
+
/**
|
|
6
|
+
* Returns a function that resolves an optional set of Lace
|
|
7
|
+
* {@link BlockchainNetworkId} values to chain-specific representations using a
|
|
8
|
+
* lookup map, with the same semantics as the in-memory wallet integrations:
|
|
9
|
+
*
|
|
10
|
+
* - `targets` undefined → all supported targets (the provided default list)
|
|
11
|
+
* - empty set → throws
|
|
12
|
+
* - non-empty set → each id must exist in the map or throws
|
|
13
|
+
*/
|
|
14
|
+
const createBlockchainNetworkTargetResolver = (supportedByBlockchainNetworkId, defaultForAllSupported) => (targets) => {
|
|
15
|
+
if (targets === void 0) return [...defaultForAllSupported];
|
|
16
|
+
if (targets.size === 0) throw new Error("Empty target networks");
|
|
17
|
+
return Array.from(targets, (id) => {
|
|
18
|
+
const resolved = supportedByBlockchainNetworkId.get(id);
|
|
19
|
+
if (resolved === void 0) throw new Error(`Invalid network id: ${id}`);
|
|
20
|
+
return resolved;
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
//#endregion
|
|
24
|
+
//#region ../../packages/contract/in-memory/src/create-add-accounts.ts
|
|
25
|
+
init__polyfill_buffer_patch();
|
|
26
|
+
/**
|
|
27
|
+
* Thrown when adding an account on a new blockchain requires deriving a
|
|
28
|
+
* root key from the mnemonic, but the wallet has none (Nami-imported).
|
|
29
|
+
*/
|
|
30
|
+
var RecoveryPhraseUnavailableError = class extends CustomError {
|
|
31
|
+
constructor() {
|
|
32
|
+
super("Cannot derive a new blockchain root key: this wallet has no mnemonic stored");
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Creates a type-safe function to get blockchain-specific data from a wallet.
|
|
37
|
+
*/
|
|
38
|
+
const createGetBlockchainData = (blockchainName) => (wallet) => {
|
|
39
|
+
return wallet.blockchainSpecific[blockchainName];
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Factory function that creates a standardized `addAccounts` implementation.
|
|
43
|
+
*
|
|
44
|
+
* Handles both scenarios:
|
|
45
|
+
* - Existing blockchain: uses wallet's blockchainSpecific data to derive the accounts
|
|
46
|
+
* - New blockchain: decrypts wallet's recoveryPhrase, creates blockchain data, creates accounts
|
|
47
|
+
*
|
|
48
|
+
* Returns a wallet with merged accounts and blockchainSpecific data.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* export const addAccounts = createAddAccounts({
|
|
53
|
+
* blockchainName: 'Cardano',
|
|
54
|
+
* createAccounts,
|
|
55
|
+
* createBlockchainSpecificWalletData,
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
const createAddAccounts = ({ blockchainName, createAccounts, createBlockchainSpecificWalletData }) => {
|
|
60
|
+
const getBlockchainData = createGetBlockchainData(blockchainName);
|
|
61
|
+
return async (props, dependencies) => {
|
|
62
|
+
const { wallet, accountIndex, password, accountName, targetNetworks } = props;
|
|
63
|
+
let blockchainSpecificData = getBlockchainData(wallet);
|
|
64
|
+
let newBlockchainSpecificWalletData;
|
|
65
|
+
if (!blockchainSpecificData) {
|
|
66
|
+
if (!wallet.encryptedRecoveryPhrase) throw new RecoveryPhraseUnavailableError();
|
|
67
|
+
const recoveryPhraseBytes = await SecretBox.open(import_buffer.Buffer.from(wallet.encryptedRecoveryPhrase, "hex"), password);
|
|
68
|
+
const recoveryPhraseBuffer = import_buffer.Buffer.from(recoveryPhraseBytes);
|
|
69
|
+
try {
|
|
70
|
+
const recoveryPhrase = recoveryPhraseBuffer.toString("utf8").split(" ");
|
|
71
|
+
blockchainSpecificData = await createBlockchainSpecificWalletData({
|
|
72
|
+
walletId: wallet.walletId,
|
|
73
|
+
password,
|
|
74
|
+
recoveryPhrase
|
|
75
|
+
}, dependencies);
|
|
76
|
+
newBlockchainSpecificWalletData = blockchainSpecificData;
|
|
77
|
+
} finally {
|
|
78
|
+
recoveryPhraseBytes.fill(0);
|
|
79
|
+
recoveryPhraseBuffer.fill(0);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const newAccounts = await createAccounts({
|
|
83
|
+
blockchainSpecific: blockchainSpecificData,
|
|
84
|
+
accountIndex,
|
|
85
|
+
walletId: wallet.walletId,
|
|
86
|
+
blockchainName,
|
|
87
|
+
password,
|
|
88
|
+
accountName,
|
|
89
|
+
targetNetworks
|
|
90
|
+
}, dependencies);
|
|
91
|
+
return { wallet: {
|
|
92
|
+
...wallet,
|
|
93
|
+
accounts: [...wallet.accounts, ...newAccounts],
|
|
94
|
+
...newBlockchainSpecificWalletData && { blockchainSpecific: {
|
|
95
|
+
...wallet.blockchainSpecific,
|
|
96
|
+
[blockchainName]: newBlockchainSpecificWalletData
|
|
97
|
+
} }
|
|
98
|
+
} };
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
//#endregion
|
|
102
|
+
export { createBlockchainNetworkTargetResolver as n, createAddAccounts as t };
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
require("./rolldown-runtime-Br2OG8yv.cjs");
|
|
2
|
+
const require__polyfill_buffer_patch = require("./_polyfill-buffer-patch-CM8X7JiY.cjs");
|
|
3
|
+
const require_secret_box = require("./secret-box-DrjLZuS1.cjs");
|
|
4
|
+
let ts_custom_error = require("ts-custom-error");
|
|
5
|
+
//#region ../../packages/contract/network/src/resolve-blockchain-network-targets.ts
|
|
6
|
+
/**
|
|
7
|
+
* Returns a function that resolves an optional set of Lace
|
|
8
|
+
* {@link BlockchainNetworkId} values to chain-specific representations using a
|
|
9
|
+
* lookup map, with the same semantics as the in-memory wallet integrations:
|
|
10
|
+
*
|
|
11
|
+
* - `targets` undefined → all supported targets (the provided default list)
|
|
12
|
+
* - empty set → throws
|
|
13
|
+
* - non-empty set → each id must exist in the map or throws
|
|
14
|
+
*/
|
|
15
|
+
const createBlockchainNetworkTargetResolver = (supportedByBlockchainNetworkId, defaultForAllSupported) => (targets) => {
|
|
16
|
+
if (targets === void 0) return [...defaultForAllSupported];
|
|
17
|
+
if (targets.size === 0) throw new Error("Empty target networks");
|
|
18
|
+
return Array.from(targets, (id) => {
|
|
19
|
+
const resolved = supportedByBlockchainNetworkId.get(id);
|
|
20
|
+
if (resolved === void 0) throw new Error(`Invalid network id: ${id}`);
|
|
21
|
+
return resolved;
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region ../../packages/contract/in-memory/src/create-add-accounts.ts
|
|
26
|
+
require__polyfill_buffer_patch.init__polyfill_buffer_patch();
|
|
27
|
+
/**
|
|
28
|
+
* Thrown when adding an account on a new blockchain requires deriving a
|
|
29
|
+
* root key from the mnemonic, but the wallet has none (Nami-imported).
|
|
30
|
+
*/
|
|
31
|
+
var RecoveryPhraseUnavailableError = class extends ts_custom_error.CustomError {
|
|
32
|
+
constructor() {
|
|
33
|
+
super("Cannot derive a new blockchain root key: this wallet has no mnemonic stored");
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Creates a type-safe function to get blockchain-specific data from a wallet.
|
|
38
|
+
*/
|
|
39
|
+
const createGetBlockchainData = (blockchainName) => (wallet) => {
|
|
40
|
+
return wallet.blockchainSpecific[blockchainName];
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Factory function that creates a standardized `addAccounts` implementation.
|
|
44
|
+
*
|
|
45
|
+
* Handles both scenarios:
|
|
46
|
+
* - Existing blockchain: uses wallet's blockchainSpecific data to derive the accounts
|
|
47
|
+
* - New blockchain: decrypts wallet's recoveryPhrase, creates blockchain data, creates accounts
|
|
48
|
+
*
|
|
49
|
+
* Returns a wallet with merged accounts and blockchainSpecific data.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* export const addAccounts = createAddAccounts({
|
|
54
|
+
* blockchainName: 'Cardano',
|
|
55
|
+
* createAccounts,
|
|
56
|
+
* createBlockchainSpecificWalletData,
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
const createAddAccounts = ({ blockchainName, createAccounts, createBlockchainSpecificWalletData }) => {
|
|
61
|
+
const getBlockchainData = createGetBlockchainData(blockchainName);
|
|
62
|
+
return async (props, dependencies) => {
|
|
63
|
+
const { wallet, accountIndex, password, accountName, targetNetworks } = props;
|
|
64
|
+
let blockchainSpecificData = getBlockchainData(wallet);
|
|
65
|
+
let newBlockchainSpecificWalletData;
|
|
66
|
+
if (!blockchainSpecificData) {
|
|
67
|
+
if (!wallet.encryptedRecoveryPhrase) throw new RecoveryPhraseUnavailableError();
|
|
68
|
+
const recoveryPhraseBytes = await require_secret_box.SecretBox.open(require__polyfill_buffer_patch.import_buffer.Buffer.from(wallet.encryptedRecoveryPhrase, "hex"), password);
|
|
69
|
+
const recoveryPhraseBuffer = require__polyfill_buffer_patch.import_buffer.Buffer.from(recoveryPhraseBytes);
|
|
70
|
+
try {
|
|
71
|
+
const recoveryPhrase = recoveryPhraseBuffer.toString("utf8").split(" ");
|
|
72
|
+
blockchainSpecificData = await createBlockchainSpecificWalletData({
|
|
73
|
+
walletId: wallet.walletId,
|
|
74
|
+
password,
|
|
75
|
+
recoveryPhrase
|
|
76
|
+
}, dependencies);
|
|
77
|
+
newBlockchainSpecificWalletData = blockchainSpecificData;
|
|
78
|
+
} finally {
|
|
79
|
+
recoveryPhraseBytes.fill(0);
|
|
80
|
+
recoveryPhraseBuffer.fill(0);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const newAccounts = await createAccounts({
|
|
84
|
+
blockchainSpecific: blockchainSpecificData,
|
|
85
|
+
accountIndex,
|
|
86
|
+
walletId: wallet.walletId,
|
|
87
|
+
blockchainName,
|
|
88
|
+
password,
|
|
89
|
+
accountName,
|
|
90
|
+
targetNetworks
|
|
91
|
+
}, dependencies);
|
|
92
|
+
return { wallet: {
|
|
93
|
+
...wallet,
|
|
94
|
+
accounts: [...wallet.accounts, ...newAccounts],
|
|
95
|
+
...newBlockchainSpecificWalletData && { blockchainSpecific: {
|
|
96
|
+
...wallet.blockchainSpecific,
|
|
97
|
+
[blockchainName]: newBlockchainSpecificWalletData
|
|
98
|
+
} }
|
|
99
|
+
} };
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
//#endregion
|
|
103
|
+
Object.defineProperty(exports, "createAddAccounts", {
|
|
104
|
+
enumerable: true,
|
|
105
|
+
get: function() {
|
|
106
|
+
return createAddAccounts;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
Object.defineProperty(exports, "createBlockchainNetworkTargetResolver", {
|
|
110
|
+
enumerable: true,
|
|
111
|
+
get: function() {
|
|
112
|
+
return createBlockchainNetworkTargetResolver;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
require("./rolldown-runtime-Br2OG8yv.cjs");
|
|
2
|
-
const require_util = require("./util-
|
|
3
|
-
const require_bignum_vo = require("./bignum.vo-
|
|
4
|
-
const require_const = require("./const-
|
|
5
|
-
const require_TransactionBuilder = require("./TransactionBuilder-
|
|
6
|
-
const
|
|
2
|
+
const require_util = require("./util-Bu4W5lF4.cjs");
|
|
3
|
+
const require_bignum_vo = require("./bignum.vo-hx2kuqlA.cjs");
|
|
4
|
+
const require_const = require("./const-D-eZIS4n.cjs");
|
|
5
|
+
const require_TransactionBuilder = require("./TransactionBuilder-CCjOn7NA.cjs");
|
|
6
|
+
const require_account_guards = require("./account-guards-BtjTGxDZ.cjs");
|
|
7
7
|
let _laceio_cardano_core = require("@laceio/cardano/core");
|
|
8
8
|
let rxjs = require("rxjs");
|
|
9
9
|
let rxjs_operators = require("rxjs/operators");
|
|
@@ -44,7 +44,7 @@ const makeBuildDelegationTx = (dependencies) => (params) => (0, rxjs.defer)(asyn
|
|
|
44
44
|
success: false,
|
|
45
45
|
error: /* @__PURE__ */ new Error("Protocol parameters not available")
|
|
46
46
|
};
|
|
47
|
-
|
|
47
|
+
require_account_guards.refuseExtensionAccount(accountId, cardanoAddresses);
|
|
48
48
|
const availableUtxo = require_util.filterSpendableUtxos(allAccountUtxos[accountId] ?? [], unspendableAccountUtxos[accountId] ?? []);
|
|
49
49
|
const accountAddresses = cardanoAddresses.filter((addr) => addr.accountId === accountId && addr.blockchainName === "Cardano");
|
|
50
50
|
if (!accountAddresses[0]) return {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { n as filterSpendableUtxos } from "./util-
|
|
2
|
-
import { t as BigNumber } from "./bignum.vo-
|
|
3
|
-
import { r as LOVELACE_TOKEN_ID } from "./const-
|
|
4
|
-
import {
|
|
5
|
-
import { t as refuseExtensionAccount } from "./account-guards
|
|
1
|
+
import { n as filterSpendableUtxos } from "./util-Cp5cZkfK.js";
|
|
2
|
+
import { t as BigNumber } from "./bignum.vo-CEXOIew0.js";
|
|
3
|
+
import { r as LOVELACE_TOKEN_ID } from "./const-BJfIK_G-.js";
|
|
4
|
+
import { n as TransactionBuilder } from "./TransactionBuilder-CIzdw18M.js";
|
|
5
|
+
import { t as refuseExtensionAccount } from "./account-guards-D9Lu5T3W.js";
|
|
6
6
|
import { Cardano } from "@laceio/cardano/core";
|
|
7
7
|
import { defer, firstValueFrom, of } from "rxjs";
|
|
8
8
|
import { catchError as catchError$1 } from "rxjs/operators";
|
package/dist/{deregistration-tx-builder-B-CrUyX6.js → deregistration-tx-builder-Bf6xAYp4.js}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { n as filterSpendableUtxos } from "./util-
|
|
2
|
-
import { t as BigNumber } from "./bignum.vo-
|
|
3
|
-
import { r as LOVELACE_TOKEN_ID } from "./const-
|
|
4
|
-
import {
|
|
5
|
-
import { t as refuseExtensionAccount } from "./account-guards
|
|
1
|
+
import { n as filterSpendableUtxos } from "./util-Cp5cZkfK.js";
|
|
2
|
+
import { t as BigNumber } from "./bignum.vo-CEXOIew0.js";
|
|
3
|
+
import { r as LOVELACE_TOKEN_ID } from "./const-BJfIK_G-.js";
|
|
4
|
+
import { n as TransactionBuilder } from "./TransactionBuilder-CIzdw18M.js";
|
|
5
|
+
import { t as refuseExtensionAccount } from "./account-guards-D9Lu5T3W.js";
|
|
6
6
|
import { Cardano } from "@laceio/cardano/core";
|
|
7
7
|
import { defer, firstValueFrom, of } from "rxjs";
|
|
8
8
|
import { catchError as catchError$1 } from "rxjs/operators";
|
package/dist/{deregistration-tx-builder-DZGwB4cz.cjs → deregistration-tx-builder-CQP35yex.cjs}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
require("./rolldown-runtime-Br2OG8yv.cjs");
|
|
2
|
-
const require_util = require("./util-
|
|
3
|
-
const require_bignum_vo = require("./bignum.vo-
|
|
4
|
-
const require_const = require("./const-
|
|
5
|
-
const require_TransactionBuilder = require("./TransactionBuilder-
|
|
6
|
-
const
|
|
2
|
+
const require_util = require("./util-Bu4W5lF4.cjs");
|
|
3
|
+
const require_bignum_vo = require("./bignum.vo-hx2kuqlA.cjs");
|
|
4
|
+
const require_const = require("./const-D-eZIS4n.cjs");
|
|
5
|
+
const require_TransactionBuilder = require("./TransactionBuilder-CCjOn7NA.cjs");
|
|
6
|
+
const require_account_guards = require("./account-guards-BtjTGxDZ.cjs");
|
|
7
7
|
let _laceio_cardano_core = require("@laceio/cardano/core");
|
|
8
8
|
let rxjs = require("rxjs");
|
|
9
9
|
let rxjs_operators = require("rxjs/operators");
|
|
@@ -59,7 +59,7 @@ const makeBuildDeregistrationTx = (dependencies) => (params) => (0, rxjs.defer)(
|
|
|
59
59
|
success: false,
|
|
60
60
|
error: /* @__PURE__ */ new Error("Protocol parameters not available")
|
|
61
61
|
};
|
|
62
|
-
|
|
62
|
+
require_account_guards.refuseExtensionAccount(accountId, cardanoAddresses);
|
|
63
63
|
const availableUtxo = require_util.filterSpendableUtxos(allAccountUtxos[accountId] ?? [], unspendableAccountUtxos[accountId] ?? []);
|
|
64
64
|
const accountAddresses = cardanoAddresses.filter((addr) => addr.accountId === accountId && addr.blockchainName === "Cardano");
|
|
65
65
|
if (!accountAddresses[0]) return {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region ../../packages/contract/passport/src/value-objects/device-commitment-hex.vo.ts
|
|
2
|
+
const DEVICE_COMMITMENT_BYTE_LENGTH = 32;
|
|
3
|
+
const LOWERCASE_HEX_PATTERN = /^[0-9a-f]+$/;
|
|
4
|
+
/**
|
|
5
|
+
* Thrown when a value is not a lowercase hex encoding of exactly
|
|
6
|
+
* DEVICE_COMMITMENT_BYTE_LENGTH bytes.
|
|
7
|
+
*/
|
|
8
|
+
var DeviceCommitmentHexError = class extends Error {
|
|
9
|
+
code = "invalid-length";
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "DeviceCommitmentHexError";
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Checks that a string is 32 bytes of lowercase hex and types it as a device
|
|
17
|
+
* commitment.
|
|
18
|
+
*
|
|
19
|
+
* @throws {@link DeviceCommitmentHexError} when it is not.
|
|
20
|
+
*/
|
|
21
|
+
const DeviceCommitmentHex = (value) => {
|
|
22
|
+
if (value.length !== DEVICE_COMMITMENT_BYTE_LENGTH * 2 || !LOWERCASE_HEX_PATTERN.test(value)) throw new DeviceCommitmentHexError(`DeviceCommitmentHex expects ${DEVICE_COMMITMENT_BYTE_LENGTH} bytes as lowercase hex, got "${value}"`);
|
|
23
|
+
return value;
|
|
24
|
+
};
|
|
25
|
+
//#endregion
|
|
26
|
+
export { DeviceCommitmentHex as t };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region ../../packages/contract/passport/src/value-objects/device-commitment-hex.vo.ts
|
|
2
|
+
const DEVICE_COMMITMENT_BYTE_LENGTH = 32;
|
|
3
|
+
const LOWERCASE_HEX_PATTERN = /^[0-9a-f]+$/;
|
|
4
|
+
/**
|
|
5
|
+
* Thrown when a value is not a lowercase hex encoding of exactly
|
|
6
|
+
* DEVICE_COMMITMENT_BYTE_LENGTH bytes.
|
|
7
|
+
*/
|
|
8
|
+
var DeviceCommitmentHexError = class extends Error {
|
|
9
|
+
code = "invalid-length";
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "DeviceCommitmentHexError";
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Checks that a string is 32 bytes of lowercase hex and types it as a device
|
|
17
|
+
* commitment.
|
|
18
|
+
*
|
|
19
|
+
* @throws {@link DeviceCommitmentHexError} when it is not.
|
|
20
|
+
*/
|
|
21
|
+
const DeviceCommitmentHex = (value) => {
|
|
22
|
+
if (value.length !== DEVICE_COMMITMENT_BYTE_LENGTH * 2 || !LOWERCASE_HEX_PATTERN.test(value)) throw new DeviceCommitmentHexError(`DeviceCommitmentHex expects ${DEVICE_COMMITMENT_BYTE_LENGTH} bytes as lowercase hex, got "${value}"`);
|
|
23
|
+
return value;
|
|
24
|
+
};
|
|
25
|
+
//#endregion
|
|
26
|
+
Object.defineProperty(exports, "DeviceCommitmentHex", {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
get: function() {
|
|
29
|
+
return DeviceCommitmentHex;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { n as HexBytes, t as ByteArray } from "./bytes.vo-BB7_4JK6.js";
|
|
2
|
+
import { f as DeviceReaderInvalidError } from "./errors-DSq5wUwt.js";
|
|
3
|
+
import { H as isSealableX25519Key } from "./grant-rules-By07_eDi.js";
|
|
4
|
+
import { t as decodeDevicePublicKey } from "./envelopes-BGoO_v8m.js";
|
|
5
|
+
import { a as pureCircuits } from "./acc-module-Cmj8EsIb.js";
|
|
6
|
+
//#region ../../packages/module/passport-account/src/acc/device-readers.ts
|
|
7
|
+
/**
|
|
8
|
+
* How many use counters of each registered device are tried for its live
|
|
9
|
+
* entry, as far as the use-counter rescan probes a device's own counter.
|
|
10
|
+
*/
|
|
11
|
+
const DEVICE_ENTRY_SCAN_LIMIT = 4096n;
|
|
12
|
+
/**
|
|
13
|
+
* The rolling entries a compressed device key derives in a scope, with
|
|
14
|
+
* the key decoded once for every counter tried, or undefined for a key
|
|
15
|
+
* that is no Jubjub point.
|
|
16
|
+
*/
|
|
17
|
+
const entriesOf = ({ address, epoch }, devicePublicKey) => {
|
|
18
|
+
const point = decodeDevicePublicKey(devicePublicKey);
|
|
19
|
+
if (!point) return void 0;
|
|
20
|
+
const account = { bytes: ByteArray.fromHex(HexBytes(address)) };
|
|
21
|
+
return (counter) => HexBytes.fromByteArray(pureCircuits.derive_device_entry_with_jubjub(account, point, epoch, counter));
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* The rolling entry a compressed device key derives at one use counter,
|
|
25
|
+
* as lowercase hex, or undefined for a key that is no Jubjub point.
|
|
26
|
+
*/
|
|
27
|
+
const deviceEntryOf = (scope, devicePublicKey, counter) => entriesOf(scope, devicePublicKey)?.(counter);
|
|
28
|
+
/**
|
|
29
|
+
* Whether a compressed device key derives `entryHex` at any use counter
|
|
30
|
+
* up to {@link DEVICE_ENTRY_SCAN_LIMIT}: whether it is the key of the
|
|
31
|
+
* device holding that entry.
|
|
32
|
+
*/
|
|
33
|
+
const derivesEntry = (scope, devicePublicKey, entryHex) => {
|
|
34
|
+
const entryAt = entriesOf(scope, devicePublicKey);
|
|
35
|
+
if (!entryAt) return false;
|
|
36
|
+
for (let counter = 0n; counter < DEVICE_ENTRY_SCAN_LIMIT; counter++) if (entryAt(counter) === entryHex) return true;
|
|
37
|
+
return false;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Holds a joining device's keys to the entry it is enrolled under: its
|
|
41
|
+
* reader key must be one the account seals to, and its device key a
|
|
42
|
+
* Jubjub point whose entry at use counter 0, the counter a fresh device
|
|
43
|
+
* starts from, is the commitment being added, so the account keys are
|
|
44
|
+
* never sealed to a reader paired with another device's key.
|
|
45
|
+
*
|
|
46
|
+
* @throws {@link DeviceReaderInvalidError} when the reader key is not
|
|
47
|
+
* sealable, the device key is no point, or its first entry is not the
|
|
48
|
+
* commitment.
|
|
49
|
+
*/
|
|
50
|
+
const assertJoiningDevice = (scope, reader, commitmentHex) => {
|
|
51
|
+
if (!isSealableX25519Key(reader.readerPublicKey) || deviceEntryOf(scope, reader.devicePublicKey, 0n) !== commitmentHex.toLowerCase()) throw new DeviceReaderInvalidError();
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* The live entry of each device key that derives one, by key. Every key
|
|
55
|
+
* is decoded once and the keys are tried in lockstep, one use counter at
|
|
56
|
+
* a time from 0, so each resolves at its lowest live counter. The scan
|
|
57
|
+
* ends at {@link DEVICE_ENTRY_SCAN_LIMIT} or once every `sought` entry
|
|
58
|
+
* is matched: an entry derives from one device key only, so no key still
|
|
59
|
+
* unresolved can derive a sought entry after that.
|
|
60
|
+
*/
|
|
61
|
+
const liveEntries = ({ scope, devicePublicKeys, isLive, sought }) => {
|
|
62
|
+
const found = /* @__PURE__ */ new Map();
|
|
63
|
+
const unmatched = new Set(sought);
|
|
64
|
+
let unresolved = [...devicePublicKeys].flatMap((key) => {
|
|
65
|
+
const entryAt = entriesOf(scope, key);
|
|
66
|
+
return entryAt ? [{
|
|
67
|
+
key,
|
|
68
|
+
entryAt
|
|
69
|
+
}] : [];
|
|
70
|
+
});
|
|
71
|
+
for (let counter = 0n; counter < DEVICE_ENTRY_SCAN_LIMIT && unresolved.length > 0 && unmatched.size > 0; counter++) unresolved = unresolved.filter(({ key, entryAt }) => {
|
|
72
|
+
const entryHex = entryAt(counter);
|
|
73
|
+
if (!isLive(entryHex)) return true;
|
|
74
|
+
found.set(key, {
|
|
75
|
+
counter,
|
|
76
|
+
entryHex
|
|
77
|
+
});
|
|
78
|
+
unmatched.delete(entryHex);
|
|
79
|
+
return false;
|
|
80
|
+
});
|
|
81
|
+
return found;
|
|
82
|
+
};
|
|
83
|
+
/** Adds `value` to the set `map` holds under `key`. */
|
|
84
|
+
const addTo = (map, key, value) => {
|
|
85
|
+
map.set(key, (map.get(key) ?? /* @__PURE__ */ new Set()).add(value));
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* The registered devices that are enrolled now, each with its live entry:
|
|
89
|
+
* every device key is tried at use counters from 0 until it derives an
|
|
90
|
+
* entry the ledger's device set holds, at most
|
|
91
|
+
* {@link DEVICE_ENTRY_SCAN_LIMIT} of them, and the scan stops once every
|
|
92
|
+
* allowed entry and the target are matched, so registrations it has not
|
|
93
|
+
* resolved by then can derive none of them. A registration whose key
|
|
94
|
+
* derives no live entry is left out, as one a device wrote before it was
|
|
95
|
+
* enrolled, one of a removed device, or one planted with a key of
|
|
96
|
+
* nobody's. One device's registration written twice counts once.
|
|
97
|
+
* Registrations whose live entry is not allowed are set apart first, so a
|
|
98
|
+
* removed device's own registrations never weigh on the rest. Among the
|
|
99
|
+
* others, which one is genuine cannot be told apart when they conflict,
|
|
100
|
+
* so none of a conflict is sealed to: a reader key registered for two
|
|
101
|
+
* live devices is left out, and a live device claimed by two reader keys
|
|
102
|
+
* keeps none of them. Every allowed entry left without a reader, that
|
|
103
|
+
* way or for want of any registration, is reported dropped, so the user
|
|
104
|
+
* sees every device that gets no new key and has to be enrolled again.
|
|
105
|
+
*/
|
|
106
|
+
const resolveLiveReaders = ({ scope, registered, isLive, allowed, target }) => {
|
|
107
|
+
const resolved = /* @__PURE__ */ new Map();
|
|
108
|
+
const outside = [];
|
|
109
|
+
const entriesOfReader = /* @__PURE__ */ new Map();
|
|
110
|
+
const readersOfEntry = /* @__PURE__ */ new Map();
|
|
111
|
+
const live = liveEntries({
|
|
112
|
+
scope,
|
|
113
|
+
devicePublicKeys: new Set(registered.map(({ devicePublicKey }) => devicePublicKey)),
|
|
114
|
+
isLive,
|
|
115
|
+
sought: target === void 0 ? allowed : new Set([...allowed, target])
|
|
116
|
+
});
|
|
117
|
+
for (const device of registered) {
|
|
118
|
+
const entry = live.get(device.devicePublicKey);
|
|
119
|
+
if (!entry) continue;
|
|
120
|
+
const candidate = {
|
|
121
|
+
reader: {
|
|
122
|
+
...device,
|
|
123
|
+
epoch: scope.epoch,
|
|
124
|
+
counter: entry.counter
|
|
125
|
+
},
|
|
126
|
+
entryHex: entry.entryHex
|
|
127
|
+
};
|
|
128
|
+
if (!allowed.has(entry.entryHex)) {
|
|
129
|
+
outside.push(candidate);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
resolved.set(`${device.readerPublicKey}:${entry.entryHex}`, candidate);
|
|
133
|
+
addTo(entriesOfReader, device.readerPublicKey, entry.entryHex);
|
|
134
|
+
addTo(readersOfEntry, entry.entryHex, device.readerPublicKey);
|
|
135
|
+
}
|
|
136
|
+
const readers = [...resolved.values()].filter(({ reader, entryHex }) => (entriesOfReader.get(reader.readerPublicKey)?.size ?? 0) === 1 && (readersOfEntry.get(entryHex)?.size ?? 0) === 1);
|
|
137
|
+
const kept = new Set(readers.map(({ entryHex }) => entryHex));
|
|
138
|
+
return {
|
|
139
|
+
readers,
|
|
140
|
+
dropped: [...allowed].filter((entry) => !kept.has(entry)),
|
|
141
|
+
outside
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
//#endregion
|
|
145
|
+
export { resolveLiveReaders as i, derivesEntry as n, deviceEntryOf as r, assertJoiningDevice as t };
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
const require_bytes_vo = require("./bytes.vo-BNRquqaO.cjs");
|
|
2
|
+
const require_errors = require("./errors-BIftM8ZN.cjs");
|
|
3
|
+
const require_grant_rules = require("./grant-rules-BzVTWXS7.cjs");
|
|
4
|
+
const require_envelopes = require("./envelopes-CH25R-DN.cjs");
|
|
5
|
+
const require_acc_module = require("./acc-module-4iIUv6My.cjs");
|
|
6
|
+
//#region ../../packages/module/passport-account/src/acc/device-readers.ts
|
|
7
|
+
/**
|
|
8
|
+
* How many use counters of each registered device are tried for its live
|
|
9
|
+
* entry, as far as the use-counter rescan probes a device's own counter.
|
|
10
|
+
*/
|
|
11
|
+
const DEVICE_ENTRY_SCAN_LIMIT = 4096n;
|
|
12
|
+
/**
|
|
13
|
+
* The rolling entries a compressed device key derives in a scope, with
|
|
14
|
+
* the key decoded once for every counter tried, or undefined for a key
|
|
15
|
+
* that is no Jubjub point.
|
|
16
|
+
*/
|
|
17
|
+
const entriesOf = ({ address, epoch }, devicePublicKey) => {
|
|
18
|
+
const point = require_envelopes.decodeDevicePublicKey(devicePublicKey);
|
|
19
|
+
if (!point) return void 0;
|
|
20
|
+
const account = { bytes: require_bytes_vo.ByteArray.fromHex(require_bytes_vo.HexBytes(address)) };
|
|
21
|
+
return (counter) => require_bytes_vo.HexBytes.fromByteArray(require_acc_module.pureCircuits.derive_device_entry_with_jubjub(account, point, epoch, counter));
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* The rolling entry a compressed device key derives at one use counter,
|
|
25
|
+
* as lowercase hex, or undefined for a key that is no Jubjub point.
|
|
26
|
+
*/
|
|
27
|
+
const deviceEntryOf = (scope, devicePublicKey, counter) => entriesOf(scope, devicePublicKey)?.(counter);
|
|
28
|
+
/**
|
|
29
|
+
* Whether a compressed device key derives `entryHex` at any use counter
|
|
30
|
+
* up to {@link DEVICE_ENTRY_SCAN_LIMIT}: whether it is the key of the
|
|
31
|
+
* device holding that entry.
|
|
32
|
+
*/
|
|
33
|
+
const derivesEntry = (scope, devicePublicKey, entryHex) => {
|
|
34
|
+
const entryAt = entriesOf(scope, devicePublicKey);
|
|
35
|
+
if (!entryAt) return false;
|
|
36
|
+
for (let counter = 0n; counter < DEVICE_ENTRY_SCAN_LIMIT; counter++) if (entryAt(counter) === entryHex) return true;
|
|
37
|
+
return false;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Holds a joining device's keys to the entry it is enrolled under: its
|
|
41
|
+
* reader key must be one the account seals to, and its device key a
|
|
42
|
+
* Jubjub point whose entry at use counter 0, the counter a fresh device
|
|
43
|
+
* starts from, is the commitment being added, so the account keys are
|
|
44
|
+
* never sealed to a reader paired with another device's key.
|
|
45
|
+
*
|
|
46
|
+
* @throws {@link DeviceReaderInvalidError} when the reader key is not
|
|
47
|
+
* sealable, the device key is no point, or its first entry is not the
|
|
48
|
+
* commitment.
|
|
49
|
+
*/
|
|
50
|
+
const assertJoiningDevice = (scope, reader, commitmentHex) => {
|
|
51
|
+
if (!require_grant_rules.isSealableX25519Key(reader.readerPublicKey) || deviceEntryOf(scope, reader.devicePublicKey, 0n) !== commitmentHex.toLowerCase()) throw new require_errors.DeviceReaderInvalidError();
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* The live entry of each device key that derives one, by key. Every key
|
|
55
|
+
* is decoded once and the keys are tried in lockstep, one use counter at
|
|
56
|
+
* a time from 0, so each resolves at its lowest live counter. The scan
|
|
57
|
+
* ends at {@link DEVICE_ENTRY_SCAN_LIMIT} or once every `sought` entry
|
|
58
|
+
* is matched: an entry derives from one device key only, so no key still
|
|
59
|
+
* unresolved can derive a sought entry after that.
|
|
60
|
+
*/
|
|
61
|
+
const liveEntries = ({ scope, devicePublicKeys, isLive, sought }) => {
|
|
62
|
+
const found = /* @__PURE__ */ new Map();
|
|
63
|
+
const unmatched = new Set(sought);
|
|
64
|
+
let unresolved = [...devicePublicKeys].flatMap((key) => {
|
|
65
|
+
const entryAt = entriesOf(scope, key);
|
|
66
|
+
return entryAt ? [{
|
|
67
|
+
key,
|
|
68
|
+
entryAt
|
|
69
|
+
}] : [];
|
|
70
|
+
});
|
|
71
|
+
for (let counter = 0n; counter < DEVICE_ENTRY_SCAN_LIMIT && unresolved.length > 0 && unmatched.size > 0; counter++) unresolved = unresolved.filter(({ key, entryAt }) => {
|
|
72
|
+
const entryHex = entryAt(counter);
|
|
73
|
+
if (!isLive(entryHex)) return true;
|
|
74
|
+
found.set(key, {
|
|
75
|
+
counter,
|
|
76
|
+
entryHex
|
|
77
|
+
});
|
|
78
|
+
unmatched.delete(entryHex);
|
|
79
|
+
return false;
|
|
80
|
+
});
|
|
81
|
+
return found;
|
|
82
|
+
};
|
|
83
|
+
/** Adds `value` to the set `map` holds under `key`. */
|
|
84
|
+
const addTo = (map, key, value) => {
|
|
85
|
+
map.set(key, (map.get(key) ?? /* @__PURE__ */ new Set()).add(value));
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* The registered devices that are enrolled now, each with its live entry:
|
|
89
|
+
* every device key is tried at use counters from 0 until it derives an
|
|
90
|
+
* entry the ledger's device set holds, at most
|
|
91
|
+
* {@link DEVICE_ENTRY_SCAN_LIMIT} of them, and the scan stops once every
|
|
92
|
+
* allowed entry and the target are matched, so registrations it has not
|
|
93
|
+
* resolved by then can derive none of them. A registration whose key
|
|
94
|
+
* derives no live entry is left out, as one a device wrote before it was
|
|
95
|
+
* enrolled, one of a removed device, or one planted with a key of
|
|
96
|
+
* nobody's. One device's registration written twice counts once.
|
|
97
|
+
* Registrations whose live entry is not allowed are set apart first, so a
|
|
98
|
+
* removed device's own registrations never weigh on the rest. Among the
|
|
99
|
+
* others, which one is genuine cannot be told apart when they conflict,
|
|
100
|
+
* so none of a conflict is sealed to: a reader key registered for two
|
|
101
|
+
* live devices is left out, and a live device claimed by two reader keys
|
|
102
|
+
* keeps none of them. Every allowed entry left without a reader, that
|
|
103
|
+
* way or for want of any registration, is reported dropped, so the user
|
|
104
|
+
* sees every device that gets no new key and has to be enrolled again.
|
|
105
|
+
*/
|
|
106
|
+
const resolveLiveReaders = ({ scope, registered, isLive, allowed, target }) => {
|
|
107
|
+
const resolved = /* @__PURE__ */ new Map();
|
|
108
|
+
const outside = [];
|
|
109
|
+
const entriesOfReader = /* @__PURE__ */ new Map();
|
|
110
|
+
const readersOfEntry = /* @__PURE__ */ new Map();
|
|
111
|
+
const live = liveEntries({
|
|
112
|
+
scope,
|
|
113
|
+
devicePublicKeys: new Set(registered.map(({ devicePublicKey }) => devicePublicKey)),
|
|
114
|
+
isLive,
|
|
115
|
+
sought: target === void 0 ? allowed : new Set([...allowed, target])
|
|
116
|
+
});
|
|
117
|
+
for (const device of registered) {
|
|
118
|
+
const entry = live.get(device.devicePublicKey);
|
|
119
|
+
if (!entry) continue;
|
|
120
|
+
const candidate = {
|
|
121
|
+
reader: {
|
|
122
|
+
...device,
|
|
123
|
+
epoch: scope.epoch,
|
|
124
|
+
counter: entry.counter
|
|
125
|
+
},
|
|
126
|
+
entryHex: entry.entryHex
|
|
127
|
+
};
|
|
128
|
+
if (!allowed.has(entry.entryHex)) {
|
|
129
|
+
outside.push(candidate);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
resolved.set(`${device.readerPublicKey}:${entry.entryHex}`, candidate);
|
|
133
|
+
addTo(entriesOfReader, device.readerPublicKey, entry.entryHex);
|
|
134
|
+
addTo(readersOfEntry, entry.entryHex, device.readerPublicKey);
|
|
135
|
+
}
|
|
136
|
+
const readers = [...resolved.values()].filter(({ reader, entryHex }) => (entriesOfReader.get(reader.readerPublicKey)?.size ?? 0) === 1 && (readersOfEntry.get(entryHex)?.size ?? 0) === 1);
|
|
137
|
+
const kept = new Set(readers.map(({ entryHex }) => entryHex));
|
|
138
|
+
return {
|
|
139
|
+
readers,
|
|
140
|
+
dropped: [...allowed].filter((entry) => !kept.has(entry)),
|
|
141
|
+
outside
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
//#endregion
|
|
145
|
+
Object.defineProperty(exports, "assertJoiningDevice", {
|
|
146
|
+
enumerable: true,
|
|
147
|
+
get: function() {
|
|
148
|
+
return assertJoiningDevice;
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
Object.defineProperty(exports, "derivesEntry", {
|
|
152
|
+
enumerable: true,
|
|
153
|
+
get: function() {
|
|
154
|
+
return derivesEntry;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
Object.defineProperty(exports, "deviceEntryOf", {
|
|
158
|
+
enumerable: true,
|
|
159
|
+
get: function() {
|
|
160
|
+
return deviceEntryOf;
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
Object.defineProperty(exports, "resolveLiveReaders", {
|
|
164
|
+
enumerable: true,
|
|
165
|
+
get: function() {
|
|
166
|
+
return resolveLiveReaders;
|
|
167
|
+
}
|
|
168
|
+
});
|