@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,1108 @@
|
|
|
1
|
+
const require_rolldown_runtime = require("./rolldown-runtime-Br2OG8yv.cjs");
|
|
2
|
+
const require_codecs = require("./codecs-Cswkg7Tm.cjs");
|
|
3
|
+
const require_util = require("./util-Bu4W5lF4.cjs");
|
|
4
|
+
const require_bytes_vo = require("./bytes.vo-BNRquqaO.cjs");
|
|
5
|
+
const require_sdk = require("./sdk-DffwmX8b.cjs");
|
|
6
|
+
const require_guarded_transaction_signer = require("./guarded-transaction-signer-MFpPg98D.cjs");
|
|
7
|
+
const require_asyncoption = require("./asyncoption-i0VbqVTq.cjs");
|
|
8
|
+
const require_key_source = require("./key-source-5oUBFiC7.cjs");
|
|
9
|
+
const require_store = require("./store-B1Lq3cEf.cjs");
|
|
10
|
+
const require_slice = require("./slice-DTZTiJle.cjs");
|
|
11
|
+
const require_in_memory_wallet_integration = require("./in-memory-wallet-integration-t9I00R_V.cjs");
|
|
12
|
+
const require_cardano_tx_id_vo = require("./cardano-tx-id.vo-TLjJZHCI.cjs");
|
|
13
|
+
const require_const = require("./const-D-eZIS4n.cjs");
|
|
14
|
+
const require_TransactionBuilder = require("./TransactionBuilder-CCjOn7NA.cjs");
|
|
15
|
+
const require_composite_signer_factory = require("./composite-signer-factory-m5cVs9h_.cjs");
|
|
16
|
+
const require_contract = require("./contract-MKLzYVkW.cjs");
|
|
17
|
+
let _laceio_cardano_key_management = require("@laceio/cardano/key-management");
|
|
18
|
+
let _laceio_cardano_crypto = require("@laceio/cardano/crypto");
|
|
19
|
+
let _laceio_cardano_core = require("@laceio/cardano/core");
|
|
20
|
+
let rxjs = require("rxjs");
|
|
21
|
+
let ts_log = require("ts-log");
|
|
22
|
+
//#region src/cardano-lazy-in-memory-signer-factory.ts
|
|
23
|
+
/**
|
|
24
|
+
* Signer factory for {@link WalletType.LazyInMemory} Cardano accounts.
|
|
25
|
+
*
|
|
26
|
+
* The mnemonic is never persisted by Lace. Its derived account key must match
|
|
27
|
+
* the selected account before signing, regardless of the mnemonic source.
|
|
28
|
+
*/
|
|
29
|
+
var CardanoLazyInMemorySignerFactory = class {
|
|
30
|
+
#withMnemonicWords;
|
|
31
|
+
constructor(props) {
|
|
32
|
+
this.#withMnemonicWords = props.withMnemonicWords;
|
|
33
|
+
}
|
|
34
|
+
canSign(account) {
|
|
35
|
+
return account.accountType === "LazyInMemory" && account.blockchainName === "Cardano";
|
|
36
|
+
}
|
|
37
|
+
createTransactionSigner(context) {
|
|
38
|
+
this.#assertSupported(context);
|
|
39
|
+
const { knownAddresses, utxo, auth } = context;
|
|
40
|
+
const accountProps = this.#extractAccountProps(context);
|
|
41
|
+
return require_guarded_transaction_signer.withCollateralOwnershipGuard(new require_guarded_transaction_signer.CardanoInMemoryTransactionSigner({
|
|
42
|
+
withKeyAgent$: this.#buildWithKeyAgent$(accountProps),
|
|
43
|
+
knownAddresses,
|
|
44
|
+
utxo,
|
|
45
|
+
auth
|
|
46
|
+
}), context);
|
|
47
|
+
}
|
|
48
|
+
createDataSigner(context) {
|
|
49
|
+
this.#assertSupported(context);
|
|
50
|
+
const { knownAddresses, auth } = context;
|
|
51
|
+
const accountProps = this.#extractAccountProps(context);
|
|
52
|
+
return new require_guarded_transaction_signer.CardanoInMemoryDataSigner({
|
|
53
|
+
withKeyAgent$: this.#buildWithKeyAgent$(accountProps),
|
|
54
|
+
dRepKeyHash$: (0, rxjs.defer)(() => (0, rxjs.from)(require_guarded_transaction_signer.deriveDRepKeyHash(accountProps))),
|
|
55
|
+
knownAddresses,
|
|
56
|
+
auth
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
#buildWithKeyAgent$(accountProps) {
|
|
60
|
+
return (use) => new rxjs.Observable((subscriber) => {
|
|
61
|
+
const cancelled$ = new rxjs.Subject();
|
|
62
|
+
const assertActive = () => {
|
|
63
|
+
if (subscriber.closed) throw new Error("Signing request cancelled.");
|
|
64
|
+
};
|
|
65
|
+
this.#withMnemonicWords(async (words) => {
|
|
66
|
+
assertActive();
|
|
67
|
+
const mnemonicWords = [...words];
|
|
68
|
+
const keyAgent = await require_guarded_transaction_signer.createCardanoKeyAgentFromMnemonic({
|
|
69
|
+
accountIndex: accountProps.accountIndex,
|
|
70
|
+
chainId: accountProps.chainId,
|
|
71
|
+
mnemonicWords
|
|
72
|
+
});
|
|
73
|
+
try {
|
|
74
|
+
assertActive();
|
|
75
|
+
if (keyAgent.extendedAccountPublicKey !== accountProps.extendedAccountPublicKey) throw new require_contract.LazyWalletMismatchError();
|
|
76
|
+
return await (0, rxjs.lastValueFrom)(use(keyAgent).pipe((0, rxjs.takeUntil)(cancelled$)));
|
|
77
|
+
} finally {
|
|
78
|
+
keyAgent.dispose?.();
|
|
79
|
+
}
|
|
80
|
+
}).then((result) => {
|
|
81
|
+
if (!subscriber.closed) {
|
|
82
|
+
subscriber.next(result);
|
|
83
|
+
subscriber.complete();
|
|
84
|
+
}
|
|
85
|
+
}, (error) => {
|
|
86
|
+
if (!subscriber.closed) subscriber.error(error);
|
|
87
|
+
});
|
|
88
|
+
return () => {
|
|
89
|
+
cancelled$.next();
|
|
90
|
+
cancelled$.complete();
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
#assertSupported(context) {
|
|
95
|
+
const account = context.wallet.accounts.find((a) => a.accountId === context.accountId);
|
|
96
|
+
if (!account || !this.canSign(account)) throw new Error(`CardanoLazyInMemorySignerFactory does not support account type: ${account?.accountType ?? "unknown"}`);
|
|
97
|
+
}
|
|
98
|
+
#extractAccountProps(context) {
|
|
99
|
+
const { wallet, accountId } = context;
|
|
100
|
+
const account = wallet.accounts.find((a) => a.accountId === accountId);
|
|
101
|
+
if (!account) throw new Error(`Account ${accountId} not found in wallet`);
|
|
102
|
+
if (account.blockchainName !== "Cardano") throw new Error(`Account ${accountId} is not a Cardano account`);
|
|
103
|
+
const { accountIndex, chainId, extendedAccountPublicKey } = account.blockchainSpecific;
|
|
104
|
+
return {
|
|
105
|
+
accountIndex,
|
|
106
|
+
chainId,
|
|
107
|
+
extendedAccountPublicKey
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
//#endregion
|
|
112
|
+
//#region src/create-lazy-in-memory-vault-module.ts
|
|
113
|
+
/**
|
|
114
|
+
* Builds a vault module that signs for {@link WalletType.LazyInMemory}
|
|
115
|
+
* Cardano accounts by asking `withMnemonicWords` for the recovery words at
|
|
116
|
+
* each signature. The words must derive the account's stored key, or signing
|
|
117
|
+
* fails with `LazyWalletMismatchError`.
|
|
118
|
+
*
|
|
119
|
+
* Pass the returned module to `createLaceWallet({ modules: [...] })`. Only the
|
|
120
|
+
* `signer-factory-addon` contract is implemented — `vaultContract` is
|
|
121
|
+
* intentionally omitted because the SDK has no encrypted vault to expose to
|
|
122
|
+
* features such as account management or password verification.
|
|
123
|
+
*
|
|
124
|
+
* @param props - The source of the recovery words.
|
|
125
|
+
* @returns A module for the `modules` array of `createLaceWallet`.
|
|
126
|
+
*/
|
|
127
|
+
const createLazyInMemoryVaultModule = (props) => {
|
|
128
|
+
const signerFactory = new CardanoLazyInMemorySignerFactory(props);
|
|
129
|
+
const implementsContracts = require_store.combineContracts([require_sdk.signerFactoryAddonContract]);
|
|
130
|
+
return require_store.inferModuleContext({
|
|
131
|
+
moduleName: require_sdk.ModuleName("lazy-in-memory-vault"),
|
|
132
|
+
implements: implementsContracts,
|
|
133
|
+
addons: { loadSignerFactory: async () => ({ default: () => signerFactory }) }
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
//#endregion
|
|
137
|
+
//#region src/passkey-vault-module.ts
|
|
138
|
+
/**
|
|
139
|
+
* A lazy vault module whose recovery words come from a fresh assertion of a
|
|
140
|
+
* passkey at each signature: the words derive from the passkey and are
|
|
141
|
+
* checked against the account's stored key before anything is signed. The
|
|
142
|
+
* assertion stays open until the Cardano signature completes.
|
|
143
|
+
*
|
|
144
|
+
* @param props - The passkey.
|
|
145
|
+
* @returns A module for the `modules` array of `createLaceWallet`.
|
|
146
|
+
*/
|
|
147
|
+
const createPasskeyVaultModule = ({ keySource }) => createLazyInMemoryVaultModule({ withMnemonicWords: async (use) => keySource.withPasskeyMnemonic(use) });
|
|
148
|
+
//#endregion
|
|
149
|
+
//#region src/passkey-account-public-key.ts
|
|
150
|
+
/** Use the same CIP-3 Icarus account derivation as Cardano's wallet integration. */
|
|
151
|
+
const passkeyAccountPublicKey = async (words) => {
|
|
152
|
+
const passphrase = crypto.getRandomValues(new Uint8Array(32));
|
|
153
|
+
try {
|
|
154
|
+
return (await _laceio_cardano_key_management.InMemoryKeyAgent.fromBip39MnemonicWords({
|
|
155
|
+
accountIndex: 0,
|
|
156
|
+
chainId: _laceio_cardano_core.Cardano.ChainIds.Mainnet,
|
|
157
|
+
getPassphrase: async () => passphrase,
|
|
158
|
+
mnemonicWords: [...words],
|
|
159
|
+
purpose: _laceio_cardano_key_management.KeyPurpose.STANDARD
|
|
160
|
+
}, {
|
|
161
|
+
bip32Ed25519: await _laceio_cardano_crypto.SodiumBip32Ed25519.create(),
|
|
162
|
+
logger: ts_log.dummyLogger
|
|
163
|
+
})).serializableData.extendedAccountPublicKey;
|
|
164
|
+
} finally {
|
|
165
|
+
passphrase.fill(0);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
//#endregion
|
|
169
|
+
//#region src/passkey-wallet-mismatch-error.ts
|
|
170
|
+
/**
|
|
171
|
+
* The passkey, or the signer, serves another account than the one expected:
|
|
172
|
+
* another credential, relying party or account key than the saved binding or
|
|
173
|
+
* public key names.
|
|
174
|
+
*/
|
|
175
|
+
var PasskeyWalletMismatchError = class extends Error {
|
|
176
|
+
constructor() {
|
|
177
|
+
super("Passkey does not match the saved Cardano wallet.");
|
|
178
|
+
this.name = "PasskeyWalletMismatchError";
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
//#endregion
|
|
182
|
+
//#region src/passkey-wallet-entity.ts
|
|
183
|
+
const fingerprint = (publicKey) => require_codecs.bytesToHex(require_codecs.sha256(new TextEncoder().encode(publicKey)));
|
|
184
|
+
/**
|
|
185
|
+
* Derives the Cardano wallet of a passkey in one assertion, checks it against
|
|
186
|
+
* an expected binding, and returns its wallet entity with the binding to
|
|
187
|
+
* persist. The entity is a `LazyInMemoryWallet`: it stores only public keys,
|
|
188
|
+
* and `createPasskeyVaultModule` signs for it.
|
|
189
|
+
*
|
|
190
|
+
* @param wallet - The wallet the entity is for.
|
|
191
|
+
* @param props - The key source, the name and the saved binding.
|
|
192
|
+
* @returns The entity, for `wallets.addWallet`, and the binding to persist.
|
|
193
|
+
* Rejects with `PasskeyWalletMismatchError` when the passkey serves another
|
|
194
|
+
* account than `expectedBinding`.
|
|
195
|
+
*/
|
|
196
|
+
const createPasskeyWalletEntity = async (wallet, { keySource, walletName, expectedBinding }) => {
|
|
197
|
+
const ref = keySource.credentialRef();
|
|
198
|
+
if (expectedBinding && ref && (ref.credentialId !== expectedBinding.credentialId || ref.rpId !== expectedBinding.rpId || ref.recipeVersion !== expectedBinding.recipeVersion)) throw new PasskeyWalletMismatchError();
|
|
199
|
+
return keySource.withPasskeyMnemonic(async (words) => {
|
|
200
|
+
const assertedRef = keySource.credentialRef();
|
|
201
|
+
if (!assertedRef || ref && assertedRef.credentialId !== ref.credentialId) throw new PasskeyWalletMismatchError();
|
|
202
|
+
const publicKey = await passkeyAccountPublicKey(words);
|
|
203
|
+
const binding = {
|
|
204
|
+
...assertedRef,
|
|
205
|
+
fingerprint: fingerprint(publicKey)
|
|
206
|
+
};
|
|
207
|
+
if (expectedBinding && (binding.credentialId !== expectedBinding.credentialId || binding.rpId !== expectedBinding.rpId || binding.recipeVersion !== expectedBinding.recipeVersion || binding.fingerprint !== expectedBinding.fingerprint)) throw new PasskeyWalletMismatchError();
|
|
208
|
+
const entity = await require_sdk.createBlockchainWalletEntity(wallet, "Cardano", {
|
|
209
|
+
mnemonicWords: [...words],
|
|
210
|
+
walletName
|
|
211
|
+
});
|
|
212
|
+
const accounts = entity.accounts.filter((account) => account.blockchainName === "Cardano");
|
|
213
|
+
if (accounts.length === 0 || accounts.some((account) => account.blockchainSpecific.extendedAccountPublicKey !== publicKey)) throw new PasskeyWalletMismatchError();
|
|
214
|
+
return {
|
|
215
|
+
entity: {
|
|
216
|
+
...entity,
|
|
217
|
+
accounts
|
|
218
|
+
},
|
|
219
|
+
binding
|
|
220
|
+
};
|
|
221
|
+
});
|
|
222
|
+
};
|
|
223
|
+
//#endregion
|
|
224
|
+
//#region ../../packages/lib/passkey/src/remote/protocol.ts
|
|
225
|
+
/** Whether a channel message is shaped like a signer response. */
|
|
226
|
+
const isSignerResponse = (data) => typeof data === "object" && data !== null && "id" in data && typeof data.id === "number" && "ok" in data && typeof data.ok === "boolean";
|
|
227
|
+
/** Whether a window or channel message carries the given `type` tag. */
|
|
228
|
+
const hasMessageType = (data, type) => typeof data === "object" && data !== null && "type" in data && data.type === type;
|
|
229
|
+
//#endregion
|
|
230
|
+
//#region ../../packages/lib/passkey/src/remote/client.ts
|
|
231
|
+
const POPUP_NAME = "lace-signer";
|
|
232
|
+
const POPUP_FEATURES = "popup,width=420,height=600";
|
|
233
|
+
const POPUP_CLOSED_POLL_INTERVAL = 500;
|
|
234
|
+
/**
|
|
235
|
+
* The low-level client underneath `createRemotePasskeySigner`: it opens the
|
|
236
|
+
* hosted signer page in a popup, completes the handshake over a message
|
|
237
|
+
* channel and carries typed requests to it.
|
|
238
|
+
*
|
|
239
|
+
* Only messages whose origin is the signer's and whose source is the popup
|
|
240
|
+
* this client opened are trusted: any other page that can reach the dApp
|
|
241
|
+
* window could otherwise complete the handshake and receive the port.
|
|
242
|
+
* The hello message is posted to the signer origin alone, so a popup that
|
|
243
|
+
* navigated elsewhere never receives the port either.
|
|
244
|
+
*
|
|
245
|
+
* The popup's loaded message is awaited from `open`, not from `connect`,
|
|
246
|
+
* so a dApp that awaits anything between the two cannot miss it.
|
|
247
|
+
*/
|
|
248
|
+
const createSignerClient = ({ signerUrl, host = window }) => {
|
|
249
|
+
const signerOrigin = new URL(signerUrl).origin;
|
|
250
|
+
const pending = /* @__PURE__ */ new Map();
|
|
251
|
+
let nextId = 1;
|
|
252
|
+
let opened;
|
|
253
|
+
let port;
|
|
254
|
+
let didClose = false;
|
|
255
|
+
const close = () => {
|
|
256
|
+
const closing = opened;
|
|
257
|
+
opened = void 0;
|
|
258
|
+
if (closing) didClose = true;
|
|
259
|
+
closing?.stop();
|
|
260
|
+
if (closing && !closing.popup.closed) closing.popup.close();
|
|
261
|
+
port?.close();
|
|
262
|
+
port = void 0;
|
|
263
|
+
closing?.settleClosed();
|
|
264
|
+
const error = new require_key_source.SignerClosedError();
|
|
265
|
+
for (const request of pending.values()) request.reject(error);
|
|
266
|
+
pending.clear();
|
|
267
|
+
};
|
|
268
|
+
const trackPopup = (popup) => {
|
|
269
|
+
let stopListening = () => {};
|
|
270
|
+
const loaded = new Promise((resolve) => {
|
|
271
|
+
const onMessage = (event) => {
|
|
272
|
+
if (event.origin !== signerOrigin || event.source !== popup) return;
|
|
273
|
+
if (!hasMessageType(event.data, "signer-loaded")) return;
|
|
274
|
+
stopListening();
|
|
275
|
+
resolve();
|
|
276
|
+
};
|
|
277
|
+
host.addEventListener("message", onMessage);
|
|
278
|
+
stopListening = () => {
|
|
279
|
+
host.removeEventListener("message", onMessage);
|
|
280
|
+
};
|
|
281
|
+
});
|
|
282
|
+
let settleClosed = () => {};
|
|
283
|
+
const closed = new Promise((_, reject) => {
|
|
284
|
+
settleClosed = () => {
|
|
285
|
+
reject(new require_key_source.SignerClosedError());
|
|
286
|
+
};
|
|
287
|
+
});
|
|
288
|
+
closed.catch(() => {});
|
|
289
|
+
const interval = setInterval(() => {
|
|
290
|
+
if (popup.closed) close();
|
|
291
|
+
}, POPUP_CLOSED_POLL_INTERVAL);
|
|
292
|
+
return {
|
|
293
|
+
popup,
|
|
294
|
+
loaded,
|
|
295
|
+
closed,
|
|
296
|
+
settleClosed,
|
|
297
|
+
stop: () => {
|
|
298
|
+
clearInterval(interval);
|
|
299
|
+
stopListening();
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
};
|
|
303
|
+
const open = () => {
|
|
304
|
+
close();
|
|
305
|
+
const popup = host.open(signerUrl, POPUP_NAME, POPUP_FEATURES);
|
|
306
|
+
if (!popup) throw new require_key_source.SignerPopupBlockedError();
|
|
307
|
+
opened = trackPopup(popup);
|
|
308
|
+
didClose = false;
|
|
309
|
+
return popup;
|
|
310
|
+
};
|
|
311
|
+
const onResponse = (event) => {
|
|
312
|
+
if (!isSignerResponse(event.data)) return;
|
|
313
|
+
const response = event.data;
|
|
314
|
+
const request = pending.get(response.id);
|
|
315
|
+
if (!request) return;
|
|
316
|
+
pending.delete(response.id);
|
|
317
|
+
if (response.ok) request.resolve(response.result);
|
|
318
|
+
else request.reject(new require_key_source.RemoteSignerError(response.code, response.message, response.details));
|
|
319
|
+
};
|
|
320
|
+
const handshake = async ({ popup, loaded, closed }) => {
|
|
321
|
+
await Promise.race([loaded, closed]);
|
|
322
|
+
const channel = new MessageChannel();
|
|
323
|
+
const ready = new Promise((resolve) => {
|
|
324
|
+
const onReady = (event) => {
|
|
325
|
+
if (!hasMessageType(event.data, "ready")) return;
|
|
326
|
+
channel.port1.removeEventListener("message", onReady);
|
|
327
|
+
resolve();
|
|
328
|
+
};
|
|
329
|
+
channel.port1.addEventListener("message", onReady);
|
|
330
|
+
});
|
|
331
|
+
channel.port1.addEventListener("message", onResponse);
|
|
332
|
+
channel.port1.start();
|
|
333
|
+
port = channel.port1;
|
|
334
|
+
popup.postMessage({ type: "hello" }, signerOrigin, [channel.port2]);
|
|
335
|
+
await Promise.race([ready, closed]);
|
|
336
|
+
};
|
|
337
|
+
const connect = async () => {
|
|
338
|
+
if (!opened) throw new Error("The signer popup is not open.");
|
|
339
|
+
opened.handshake ??= handshake(opened);
|
|
340
|
+
return opened.handshake;
|
|
341
|
+
};
|
|
342
|
+
const request = async (kind, payload) => {
|
|
343
|
+
const activePort = port;
|
|
344
|
+
if (!activePort) {
|
|
345
|
+
if (didClose) throw new require_key_source.SignerClosedError();
|
|
346
|
+
throw new Error("The signer is not connected.");
|
|
347
|
+
}
|
|
348
|
+
const id = nextId;
|
|
349
|
+
nextId += 1;
|
|
350
|
+
return new Promise((resolve, reject) => {
|
|
351
|
+
pending.set(id, {
|
|
352
|
+
resolve,
|
|
353
|
+
reject
|
|
354
|
+
});
|
|
355
|
+
try {
|
|
356
|
+
activePort.postMessage({
|
|
357
|
+
id,
|
|
358
|
+
kind,
|
|
359
|
+
payload
|
|
360
|
+
});
|
|
361
|
+
} catch (error) {
|
|
362
|
+
pending.delete(id);
|
|
363
|
+
throw error;
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
};
|
|
367
|
+
return {
|
|
368
|
+
open,
|
|
369
|
+
connect,
|
|
370
|
+
request,
|
|
371
|
+
close
|
|
372
|
+
};
|
|
373
|
+
};
|
|
374
|
+
//#endregion
|
|
375
|
+
//#region src/cardano-remote-signer-factory.ts
|
|
376
|
+
/** The signer answered a request with a result of the wrong shape. */
|
|
377
|
+
var RemoteSignerResultError = class extends Error {
|
|
378
|
+
constructor() {
|
|
379
|
+
super("The signer returned a malformed result.");
|
|
380
|
+
this.name = "RemoteSignerResultError";
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
const isRecord$1 = (value) => typeof value === "object" && value !== null;
|
|
384
|
+
const parseSignResult = (result) => {
|
|
385
|
+
if (!isRecord$1(result) || typeof result.serializedTx !== "string" || typeof result.signatureCount !== "number") throw new RemoteSignerResultError();
|
|
386
|
+
return {
|
|
387
|
+
serializedTx: require_bytes_vo.HexBytes(result.serializedTx),
|
|
388
|
+
signatureCount: result.signatureCount
|
|
389
|
+
};
|
|
390
|
+
};
|
|
391
|
+
const parseSignDataResult = (result) => {
|
|
392
|
+
if (!isRecord$1(result) || typeof result.signature !== "string" || typeof result.key !== "string") throw new RemoteSignerResultError();
|
|
393
|
+
return {
|
|
394
|
+
signature: require_bytes_vo.HexBytes(result.signature),
|
|
395
|
+
key: require_bytes_vo.HexBytes(result.key)
|
|
396
|
+
};
|
|
397
|
+
};
|
|
398
|
+
/**
|
|
399
|
+
* Signer factory for {@link WalletType.LazyInMemory} Cardano accounts whose
|
|
400
|
+
* passkey lives with the Lace signer page. Each sign request travels to the
|
|
401
|
+
* signer with the transaction and the public account data, and only the
|
|
402
|
+
* signed transaction or signature comes back; the mnemonic never reaches
|
|
403
|
+
* the dApp. Consent is the Approve click inside the signer, so no local
|
|
404
|
+
* authentication prompt runs.
|
|
405
|
+
*/
|
|
406
|
+
var CardanoRemoteSignerFactory = class {
|
|
407
|
+
#client;
|
|
408
|
+
constructor(props) {
|
|
409
|
+
this.#client = props.client;
|
|
410
|
+
}
|
|
411
|
+
canSign(account) {
|
|
412
|
+
return account.accountType === "LazyInMemory" && account.blockchainName === "Cardano";
|
|
413
|
+
}
|
|
414
|
+
createTransactionSigner(context) {
|
|
415
|
+
const { knownAddresses, utxo } = context;
|
|
416
|
+
const account = this.#resolveAccountProps(context);
|
|
417
|
+
return require_guarded_transaction_signer.withCollateralOwnershipGuard({ sign: ({ serializedTx }) => (0, rxjs.defer)(() => (0, rxjs.from)(this.#client.request("sign-cardano-tx", {
|
|
418
|
+
serializedTx,
|
|
419
|
+
knownAddresses,
|
|
420
|
+
utxo,
|
|
421
|
+
...account
|
|
422
|
+
}))).pipe((0, rxjs.map)(parseSignResult)) }, context);
|
|
423
|
+
}
|
|
424
|
+
createDataSigner(context) {
|
|
425
|
+
const { knownAddresses } = context;
|
|
426
|
+
const account = this.#resolveAccountProps(context);
|
|
427
|
+
return { signData: ({ signWith, payload }) => (0, rxjs.defer)(() => (0, rxjs.from)(this.#client.request("sign-cardano-data", {
|
|
428
|
+
signWith,
|
|
429
|
+
payload,
|
|
430
|
+
knownAddresses,
|
|
431
|
+
...account
|
|
432
|
+
}))).pipe((0, rxjs.map)(parseSignDataResult)) };
|
|
433
|
+
}
|
|
434
|
+
/** Reads the public account data the signer needs from the context. */
|
|
435
|
+
#resolveAccountProps(context) {
|
|
436
|
+
const account = context.wallet.accounts.find((a) => a.accountId === context.accountId);
|
|
437
|
+
if (!account || !this.canSign(account)) throw new Error(`CardanoRemoteSignerFactory does not support account type: ${account?.accountType ?? "unknown"}`);
|
|
438
|
+
const { accountIndex, chainId, extendedAccountPublicKey } = account.blockchainSpecific;
|
|
439
|
+
return {
|
|
440
|
+
accountIndex,
|
|
441
|
+
chainId: {
|
|
442
|
+
networkId: chainId.networkId,
|
|
443
|
+
networkMagic: chainId.networkMagic
|
|
444
|
+
},
|
|
445
|
+
extendedAccountPublicKey
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
};
|
|
449
|
+
//#endregion
|
|
450
|
+
//#region src/remote-cardano-vault-module.ts
|
|
451
|
+
/**
|
|
452
|
+
* Builds a vault module that signs for
|
|
453
|
+
* {@link WalletType.LazyInMemory} Cardano accounts through the Lace signer
|
|
454
|
+
* page instead of a local mnemonic. Pass the returned module to
|
|
455
|
+
* `createLaceWallet({ modules: [...] })`. Only the `signer-factory-addon`
|
|
456
|
+
* contract is implemented, as with the local lazy vault: the SDK has no
|
|
457
|
+
* encrypted vault to expose. A `RemotePasskeySigner` carries one ready-made,
|
|
458
|
+
* as `cardanoVaultModule`.
|
|
459
|
+
*
|
|
460
|
+
* @param props - The connected signer client.
|
|
461
|
+
* @returns A module for the `modules` array of `createLaceWallet`.
|
|
462
|
+
*/
|
|
463
|
+
const createRemoteCardanoVaultModule = (props) => {
|
|
464
|
+
const signerFactory = new CardanoRemoteSignerFactory(props);
|
|
465
|
+
const implementsContracts = require_store.combineContracts([require_sdk.signerFactoryAddonContract]);
|
|
466
|
+
return require_store.inferModuleContext({
|
|
467
|
+
moduleName: require_sdk.ModuleName("remote-cardano-vault"),
|
|
468
|
+
implements: implementsContracts,
|
|
469
|
+
addons: { loadSignerFactory: async () => ({ default: () => signerFactory }) }
|
|
470
|
+
});
|
|
471
|
+
};
|
|
472
|
+
//#endregion
|
|
473
|
+
//#region src/remote-cardano-account-public-key.ts
|
|
474
|
+
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
475
|
+
const parseAccountPublicKeyResult = (result, accountIndex) => {
|
|
476
|
+
if (!isRecord(result) || result.accountIndex !== accountIndex || typeof result.extendedAccountPublicKey !== "string") throw new RemoteSignerResultError();
|
|
477
|
+
try {
|
|
478
|
+
return (0, _laceio_cardano_crypto.Bip32PublicKeyHex)(result.extendedAccountPublicKey);
|
|
479
|
+
} catch {
|
|
480
|
+
throw new RemoteSignerResultError();
|
|
481
|
+
}
|
|
482
|
+
};
|
|
483
|
+
/**
|
|
484
|
+
* Asks the signer for the extended public key of one Cardano account. The
|
|
485
|
+
* signer asks the user to share it, so it is one consent per call; the
|
|
486
|
+
* result is public and safe for the dApp to persist.
|
|
487
|
+
*/
|
|
488
|
+
const requestRemoteCardanoAccountPublicKey = async (client, accountIndex) => parseAccountPublicKeyResult(await client.request("cardano-account-public-key", { accountIndex }), accountIndex);
|
|
489
|
+
//#endregion
|
|
490
|
+
//#region src/remote-passkey-signer.ts
|
|
491
|
+
/**
|
|
492
|
+
* Creates one connection to the hosted Lace signer page and everything a dApp
|
|
493
|
+
* signs Cardano transactions and data with through it: the connection's
|
|
494
|
+
* `open`, `connect`, `close` and `request`, the `cardanoVaultModule` and
|
|
495
|
+
* `accountPublicKey(index)`.
|
|
496
|
+
*
|
|
497
|
+
* It composes {@link createSignerClient} with the remote Cardano vault
|
|
498
|
+
* module, so a dApp gets one connection to the Lace signer page instead of
|
|
499
|
+
* building its own key source. The hosted signer is a self-custodial wallet:
|
|
500
|
+
* wallet keys are derived and used in its window in the user's browser, and
|
|
501
|
+
* the passkey stays in the user's authenticator. The dApp receives public
|
|
502
|
+
* keys and signatures only.
|
|
503
|
+
*
|
|
504
|
+
* `open` must run synchronously inside the user's click handler: browsers
|
|
505
|
+
* refuse a popup opened after an await. Call `connect` right after `open`
|
|
506
|
+
* to complete the handshake; calling it before the popup is open rejects.
|
|
507
|
+
*
|
|
508
|
+
* Each Cardano signature is its own Approve click in the signer window and
|
|
509
|
+
* its own fresh passkey assertion.
|
|
510
|
+
*
|
|
511
|
+
* @param props - The signer page's URL and the window that opens it.
|
|
512
|
+
* @returns The signer. Call `open()` synchronously in a click handler, then
|
|
513
|
+
* `await connect()`.
|
|
514
|
+
*/
|
|
515
|
+
const createRemotePasskeySigner = ({ signerUrl, host }) => {
|
|
516
|
+
const client = createSignerClient({
|
|
517
|
+
signerUrl,
|
|
518
|
+
host
|
|
519
|
+
});
|
|
520
|
+
return {
|
|
521
|
+
open: client.open,
|
|
522
|
+
connect: client.connect,
|
|
523
|
+
close: client.close,
|
|
524
|
+
request: client.request,
|
|
525
|
+
cardanoVaultModule: createRemoteCardanoVaultModule({ client }),
|
|
526
|
+
accountPublicKey: async (accountIndex) => requestRemoteCardanoAccountPublicKey(client, accountIndex)
|
|
527
|
+
};
|
|
528
|
+
};
|
|
529
|
+
//#endregion
|
|
530
|
+
//#region ../../packages/module/blockchain-cardano/src/sdk-contracts.ts
|
|
531
|
+
const implementsContracts = require_store.combineContracts([
|
|
532
|
+
require_sdk.inMemoryIntegrationAddonContract,
|
|
533
|
+
require_sdk.tokensStoreContract,
|
|
534
|
+
require_sdk.addressesStoreContract,
|
|
535
|
+
require_sdk.signerFactoryAddonContract,
|
|
536
|
+
require_sdk.syncStoreContract,
|
|
537
|
+
require_contract.addressBookAddressValidatorAddonContract,
|
|
538
|
+
require_sdk.delegationTxBuilderAddonContract,
|
|
539
|
+
require_sdk.cardanoInMemorySigningDependencyContract,
|
|
540
|
+
require_contract.tokenIdMapperAddonContract,
|
|
541
|
+
require_sdk.deregistrationTxBuilderAddonContract,
|
|
542
|
+
require_sdk.voteDelegationTxBuilderAddonContract,
|
|
543
|
+
require_sdk.earnRewardsTxBuilderAddonContract
|
|
544
|
+
]);
|
|
545
|
+
const dependsOnContracts = require_store.combineContracts([
|
|
546
|
+
require_sdk.featureStoreContract,
|
|
547
|
+
require_sdk.cardanoProviderStoreContract,
|
|
548
|
+
require_sdk.walletRepoStoreContract
|
|
549
|
+
]);
|
|
550
|
+
//#endregion
|
|
551
|
+
//#region ../../packages/module/blockchain-cardano/src/store/index.ts
|
|
552
|
+
var store_default$1 = require_store.inferStoreContext({
|
|
553
|
+
load: async () => Promise.resolve().then(() => require("./init-DrRdf5sZ.cjs")),
|
|
554
|
+
context: {
|
|
555
|
+
actions: {},
|
|
556
|
+
selectors: {}
|
|
557
|
+
}
|
|
558
|
+
});
|
|
559
|
+
//#endregion
|
|
560
|
+
//#region ../../packages/module/blockchain-cardano/src/sdk.ts
|
|
561
|
+
/**
|
|
562
|
+
* Cardano accounts: their addresses, tokens and sync, signing, and the
|
|
563
|
+
* transaction builders for delegation, voting and rewards. Loads when
|
|
564
|
+
* `FEATURE_FLAG_CARDANO` is enabled, and needs a Cardano provider module such
|
|
565
|
+
* as `m.cardanoProviderBlockfrost`.
|
|
566
|
+
*/
|
|
567
|
+
var sdk_default$2 = require_store.inferModuleContext({
|
|
568
|
+
moduleName: require_sdk.ModuleName("blockchain-cardano"),
|
|
569
|
+
implements: implementsContracts,
|
|
570
|
+
dependsOn: dependsOnContracts,
|
|
571
|
+
feature: {
|
|
572
|
+
willLoad: (featureFlags) => featureFlags.some((flag) => flag.key === require_const.FEATURE_FLAG_CARDANO),
|
|
573
|
+
metadata: {
|
|
574
|
+
name: "Cardano",
|
|
575
|
+
description: "Cardano blockchain support"
|
|
576
|
+
}
|
|
577
|
+
},
|
|
578
|
+
store: store_default$1,
|
|
579
|
+
addons: {
|
|
580
|
+
loadInMemoryWalletIntegration: async () => Promise.resolve().then(() => require("./in-memory-wallet-integration-Cm6P8sk6.cjs")),
|
|
581
|
+
loadAddressBookAddressValidators: async () => Promise.resolve().then(() => require("./address-book-address-validator-Dte_YQ2L.cjs")),
|
|
582
|
+
loadDelegationTxBuilder: async () => Promise.resolve().then(() => require("./delegation-tx-builder-CCjiakoy.cjs")),
|
|
583
|
+
loadTokenIdMapper: async () => Promise.resolve().then(() => require("./token-id-mapper-CVyQJUKY.cjs")),
|
|
584
|
+
loadDeregistrationTxBuilder: async () => Promise.resolve().then(() => require("./deregistration-tx-builder-CQP35yex.cjs")),
|
|
585
|
+
loadVoteDelegationTxBuilder: async () => Promise.resolve().then(() => require("./vote-delegation-tx-builder-BUg1S2Ep.cjs")),
|
|
586
|
+
loadEarnRewardsTxBuilder: async () => Promise.resolve().then(() => require("./earn-rewards-tx-builder-GuxofYns.cjs")),
|
|
587
|
+
loadSignerFactory: async () => Promise.resolve().then(() => require("./signer-factory-Ds6G2AZk.cjs"))
|
|
588
|
+
}
|
|
589
|
+
});
|
|
590
|
+
//#endregion
|
|
591
|
+
//#region src/remote-passkey-wallet-entity.ts
|
|
592
|
+
/**
|
|
593
|
+
* Builds a Cardano wallet entity from the public account key the user agrees
|
|
594
|
+
* to share through the hosted self-custodial passkey wallet. It fails
|
|
595
|
+
* closed with {@link PasskeyWalletMismatchError} when that key differs from
|
|
596
|
+
* `expectedPublicKey`.
|
|
597
|
+
*
|
|
598
|
+
* The entity is a {@link WalletType.LazyInMemory} wallet built from the
|
|
599
|
+
* public account key alone:
|
|
600
|
+
* no mnemonic, PRF output or encrypted root ever reaches the dApp, so there
|
|
601
|
+
* is nothing secret to persist. Wallet keys stay in the signer's window in
|
|
602
|
+
* the user's browser. The wallet id is derived from the public key.
|
|
603
|
+
*
|
|
604
|
+
* Mainnet and testnet accounts are returned; consumers choose which to expose.
|
|
605
|
+
*
|
|
606
|
+
* @param props - The signer, the name, the account and the saved key.
|
|
607
|
+
* @returns The entity and the public key to persist.
|
|
608
|
+
*/
|
|
609
|
+
const createRemotePasskeyWalletEntity = async ({ signer, walletName, accountIndex = 0, expectedPublicKey, order = 0 }) => {
|
|
610
|
+
const publicKey = await signer.accountPublicKey(accountIndex);
|
|
611
|
+
if (expectedPublicKey !== void 0 && publicKey !== expectedPublicKey) throw new PasskeyWalletMismatchError();
|
|
612
|
+
const walletId = require_sdk.WalletId.deriveFromBip32PublicKey(publicKey);
|
|
613
|
+
return {
|
|
614
|
+
entity: {
|
|
615
|
+
accounts: require_in_memory_wallet_integration.createLazyAccountsFromAccountPublicKey({
|
|
616
|
+
walletId,
|
|
617
|
+
accountIndex,
|
|
618
|
+
extendedAccountPublicKey: publicKey
|
|
619
|
+
}),
|
|
620
|
+
blockchainSpecific: {},
|
|
621
|
+
metadata: {
|
|
622
|
+
name: walletName,
|
|
623
|
+
order
|
|
624
|
+
},
|
|
625
|
+
type: require_sdk.WalletType.LazyInMemory,
|
|
626
|
+
walletId
|
|
627
|
+
},
|
|
628
|
+
publicKey
|
|
629
|
+
};
|
|
630
|
+
};
|
|
631
|
+
//#endregion
|
|
632
|
+
//#region src/create-tx-builder.ts
|
|
633
|
+
/**
|
|
634
|
+
* Creates a {@link TransactionBuilder} pre-configured with the active Cardano
|
|
635
|
+
* network and protocol parameters from the wallet's Redux state.
|
|
636
|
+
*
|
|
637
|
+
* Call {@link waitForNetworkInfo} first to ensure the state is ready.
|
|
638
|
+
*
|
|
639
|
+
* @param wallet - A wallet with the Cardano modules loaded (see
|
|
640
|
+
* {@link WalletWithCardanoContext}), whose network info has arrived.
|
|
641
|
+
* @returns `Ok` with the builder, or `Err` until the chain ID and protocol
|
|
642
|
+
* parameters are in the wallet's state.
|
|
643
|
+
*/
|
|
644
|
+
const createTxBuilder = (wallet) => {
|
|
645
|
+
const state = wallet.getState();
|
|
646
|
+
const chainId = require_slice.cardanoContextSelectors.cardanoContext.selectChainId(state);
|
|
647
|
+
if (!chainId) return require_asyncoption.Err(/* @__PURE__ */ new Error("Cardano network not initialized — ensure a wallet entity has been created and the Cardano blockchain module is loaded"));
|
|
648
|
+
const protocolParameters = require_slice.cardanoContextSelectors.cardanoContext.selectProtocolParameters(state);
|
|
649
|
+
if (!protocolParameters) return require_asyncoption.Err(/* @__PURE__ */ new Error("Protocol parameters not available — ensure the Cardano provider has synced"));
|
|
650
|
+
return require_asyncoption.Ok(new require_TransactionBuilder.TransactionBuilder(chainId.networkMagic, protocolParameters));
|
|
651
|
+
};
|
|
652
|
+
/**
|
|
653
|
+
* Returns a promise that resolves once the Cardano network info (chain ID and
|
|
654
|
+
* protocol parameters) is available in the wallet state. Await this before
|
|
655
|
+
* calling {@link createTxBuilder} to guarantee it succeeds.
|
|
656
|
+
*
|
|
657
|
+
* @param wallet - A wallet with the Cardano modules loaded (see
|
|
658
|
+
* {@link WalletWithCardanoContext}).
|
|
659
|
+
* @param options - Optional configuration.
|
|
660
|
+
* @returns The chain ID and protocol parameters, once both are in state.
|
|
661
|
+
*/
|
|
662
|
+
const waitForNetworkInfo = async (wallet, options) => (0, rxjs.firstValueFrom)((0, rxjs.combineLatest)([wallet.stateObservables.cardanoContext.selectChainId$, wallet.stateObservables.cardanoContext.selectProtocolParameters$]).pipe((0, rxjs.filter)((pair) => pair[0] != null && pair[1] != null), (0, rxjs.map)(([chainId, protocolParameters]) => ({
|
|
663
|
+
chainId,
|
|
664
|
+
protocolParameters
|
|
665
|
+
})), options?.timeout != null ? (0, rxjs.timeout)({ first: options.timeout }) : passthrough()));
|
|
666
|
+
const passthrough = () => (source$) => source$;
|
|
667
|
+
//#endregion
|
|
668
|
+
//#region src/sign-cardano-tx.ts
|
|
669
|
+
const isSignableCardanoWallet = (wallet) => wallet.type === require_sdk.WalletType.InMemory || wallet.type === require_sdk.WalletType.LazyInMemory;
|
|
670
|
+
/**
|
|
671
|
+
* Signs a Cardano transaction with the wallet's keys, through the signer of
|
|
672
|
+
* its wallet kind, with no confirmation prompt of the SDK's own: confirm with
|
|
673
|
+
* the user before calling it. The account is `props.accountId`, or the only
|
|
674
|
+
* signable Cardano account on the active network.
|
|
675
|
+
*
|
|
676
|
+
* @param wallet - A wallet holding the signing account (see
|
|
677
|
+
* {@link WalletWithCardanoSigning}).
|
|
678
|
+
* @param props - The unsigned transaction, and the password and account when
|
|
679
|
+
* needed.
|
|
680
|
+
* @returns `Ok` with the signed transaction, ready for `submitCardanoTx`, or
|
|
681
|
+
* `Err` when no account matches, the password is missing or signing fails.
|
|
682
|
+
* It never rejects.
|
|
683
|
+
*/
|
|
684
|
+
const signCardanoTx = async (wallet, props) => {
|
|
685
|
+
const { serializedTx, password, accountId: requestedAccountId } = props;
|
|
686
|
+
try {
|
|
687
|
+
const { stateObservables: obs } = wallet;
|
|
688
|
+
const allWallets = await (0, rxjs.firstValueFrom)(obs.wallets.selectAll$);
|
|
689
|
+
const activeNetworkIds = await (0, rxjs.firstValueFrom)(obs.network.selectAllActiveNetworkIds$);
|
|
690
|
+
const allAddresses = await (0, rxjs.firstValueFrom)(obs.addresses.selectAllAddresses$);
|
|
691
|
+
const accountUtxos = await (0, rxjs.firstValueFrom)(obs.cardanoContext.selectCollateralOwnershipUtxos$);
|
|
692
|
+
const signableWallets = allWallets.filter(isSignableCardanoWallet);
|
|
693
|
+
const cardanoAccounts = signableWallets.flatMap((w) => w.accounts.filter((a) => a.blockchainName === "Cardano" && activeNetworkIds.includes(a.blockchainNetworkId)));
|
|
694
|
+
let accountId;
|
|
695
|
+
let walletEntity;
|
|
696
|
+
if (requestedAccountId) {
|
|
697
|
+
const found = cardanoAccounts.find((a) => a.accountId === requestedAccountId);
|
|
698
|
+
if (!found) return require_asyncoption.Err(/* @__PURE__ */ new Error(`Cardano account "${requestedAccountId}" not found on the active network`));
|
|
699
|
+
accountId = found.accountId;
|
|
700
|
+
walletEntity = signableWallets.find((w) => w.walletId === found.walletId);
|
|
701
|
+
} else {
|
|
702
|
+
if (cardanoAccounts.length === 0) return require_asyncoption.Err(/* @__PURE__ */ new Error("No Cardano accounts found on the active network"));
|
|
703
|
+
if (cardanoAccounts.length > 1) return require_asyncoption.Err(/* @__PURE__ */ new Error(`Multiple Cardano accounts found (${cardanoAccounts.length}) — specify accountId to disambiguate`));
|
|
704
|
+
const account = cardanoAccounts[0];
|
|
705
|
+
accountId = account.accountId;
|
|
706
|
+
walletEntity = signableWallets.find((w) => w.walletId === account.walletId);
|
|
707
|
+
}
|
|
708
|
+
if (walletEntity.type === require_sdk.WalletType.InMemory && !password) return require_asyncoption.Err(/* @__PURE__ */ new Error("password is required for InMemory wallets — supply props.password or use a LazyInMemory wallet"));
|
|
709
|
+
const knownAddresses = allAddresses.filter((addr) => addr.accountId === accountId && addr.blockchainName === "Cardano").filter(require_util.isCardanoAddress).map((addr) => ({
|
|
710
|
+
data: addr.data,
|
|
711
|
+
address: addr.address
|
|
712
|
+
})).filter((addr) => !!addr.data).map((addr) => ({
|
|
713
|
+
type: addr.data.type,
|
|
714
|
+
index: addr.data.index,
|
|
715
|
+
networkId: addr.data.networkId,
|
|
716
|
+
accountIndex: addr.data.accountIndex,
|
|
717
|
+
address: _laceio_cardano_core.Cardano.PaymentAddress(addr.address),
|
|
718
|
+
rewardAccount: _laceio_cardano_core.Cardano.RewardAccount(addr.data.rewardAccount),
|
|
719
|
+
stakeKeyDerivationPath: addr.data.stakeKeyDerivationPath
|
|
720
|
+
}));
|
|
721
|
+
const utxo = accountUtxos[accountId] ?? [];
|
|
722
|
+
const auth = {
|
|
723
|
+
authenticate: () => (0, rxjs.of)(true),
|
|
724
|
+
accessAuthSecret: (callback) => password ? callback(require_sdk.AuthSecret(require_bytes_vo.ByteArray(password))) : (0, rxjs.throwError)(() => /* @__PURE__ */ new Error("accessAuthSecret called on a wallet that has no password — this is a LazyInMemory wallet; signer factories must not access the auth secret"))
|
|
725
|
+
};
|
|
726
|
+
const signerFactory = new require_composite_signer_factory.CompositeSignerFactory(await wallet._loadModules("addons.loadSignerFactory"));
|
|
727
|
+
const context = {
|
|
728
|
+
wallet: walletEntity,
|
|
729
|
+
accountId,
|
|
730
|
+
knownAddresses,
|
|
731
|
+
utxo,
|
|
732
|
+
collateralInputResolver: require_util.createInputResolver(utxo),
|
|
733
|
+
auth
|
|
734
|
+
};
|
|
735
|
+
return require_asyncoption.Ok(await (0, rxjs.firstValueFrom)(signerFactory.createTransactionSigner(context).sign({ serializedTx: require_bytes_vo.HexBytes(serializedTx) })));
|
|
736
|
+
} catch (error) {
|
|
737
|
+
return require_asyncoption.Err(error instanceof Error ? error : new Error(String(error)));
|
|
738
|
+
}
|
|
739
|
+
};
|
|
740
|
+
//#endregion
|
|
741
|
+
//#region src/submit-cardano-tx.ts
|
|
742
|
+
const SUBMIT_TX_TIMEOUT_MS = 6e4;
|
|
743
|
+
/**
|
|
744
|
+
* Submits a signed transaction through the wallet's Cardano provider and
|
|
745
|
+
* waits up to 60 seconds for the provider's answer.
|
|
746
|
+
*
|
|
747
|
+
* @param wallet - A wallet with the Cardano modules loaded (see
|
|
748
|
+
* {@link WalletWithCardanoSubmit}).
|
|
749
|
+
* @param props - The signed transaction.
|
|
750
|
+
* @returns `Ok` with the transaction ID once the provider accepts it, or
|
|
751
|
+
* `Err` with the provider's refusal or a timeout. It never rejects.
|
|
752
|
+
*/
|
|
753
|
+
const submitCardanoTx = async (wallet, props) => {
|
|
754
|
+
const { serializedTx } = props;
|
|
755
|
+
try {
|
|
756
|
+
const txId = require_cardano_tx_id_vo.CardanoTxId.fromCbor(serializedTx);
|
|
757
|
+
const resultPromise = (0, rxjs.firstValueFrom)((0, rxjs.merge)(wallet.actionObservables.cardanoContext.submitTxCompleted$.pipe((0, rxjs.filter)(({ payload }) => payload.txId === txId), (0, rxjs.map)(({ payload }) => require_asyncoption.Ok({ txId: payload.txId }))), wallet.actionObservables.cardanoContext.submitTxFailed$.pipe((0, rxjs.filter)(({ payload }) => payload.txId === txId), (0, rxjs.map)(({ payload }) => require_asyncoption.Err(new Error(payload.error))))).pipe((0, rxjs.timeout)(SUBMIT_TX_TIMEOUT_MS)));
|
|
758
|
+
wallet.dispatch("cardanoContext.submitTx", { serializedTx });
|
|
759
|
+
return await resultPromise;
|
|
760
|
+
} catch (error) {
|
|
761
|
+
return require_asyncoption.Err(error instanceof Error ? error : new Error(String(error)));
|
|
762
|
+
}
|
|
763
|
+
};
|
|
764
|
+
//#endregion
|
|
765
|
+
//#region ../../packages/module/swap-provider-steelswap/src/steelswap/steelswap-mappers.ts
|
|
766
|
+
const STEELSWAP_PROVIDER_ID = "steelswap";
|
|
767
|
+
const STEELSWAP_PARTNER = "lace-aggregator";
|
|
768
|
+
const STEELSWAP_PARTNER_ADDRESS = "$lace@steelswap";
|
|
769
|
+
const LOVELACE_DECIMALS = 6;
|
|
770
|
+
const QUOTE_EXPIRY_MS = 15e3;
|
|
771
|
+
const DEFAULT_PARTNER = {
|
|
772
|
+
name: STEELSWAP_PARTNER,
|
|
773
|
+
address: STEELSWAP_PARTNER_ADDRESS
|
|
774
|
+
};
|
|
775
|
+
const lovelaceToAda = (lovelace) => (lovelace / 10 ** LOVELACE_DECIMALS).toFixed(2);
|
|
776
|
+
const makeLovelaceFee = (label, amount) => ({
|
|
777
|
+
label,
|
|
778
|
+
amount: String(amount),
|
|
779
|
+
tokenId: "lovelace",
|
|
780
|
+
displayAmount: lovelaceToAda(amount),
|
|
781
|
+
displayCurrency: "ADA"
|
|
782
|
+
});
|
|
783
|
+
const toSmallestUnit = (displayAmount, decimals) => {
|
|
784
|
+
const number_ = Number(displayAmount);
|
|
785
|
+
if (Number.isNaN(number_) || number_ === 0) return 0;
|
|
786
|
+
return Math.round(number_ * 10 ** decimals);
|
|
787
|
+
};
|
|
788
|
+
const toEstimateRequest = (request, partner = DEFAULT_PARTNER) => ({
|
|
789
|
+
tokenA: request.sellTokenId,
|
|
790
|
+
tokenB: request.buyTokenId,
|
|
791
|
+
quantity: toSmallestUnit(request.sellAmount, request.sellTokenDecimals),
|
|
792
|
+
ignoreDexes: request.excludedDexes,
|
|
793
|
+
partner: partner.name,
|
|
794
|
+
hop: true,
|
|
795
|
+
da: []
|
|
796
|
+
});
|
|
797
|
+
const fromEstimateResponse = (response, request) => {
|
|
798
|
+
const route = (response.pools ?? (response.splitGroup ?? []).flat().flatMap((split) => split.pools ?? [])).map((pool) => ({
|
|
799
|
+
dexName: pool.dex,
|
|
800
|
+
sellTokenId: response.tokenA,
|
|
801
|
+
buyTokenId: response.tokenB,
|
|
802
|
+
percentage: response.quantityA > 0 ? pool.quantityA / response.quantityA : 0
|
|
803
|
+
}));
|
|
804
|
+
const fees = [makeLovelaceFee("v2.swap.review.network-fee", response.totalFee), makeLovelaceFee("v2.swap.review.service-fee", response.steelswapFee)];
|
|
805
|
+
const deposit = response.totalDeposit > 0 ? {
|
|
806
|
+
amount: String(response.totalDeposit),
|
|
807
|
+
displayAmount: lovelaceToAda(response.totalDeposit),
|
|
808
|
+
displayCurrency: "ADA"
|
|
809
|
+
} : void 0;
|
|
810
|
+
const totalFeeLovelace = response.totalFee + response.steelswapFee;
|
|
811
|
+
return {
|
|
812
|
+
routeId: `steelswap-${request.sellTokenId}-${request.buyTokenId}-${Date.now()}`,
|
|
813
|
+
providerId: STEELSWAP_PROVIDER_ID,
|
|
814
|
+
sellTokenId: response.tokenA,
|
|
815
|
+
buyTokenId: response.tokenB,
|
|
816
|
+
sellAmount: String(response.quantityA),
|
|
817
|
+
expectedBuyAmount: String(response.quantityB),
|
|
818
|
+
price: response.price,
|
|
819
|
+
priceDisplay: `${response.price.toFixed(6)}`,
|
|
820
|
+
fees,
|
|
821
|
+
totalFeeDisplay: `${lovelaceToAda(totalFeeLovelace)} ADA`,
|
|
822
|
+
deposit,
|
|
823
|
+
route,
|
|
824
|
+
quoteExpiresAt: Date.now() + QUOTE_EXPIRY_MS
|
|
825
|
+
};
|
|
826
|
+
};
|
|
827
|
+
const toBuildRequest = (request, partner = DEFAULT_PARTNER) => ({
|
|
828
|
+
tokenA: request.quote.sellTokenId,
|
|
829
|
+
tokenB: request.quote.buyTokenId,
|
|
830
|
+
quantity: Number(request.quote.sellAmount),
|
|
831
|
+
ignoreDexes: [],
|
|
832
|
+
partner: partner.name,
|
|
833
|
+
hop: true,
|
|
834
|
+
da: [],
|
|
835
|
+
address: request.userAddress,
|
|
836
|
+
forwardAddress: "",
|
|
837
|
+
utxos: request.utxos,
|
|
838
|
+
collateral: request.collateralUtxos,
|
|
839
|
+
slippage: Math.round(request.slippage * 100),
|
|
840
|
+
pAddress: partner.address,
|
|
841
|
+
feeAdust: true,
|
|
842
|
+
ttl: request.ttl
|
|
843
|
+
});
|
|
844
|
+
const fromBuildResponse = (response) => ({
|
|
845
|
+
unsignedTxCbor: response.tx,
|
|
846
|
+
providerId: STEELSWAP_PROVIDER_ID
|
|
847
|
+
});
|
|
848
|
+
const getCardanoTokenIconUrl = (nftCdnUrl, policyId, assetName) => {
|
|
849
|
+
try {
|
|
850
|
+
return `${nftCdnUrl}/lace/image/${_laceio_cardano_core.Cardano.AssetFingerprint.fromParts(_laceio_cardano_core.Cardano.PolicyId(policyId), _laceio_cardano_core.Cardano.AssetName(assetName))}?size=64`;
|
|
851
|
+
} catch {
|
|
852
|
+
return;
|
|
853
|
+
}
|
|
854
|
+
};
|
|
855
|
+
const fromTokenSummary = (token, nftCdnUrl) => {
|
|
856
|
+
const tokenKey = token.policyId && token.policyName ? `${token.policyId}${token.policyName}` : "lovelace";
|
|
857
|
+
const iconUrl = token.policyId && token.policyName ? getCardanoTokenIconUrl(nftCdnUrl, token.policyId, token.policyName) : void 0;
|
|
858
|
+
return {
|
|
859
|
+
id: tokenKey,
|
|
860
|
+
ticker: token.ticker,
|
|
861
|
+
name: token.name,
|
|
862
|
+
decimals: token.decimals,
|
|
863
|
+
policyId: token.policyId || void 0,
|
|
864
|
+
icon: iconUrl
|
|
865
|
+
};
|
|
866
|
+
};
|
|
867
|
+
const fromDexList = (dexNames) => dexNames.map((name) => ({
|
|
868
|
+
id: name,
|
|
869
|
+
name
|
|
870
|
+
}));
|
|
871
|
+
const extractDetailFromErrorMessage = (message) => {
|
|
872
|
+
const jsonStart = message.indexOf("{");
|
|
873
|
+
if (jsonStart === -1) return message;
|
|
874
|
+
try {
|
|
875
|
+
return JSON.parse(message.slice(jsonStart)).detail ?? message;
|
|
876
|
+
} catch {
|
|
877
|
+
return message;
|
|
878
|
+
}
|
|
879
|
+
};
|
|
880
|
+
const toSwapProviderError = (error) => {
|
|
881
|
+
if (error instanceof Error) return {
|
|
882
|
+
code: "PROVIDER_UNAVAILABLE",
|
|
883
|
+
message: extractDetailFromErrorMessage(error.message)
|
|
884
|
+
};
|
|
885
|
+
return {
|
|
886
|
+
code: "UNKNOWN",
|
|
887
|
+
message: String(error)
|
|
888
|
+
};
|
|
889
|
+
};
|
|
890
|
+
//#endregion
|
|
891
|
+
//#region ../../packages/module/swap-provider-steelswap/src/steelswap/steelswap-provider.ts
|
|
892
|
+
const jsonPost = async (url, body) => {
|
|
893
|
+
const response = await fetch(url, {
|
|
894
|
+
method: "POST",
|
|
895
|
+
headers: { "Content-Type": "application/json" },
|
|
896
|
+
body: JSON.stringify(body)
|
|
897
|
+
});
|
|
898
|
+
if (!response.ok) {
|
|
899
|
+
const text = await response.text().catch(() => "");
|
|
900
|
+
throw new Error(`SteelSwap API error (${response.status}): ${text || response.statusText}`);
|
|
901
|
+
}
|
|
902
|
+
return await response.json();
|
|
903
|
+
};
|
|
904
|
+
const jsonGet = async (url) => {
|
|
905
|
+
const response = await fetch(url);
|
|
906
|
+
if (!response.ok) throw new Error(`SteelSwap API error (${response.status}): ${response.statusText}`);
|
|
907
|
+
return await response.json();
|
|
908
|
+
};
|
|
909
|
+
/**
|
|
910
|
+
* A {@link SwapProvider} over the SteelSwap aggregator's API: it quotes swap
|
|
911
|
+
* routes across Cardano DEXes, builds the unsigned swap transaction for a
|
|
912
|
+
* quote, and lists and searches the tokens and DEXes it serves. Each call
|
|
913
|
+
* emits one `Result`; a failed request is an `Err` with a `SwapProviderError`.
|
|
914
|
+
*/
|
|
915
|
+
const createSteelSwapProvider = (config) => {
|
|
916
|
+
const partner = config.partner ?? {
|
|
917
|
+
name: "lace-aggregator",
|
|
918
|
+
address: "$lace@steelswap"
|
|
919
|
+
};
|
|
920
|
+
return {
|
|
921
|
+
getQuote: (request) => (0, rxjs.from)(jsonPost(`${config.steelswapApiBaseUrl}/swap/estimate/`, toEstimateRequest(request, partner)).then((response) => require_asyncoption.Ok(fromEstimateResponse(response, request))).catch((error) => {
|
|
922
|
+
return require_asyncoption.Err(toSwapProviderError(error));
|
|
923
|
+
})),
|
|
924
|
+
buildSwapTx: (request) => (0, rxjs.from)(jsonPost(`${config.steelswapApiBaseUrl}/swap/build/`, toBuildRequest(request, partner)).then((response) => require_asyncoption.Ok(fromBuildResponse(response))).catch((error) => {
|
|
925
|
+
return require_asyncoption.Err(toSwapProviderError(error));
|
|
926
|
+
})),
|
|
927
|
+
listTokens: () => (0, rxjs.from)(jsonGet(`${config.steelswapApiBaseUrl}/tokens/list/`).then((tokens) => require_asyncoption.Ok(tokens.map((t) => fromTokenSummary(t, config.nftCdnUrl)))).catch((error) => require_asyncoption.Err(toSwapProviderError(error)))),
|
|
928
|
+
listDexes: () => (0, rxjs.from)(jsonGet(`${config.steelswapApiBaseUrl}/dex/list/`).then((dexes) => require_asyncoption.Ok(fromDexList(dexes))).catch((error) => require_asyncoption.Err(toSwapProviderError(error)))),
|
|
929
|
+
searchTokens: (_networkId, query) => (0, rxjs.from)(jsonPost(`${config.steelswapApiBaseUrl}/tokens/find-pairs/`, { token: query }).then((tokens) => require_asyncoption.Ok(tokens.map((t) => fromTokenSummary(t, config.nftCdnUrl)))).catch((error) => require_asyncoption.Err(toSwapProviderError(error))))
|
|
930
|
+
};
|
|
931
|
+
};
|
|
932
|
+
//#endregion
|
|
933
|
+
//#region ../../packages/contract/crypto/src/contract.ts
|
|
934
|
+
const cryptoAddonContract = require_store.inferContractContext({
|
|
935
|
+
name: require_sdk.ContractName("crypto-addon"),
|
|
936
|
+
instance: "exactly-one",
|
|
937
|
+
contractType: "addon",
|
|
938
|
+
preloadInServiceWorker: true,
|
|
939
|
+
provides: { addons: ["bip32Ed25519", "blake2b"] }
|
|
940
|
+
});
|
|
941
|
+
//#endregion
|
|
942
|
+
//#region ../../packages/module/cardano-provider-blockfrost/src/store/index.ts
|
|
943
|
+
var store_default = require_store.inferStoreContext({
|
|
944
|
+
load: async () => Promise.resolve().then(() => require("./init-D8OeObDF.cjs")),
|
|
945
|
+
context: {
|
|
946
|
+
actions: {},
|
|
947
|
+
selectors: {}
|
|
948
|
+
}
|
|
949
|
+
});
|
|
950
|
+
//#endregion
|
|
951
|
+
//#region ../../packages/module/cardano-provider-blockfrost/src/sdk.ts
|
|
952
|
+
/**
|
|
953
|
+
* Cardano chain data through Blockfrost: UTxOs, transactions, stake
|
|
954
|
+
* information and protocol parameters, configured by
|
|
955
|
+
* `config.cardanoProvider.blockfrostConfigs`. Loads when
|
|
956
|
+
* `FEATURE_FLAG_CARDANO` is enabled, and needs a crypto module such as
|
|
957
|
+
* `m.cryptoCardanoSdk`.
|
|
958
|
+
*/
|
|
959
|
+
var sdk_default$1 = require_store.inferModuleContext({
|
|
960
|
+
moduleName: require_sdk.ModuleName("cardano-provider-blockfrost"),
|
|
961
|
+
dependsOn: require_store.combineContracts([cryptoAddonContract]),
|
|
962
|
+
implements: require_store.combineContracts([require_sdk.cardanoProviderStoreContract, require_sdk.cardanoProviderDependencyContract]),
|
|
963
|
+
store: store_default,
|
|
964
|
+
feature: {
|
|
965
|
+
willLoad: (featureFlags) => featureFlags.some((flag) => flag.key === require_const.FEATURE_FLAG_CARDANO),
|
|
966
|
+
metadata: {
|
|
967
|
+
name: "Blockfrost",
|
|
968
|
+
description: "Blockfrost provider for Cardano"
|
|
969
|
+
}
|
|
970
|
+
},
|
|
971
|
+
addons: {}
|
|
972
|
+
});
|
|
973
|
+
//#endregion
|
|
974
|
+
//#region ../../packages/module/crypto-cardano-sdk/src/sdk.ts
|
|
975
|
+
/** Cardano cryptography: BIP32-Ed25519 key derivation and Blake2b hashing. */
|
|
976
|
+
var sdk_default = require_store.inferModuleContext({
|
|
977
|
+
moduleName: require_sdk.ModuleName("crypto-cardano-sdk"),
|
|
978
|
+
implements: require_store.combineContracts([cryptoAddonContract]),
|
|
979
|
+
addons: {
|
|
980
|
+
bip32Ed25519: async () => Promise.resolve().then(() => require("./bip32ed25519-B7Yat217.cjs")),
|
|
981
|
+
blake2b: async () => Promise.resolve().then(() => require("./blake2b-DEeVUdKR.cjs"))
|
|
982
|
+
}
|
|
983
|
+
});
|
|
984
|
+
//#endregion
|
|
985
|
+
//#region src/modules-cardano.ts
|
|
986
|
+
var modules_cardano_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
|
|
987
|
+
blockchainCardano: () => sdk_default$2,
|
|
988
|
+
cardanoProviderBlockfrost: () => sdk_default$1,
|
|
989
|
+
cryptoCardanoSdk: () => sdk_default,
|
|
990
|
+
featureDev: () => require_sdk.sdk_default$2,
|
|
991
|
+
storageInMemory: () => require_sdk.sdk_default$1,
|
|
992
|
+
storageWebIndexeddb: () => require_sdk.sdk_default
|
|
993
|
+
});
|
|
994
|
+
//#endregion
|
|
995
|
+
Object.defineProperty(exports, "CardanoRemoteSignerFactory", {
|
|
996
|
+
enumerable: true,
|
|
997
|
+
get: function() {
|
|
998
|
+
return CardanoRemoteSignerFactory;
|
|
999
|
+
}
|
|
1000
|
+
});
|
|
1001
|
+
Object.defineProperty(exports, "PasskeyWalletMismatchError", {
|
|
1002
|
+
enumerable: true,
|
|
1003
|
+
get: function() {
|
|
1004
|
+
return PasskeyWalletMismatchError;
|
|
1005
|
+
}
|
|
1006
|
+
});
|
|
1007
|
+
Object.defineProperty(exports, "RemoteSignerResultError", {
|
|
1008
|
+
enumerable: true,
|
|
1009
|
+
get: function() {
|
|
1010
|
+
return RemoteSignerResultError;
|
|
1011
|
+
}
|
|
1012
|
+
});
|
|
1013
|
+
Object.defineProperty(exports, "createLazyInMemoryVaultModule", {
|
|
1014
|
+
enumerable: true,
|
|
1015
|
+
get: function() {
|
|
1016
|
+
return createLazyInMemoryVaultModule;
|
|
1017
|
+
}
|
|
1018
|
+
});
|
|
1019
|
+
Object.defineProperty(exports, "createPasskeyVaultModule", {
|
|
1020
|
+
enumerable: true,
|
|
1021
|
+
get: function() {
|
|
1022
|
+
return createPasskeyVaultModule;
|
|
1023
|
+
}
|
|
1024
|
+
});
|
|
1025
|
+
Object.defineProperty(exports, "createPasskeyWalletEntity", {
|
|
1026
|
+
enumerable: true,
|
|
1027
|
+
get: function() {
|
|
1028
|
+
return createPasskeyWalletEntity;
|
|
1029
|
+
}
|
|
1030
|
+
});
|
|
1031
|
+
Object.defineProperty(exports, "createRemoteCardanoVaultModule", {
|
|
1032
|
+
enumerable: true,
|
|
1033
|
+
get: function() {
|
|
1034
|
+
return createRemoteCardanoVaultModule;
|
|
1035
|
+
}
|
|
1036
|
+
});
|
|
1037
|
+
Object.defineProperty(exports, "createRemotePasskeySigner", {
|
|
1038
|
+
enumerable: true,
|
|
1039
|
+
get: function() {
|
|
1040
|
+
return createRemotePasskeySigner;
|
|
1041
|
+
}
|
|
1042
|
+
});
|
|
1043
|
+
Object.defineProperty(exports, "createRemotePasskeyWalletEntity", {
|
|
1044
|
+
enumerable: true,
|
|
1045
|
+
get: function() {
|
|
1046
|
+
return createRemotePasskeyWalletEntity;
|
|
1047
|
+
}
|
|
1048
|
+
});
|
|
1049
|
+
Object.defineProperty(exports, "createSignerClient", {
|
|
1050
|
+
enumerable: true,
|
|
1051
|
+
get: function() {
|
|
1052
|
+
return createSignerClient;
|
|
1053
|
+
}
|
|
1054
|
+
});
|
|
1055
|
+
Object.defineProperty(exports, "createSteelSwapProvider", {
|
|
1056
|
+
enumerable: true,
|
|
1057
|
+
get: function() {
|
|
1058
|
+
return createSteelSwapProvider;
|
|
1059
|
+
}
|
|
1060
|
+
});
|
|
1061
|
+
Object.defineProperty(exports, "createTxBuilder", {
|
|
1062
|
+
enumerable: true,
|
|
1063
|
+
get: function() {
|
|
1064
|
+
return createTxBuilder;
|
|
1065
|
+
}
|
|
1066
|
+
});
|
|
1067
|
+
Object.defineProperty(exports, "modules_cardano_exports", {
|
|
1068
|
+
enumerable: true,
|
|
1069
|
+
get: function() {
|
|
1070
|
+
return modules_cardano_exports;
|
|
1071
|
+
}
|
|
1072
|
+
});
|
|
1073
|
+
Object.defineProperty(exports, "sdk_default", {
|
|
1074
|
+
enumerable: true,
|
|
1075
|
+
get: function() {
|
|
1076
|
+
return sdk_default;
|
|
1077
|
+
}
|
|
1078
|
+
});
|
|
1079
|
+
Object.defineProperty(exports, "sdk_default$1", {
|
|
1080
|
+
enumerable: true,
|
|
1081
|
+
get: function() {
|
|
1082
|
+
return sdk_default$1;
|
|
1083
|
+
}
|
|
1084
|
+
});
|
|
1085
|
+
Object.defineProperty(exports, "sdk_default$2", {
|
|
1086
|
+
enumerable: true,
|
|
1087
|
+
get: function() {
|
|
1088
|
+
return sdk_default$2;
|
|
1089
|
+
}
|
|
1090
|
+
});
|
|
1091
|
+
Object.defineProperty(exports, "signCardanoTx", {
|
|
1092
|
+
enumerable: true,
|
|
1093
|
+
get: function() {
|
|
1094
|
+
return signCardanoTx;
|
|
1095
|
+
}
|
|
1096
|
+
});
|
|
1097
|
+
Object.defineProperty(exports, "submitCardanoTx", {
|
|
1098
|
+
enumerable: true,
|
|
1099
|
+
get: function() {
|
|
1100
|
+
return submitCardanoTx;
|
|
1101
|
+
}
|
|
1102
|
+
});
|
|
1103
|
+
Object.defineProperty(exports, "waitForNetworkInfo", {
|
|
1104
|
+
enumerable: true,
|
|
1105
|
+
get: function() {
|
|
1106
|
+
return waitForNetworkInfo;
|
|
1107
|
+
}
|
|
1108
|
+
});
|