@dynamic-labs-sdk/bitcoin 0.1.2 → 0.2.4
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/BitcoinNetworkProvider.types.d.ts.map +1 -0
- package/dist/BitcoinWalletAccount.types.d.ts.map +1 -0
- package/dist/BitcoinWalletProvider.types.d.ts.map +1 -0
- package/{src → dist}/addBitcoinExtension/addBitcoinExtension.d.ts +1 -1
- package/dist/addBitcoinExtension/addBitcoinExtension.d.ts.map +1 -0
- package/dist/addBitcoinExtension/index.d.ts.map +1 -0
- package/dist/addBitcoinInjectedWalletsExtension-BJp1fgS7.cjs.js +1524 -0
- package/dist/addBitcoinInjectedWalletsExtension-BJp1fgS7.cjs.js.map +1 -0
- package/dist/addBitcoinInjectedWalletsExtension-DoOIj6RD.esm.js +1495 -0
- package/dist/addBitcoinInjectedWalletsExtension-DoOIj6RD.esm.js.map +1 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/errors/InvalidPsbtError.d.ts.map +1 -0
- package/dist/errors/NotBitcoinProviderError.d.ts.map +1 -0
- package/dist/errors/SendBitcoinRawTransactionError.d.ts.map +1 -0
- package/dist/exports/index.d.ts.map +1 -0
- package/dist/exports/injected.d.ts.map +1 -0
- package/dist/index.cjs.js +194 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.esm.js +186 -0
- package/dist/index.esm.js.map +1 -0
- package/{src → dist}/injected/addBitcoinInjectedWalletsExtension/addBitcoinInjectedWalletsExtension.d.ts +1 -1
- package/dist/injected/addBitcoinInjectedWalletsExtension/addBitcoinInjectedWalletsExtension.d.ts.map +1 -0
- package/dist/injected/addBitcoinInjectedWalletsExtension/index.d.ts.map +1 -0
- package/dist/injected/utils/binance/BinanceBitcoinInjectedProvider.types.d.ts.map +1 -0
- package/dist/injected/utils/binance/createBinanceBitcoinWalletProvider/createBinanceBitcoinWalletProvider.d.ts.map +1 -0
- package/dist/injected/utils/binance/createBinanceBitcoinWalletProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.d.ts +3 -0
- package/dist/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.d.ts.map +1 -0
- package/dist/injected/utils/binance/getBinanceBitcoinInjectedProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/bitget/createBitgetBitcoinWalletProvider/createBitgetBitcoinWalletProvider.d.ts.map +1 -0
- package/dist/injected/utils/bitget/createBitgetBitcoinWalletProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.d.ts +3 -0
- package/dist/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.d.ts.map +1 -0
- package/dist/injected/utils/bitget/getBitgetBitcoinInjectedProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/leather/LeatherBitcoinInjectedProvider.types.d.ts.map +1 -0
- package/dist/injected/utils/leather/convertNetworkIdToLeatherNetworkName/convertNetworkIdToLeatherNetworkName.d.ts.map +1 -0
- package/dist/injected/utils/leather/convertNetworkIdToLeatherNetworkName/index.d.ts.map +1 -0
- package/dist/injected/utils/leather/createLeatherBitcoinWalletProvider/createLeatherBitcoinWalletProvider.d.ts.map +1 -0
- package/dist/injected/utils/leather/createLeatherBitcoinWalletProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.d.ts +2 -0
- package/dist/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.d.ts.map +1 -0
- package/dist/injected/utils/leather/getLeatherBitcoinInjectedProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/createMagicEdenBitcoinWalletProvider.d.ts.map +1 -0
- package/dist/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.d.ts +3 -0
- package/dist/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.d.ts.map +1 -0
- package/dist/injected/utils/magicEden/getMagicEdenInjectedProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/okx/OkxBitcoinInjectedProvider.types.d.ts.map +1 -0
- package/dist/injected/utils/okx/createOkxBitcoinWalletProvider/createOkxBitcoinWalletProvider.d.ts.map +1 -0
- package/dist/injected/utils/okx/createOkxBitcoinWalletProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.d.ts +3 -0
- package/dist/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.d.ts.map +1 -0
- package/dist/injected/utils/okx/getOkxBitcoinInjectedProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/oneKey/OneKeyBitcoinInjectedProvider.types.d.ts.map +1 -0
- package/dist/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/createOneKeyBitcoinWalletProvider.d.ts.map +1 -0
- package/dist/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.d.ts +3 -0
- package/dist/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.d.ts.map +1 -0
- package/dist/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/oyl/OylBitcoinInjectedProvider.types.d.ts.map +1 -0
- package/dist/injected/utils/oyl/createOylBitcoinWalletProvider/createOylBitcoinWalletProvider.d.ts.map +1 -0
- package/dist/injected/utils/oyl/createOylBitcoinWalletProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.d.ts +3 -0
- package/dist/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.d.ts.map +1 -0
- package/dist/injected/utils/oyl/getOylBitcoinInjectedProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/phantom/PhantomBitcoinInjectedProvider.types.d.ts.map +1 -0
- package/dist/injected/utils/phantom/createPhantomBitcoinWalletProvider/createPhantomBitcoinWalletProvider.d.ts.map +1 -0
- package/dist/injected/utils/phantom/createPhantomBitcoinWalletProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.d.ts +3 -0
- package/dist/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.d.ts.map +1 -0
- package/dist/injected/utils/phantom/getPhantomInjectedProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/unisat/UnisatInjectedProvider.types.d.ts.map +1 -0
- package/dist/injected/utils/unisat/createUnisatWalletProvider/createUnisatWalletProvider.d.ts.map +1 -0
- package/dist/injected/utils/unisat/createUnisatWalletProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.d.ts +3 -0
- package/dist/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.d.ts.map +1 -0
- package/dist/injected/utils/unisat/getUnisatInjectedProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/xverse/createXverseBitcoinWalletProvider/createXverseBitcoinWalletProvider.d.ts.map +1 -0
- package/dist/injected/utils/xverse/createXverseBitcoinWalletProvider/index.d.ts.map +1 -0
- package/dist/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.d.ts +3 -0
- package/dist/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.d.ts.map +1 -0
- package/dist/injected/utils/xverse/getXverseInjectedProvider/index.d.ts.map +1 -0
- package/dist/injected.cjs.js +9 -0
- package/dist/injected.cjs.js.map +1 -0
- package/dist/injected.esm.js +9 -0
- package/dist/injected.esm.js.map +1 -0
- package/dist/isBitcoinNetworkProvider/index.d.ts.map +1 -0
- package/dist/isBitcoinNetworkProvider/isBitcoinNetworkProvider.d.ts.map +1 -0
- package/dist/isBitcoinWalletAccount/index.d.ts.map +1 -0
- package/dist/isBitcoinWalletAccount/isBitcoinWalletAccount.d.ts.map +1 -0
- package/dist/isBitcoinWalletProvider/index.d.ts.map +1 -0
- package/dist/isBitcoinWalletProvider/isBitcoinWalletProvider.d.ts.map +1 -0
- package/dist/registerBitcoinNetworkProviderBuilder/index.d.ts.map +1 -0
- package/dist/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.d.ts.map +1 -0
- package/dist/sendBitcoin/index.d.ts.map +1 -0
- package/{src → dist}/sendBitcoin/sendBitcoin.d.ts +1 -1
- package/dist/sendBitcoin/sendBitcoin.d.ts.map +1 -0
- package/dist/sendRawTransaction/index.d.ts.map +1 -0
- package/{src → dist}/sendRawTransaction/sendRawTransaction.d.ts +1 -1
- package/dist/sendRawTransaction/sendRawTransaction.d.ts.map +1 -0
- package/{src/utils/signMultipleTransactionsWithSatsConnect → dist/signMessageWithCustomOptions}/index.d.ts.map +1 -1
- package/{src → dist}/signMessageWithCustomOptions/signMessageWithCustomOptions.d.ts +1 -1
- package/dist/signMessageWithCustomOptions/signMessageWithCustomOptions.d.ts.map +1 -0
- package/dist/signPsbt/index.d.ts.map +1 -0
- package/{src → dist}/signPsbt/signPsbt.d.ts +1 -1
- package/dist/signPsbt/signPsbt.d.ts.map +1 -0
- package/dist/signPsbts/index.d.ts.map +1 -0
- package/{src → dist}/signPsbts/signPsbts.d.ts +1 -1
- package/dist/signPsbts/signPsbts.d.ts.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/dist/utils/convertNetworkIdForPsbt/convertNetworkIdForPsbt.d.ts.map +1 -0
- package/dist/utils/convertNetworkIdForPsbt/index.d.ts.map +1 -0
- package/dist/utils/convertNetworkIdToSatsConnectNetworkType/convertNetworkIdToSatsConnectNetworkType.d.ts.map +1 -0
- package/dist/utils/convertNetworkIdToSatsConnectNetworkType/index.d.ts.map +1 -0
- package/dist/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.d.ts.map +1 -0
- package/dist/utils/createBitcoinNetworkProvider/index.d.ts.map +1 -0
- package/dist/utils/createPsbtOptions/createPsbtOptions.d.ts.map +1 -0
- package/dist/utils/createPsbtOptions/index.d.ts.map +1 -0
- package/dist/utils/fetchBtcBalance/fetchBtcBalance.d.ts.map +1 -0
- package/dist/utils/fetchBtcBalance/index.d.ts.map +1 -0
- package/dist/utils/getMempoolApiUrl/getMempoolApiUrl.d.ts +2 -0
- package/dist/utils/getMempoolApiUrl/getMempoolApiUrl.d.ts.map +1 -0
- package/dist/utils/getMempoolApiUrl/index.d.ts.map +1 -0
- package/{src → dist}/utils/getNetworkIdFromNetworkName/getNetworkIdFromNetworkName.d.ts +1 -1
- package/dist/utils/getNetworkIdFromNetworkName/getNetworkIdFromNetworkName.d.ts.map +1 -0
- package/dist/utils/getNetworkIdFromNetworkName/index.d.ts.map +1 -0
- package/dist/utils/getPsbtInputsToSignForSatsConnect/getPsbtInputsToSignForSatsConnect.d.ts.map +1 -0
- package/dist/utils/getPsbtInputsToSignForSatsConnect/index.d.ts.map +1 -0
- package/dist/utils/getSatsConnectSigningProtocol/getSatsConnectSigningProtocol.d.ts.map +1 -0
- package/dist/utils/getSatsConnectSigningProtocol/index.d.ts.map +1 -0
- package/dist/utils/getSigHashType/getSigHashType.d.ts.map +1 -0
- package/dist/utils/getSigHashType/index.d.ts.map +1 -0
- package/dist/utils/parseBitcoinConnectionResult/index.d.ts.map +1 -0
- package/{src → dist}/utils/parseBitcoinConnectionResult/parseBitcoinConnectionResult.d.ts +1 -0
- package/dist/utils/parseBitcoinConnectionResult/parseBitcoinConnectionResult.d.ts.map +1 -0
- package/dist/utils/satoshisToBtc/index.d.ts.map +1 -0
- package/dist/utils/satoshisToBtc/satoshisToBtc.d.ts.map +1 -0
- package/dist/utils/signMultipleTransactionsWithSatsConnect/index.d.ts.map +1 -0
- package/dist/utils/signMultipleTransactionsWithSatsConnect/signMultipleTransactionsWithSatsConnect.d.ts.map +1 -0
- package/dist/utils/validatePsbt/extractAddressFromInput/extractAddressFromInput.d.ts.map +1 -0
- package/dist/utils/validatePsbt/extractAddressFromInput/index.d.ts.map +1 -0
- package/dist/utils/validatePsbt/index.d.ts.map +1 -0
- package/dist/utils/validatePsbt/validatePsbt.d.ts.map +1 -0
- package/dist/utils/validatePsbt/validateSigHash/index.d.ts.map +1 -0
- package/dist/utils/validatePsbt/validateSigHash/validateSigHash.d.ts.map +1 -0
- package/dist/utils/validatePsbt/validateSigningAddress/index.d.ts.map +1 -0
- package/dist/utils/validatePsbt/validateSigningAddress/validateSigningAddress.d.ts.map +1 -0
- package/package.json +28 -14
- package/CHANGELOG.md +0 -606
- package/addBitcoinInjectedWalletsExtension.cjs.js +0 -1958
- package/addBitcoinInjectedWalletsExtension.esm.js +0 -1952
- package/index.cjs.d.ts +0 -1
- package/index.cjs.js +0 -205
- package/index.esm.d.ts +0 -1
- package/index.esm.js +0 -196
- package/injected.cjs.d.ts +0 -1
- package/injected.cjs.js +0 -14
- package/injected.esm.d.ts +0 -1
- package/injected.esm.js +0 -11
- package/src/BitcoinNetworkProvider.types.d.ts.map +0 -1
- package/src/BitcoinWalletAccount.types.d.ts.map +0 -1
- package/src/BitcoinWalletProvider.types.d.ts.map +0 -1
- package/src/addBitcoinExtension/addBitcoinExtension.d.ts.map +0 -1
- package/src/addBitcoinExtension/index.d.ts.map +0 -1
- package/src/constants.d.ts.map +0 -1
- package/src/errors/InvalidPsbtError.d.ts.map +0 -1
- package/src/errors/NotBitcoinProviderError.d.ts.map +0 -1
- package/src/errors/SendBitcoinRawTransactionError.d.ts.map +0 -1
- package/src/exports/index.d.ts.map +0 -1
- package/src/exports/injected.d.ts.map +0 -1
- package/src/injected/addBitcoinInjectedWalletsExtension/addBitcoinInjectedWalletsExtension.d.ts.map +0 -1
- package/src/injected/addBitcoinInjectedWalletsExtension/index.d.ts.map +0 -1
- package/src/injected/utils/binance/BinanceBitcoinInjectedProvider.types.d.ts.map +0 -1
- package/src/injected/utils/binance/createBinanceBitcoinWalletProvider/createBinanceBitcoinWalletProvider.d.ts.map +0 -1
- package/src/injected/utils/binance/createBinanceBitcoinWalletProvider/index.d.ts.map +0 -1
- package/src/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.d.ts +0 -2
- package/src/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.d.ts.map +0 -1
- package/src/injected/utils/binance/getBinanceBitcoinInjectedProvider/index.d.ts.map +0 -1
- package/src/injected/utils/bitget/createBitgetBitcoinWalletProvider/createBitgetBitcoinWalletProvider.d.ts.map +0 -1
- package/src/injected/utils/bitget/createBitgetBitcoinWalletProvider/index.d.ts.map +0 -1
- package/src/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.d.ts +0 -2
- package/src/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.d.ts.map +0 -1
- package/src/injected/utils/bitget/getBitgetBitcoinInjectedProvider/index.d.ts.map +0 -1
- package/src/injected/utils/leather/LeatherBitcoinInjectedProvider.types.d.ts.map +0 -1
- package/src/injected/utils/leather/convertNetworkIdToLeatherNetworkName/convertNetworkIdToLeatherNetworkName.d.ts.map +0 -1
- package/src/injected/utils/leather/convertNetworkIdToLeatherNetworkName/index.d.ts.map +0 -1
- package/src/injected/utils/leather/createLeatherBitcoinWalletProvider/createLeatherBitcoinWalletProvider.d.ts.map +0 -1
- package/src/injected/utils/leather/createLeatherBitcoinWalletProvider/index.d.ts.map +0 -1
- package/src/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.d.ts +0 -2
- package/src/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.d.ts.map +0 -1
- package/src/injected/utils/leather/getLeatherBitcoinInjectedProvider/index.d.ts.map +0 -1
- package/src/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/createMagicEdenBitcoinWalletProvider.d.ts.map +0 -1
- package/src/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/index.d.ts.map +0 -1
- package/src/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.d.ts +0 -2
- package/src/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.d.ts.map +0 -1
- package/src/injected/utils/magicEden/getMagicEdenInjectedProvider/index.d.ts.map +0 -1
- package/src/injected/utils/okx/OkxBitcoinInjectedProvider.types.d.ts.map +0 -1
- package/src/injected/utils/okx/createOkxBitcoinWalletProvider/createOkxBitcoinWalletProvider.d.ts.map +0 -1
- package/src/injected/utils/okx/createOkxBitcoinWalletProvider/index.d.ts.map +0 -1
- package/src/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.d.ts +0 -2
- package/src/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.d.ts.map +0 -1
- package/src/injected/utils/okx/getOkxBitcoinInjectedProvider/index.d.ts.map +0 -1
- package/src/injected/utils/oneKey/OneKeyBitcoinInjectedProvider.types.d.ts.map +0 -1
- package/src/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/createOneKeyBitcoinWalletProvider.d.ts.map +0 -1
- package/src/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/index.d.ts.map +0 -1
- package/src/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.d.ts +0 -2
- package/src/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.d.ts.map +0 -1
- package/src/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/index.d.ts.map +0 -1
- package/src/injected/utils/oyl/OylBitcoinInjectedProvider.types.d.ts.map +0 -1
- package/src/injected/utils/oyl/createOylBitcoinWalletProvider/createOylBitcoinWalletProvider.d.ts.map +0 -1
- package/src/injected/utils/oyl/createOylBitcoinWalletProvider/index.d.ts.map +0 -1
- package/src/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.d.ts +0 -2
- package/src/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.d.ts.map +0 -1
- package/src/injected/utils/oyl/getOylBitcoinInjectedProvider/index.d.ts.map +0 -1
- package/src/injected/utils/phantom/PhantomBitcoinInjectedProvider.types.d.ts.map +0 -1
- package/src/injected/utils/phantom/createPhantomBitcoinWalletProvider/createPhantomBitcoinWalletProvider.d.ts.map +0 -1
- package/src/injected/utils/phantom/createPhantomBitcoinWalletProvider/index.d.ts.map +0 -1
- package/src/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.d.ts +0 -2
- package/src/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.d.ts.map +0 -1
- package/src/injected/utils/phantom/getPhantomInjectedProvider/index.d.ts.map +0 -1
- package/src/injected/utils/unisat/UnisatInjectedProvider.types.d.ts.map +0 -1
- package/src/injected/utils/unisat/createUnisatWalletProvider/createUnisatWalletProvider.d.ts.map +0 -1
- package/src/injected/utils/unisat/createUnisatWalletProvider/index.d.ts.map +0 -1
- package/src/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.d.ts +0 -2
- package/src/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.d.ts.map +0 -1
- package/src/injected/utils/unisat/getUnisatInjectedProvider/index.d.ts.map +0 -1
- package/src/injected/utils/xverse/createXverseBitcoinWalletProvider/createXverseBitcoinWalletProvider.d.ts.map +0 -1
- package/src/injected/utils/xverse/createXverseBitcoinWalletProvider/index.d.ts.map +0 -1
- package/src/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.d.ts +0 -2
- package/src/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.d.ts.map +0 -1
- package/src/injected/utils/xverse/getXverseInjectedProvider/index.d.ts.map +0 -1
- package/src/isBitcoinNetworkProvider/index.d.ts.map +0 -1
- package/src/isBitcoinNetworkProvider/isBitcoinNetworkProvider.d.ts.map +0 -1
- package/src/isBitcoinWalletAccount/index.d.ts.map +0 -1
- package/src/isBitcoinWalletAccount/isBitcoinWalletAccount.d.ts.map +0 -1
- package/src/isBitcoinWalletProvider/index.d.ts.map +0 -1
- package/src/isBitcoinWalletProvider/isBitcoinWalletProvider.d.ts.map +0 -1
- package/src/registerBitcoinNetworkProviderBuilder/index.d.ts.map +0 -1
- package/src/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.d.ts.map +0 -1
- package/src/sendBitcoin/index.d.ts.map +0 -1
- package/src/sendBitcoin/sendBitcoin.d.ts.map +0 -1
- package/src/sendRawTransaction/index.d.ts.map +0 -1
- package/src/sendRawTransaction/sendRawTransaction.d.ts.map +0 -1
- package/src/signMessageWithCustomOptions/index.d.ts.map +0 -1
- package/src/signMessageWithCustomOptions/signMessageWithCustomOptions.d.ts.map +0 -1
- package/src/signPsbt/index.d.ts.map +0 -1
- package/src/signPsbt/signPsbt.d.ts.map +0 -1
- package/src/signPsbts/index.d.ts.map +0 -1
- package/src/signPsbts/signPsbts.d.ts.map +0 -1
- package/src/utils/convertNetworkIdForPsbt/convertNetworkIdForPsbt.d.ts.map +0 -1
- package/src/utils/convertNetworkIdForPsbt/index.d.ts.map +0 -1
- package/src/utils/convertNetworkIdToSatsConnectNetworkType/convertNetworkIdToSatsConnectNetworkType.d.ts.map +0 -1
- package/src/utils/convertNetworkIdToSatsConnectNetworkType/index.d.ts.map +0 -1
- package/src/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.d.ts.map +0 -1
- package/src/utils/createBitcoinNetworkProvider/index.d.ts.map +0 -1
- package/src/utils/createPsbtOptions/createPsbtOptions.d.ts.map +0 -1
- package/src/utils/createPsbtOptions/index.d.ts.map +0 -1
- package/src/utils/fetchBtcBalance/fetchBtcBalance.d.ts.map +0 -1
- package/src/utils/fetchBtcBalance/index.d.ts.map +0 -1
- package/src/utils/getMempoolApiUrl/getMempoolApiUrl.d.ts +0 -2
- package/src/utils/getMempoolApiUrl/getMempoolApiUrl.d.ts.map +0 -1
- package/src/utils/getMempoolApiUrl/index.d.ts.map +0 -1
- package/src/utils/getNetworkIdFromNetworkName/getNetworkIdFromNetworkName.d.ts.map +0 -1
- package/src/utils/getNetworkIdFromNetworkName/index.d.ts.map +0 -1
- package/src/utils/getPsbtInputsToSignForSatsConnect/getPsbtInputsToSignForSatsConnect.d.ts.map +0 -1
- package/src/utils/getPsbtInputsToSignForSatsConnect/index.d.ts.map +0 -1
- package/src/utils/getSatsConnectSigningProtocol/getSatsConnectSigningProtocol.d.ts.map +0 -1
- package/src/utils/getSatsConnectSigningProtocol/index.d.ts.map +0 -1
- package/src/utils/getSigHashType/getSigHashType.d.ts.map +0 -1
- package/src/utils/getSigHashType/index.d.ts.map +0 -1
- package/src/utils/parseBitcoinConnectionResult/index.d.ts.map +0 -1
- package/src/utils/parseBitcoinConnectionResult/parseBitcoinConnectionResult.d.ts.map +0 -1
- package/src/utils/satoshisToBtc/index.d.ts.map +0 -1
- package/src/utils/satoshisToBtc/satoshisToBtc.d.ts.map +0 -1
- package/src/utils/signMultipleTransactionsWithSatsConnect/signMultipleTransactionsWithSatsConnect.d.ts.map +0 -1
- package/src/utils/validatePsbt/extractAddressFromInput/extractAddressFromInput.d.ts.map +0 -1
- package/src/utils/validatePsbt/extractAddressFromInput/index.d.ts.map +0 -1
- package/src/utils/validatePsbt/index.d.ts.map +0 -1
- package/src/utils/validatePsbt/validatePsbt.d.ts.map +0 -1
- package/src/utils/validatePsbt/validateSigHash/index.d.ts.map +0 -1
- package/src/utils/validatePsbt/validateSigHash/validateSigHash.d.ts.map +0 -1
- package/src/utils/validatePsbt/validateSigningAddress/index.d.ts.map +0 -1
- package/src/utils/validatePsbt/validateSigningAddress/validateSigningAddress.d.ts.map +0 -1
- /package/{src → dist}/BitcoinNetworkProvider.types.d.ts +0 -0
- /package/{src → dist}/BitcoinWalletAccount.types.d.ts +0 -0
- /package/{src → dist}/BitcoinWalletProvider.types.d.ts +0 -0
- /package/{src → dist}/addBitcoinExtension/index.d.ts +0 -0
- /package/{src → dist}/constants.d.ts +0 -0
- /package/{src → dist}/errors/InvalidPsbtError.d.ts +0 -0
- /package/{src → dist}/errors/NotBitcoinProviderError.d.ts +0 -0
- /package/{src → dist}/errors/SendBitcoinRawTransactionError.d.ts +0 -0
- /package/{src → dist}/exports/index.d.ts +0 -0
- /package/{src → dist}/exports/injected.d.ts +0 -0
- /package/{src → dist}/injected/addBitcoinInjectedWalletsExtension/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/binance/BinanceBitcoinInjectedProvider.types.d.ts +0 -0
- /package/{src → dist}/injected/utils/binance/createBinanceBitcoinWalletProvider/createBinanceBitcoinWalletProvider.d.ts +0 -0
- /package/{src → dist}/injected/utils/binance/createBinanceBitcoinWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/binance/getBinanceBitcoinInjectedProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/bitget/createBitgetBitcoinWalletProvider/createBitgetBitcoinWalletProvider.d.ts +0 -0
- /package/{src → dist}/injected/utils/bitget/createBitgetBitcoinWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/bitget/getBitgetBitcoinInjectedProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/leather/LeatherBitcoinInjectedProvider.types.d.ts +0 -0
- /package/{src → dist}/injected/utils/leather/convertNetworkIdToLeatherNetworkName/convertNetworkIdToLeatherNetworkName.d.ts +0 -0
- /package/{src → dist}/injected/utils/leather/convertNetworkIdToLeatherNetworkName/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/leather/createLeatherBitcoinWalletProvider/createLeatherBitcoinWalletProvider.d.ts +0 -0
- /package/{src → dist}/injected/utils/leather/createLeatherBitcoinWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/leather/getLeatherBitcoinInjectedProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/createMagicEdenBitcoinWalletProvider.d.ts +0 -0
- /package/{src → dist}/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/magicEden/getMagicEdenInjectedProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/okx/OkxBitcoinInjectedProvider.types.d.ts +0 -0
- /package/{src → dist}/injected/utils/okx/createOkxBitcoinWalletProvider/createOkxBitcoinWalletProvider.d.ts +0 -0
- /package/{src → dist}/injected/utils/okx/createOkxBitcoinWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/okx/getOkxBitcoinInjectedProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/oneKey/OneKeyBitcoinInjectedProvider.types.d.ts +0 -0
- /package/{src → dist}/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/createOneKeyBitcoinWalletProvider.d.ts +0 -0
- /package/{src → dist}/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/oyl/OylBitcoinInjectedProvider.types.d.ts +0 -0
- /package/{src → dist}/injected/utils/oyl/createOylBitcoinWalletProvider/createOylBitcoinWalletProvider.d.ts +0 -0
- /package/{src → dist}/injected/utils/oyl/createOylBitcoinWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/oyl/getOylBitcoinInjectedProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/phantom/PhantomBitcoinInjectedProvider.types.d.ts +0 -0
- /package/{src → dist}/injected/utils/phantom/createPhantomBitcoinWalletProvider/createPhantomBitcoinWalletProvider.d.ts +0 -0
- /package/{src → dist}/injected/utils/phantom/createPhantomBitcoinWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/phantom/getPhantomInjectedProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/unisat/UnisatInjectedProvider.types.d.ts +0 -0
- /package/{src → dist}/injected/utils/unisat/createUnisatWalletProvider/createUnisatWalletProvider.d.ts +0 -0
- /package/{src → dist}/injected/utils/unisat/createUnisatWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/unisat/getUnisatInjectedProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/xverse/createXverseBitcoinWalletProvider/createXverseBitcoinWalletProvider.d.ts +0 -0
- /package/{src → dist}/injected/utils/xverse/createXverseBitcoinWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/injected/utils/xverse/getXverseInjectedProvider/index.d.ts +0 -0
- /package/{src → dist}/isBitcoinNetworkProvider/index.d.ts +0 -0
- /package/{src → dist}/isBitcoinNetworkProvider/isBitcoinNetworkProvider.d.ts +0 -0
- /package/{src → dist}/isBitcoinWalletAccount/index.d.ts +0 -0
- /package/{src → dist}/isBitcoinWalletAccount/isBitcoinWalletAccount.d.ts +0 -0
- /package/{src → dist}/isBitcoinWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/isBitcoinWalletProvider/isBitcoinWalletProvider.d.ts +0 -0
- /package/{src → dist}/registerBitcoinNetworkProviderBuilder/index.d.ts +0 -0
- /package/{src → dist}/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.d.ts +0 -0
- /package/{src → dist}/sendBitcoin/index.d.ts +0 -0
- /package/{src → dist}/sendRawTransaction/index.d.ts +0 -0
- /package/{src → dist}/signMessageWithCustomOptions/index.d.ts +0 -0
- /package/{src → dist}/signPsbt/index.d.ts +0 -0
- /package/{src → dist}/signPsbts/index.d.ts +0 -0
- /package/{src → dist}/utils/convertNetworkIdForPsbt/convertNetworkIdForPsbt.d.ts +0 -0
- /package/{src → dist}/utils/convertNetworkIdForPsbt/index.d.ts +0 -0
- /package/{src → dist}/utils/convertNetworkIdToSatsConnectNetworkType/convertNetworkIdToSatsConnectNetworkType.d.ts +0 -0
- /package/{src → dist}/utils/convertNetworkIdToSatsConnectNetworkType/index.d.ts +0 -0
- /package/{src → dist}/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.d.ts +0 -0
- /package/{src → dist}/utils/createBitcoinNetworkProvider/index.d.ts +0 -0
- /package/{src → dist}/utils/createPsbtOptions/createPsbtOptions.d.ts +0 -0
- /package/{src → dist}/utils/createPsbtOptions/index.d.ts +0 -0
- /package/{src → dist}/utils/fetchBtcBalance/fetchBtcBalance.d.ts +0 -0
- /package/{src → dist}/utils/fetchBtcBalance/index.d.ts +0 -0
- /package/{src → dist}/utils/getMempoolApiUrl/index.d.ts +0 -0
- /package/{src → dist}/utils/getNetworkIdFromNetworkName/index.d.ts +0 -0
- /package/{src → dist}/utils/getPsbtInputsToSignForSatsConnect/getPsbtInputsToSignForSatsConnect.d.ts +0 -0
- /package/{src → dist}/utils/getPsbtInputsToSignForSatsConnect/index.d.ts +0 -0
- /package/{src → dist}/utils/getSatsConnectSigningProtocol/getSatsConnectSigningProtocol.d.ts +0 -0
- /package/{src → dist}/utils/getSatsConnectSigningProtocol/index.d.ts +0 -0
- /package/{src → dist}/utils/getSigHashType/getSigHashType.d.ts +0 -0
- /package/{src → dist}/utils/getSigHashType/index.d.ts +0 -0
- /package/{src → dist}/utils/parseBitcoinConnectionResult/index.d.ts +0 -0
- /package/{src → dist}/utils/satoshisToBtc/index.d.ts +0 -0
- /package/{src → dist}/utils/satoshisToBtc/satoshisToBtc.d.ts +0 -0
- /package/{src → dist}/utils/signMultipleTransactionsWithSatsConnect/index.d.ts +0 -0
- /package/{src → dist}/utils/signMultipleTransactionsWithSatsConnect/signMultipleTransactionsWithSatsConnect.d.ts +0 -0
- /package/{src → dist}/utils/validatePsbt/extractAddressFromInput/extractAddressFromInput.d.ts +0 -0
- /package/{src → dist}/utils/validatePsbt/extractAddressFromInput/index.d.ts +0 -0
- /package/{src → dist}/utils/validatePsbt/index.d.ts +0 -0
- /package/{src → dist}/utils/validatePsbt/validatePsbt.d.ts +0 -0
- /package/{src → dist}/utils/validatePsbt/validateSigHash/index.d.ts +0 -0
- /package/{src → dist}/utils/validatePsbt/validateSigHash/validateSigHash.d.ts +0 -0
- /package/{src → dist}/utils/validatePsbt/validateSigningAddress/index.d.ts +0 -0
- /package/{src → dist}/utils/validatePsbt/validateSigningAddress/validateSigningAddress.d.ts +0 -0
|
@@ -1,1952 +0,0 @@
|
|
|
1
|
-
import { createBaseNetworkProvider, getNetworkProviderBuilderRegistry, formatWalletProviderKey, createWalletProviderEventEmitter, DYNAMIC_ICONIC_SPRITE_URL, formatWalletProviderGroupKey, assertDefined, getInjectedProviderFromWindow, getActiveNetworkIdFromLastKnownRegistry, getBuffer, getDefaultClient, hasExtension, registerExtension, getWalletProviderRegistry, WalletProviderPriority } from '@dynamic-labs-sdk/client/core';
|
|
2
|
-
import { BaseError, getNetworksData, assertWalletAccountSigningAvailability, UserRejectedError, getWalletAccountAddressByType } from '@dynamic-labs-sdk/client';
|
|
3
|
-
import { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';
|
|
4
|
-
import { payments, Transaction, address, Psbt, networks } from 'bitcoinjs-lib';
|
|
5
|
-
import { createUnsecuredToken } from 'jsontokens';
|
|
6
|
-
import { BitcoinNetworkType, MessageSigningProtocols, addListener, signTransaction, signMessage, sendBtcTransaction, getAddress, AddressPurpose, signMultipleTransactions, request, RpcErrorCode } from 'sats-connect';
|
|
7
|
-
|
|
8
|
-
var name = "@dynamic-labs-sdk/bitcoin";
|
|
9
|
-
var version = "0.1.2";
|
|
10
|
-
|
|
11
|
-
function _extends() {
|
|
12
|
-
_extends = Object.assign || function assign(target) {
|
|
13
|
-
for(var i = 1; i < arguments.length; i++){
|
|
14
|
-
var source = arguments[i];
|
|
15
|
-
for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
|
|
16
|
-
}
|
|
17
|
-
return target;
|
|
18
|
-
};
|
|
19
|
-
return _extends.apply(this, arguments);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const MEMPOOL_API_URL = 'https://mempool.space/api';
|
|
23
|
-
const MEMPOOL_API_URL_TESTNET = 'https://mempool.space/testnet/api';
|
|
24
|
-
|
|
25
|
-
const getMempoolApiUrl = (address)=>address.startsWith('t') ? MEMPOOL_API_URL_TESTNET : MEMPOOL_API_URL;
|
|
26
|
-
|
|
27
|
-
const satoshisToBtc = (satoshis)=>satoshis / 100000000;
|
|
28
|
-
|
|
29
|
-
const fetchBtcBalance = async ({ address })=>{
|
|
30
|
-
const API_URL = getMempoolApiUrl(address);
|
|
31
|
-
const response = await fetch(`${API_URL}/address/${address}`);
|
|
32
|
-
if (!response.ok) {
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
const addressInfo = await response.json();
|
|
36
|
-
if (!(addressInfo == null ? void 0 : addressInfo.chain_stats) || !(addressInfo == null ? void 0 : addressInfo.mempool_stats)) {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
const confirmedBalanceInSats = Number(addressInfo.chain_stats.funded_txo_sum) - Number(addressInfo.chain_stats.spent_txo_sum);
|
|
40
|
-
const unconfirmedBalanceInSats = Number(addressInfo.mempool_stats.funded_txo_sum) - Number(addressInfo.mempool_stats.spent_txo_sum);
|
|
41
|
-
const balance = satoshisToBtc(confirmedBalanceInSats + unconfirmedBalanceInSats);
|
|
42
|
-
return balance.toString();
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
const createBitcoinNetworkProvider = (networkData)=>_extends({}, createBaseNetworkProvider('BTC', networkData), {
|
|
46
|
-
cluster: networkData.cluster,
|
|
47
|
-
getBalance: async ({ address })=>({
|
|
48
|
-
balance: await fetchBtcBalance({
|
|
49
|
-
address
|
|
50
|
-
})
|
|
51
|
-
})
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
const registerBitcoinNetworkProviderBuilder = (client)=>{
|
|
55
|
-
const networkProviderBuilderRegistry = getNetworkProviderBuilderRegistry(client);
|
|
56
|
-
/**
|
|
57
|
-
* If the Bitcoin network provider builder is already registered, return.
|
|
58
|
-
*/ if (networkProviderBuilderRegistry.get().get('BTC')) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
networkProviderBuilderRegistry.register({
|
|
62
|
-
builder: createBitcoinNetworkProvider,
|
|
63
|
-
chain: 'BTC'
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
class InvalidPsbtError extends BaseError {
|
|
68
|
-
constructor(message){
|
|
69
|
-
super({
|
|
70
|
-
cause: null,
|
|
71
|
-
code: 'invalid_psbt_error',
|
|
72
|
-
docsUrl: null,
|
|
73
|
-
name: 'InvalidPsbtError',
|
|
74
|
-
shortMessage: message
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* This method will return the signature hash type for the current input.
|
|
81
|
-
* If there is a sighashType, it will return that
|
|
82
|
-
* If there is a witnessUtxo AND it is a taproot address, then it will return SIGHASH_DEFAULT
|
|
83
|
-
* Otherwise, it will return SIGHASH_ALL
|
|
84
|
-
*/ const getSigHashType = ({ input })=>{
|
|
85
|
-
var _input_witnessUtxo;
|
|
86
|
-
if (input == null ? void 0 : input.sighashType) {
|
|
87
|
-
return input.sighashType;
|
|
88
|
-
}
|
|
89
|
-
let isTaprootAddress = false;
|
|
90
|
-
if ((_input_witnessUtxo = input.witnessUtxo) == null ? void 0 : _input_witnessUtxo.script) {
|
|
91
|
-
try {
|
|
92
|
-
payments.p2tr({
|
|
93
|
-
output: input.witnessUtxo.script
|
|
94
|
-
});
|
|
95
|
-
isTaprootAddress = true;
|
|
96
|
-
} catch (e) {
|
|
97
|
-
// do nothing - address is not taproot
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return isTaprootAddress ? Transaction.SIGHASH_DEFAULT : Transaction.SIGHASH_ALL;
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
const validateSigHash = ({ allowedSigHashTypes, input })=>{
|
|
104
|
-
const sigHashType = getSigHashType({
|
|
105
|
-
input
|
|
106
|
-
});
|
|
107
|
-
// if the request has allowedSigHashTypes, then we need to make sure that the sigHashType
|
|
108
|
-
// is a member of that array before continuing
|
|
109
|
-
if ((allowedSigHashTypes == null ? void 0 : allowedSigHashTypes.length) && !allowedSigHashTypes.includes(sigHashType)) {
|
|
110
|
-
throw new InvalidPsbtError(`sigHashType ${sigHashType} not in allowed list`);
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* This method extracts the address from the input data of the psbt.
|
|
116
|
-
* The address is stored as script (Buffer) in either the witnessUtxo or nonWitnessUtxo as an output
|
|
117
|
-
*/ const extractAddressFromInput = ({ index, input, psbt })=>{
|
|
118
|
-
let extractedAddress;
|
|
119
|
-
try {
|
|
120
|
-
var _input_witnessUtxo;
|
|
121
|
-
if ((_input_witnessUtxo = input.witnessUtxo) == null ? void 0 : _input_witnessUtxo.script) {
|
|
122
|
-
extractedAddress = address.fromOutputScript(input.witnessUtxo.script);
|
|
123
|
-
}
|
|
124
|
-
if (input.nonWitnessUtxo) {
|
|
125
|
-
const nonWitnessTxn = Transaction.fromBuffer(input.nonWitnessUtxo);
|
|
126
|
-
const txOut = nonWitnessTxn.outs[psbt.txInputs[index].index];
|
|
127
|
-
extractedAddress = address.fromOutputScript(txOut.script);
|
|
128
|
-
}
|
|
129
|
-
return extractedAddress;
|
|
130
|
-
} catch (e) {
|
|
131
|
-
return extractedAddress;
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
const validateSigningAddress = ({ index, inputAtIndex, psbt, signingAddress })=>{
|
|
136
|
-
// we need to extract the address from the input at the current signing index
|
|
137
|
-
// to be able to compare it to the address provided in the request for the current index
|
|
138
|
-
const extractedAddress = extractAddressFromInput({
|
|
139
|
-
index,
|
|
140
|
-
input: inputAtIndex,
|
|
141
|
-
psbt
|
|
142
|
-
});
|
|
143
|
-
if (!extractedAddress) {
|
|
144
|
-
throw new InvalidPsbtError(`Could not extract address from input at index ${index}`);
|
|
145
|
-
}
|
|
146
|
-
if (extractedAddress !== signingAddress) {
|
|
147
|
-
throw new InvalidPsbtError(`Signing address does not match with address extracted from input at index ${index}`);
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* This method will validate the psbt against the signature data provided in the request
|
|
153
|
-
* It checks 3 things:
|
|
154
|
-
* - That the signing index exists in the input
|
|
155
|
-
* - That the address provided in the request matches the address in the input,
|
|
156
|
-
* unless the disableAddressValidation flag is set
|
|
157
|
-
* - That the sigHashType of the input is a member of the allowedSigHashTypes array
|
|
158
|
-
*/ const validatePsbt = ({ allowedSigHashTypes, psbt, signatureData })=>{
|
|
159
|
-
if (!(signatureData == null ? void 0 : signatureData.length)) {
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
for (const input of signatureData){
|
|
163
|
-
const { address: signingAddress, signingIndexes, // request from ME in cases of multi-sig. Steven wanted this defaulted to true
|
|
164
|
-
disableAddressValidation = true } = input;
|
|
165
|
-
if (!(signingIndexes == null ? void 0 : signingIndexes.length)) {
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
if (!signingAddress) {
|
|
169
|
-
throw new InvalidPsbtError('Missing signing address');
|
|
170
|
-
}
|
|
171
|
-
for (const index of signingIndexes){
|
|
172
|
-
const inputAtIndex = psbt.data.inputs[index];
|
|
173
|
-
if (!inputAtIndex) {
|
|
174
|
-
throw new InvalidPsbtError(`Missing input for index ${index}`);
|
|
175
|
-
}
|
|
176
|
-
if (!disableAddressValidation) {
|
|
177
|
-
validateSigningAddress({
|
|
178
|
-
index,
|
|
179
|
-
inputAtIndex,
|
|
180
|
-
psbt,
|
|
181
|
-
signingAddress
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
validateSigHash({
|
|
185
|
-
allowedSigHashTypes,
|
|
186
|
-
input: inputAtIndex
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* This method will create the psbt sign options for the given request
|
|
194
|
-
* It will validate the psbt against the signature data provided in the request
|
|
195
|
-
* It will return the psbt sign options with the toSignInputs added if the signature data is provided
|
|
196
|
-
*/ const createPsbtOptions = ({ psbt, request })=>{
|
|
197
|
-
const psbtSignOptions = {
|
|
198
|
-
autoFinalized: false
|
|
199
|
-
};
|
|
200
|
-
if (!request.signature) {
|
|
201
|
-
return psbtSignOptions;
|
|
202
|
-
}
|
|
203
|
-
validatePsbt({
|
|
204
|
-
allowedSigHashTypes: request.allowedSighash,
|
|
205
|
-
psbt,
|
|
206
|
-
signatureData: request.signature
|
|
207
|
-
});
|
|
208
|
-
const toSignInputs = [];
|
|
209
|
-
for (const signature of request.signature){
|
|
210
|
-
var _signature_signingIndexes;
|
|
211
|
-
if ((_signature_signingIndexes = signature.signingIndexes) == null ? void 0 : _signature_signingIndexes.length) {
|
|
212
|
-
for (const index of signature.signingIndexes){
|
|
213
|
-
toSignInputs.push({
|
|
214
|
-
address: signature.address,
|
|
215
|
-
disableAddressValidation: signature.disableAddressValidation,
|
|
216
|
-
index,
|
|
217
|
-
sighashTypes: request.allowedSighash
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
psbtSignOptions.toSignInputs = toSignInputs;
|
|
223
|
-
return psbtSignOptions;
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
const getNetworkIdFromNetworkName = ({ networkName }, client)=>{
|
|
227
|
-
var _btcNetworkData_find;
|
|
228
|
-
const networksData = getNetworksData(client);
|
|
229
|
-
const btcNetworkData = networksData.filter((data)=>data.chain === 'BTC');
|
|
230
|
-
var _btcNetworkData_find_networkId;
|
|
231
|
-
// try to find the correct networkId based on the network name (cluster)
|
|
232
|
-
// if not found, default to mainnet ('1');
|
|
233
|
-
const networkId = (_btcNetworkData_find_networkId = (_btcNetworkData_find = btcNetworkData.find((data)=>data.cluster === networkName)) == null ? void 0 : _btcNetworkData_find.networkId) != null ? _btcNetworkData_find_networkId : '1';
|
|
234
|
-
return {
|
|
235
|
-
networkId
|
|
236
|
-
};
|
|
237
|
-
};
|
|
238
|
-
|
|
239
|
-
const BINANCE_METADATA = {
|
|
240
|
-
displayName: 'Binance Wallet',
|
|
241
|
-
icon: `${DYNAMIC_ICONIC_SPRITE_URL}#onekey`
|
|
242
|
-
};
|
|
243
|
-
const createBinanceBitcoinWalletProvider = ({ dynamicClient, injectedProvider })=>{
|
|
244
|
-
const chain = 'BTC';
|
|
245
|
-
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
246
|
-
const key = formatWalletProviderKey({
|
|
247
|
-
chain,
|
|
248
|
-
displayName: BINANCE_METADATA.displayName,
|
|
249
|
-
walletProviderType
|
|
250
|
-
});
|
|
251
|
-
const connect = async ()=>{
|
|
252
|
-
const accounts = await injectedProvider.requestAccounts();
|
|
253
|
-
const address = accounts[0];
|
|
254
|
-
const publicKey = await injectedProvider.getPublicKey();
|
|
255
|
-
return {
|
|
256
|
-
addresses: [
|
|
257
|
-
{
|
|
258
|
-
address,
|
|
259
|
-
publicKey
|
|
260
|
-
}
|
|
261
|
-
]
|
|
262
|
-
};
|
|
263
|
-
};
|
|
264
|
-
const getActiveNetworkId = async ()=>{
|
|
265
|
-
const network = await injectedProvider.getNetwork();
|
|
266
|
-
return getNetworkIdFromNetworkName({
|
|
267
|
-
networkName: network
|
|
268
|
-
}, dynamicClient);
|
|
269
|
-
};
|
|
270
|
-
const getConnectedAddresses = async ()=>{
|
|
271
|
-
const accounts = await injectedProvider.getAccounts();
|
|
272
|
-
return {
|
|
273
|
-
addresses: accounts
|
|
274
|
-
};
|
|
275
|
-
};
|
|
276
|
-
const signMessage = async ({ message, walletAccount, protocol })=>{
|
|
277
|
-
assertDefined(walletAccount, 'Wallet account not found');
|
|
278
|
-
await assertWalletAccountSigningAvailability({
|
|
279
|
-
walletAccount
|
|
280
|
-
}, dynamicClient);
|
|
281
|
-
const signedMessage = await injectedProvider.signMessage(message, protocol);
|
|
282
|
-
return {
|
|
283
|
-
signature: signedMessage
|
|
284
|
-
};
|
|
285
|
-
};
|
|
286
|
-
const signPsbt = async ({ request, walletAccount })=>{
|
|
287
|
-
await assertWalletAccountSigningAvailability({
|
|
288
|
-
walletAccount
|
|
289
|
-
}, dynamicClient);
|
|
290
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
291
|
-
const psbtOptions = createPsbtOptions({
|
|
292
|
-
psbt: psbtFromBase64,
|
|
293
|
-
request
|
|
294
|
-
});
|
|
295
|
-
const signedPsbtHex = await injectedProvider.signPsbt(psbtFromBase64.toHex(), {
|
|
296
|
-
autoFinalized: false,
|
|
297
|
-
toSignInputs: psbtOptions.toSignInputs || []
|
|
298
|
-
});
|
|
299
|
-
return {
|
|
300
|
-
signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64()
|
|
301
|
-
};
|
|
302
|
-
};
|
|
303
|
-
const signPsbts = async ({ requests, walletAccount })=>{
|
|
304
|
-
await assertWalletAccountSigningAvailability({
|
|
305
|
-
walletAccount
|
|
306
|
-
}, dynamicClient);
|
|
307
|
-
const signedPsbts = [];
|
|
308
|
-
for (const request of requests){
|
|
309
|
-
const signedPsbtResponse = await signPsbt({
|
|
310
|
-
request,
|
|
311
|
-
walletAccount
|
|
312
|
-
});
|
|
313
|
-
if (signedPsbtResponse) {
|
|
314
|
-
signedPsbts.push(signedPsbtResponse.signedPsbt);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
return {
|
|
318
|
-
signedPsbts
|
|
319
|
-
};
|
|
320
|
-
};
|
|
321
|
-
const { getEventEmitter, cleanupEventEmitter } = createWalletProviderEventEmitter({
|
|
322
|
-
removeEventListeners: ()=>{
|
|
323
|
-
injectedProvider == null ? void 0 : injectedProvider.removeAllListeners();
|
|
324
|
-
},
|
|
325
|
-
setupEventListeners: ({ handleAccountsChanged, handleNetworkChanged })=>{
|
|
326
|
-
injectedProvider == null ? void 0 : injectedProvider.on('accountsChanged', (addresses)=>{
|
|
327
|
-
handleAccountsChanged({
|
|
328
|
-
addresses
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
injectedProvider == null ? void 0 : injectedProvider.on('networkChanged', (network)=>{
|
|
332
|
-
handleNetworkChanged({
|
|
333
|
-
networkId: network
|
|
334
|
-
});
|
|
335
|
-
});
|
|
336
|
-
},
|
|
337
|
-
supportedEvents: [
|
|
338
|
-
'accountsChanged',
|
|
339
|
-
'networkChanged'
|
|
340
|
-
]
|
|
341
|
-
});
|
|
342
|
-
const terminate = async ()=>{
|
|
343
|
-
cleanupEventEmitter();
|
|
344
|
-
};
|
|
345
|
-
return {
|
|
346
|
-
chain,
|
|
347
|
-
connect,
|
|
348
|
-
get events () {
|
|
349
|
-
return getEventEmitter();
|
|
350
|
-
},
|
|
351
|
-
getActiveNetworkId,
|
|
352
|
-
getConnectedAddresses,
|
|
353
|
-
groupKey: formatWalletProviderGroupKey(BINANCE_METADATA.displayName),
|
|
354
|
-
key,
|
|
355
|
-
metadata: BINANCE_METADATA,
|
|
356
|
-
signMessage,
|
|
357
|
-
signPsbt,
|
|
358
|
-
signPsbts,
|
|
359
|
-
terminate,
|
|
360
|
-
walletProviderType
|
|
361
|
-
};
|
|
362
|
-
};
|
|
363
|
-
|
|
364
|
-
const BINANCE_BITCOIN_PROVIDER_LOCATOR = 'binancew3w.bitcoin';
|
|
365
|
-
const getBinanceBitcoinInjectedProvider = ()=>{
|
|
366
|
-
return getInjectedProviderFromWindow(BINANCE_BITCOIN_PROVIDER_LOCATOR);
|
|
367
|
-
};
|
|
368
|
-
|
|
369
|
-
const UNISAT_METADATA = {
|
|
370
|
-
displayName: 'UniSat',
|
|
371
|
-
icon: `${DYNAMIC_ICONIC_SPRITE_URL}#unisat`
|
|
372
|
-
};
|
|
373
|
-
const createUnisatWalletProvider = ({ dynamicClient, injectedProvider })=>{
|
|
374
|
-
const chain = 'BTC';
|
|
375
|
-
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
376
|
-
const key = formatWalletProviderKey({
|
|
377
|
-
chain,
|
|
378
|
-
displayName: UNISAT_METADATA.displayName,
|
|
379
|
-
walletProviderType
|
|
380
|
-
});
|
|
381
|
-
const connect = async ()=>{
|
|
382
|
-
const addresses = await injectedProvider.requestAccounts();
|
|
383
|
-
return {
|
|
384
|
-
addresses: addresses.map((address)=>({
|
|
385
|
-
address
|
|
386
|
-
}))
|
|
387
|
-
};
|
|
388
|
-
};
|
|
389
|
-
const disconnect = async ()=>{
|
|
390
|
-
return injectedProvider.disconnect();
|
|
391
|
-
};
|
|
392
|
-
const getActiveNetworkId = async ()=>{
|
|
393
|
-
const chain = await injectedProvider.getChain();
|
|
394
|
-
let networkName = 'mainnet';
|
|
395
|
-
if (chain.enum === 'BITCOIN_TESTNET') {
|
|
396
|
-
networkName = 'testnet';
|
|
397
|
-
} else if (chain.enum === 'BITCOIN_SIGNET') {
|
|
398
|
-
networkName = 'signet';
|
|
399
|
-
}
|
|
400
|
-
return getNetworkIdFromNetworkName({
|
|
401
|
-
networkName
|
|
402
|
-
}, dynamicClient);
|
|
403
|
-
};
|
|
404
|
-
const getConnectedAddresses = async ()=>{
|
|
405
|
-
const accounts = await injectedProvider.getAccounts();
|
|
406
|
-
return {
|
|
407
|
-
addresses: accounts
|
|
408
|
-
};
|
|
409
|
-
};
|
|
410
|
-
const sendBitcoin = async ({ transaction, walletAccount })=>{
|
|
411
|
-
await assertWalletAccountSigningAvailability({
|
|
412
|
-
walletAccount
|
|
413
|
-
}, dynamicClient);
|
|
414
|
-
const transactionId = await injectedProvider.sendBitcoin(transaction.recipientAddress, Number(transaction.amount));
|
|
415
|
-
return {
|
|
416
|
-
transactionId
|
|
417
|
-
};
|
|
418
|
-
};
|
|
419
|
-
const signMessage = async ({ message, walletAccount, protocol })=>{
|
|
420
|
-
assertDefined(walletAccount, 'Wallet account not found');
|
|
421
|
-
await assertWalletAccountSigningAvailability({
|
|
422
|
-
walletAccount
|
|
423
|
-
}, dynamicClient);
|
|
424
|
-
const signedMessage = await injectedProvider.signMessage(message, protocol);
|
|
425
|
-
return {
|
|
426
|
-
signature: signedMessage
|
|
427
|
-
};
|
|
428
|
-
};
|
|
429
|
-
const signPsbt = async ({ request, walletAccount })=>{
|
|
430
|
-
await assertWalletAccountSigningAvailability({
|
|
431
|
-
walletAccount
|
|
432
|
-
}, dynamicClient);
|
|
433
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
434
|
-
const signedPsbtHex = await injectedProvider.signPsbt(psbtFromBase64.toHex(), createPsbtOptions({
|
|
435
|
-
psbt: psbtFromBase64,
|
|
436
|
-
request
|
|
437
|
-
}));
|
|
438
|
-
return {
|
|
439
|
-
signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64()
|
|
440
|
-
};
|
|
441
|
-
};
|
|
442
|
-
const signPsbts = async ({ requests, walletAccount })=>{
|
|
443
|
-
await assertWalletAccountSigningAvailability({
|
|
444
|
-
walletAccount
|
|
445
|
-
}, dynamicClient);
|
|
446
|
-
const psbtHexs = [];
|
|
447
|
-
const psbtOptions = [];
|
|
448
|
-
for (const request of requests){
|
|
449
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
450
|
-
psbtHexs.push(psbtFromBase64.toHex());
|
|
451
|
-
psbtOptions.push(createPsbtOptions({
|
|
452
|
-
psbt: psbtFromBase64,
|
|
453
|
-
request
|
|
454
|
-
}));
|
|
455
|
-
}
|
|
456
|
-
const signedPsbtHexs = await injectedProvider.signPsbts(psbtHexs, psbtOptions);
|
|
457
|
-
return {
|
|
458
|
-
signedPsbts: signedPsbtHexs.map((signedPsbtHex)=>Psbt.fromHex(signedPsbtHex).toBase64())
|
|
459
|
-
};
|
|
460
|
-
};
|
|
461
|
-
const { getEventEmitter, cleanupEventEmitter } = createWalletProviderEventEmitter({
|
|
462
|
-
removeEventListeners: ()=>{
|
|
463
|
-
injectedProvider == null ? void 0 : injectedProvider.removeAllListeners();
|
|
464
|
-
},
|
|
465
|
-
setupEventListeners: ({ handleAccountsChanged, handleNetworkChanged })=>{
|
|
466
|
-
injectedProvider == null ? void 0 : injectedProvider.on('accountsChanged', (addresses)=>{
|
|
467
|
-
handleAccountsChanged({
|
|
468
|
-
addresses
|
|
469
|
-
});
|
|
470
|
-
});
|
|
471
|
-
injectedProvider == null ? void 0 : injectedProvider.on('networkChanged', (network)=>{
|
|
472
|
-
handleNetworkChanged({
|
|
473
|
-
networkId: network
|
|
474
|
-
});
|
|
475
|
-
});
|
|
476
|
-
},
|
|
477
|
-
supportedEvents: [
|
|
478
|
-
'accountsChanged',
|
|
479
|
-
'networkChanged'
|
|
480
|
-
]
|
|
481
|
-
});
|
|
482
|
-
const terminate = async ()=>{
|
|
483
|
-
cleanupEventEmitter();
|
|
484
|
-
};
|
|
485
|
-
return {
|
|
486
|
-
chain,
|
|
487
|
-
connect,
|
|
488
|
-
disconnect,
|
|
489
|
-
get events () {
|
|
490
|
-
return getEventEmitter();
|
|
491
|
-
},
|
|
492
|
-
getActiveNetworkId,
|
|
493
|
-
getConnectedAddresses,
|
|
494
|
-
groupKey: formatWalletProviderGroupKey(UNISAT_METADATA.displayName),
|
|
495
|
-
key,
|
|
496
|
-
metadata: UNISAT_METADATA,
|
|
497
|
-
sendBitcoin,
|
|
498
|
-
signMessage,
|
|
499
|
-
signPsbt,
|
|
500
|
-
signPsbts,
|
|
501
|
-
terminate,
|
|
502
|
-
walletProviderType
|
|
503
|
-
};
|
|
504
|
-
};
|
|
505
|
-
|
|
506
|
-
const BITGET_METADATA = {
|
|
507
|
-
displayName: 'Bitget Wallet',
|
|
508
|
-
icon: `${DYNAMIC_ICONIC_SPRITE_URL}#bitgetwallet`
|
|
509
|
-
};
|
|
510
|
-
// The Bitget provider interface is the same as Unisat provider interface
|
|
511
|
-
// https://docs.bitkeep.com/en/docs/guide/wallet/btc.html
|
|
512
|
-
const createBitgetBitcoinWalletProvider = ({ dynamicClient, injectedProvider })=>{
|
|
513
|
-
const unisatWalletProvider = createUnisatWalletProvider({
|
|
514
|
-
dynamicClient,
|
|
515
|
-
injectedProvider
|
|
516
|
-
});
|
|
517
|
-
return _extends({}, unisatWalletProvider, {
|
|
518
|
-
groupKey: formatWalletProviderGroupKey(BITGET_METADATA.displayName),
|
|
519
|
-
key: formatWalletProviderKey({
|
|
520
|
-
chain: unisatWalletProvider.chain,
|
|
521
|
-
displayName: BITGET_METADATA.displayName,
|
|
522
|
-
walletProviderType: unisatWalletProvider.walletProviderType
|
|
523
|
-
}),
|
|
524
|
-
metadata: BITGET_METADATA
|
|
525
|
-
});
|
|
526
|
-
};
|
|
527
|
-
|
|
528
|
-
const BITGET_BITCOIN_PROVIDER_LOCATOR = 'bitkeep.unisat';
|
|
529
|
-
// The Bitget provider interface is the same as Unisat provider interface
|
|
530
|
-
// https://docs.bitkeep.com/en/docs/guide/wallet/btc.html
|
|
531
|
-
const getBitgetBitcoinInjectedProvider = ()=>{
|
|
532
|
-
return getInjectedProviderFromWindow(BITGET_BITCOIN_PROVIDER_LOCATOR);
|
|
533
|
-
};
|
|
534
|
-
|
|
535
|
-
const convertNetworkIdForPsbt = (networkId)=>{
|
|
536
|
-
if (networkId === '1') {
|
|
537
|
-
return networks.bitcoin;
|
|
538
|
-
}
|
|
539
|
-
// use networks.testnet for both testnet and signet
|
|
540
|
-
if (networkId === '2' || networkId === '3') {
|
|
541
|
-
return networks.testnet;
|
|
542
|
-
}
|
|
543
|
-
return undefined;
|
|
544
|
-
};
|
|
545
|
-
|
|
546
|
-
const convertNetworkIdToLeatherNetworkName = (networkId)=>{
|
|
547
|
-
if (networkId === '1') {
|
|
548
|
-
return 'mainnet';
|
|
549
|
-
}
|
|
550
|
-
if (networkId === '2') {
|
|
551
|
-
return 'testnet';
|
|
552
|
-
}
|
|
553
|
-
if (networkId === '3') {
|
|
554
|
-
return 'signet';
|
|
555
|
-
}
|
|
556
|
-
return undefined;
|
|
557
|
-
};
|
|
558
|
-
|
|
559
|
-
const LEATHER_METADATA = {
|
|
560
|
-
displayName: 'Leather',
|
|
561
|
-
icon: `${DYNAMIC_ICONIC_SPRITE_URL}#leather`
|
|
562
|
-
};
|
|
563
|
-
const createLeatherBitcoinWalletProvider = ({ dynamicClient, injectedProvider })=>{
|
|
564
|
-
const chain = 'BTC';
|
|
565
|
-
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
566
|
-
const key = formatWalletProviderKey({
|
|
567
|
-
chain,
|
|
568
|
-
displayName: LEATHER_METADATA.displayName,
|
|
569
|
-
walletProviderType
|
|
570
|
-
});
|
|
571
|
-
const getNetworkPayload = async ()=>{
|
|
572
|
-
const { networkId } = await getActiveNetworkId();
|
|
573
|
-
const networkName = convertNetworkIdToLeatherNetworkName(networkId);
|
|
574
|
-
return {
|
|
575
|
-
networkId,
|
|
576
|
-
networkName
|
|
577
|
-
};
|
|
578
|
-
};
|
|
579
|
-
const connect = async ()=>{
|
|
580
|
-
const response = await injectedProvider.request('getAddresses').catch(({ error })=>{
|
|
581
|
-
throw error;
|
|
582
|
-
});
|
|
583
|
-
const connectedAddresses = response.result.addresses;
|
|
584
|
-
const addresses = [];
|
|
585
|
-
const ordinalsAddress = connectedAddresses == null ? void 0 : connectedAddresses.find((address)=>address.type === 'p2tr');
|
|
586
|
-
if (ordinalsAddress) {
|
|
587
|
-
addresses.push({
|
|
588
|
-
address: ordinalsAddress.address,
|
|
589
|
-
publicKey: ordinalsAddress.publicKey,
|
|
590
|
-
type: 'ordinals'
|
|
591
|
-
});
|
|
592
|
-
}
|
|
593
|
-
const paymentAddress = connectedAddresses == null ? void 0 : connectedAddresses.find((address)=>address.type === 'p2wpkh');
|
|
594
|
-
if (paymentAddress) {
|
|
595
|
-
addresses.push({
|
|
596
|
-
address: paymentAddress.address,
|
|
597
|
-
publicKey: paymentAddress.publicKey,
|
|
598
|
-
type: 'payment'
|
|
599
|
-
});
|
|
600
|
-
}
|
|
601
|
-
return {
|
|
602
|
-
addresses
|
|
603
|
-
};
|
|
604
|
-
};
|
|
605
|
-
const getActiveNetworkId = async ()=>getActiveNetworkIdFromLastKnownRegistry({
|
|
606
|
-
client: dynamicClient,
|
|
607
|
-
walletProviderKey: key
|
|
608
|
-
});
|
|
609
|
-
// there's no specific method to get connected addresses in Leather
|
|
610
|
-
const getConnectedAddresses = async ()=>{
|
|
611
|
-
const accounts = await connect();
|
|
612
|
-
return {
|
|
613
|
-
addresses: accounts.addresses.map((address)=>address.address)
|
|
614
|
-
};
|
|
615
|
-
};
|
|
616
|
-
const sendBitcoin = async ({ transaction })=>{
|
|
617
|
-
const { networkName } = await getNetworkPayload();
|
|
618
|
-
const response = await injectedProvider.request('sendTransfer', {
|
|
619
|
-
account: 0,
|
|
620
|
-
address: transaction.recipientAddress,
|
|
621
|
-
amount: transaction.amount.toString(),
|
|
622
|
-
// network is required, so fallback to mainnet
|
|
623
|
-
network: networkName != null ? networkName : 'mainnet'
|
|
624
|
-
}).catch(({ error })=>{
|
|
625
|
-
throw error;
|
|
626
|
-
});
|
|
627
|
-
return {
|
|
628
|
-
transactionId: response.result.txid
|
|
629
|
-
};
|
|
630
|
-
};
|
|
631
|
-
const signMessage = async ({ message, walletAccount, addressType })=>{
|
|
632
|
-
assertDefined(walletAccount, 'Wallet account not found');
|
|
633
|
-
let paymentType = 'p2tr';
|
|
634
|
-
if (addressType === 'payment') {
|
|
635
|
-
paymentType = 'p2wpkh';
|
|
636
|
-
}
|
|
637
|
-
const { networkName } = await getNetworkPayload();
|
|
638
|
-
const response = await injectedProvider.request('signMessage', {
|
|
639
|
-
message,
|
|
640
|
-
network: networkName,
|
|
641
|
-
paymentType
|
|
642
|
-
}).catch(({ error })=>{
|
|
643
|
-
throw error;
|
|
644
|
-
});
|
|
645
|
-
return {
|
|
646
|
-
signature: response.result.signature
|
|
647
|
-
};
|
|
648
|
-
};
|
|
649
|
-
const signPsbt = async ({ request })=>{
|
|
650
|
-
var _request_signature;
|
|
651
|
-
const { networkId, networkName } = await getNetworkPayload();
|
|
652
|
-
const psbtNetwork = convertNetworkIdForPsbt(networkId);
|
|
653
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64, {
|
|
654
|
-
network: psbtNetwork
|
|
655
|
-
});
|
|
656
|
-
const signAtIndex = (_request_signature = request.signature) == null ? void 0 : _request_signature.flatMap((sig)=>sig.signingIndexes).filter(Number.isInteger);
|
|
657
|
-
const response = await injectedProvider.request('signPsbt', {
|
|
658
|
-
account: 0,
|
|
659
|
-
allowedSighash: request.allowedSighash,
|
|
660
|
-
broadcast: false,
|
|
661
|
-
hex: psbtFromBase64.toHex(),
|
|
662
|
-
// network is required, so fallback to mainnet
|
|
663
|
-
network: networkName != null ? networkName : 'mainnet',
|
|
664
|
-
signAtIndex
|
|
665
|
-
}).catch(({ error })=>{
|
|
666
|
-
throw error;
|
|
667
|
-
});
|
|
668
|
-
const signedPsbtHex = response.result.hex;
|
|
669
|
-
return {
|
|
670
|
-
signedPsbt: Psbt.fromHex(signedPsbtHex, {
|
|
671
|
-
network: psbtNetwork
|
|
672
|
-
}).toBase64()
|
|
673
|
-
};
|
|
674
|
-
};
|
|
675
|
-
const signPsbts = async ({ requests, walletAccount })=>{
|
|
676
|
-
const signedPsbts = [];
|
|
677
|
-
for (const request of requests){
|
|
678
|
-
const signedPsbtResponse = await signPsbt({
|
|
679
|
-
request});
|
|
680
|
-
if (signedPsbtResponse) {
|
|
681
|
-
signedPsbts.push(signedPsbtResponse.signedPsbt);
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
return {
|
|
685
|
-
signedPsbts
|
|
686
|
-
};
|
|
687
|
-
};
|
|
688
|
-
return {
|
|
689
|
-
chain,
|
|
690
|
-
connect,
|
|
691
|
-
getActiveNetworkId,
|
|
692
|
-
getConnectedAddresses,
|
|
693
|
-
groupKey: formatWalletProviderGroupKey(LEATHER_METADATA.displayName),
|
|
694
|
-
key,
|
|
695
|
-
metadata: LEATHER_METADATA,
|
|
696
|
-
sendBitcoin,
|
|
697
|
-
signMessage,
|
|
698
|
-
signPsbt,
|
|
699
|
-
signPsbts,
|
|
700
|
-
walletProviderType
|
|
701
|
-
};
|
|
702
|
-
};
|
|
703
|
-
|
|
704
|
-
const LEATHER_BITCOIN_PROVIDER_LOCATOR = 'LeatherProvider';
|
|
705
|
-
const getLeatherBitcoinInjectedProvider = ()=>{
|
|
706
|
-
return getInjectedProviderFromWindow(LEATHER_BITCOIN_PROVIDER_LOCATOR);
|
|
707
|
-
};
|
|
708
|
-
|
|
709
|
-
const convertNetworkIdToSatsConnectNetworkType = (networkId)=>{
|
|
710
|
-
if (networkId === '2') {
|
|
711
|
-
return BitcoinNetworkType.Testnet;
|
|
712
|
-
}
|
|
713
|
-
if (networkId === '3') {
|
|
714
|
-
return BitcoinNetworkType.Signet;
|
|
715
|
-
}
|
|
716
|
-
// fallback to mainnet
|
|
717
|
-
return BitcoinNetworkType.Mainnet;
|
|
718
|
-
};
|
|
719
|
-
|
|
720
|
-
/**
|
|
721
|
-
* This method will create the psbt sign options for SatsConnect for the given request
|
|
722
|
-
* It will validate the psbt against the signature data provided in the request
|
|
723
|
-
* It will return the inputs to sign if the signature data is provided
|
|
724
|
-
*/ const getPsbtInputsToSignForSatsConnect = ({ psbt, request, isLegacySatsConnect })=>{
|
|
725
|
-
if (!request.signature) {
|
|
726
|
-
return [];
|
|
727
|
-
}
|
|
728
|
-
validatePsbt({
|
|
729
|
-
allowedSigHashTypes: request.allowedSighash,
|
|
730
|
-
psbt,
|
|
731
|
-
signatureData: request.signature
|
|
732
|
-
});
|
|
733
|
-
const inputsToSign = [];
|
|
734
|
-
for (const signature of request.signature){
|
|
735
|
-
var _signature_signingIndexes;
|
|
736
|
-
if ((_signature_signingIndexes = signature.signingIndexes) == null ? void 0 : _signature_signingIndexes.length) {
|
|
737
|
-
for (const index of signature.signingIndexes){
|
|
738
|
-
inputsToSign.push({
|
|
739
|
-
address: signature.address,
|
|
740
|
-
sigHash: isLegacySatsConnect ? getSigHashType({
|
|
741
|
-
input: psbt.data.inputs[index]
|
|
742
|
-
}) : request.allowedSighash[0],
|
|
743
|
-
signingIndexes: [
|
|
744
|
-
index
|
|
745
|
-
]
|
|
746
|
-
});
|
|
747
|
-
}
|
|
748
|
-
}
|
|
749
|
-
}
|
|
750
|
-
return inputsToSign;
|
|
751
|
-
};
|
|
752
|
-
|
|
753
|
-
const getSatsConnectSigningProtocol = (protocol)=>{
|
|
754
|
-
if (!protocol) {
|
|
755
|
-
return undefined;
|
|
756
|
-
}
|
|
757
|
-
return protocol === 'ecdsa' ? MessageSigningProtocols.ECDSA : MessageSigningProtocols.BIP322;
|
|
758
|
-
};
|
|
759
|
-
|
|
760
|
-
const parseBitcoinConnectionResult = ({ connectedAddresses })=>{
|
|
761
|
-
// Xverse will return other addresses/types that we don't support
|
|
762
|
-
// so we filter them out
|
|
763
|
-
const filteredAddresses = connectedAddresses.filter((address)=>address.purpose === 'ordinals' || address.purpose === 'payment');
|
|
764
|
-
const addresses = filteredAddresses.map((account)=>({
|
|
765
|
-
address: account.address,
|
|
766
|
-
publicKey: account.publicKey,
|
|
767
|
-
type: account.purpose === 'payment' ? 'payment' : 'ordinals'
|
|
768
|
-
}));
|
|
769
|
-
// put ordinals addresses first, as they should be the main walletAccount address
|
|
770
|
-
addresses.sort((a)=>a.type === 'ordinals' ? -1 : 1);
|
|
771
|
-
return {
|
|
772
|
-
addresses
|
|
773
|
-
};
|
|
774
|
-
};
|
|
775
|
-
|
|
776
|
-
const MAGIC_EDEN_METADATA = {
|
|
777
|
-
displayName: 'Magic Eden',
|
|
778
|
-
icon: `${DYNAMIC_ICONIC_SPRITE_URL}#magiceden`
|
|
779
|
-
};
|
|
780
|
-
// https://docs-wallet.magiceden.io/bitcoin/detecting-the-provider
|
|
781
|
-
const createMagicEdenBitcoinWalletProvider = ({ dynamicClient, satsConnectProvider })=>{
|
|
782
|
-
const chain = 'BTC';
|
|
783
|
-
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
784
|
-
const key = formatWalletProviderKey({
|
|
785
|
-
chain,
|
|
786
|
-
displayName: MAGIC_EDEN_METADATA.displayName,
|
|
787
|
-
walletProviderType
|
|
788
|
-
});
|
|
789
|
-
const getNetworkPayload = async ()=>{
|
|
790
|
-
const activeNetworkId = await getActiveNetworkId();
|
|
791
|
-
const networkType = convertNetworkIdToSatsConnectNetworkType(activeNetworkId.networkId);
|
|
792
|
-
return {
|
|
793
|
-
network: {
|
|
794
|
-
type: networkType
|
|
795
|
-
}
|
|
796
|
-
};
|
|
797
|
-
};
|
|
798
|
-
const connect = async ()=>{
|
|
799
|
-
const { network } = await getNetworkPayload();
|
|
800
|
-
return new Promise((resolve, reject)=>{
|
|
801
|
-
void getAddress({
|
|
802
|
-
getProvider: async ()=>satsConnectProvider,
|
|
803
|
-
onCancel: ()=>{
|
|
804
|
-
reject(new UserRejectedError({
|
|
805
|
-
action: 'connect'
|
|
806
|
-
}));
|
|
807
|
-
},
|
|
808
|
-
onFinish: async (response)=>{
|
|
809
|
-
const { addresses: connectedAddresses } = response;
|
|
810
|
-
const { addresses } = parseBitcoinConnectionResult({
|
|
811
|
-
connectedAddresses
|
|
812
|
-
});
|
|
813
|
-
resolve({
|
|
814
|
-
addresses
|
|
815
|
-
});
|
|
816
|
-
},
|
|
817
|
-
payload: {
|
|
818
|
-
message: 'Address for receiving Ordinals and payments',
|
|
819
|
-
network,
|
|
820
|
-
purposes: [
|
|
821
|
-
AddressPurpose.Ordinals,
|
|
822
|
-
AddressPurpose.Payment
|
|
823
|
-
]
|
|
824
|
-
}
|
|
825
|
-
});
|
|
826
|
-
});
|
|
827
|
-
};
|
|
828
|
-
const getActiveNetworkId = async ()=>getActiveNetworkIdFromLastKnownRegistry({
|
|
829
|
-
client: dynamicClient,
|
|
830
|
-
walletProviderKey: key
|
|
831
|
-
});
|
|
832
|
-
// there's no specific method to get connected addresses in Magic Eden
|
|
833
|
-
// so we use the connect method to get the addresses
|
|
834
|
-
const getConnectedAddresses = async ()=>{
|
|
835
|
-
const { addresses } = await connect();
|
|
836
|
-
return {
|
|
837
|
-
addresses: addresses.map((address)=>address.address)
|
|
838
|
-
};
|
|
839
|
-
};
|
|
840
|
-
const sendBitcoin = async ({ transaction, walletAccount })=>{
|
|
841
|
-
await assertWalletAccountSigningAvailability({
|
|
842
|
-
walletAccount
|
|
843
|
-
}, dynamicClient);
|
|
844
|
-
var _getWalletAccountAddressByType;
|
|
845
|
-
// should use payment address if available
|
|
846
|
-
const senderAddress = (_getWalletAccountAddressByType = getWalletAccountAddressByType({
|
|
847
|
-
type: 'payment',
|
|
848
|
-
walletAccount
|
|
849
|
-
})) != null ? _getWalletAccountAddressByType : walletAccount.address;
|
|
850
|
-
const { network } = await getNetworkPayload();
|
|
851
|
-
return new Promise((resolve, reject)=>{
|
|
852
|
-
void sendBtcTransaction({
|
|
853
|
-
getProvider: async ()=>satsConnectProvider,
|
|
854
|
-
onCancel: ()=>{
|
|
855
|
-
reject(new UserRejectedError({
|
|
856
|
-
action: 'sendBitcoin'
|
|
857
|
-
}));
|
|
858
|
-
},
|
|
859
|
-
onFinish: (response)=>{
|
|
860
|
-
resolve({
|
|
861
|
-
transactionId: response
|
|
862
|
-
});
|
|
863
|
-
},
|
|
864
|
-
payload: {
|
|
865
|
-
network,
|
|
866
|
-
recipients: [
|
|
867
|
-
{
|
|
868
|
-
address: transaction.recipientAddress,
|
|
869
|
-
amountSats: BigInt(transaction.amount)
|
|
870
|
-
}
|
|
871
|
-
],
|
|
872
|
-
senderAddress
|
|
873
|
-
}
|
|
874
|
-
});
|
|
875
|
-
});
|
|
876
|
-
};
|
|
877
|
-
const signMessage$1 = async ({ message, walletAccount, protocol, addressType })=>{
|
|
878
|
-
assertDefined(walletAccount, 'Wallet account not found');
|
|
879
|
-
await assertWalletAccountSigningAvailability({
|
|
880
|
-
walletAccount
|
|
881
|
-
}, dynamicClient);
|
|
882
|
-
const { network } = await getNetworkPayload();
|
|
883
|
-
let addressToSignWith = walletAccount.address;
|
|
884
|
-
if (addressType) {
|
|
885
|
-
var _getWalletAccountAddressByType;
|
|
886
|
-
addressToSignWith = (_getWalletAccountAddressByType = getWalletAccountAddressByType({
|
|
887
|
-
type: addressType,
|
|
888
|
-
walletAccount
|
|
889
|
-
})) != null ? _getWalletAccountAddressByType : addressToSignWith;
|
|
890
|
-
}
|
|
891
|
-
return new Promise((resolve, reject)=>{
|
|
892
|
-
void signMessage({
|
|
893
|
-
getProvider: async ()=>satsConnectProvider,
|
|
894
|
-
onCancel: ()=>{
|
|
895
|
-
reject(new UserRejectedError({
|
|
896
|
-
action: 'signMessage'
|
|
897
|
-
}));
|
|
898
|
-
},
|
|
899
|
-
onFinish: async (response)=>{
|
|
900
|
-
resolve({
|
|
901
|
-
signature: response
|
|
902
|
-
});
|
|
903
|
-
},
|
|
904
|
-
payload: {
|
|
905
|
-
address: addressToSignWith,
|
|
906
|
-
message: message,
|
|
907
|
-
network,
|
|
908
|
-
protocol: getSatsConnectSigningProtocol(protocol)
|
|
909
|
-
}
|
|
910
|
-
});
|
|
911
|
-
});
|
|
912
|
-
};
|
|
913
|
-
const signPsbt = async ({ request, walletAccount })=>{
|
|
914
|
-
if (!request.allowedSighash.length) {
|
|
915
|
-
throw new InvalidPsbtError('allowedSighash cannot be an empty array');
|
|
916
|
-
}
|
|
917
|
-
await assertWalletAccountSigningAvailability({
|
|
918
|
-
walletAccount
|
|
919
|
-
}, dynamicClient);
|
|
920
|
-
const activeNetworkId = await getActiveNetworkId();
|
|
921
|
-
const network = convertNetworkIdForPsbt(activeNetworkId.networkId);
|
|
922
|
-
const { network: networkPayload } = await getNetworkPayload();
|
|
923
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64, {
|
|
924
|
-
network
|
|
925
|
-
});
|
|
926
|
-
const inputsToSign = getPsbtInputsToSignForSatsConnect({
|
|
927
|
-
isLegacySatsConnect: true,
|
|
928
|
-
psbt: psbtFromBase64,
|
|
929
|
-
request
|
|
930
|
-
});
|
|
931
|
-
return new Promise((resolve, reject)=>{
|
|
932
|
-
void signTransaction({
|
|
933
|
-
getProvider: async ()=>satsConnectProvider,
|
|
934
|
-
onCancel: ()=>{
|
|
935
|
-
reject(new UserRejectedError({
|
|
936
|
-
action: 'signPsbt'
|
|
937
|
-
}));
|
|
938
|
-
},
|
|
939
|
-
onFinish: (response)=>{
|
|
940
|
-
resolve({
|
|
941
|
-
signedPsbt: response.psbtBase64
|
|
942
|
-
});
|
|
943
|
-
},
|
|
944
|
-
payload: {
|
|
945
|
-
broadcast: false,
|
|
946
|
-
inputsToSign,
|
|
947
|
-
message: 'Sign Pbst',
|
|
948
|
-
network: networkPayload,
|
|
949
|
-
psbtBase64: request.unsignedPsbtBase64
|
|
950
|
-
}
|
|
951
|
-
});
|
|
952
|
-
});
|
|
953
|
-
};
|
|
954
|
-
const signPsbts = async ({ requests, walletAccount })=>{
|
|
955
|
-
await assertWalletAccountSigningAvailability({
|
|
956
|
-
walletAccount
|
|
957
|
-
}, dynamicClient);
|
|
958
|
-
const activeNetworkId = await getActiveNetworkId();
|
|
959
|
-
const network = convertNetworkIdForPsbt(activeNetworkId.networkId);
|
|
960
|
-
const { network: networkPayload } = await getNetworkPayload();
|
|
961
|
-
const psbtsToSign = [];
|
|
962
|
-
for (const request of requests){
|
|
963
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64, {
|
|
964
|
-
network
|
|
965
|
-
});
|
|
966
|
-
const inputsToSign = getPsbtInputsToSignForSatsConnect({
|
|
967
|
-
isLegacySatsConnect: true,
|
|
968
|
-
psbt: psbtFromBase64,
|
|
969
|
-
request
|
|
970
|
-
});
|
|
971
|
-
psbtsToSign.push({
|
|
972
|
-
inputsToSign,
|
|
973
|
-
psbtBase64: request.unsignedPsbtBase64
|
|
974
|
-
});
|
|
975
|
-
}
|
|
976
|
-
const signMultipleTransactionPayload = {
|
|
977
|
-
message: 'Sign Pbsts',
|
|
978
|
-
network: networkPayload,
|
|
979
|
-
psbts: psbtsToSign
|
|
980
|
-
};
|
|
981
|
-
// Magic Eden has implemented their own signTransactions feature, and have requested us
|
|
982
|
-
// to ensure we use it rather than the general Sats Connect API for this method
|
|
983
|
-
const request = createUnsecuredToken(signMultipleTransactionPayload);
|
|
984
|
-
const response = await satsConnectProvider.signMultipleTransactions(request);
|
|
985
|
-
return {
|
|
986
|
-
signedPsbts: response.map((response)=>response.psbtBase64)
|
|
987
|
-
};
|
|
988
|
-
};
|
|
989
|
-
const { getEventEmitter, cleanupEventEmitter } = createWalletProviderEventEmitter({
|
|
990
|
-
removeEventListeners: ({ setupReturnValue })=>{
|
|
991
|
-
assertDefined(setupReturnValue, 'Setup return value not defined');
|
|
992
|
-
setupReturnValue.removeAccountChangeListener();
|
|
993
|
-
},
|
|
994
|
-
setupEventListeners: ({ handleAccountsChanged })=>{
|
|
995
|
-
const removeAccountChangeListener = addListener('accountsChanged', (accounts)=>{
|
|
996
|
-
if (!accounts) {
|
|
997
|
-
return;
|
|
998
|
-
}
|
|
999
|
-
handleAccountsChanged({
|
|
1000
|
-
addresses: accounts.map((account)=>account.address)
|
|
1001
|
-
});
|
|
1002
|
-
});
|
|
1003
|
-
return {
|
|
1004
|
-
removeAccountChangeListener
|
|
1005
|
-
};
|
|
1006
|
-
},
|
|
1007
|
-
supportedEvents: [
|
|
1008
|
-
'accountsChanged'
|
|
1009
|
-
]
|
|
1010
|
-
});
|
|
1011
|
-
const terminate = async ()=>{
|
|
1012
|
-
cleanupEventEmitter();
|
|
1013
|
-
};
|
|
1014
|
-
return {
|
|
1015
|
-
chain,
|
|
1016
|
-
connect,
|
|
1017
|
-
get events () {
|
|
1018
|
-
return getEventEmitter();
|
|
1019
|
-
},
|
|
1020
|
-
getActiveNetworkId,
|
|
1021
|
-
getConnectedAddresses,
|
|
1022
|
-
groupKey: formatWalletProviderGroupKey(MAGIC_EDEN_METADATA.displayName),
|
|
1023
|
-
key,
|
|
1024
|
-
metadata: MAGIC_EDEN_METADATA,
|
|
1025
|
-
sendBitcoin,
|
|
1026
|
-
signMessage: signMessage$1,
|
|
1027
|
-
signPsbt,
|
|
1028
|
-
signPsbts,
|
|
1029
|
-
terminate,
|
|
1030
|
-
walletProviderType
|
|
1031
|
-
};
|
|
1032
|
-
};
|
|
1033
|
-
|
|
1034
|
-
const MAGIC_EDEN_BITCOIN_PROVIDER_LOCATOR = 'magicEden.bitcoin';
|
|
1035
|
-
const getMagicEdenInjectedProvider = ()=>{
|
|
1036
|
-
return getInjectedProviderFromWindow(MAGIC_EDEN_BITCOIN_PROVIDER_LOCATOR);
|
|
1037
|
-
};
|
|
1038
|
-
|
|
1039
|
-
const OKX_METADATA = {
|
|
1040
|
-
displayName: 'OKX Wallet',
|
|
1041
|
-
icon: `${DYNAMIC_ICONIC_SPRITE_URL}#okx`
|
|
1042
|
-
};
|
|
1043
|
-
const createOkxBitcoinWalletProvider = ({ dynamicClient, injectedProvider })=>{
|
|
1044
|
-
const chain = 'BTC';
|
|
1045
|
-
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
1046
|
-
const key = formatWalletProviderKey({
|
|
1047
|
-
chain,
|
|
1048
|
-
displayName: OKX_METADATA.displayName,
|
|
1049
|
-
walletProviderType
|
|
1050
|
-
});
|
|
1051
|
-
const connect = async ()=>{
|
|
1052
|
-
const { address, publicKey } = await injectedProvider.connect();
|
|
1053
|
-
return {
|
|
1054
|
-
addresses: [
|
|
1055
|
-
{
|
|
1056
|
-
address,
|
|
1057
|
-
publicKey
|
|
1058
|
-
}
|
|
1059
|
-
]
|
|
1060
|
-
};
|
|
1061
|
-
};
|
|
1062
|
-
const getActiveNetworkId = async ()=>{
|
|
1063
|
-
const network = await injectedProvider.getNetwork();
|
|
1064
|
-
return getNetworkIdFromNetworkName({
|
|
1065
|
-
networkName: network
|
|
1066
|
-
}, dynamicClient);
|
|
1067
|
-
};
|
|
1068
|
-
const getConnectedAddresses = async ()=>{
|
|
1069
|
-
const accounts = await injectedProvider.getAccounts();
|
|
1070
|
-
return {
|
|
1071
|
-
addresses: accounts
|
|
1072
|
-
};
|
|
1073
|
-
};
|
|
1074
|
-
const sendBitcoin = async ({ transaction, walletAccount })=>{
|
|
1075
|
-
await assertWalletAccountSigningAvailability({
|
|
1076
|
-
walletAccount
|
|
1077
|
-
}, dynamicClient);
|
|
1078
|
-
const transactionId = await injectedProvider.sendBitcoin(transaction.recipientAddress, transaction.amount.toString());
|
|
1079
|
-
return {
|
|
1080
|
-
transactionId
|
|
1081
|
-
};
|
|
1082
|
-
};
|
|
1083
|
-
const signMessage = async ({ message, walletAccount, protocol })=>{
|
|
1084
|
-
assertDefined(walletAccount, 'Wallet account not found');
|
|
1085
|
-
await assertWalletAccountSigningAvailability({
|
|
1086
|
-
walletAccount
|
|
1087
|
-
}, dynamicClient);
|
|
1088
|
-
const signedMessage = await injectedProvider.signMessage(message, protocol);
|
|
1089
|
-
return {
|
|
1090
|
-
signature: signedMessage
|
|
1091
|
-
};
|
|
1092
|
-
};
|
|
1093
|
-
const signPsbt = async ({ request, walletAccount })=>{
|
|
1094
|
-
await assertWalletAccountSigningAvailability({
|
|
1095
|
-
walletAccount
|
|
1096
|
-
}, dynamicClient);
|
|
1097
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
1098
|
-
const signedPsbtHex = await injectedProvider.signPsbt(psbtFromBase64.toHex(), createPsbtOptions({
|
|
1099
|
-
psbt: psbtFromBase64,
|
|
1100
|
-
request
|
|
1101
|
-
}));
|
|
1102
|
-
return {
|
|
1103
|
-
signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64()
|
|
1104
|
-
};
|
|
1105
|
-
};
|
|
1106
|
-
const signPsbts = async ({ requests, walletAccount })=>{
|
|
1107
|
-
await assertWalletAccountSigningAvailability({
|
|
1108
|
-
walletAccount
|
|
1109
|
-
}, dynamicClient);
|
|
1110
|
-
const psbtHexs = [];
|
|
1111
|
-
const psbtOptions = [];
|
|
1112
|
-
for (const request of requests){
|
|
1113
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
1114
|
-
psbtHexs.push(psbtFromBase64.toHex());
|
|
1115
|
-
psbtOptions.push(createPsbtOptions({
|
|
1116
|
-
psbt: psbtFromBase64,
|
|
1117
|
-
request
|
|
1118
|
-
}));
|
|
1119
|
-
}
|
|
1120
|
-
const signedPsbtHexs = await injectedProvider.signPsbts(psbtHexs, psbtOptions);
|
|
1121
|
-
return {
|
|
1122
|
-
signedPsbts: signedPsbtHexs.map((signedPsbtHex)=>Psbt.fromHex(signedPsbtHex).toBase64())
|
|
1123
|
-
};
|
|
1124
|
-
};
|
|
1125
|
-
const { getEventEmitter, cleanupEventEmitter } = createWalletProviderEventEmitter({
|
|
1126
|
-
removeEventListeners: ()=>{
|
|
1127
|
-
injectedProvider == null ? void 0 : injectedProvider.removeAllListeners();
|
|
1128
|
-
},
|
|
1129
|
-
setupEventListeners: ({ handleAccountsChanged })=>{
|
|
1130
|
-
injectedProvider == null ? void 0 : injectedProvider.on('accountsChanged', (addresses)=>{
|
|
1131
|
-
handleAccountsChanged({
|
|
1132
|
-
addresses
|
|
1133
|
-
});
|
|
1134
|
-
});
|
|
1135
|
-
},
|
|
1136
|
-
supportedEvents: [
|
|
1137
|
-
'accountsChanged'
|
|
1138
|
-
]
|
|
1139
|
-
});
|
|
1140
|
-
const terminate = async ()=>{
|
|
1141
|
-
cleanupEventEmitter();
|
|
1142
|
-
};
|
|
1143
|
-
return {
|
|
1144
|
-
chain,
|
|
1145
|
-
connect,
|
|
1146
|
-
get events () {
|
|
1147
|
-
return getEventEmitter();
|
|
1148
|
-
},
|
|
1149
|
-
getActiveNetworkId,
|
|
1150
|
-
getConnectedAddresses,
|
|
1151
|
-
groupKey: formatWalletProviderGroupKey(OKX_METADATA.displayName),
|
|
1152
|
-
key,
|
|
1153
|
-
metadata: OKX_METADATA,
|
|
1154
|
-
sendBitcoin,
|
|
1155
|
-
signMessage,
|
|
1156
|
-
signPsbt,
|
|
1157
|
-
signPsbts,
|
|
1158
|
-
terminate,
|
|
1159
|
-
walletProviderType
|
|
1160
|
-
};
|
|
1161
|
-
};
|
|
1162
|
-
|
|
1163
|
-
const OKX_BITCOIN_PROVIDER_LOCATOR = 'okxwallet.bitcoin';
|
|
1164
|
-
const getOkxBitcoinInjectedProvider = ()=>{
|
|
1165
|
-
return getInjectedProviderFromWindow(OKX_BITCOIN_PROVIDER_LOCATOR);
|
|
1166
|
-
};
|
|
1167
|
-
|
|
1168
|
-
const ONEKEY_METADATA = {
|
|
1169
|
-
displayName: 'OneKey',
|
|
1170
|
-
icon: `${DYNAMIC_ICONIC_SPRITE_URL}#onekey`
|
|
1171
|
-
};
|
|
1172
|
-
const createOneKeyBitcoinWalletProvider = ({ dynamicClient, injectedProvider })=>{
|
|
1173
|
-
const chain = 'BTC';
|
|
1174
|
-
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
1175
|
-
const key = formatWalletProviderKey({
|
|
1176
|
-
chain,
|
|
1177
|
-
displayName: ONEKEY_METADATA.displayName,
|
|
1178
|
-
walletProviderType
|
|
1179
|
-
});
|
|
1180
|
-
const connect = async ()=>{
|
|
1181
|
-
const accounts = await injectedProvider.requestAccounts();
|
|
1182
|
-
const address = accounts[0];
|
|
1183
|
-
const publicKey = await injectedProvider.getPublicKey();
|
|
1184
|
-
return {
|
|
1185
|
-
addresses: [
|
|
1186
|
-
{
|
|
1187
|
-
address,
|
|
1188
|
-
publicKey
|
|
1189
|
-
}
|
|
1190
|
-
]
|
|
1191
|
-
};
|
|
1192
|
-
};
|
|
1193
|
-
const getActiveNetworkId = async ()=>{
|
|
1194
|
-
const network = await injectedProvider.getNetwork();
|
|
1195
|
-
return getNetworkIdFromNetworkName({
|
|
1196
|
-
networkName: network
|
|
1197
|
-
}, dynamicClient);
|
|
1198
|
-
};
|
|
1199
|
-
const getConnectedAddresses = async ()=>{
|
|
1200
|
-
const accounts = await injectedProvider.getAccounts();
|
|
1201
|
-
return {
|
|
1202
|
-
addresses: accounts
|
|
1203
|
-
};
|
|
1204
|
-
};
|
|
1205
|
-
const sendBitcoin = async ({ transaction, walletAccount })=>{
|
|
1206
|
-
await assertWalletAccountSigningAvailability({
|
|
1207
|
-
walletAccount
|
|
1208
|
-
}, dynamicClient);
|
|
1209
|
-
const transactionId = await injectedProvider.sendBitcoin(transaction.recipientAddress, transaction.amount.toString());
|
|
1210
|
-
return {
|
|
1211
|
-
transactionId
|
|
1212
|
-
};
|
|
1213
|
-
};
|
|
1214
|
-
const signMessage = async ({ message, walletAccount, protocol })=>{
|
|
1215
|
-
assertDefined(walletAccount, 'Wallet account not found');
|
|
1216
|
-
await assertWalletAccountSigningAvailability({
|
|
1217
|
-
walletAccount
|
|
1218
|
-
}, dynamicClient);
|
|
1219
|
-
const signedMessage = await injectedProvider.signMessage(message, protocol);
|
|
1220
|
-
return {
|
|
1221
|
-
signature: signedMessage
|
|
1222
|
-
};
|
|
1223
|
-
};
|
|
1224
|
-
const signPsbt = async ({ request, walletAccount })=>{
|
|
1225
|
-
await assertWalletAccountSigningAvailability({
|
|
1226
|
-
walletAccount
|
|
1227
|
-
}, dynamicClient);
|
|
1228
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
1229
|
-
const signedPsbtHex = await injectedProvider.signPsbt(psbtFromBase64.toHex(), {
|
|
1230
|
-
autoFinalized: false
|
|
1231
|
-
});
|
|
1232
|
-
return {
|
|
1233
|
-
signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64()
|
|
1234
|
-
};
|
|
1235
|
-
};
|
|
1236
|
-
const signPsbts = async ({ requests, walletAccount })=>{
|
|
1237
|
-
await assertWalletAccountSigningAvailability({
|
|
1238
|
-
walletAccount
|
|
1239
|
-
}, dynamicClient);
|
|
1240
|
-
const psbtHexs = [];
|
|
1241
|
-
for (const request of requests){
|
|
1242
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
1243
|
-
psbtHexs.push(psbtFromBase64.toHex());
|
|
1244
|
-
}
|
|
1245
|
-
const signedPsbtHexs = await injectedProvider.signPsbts(psbtHexs, {
|
|
1246
|
-
autoFinalized: false
|
|
1247
|
-
});
|
|
1248
|
-
return {
|
|
1249
|
-
signedPsbts: signedPsbtHexs.map((signedPsbtHex)=>Psbt.fromHex(signedPsbtHex).toBase64())
|
|
1250
|
-
};
|
|
1251
|
-
};
|
|
1252
|
-
const { getEventEmitter, cleanupEventEmitter } = createWalletProviderEventEmitter({
|
|
1253
|
-
removeEventListeners: ()=>{
|
|
1254
|
-
injectedProvider == null ? void 0 : injectedProvider.removeAllListeners();
|
|
1255
|
-
},
|
|
1256
|
-
setupEventListeners: ({ handleAccountsChanged, handleNetworkChanged })=>{
|
|
1257
|
-
injectedProvider == null ? void 0 : injectedProvider.on('accountsChanged', (addresses)=>{
|
|
1258
|
-
handleAccountsChanged({
|
|
1259
|
-
addresses
|
|
1260
|
-
});
|
|
1261
|
-
});
|
|
1262
|
-
injectedProvider == null ? void 0 : injectedProvider.on('networkChanged', (network)=>{
|
|
1263
|
-
handleNetworkChanged({
|
|
1264
|
-
networkId: network
|
|
1265
|
-
});
|
|
1266
|
-
});
|
|
1267
|
-
},
|
|
1268
|
-
supportedEvents: [
|
|
1269
|
-
'accountsChanged',
|
|
1270
|
-
'networkChanged'
|
|
1271
|
-
]
|
|
1272
|
-
});
|
|
1273
|
-
const terminate = async ()=>{
|
|
1274
|
-
cleanupEventEmitter();
|
|
1275
|
-
};
|
|
1276
|
-
return {
|
|
1277
|
-
chain,
|
|
1278
|
-
connect,
|
|
1279
|
-
get events () {
|
|
1280
|
-
return getEventEmitter();
|
|
1281
|
-
},
|
|
1282
|
-
getActiveNetworkId,
|
|
1283
|
-
getConnectedAddresses,
|
|
1284
|
-
groupKey: formatWalletProviderGroupKey(ONEKEY_METADATA.displayName),
|
|
1285
|
-
key,
|
|
1286
|
-
metadata: ONEKEY_METADATA,
|
|
1287
|
-
sendBitcoin,
|
|
1288
|
-
signMessage,
|
|
1289
|
-
signPsbt,
|
|
1290
|
-
signPsbts,
|
|
1291
|
-
terminate,
|
|
1292
|
-
walletProviderType
|
|
1293
|
-
};
|
|
1294
|
-
};
|
|
1295
|
-
|
|
1296
|
-
const ONEKEY_BITCOIN_PROVIDER_LOCATOR = '$onekey.btc';
|
|
1297
|
-
const getOneKeyBitcoinInjectedProvider = ()=>{
|
|
1298
|
-
return getInjectedProviderFromWindow(ONEKEY_BITCOIN_PROVIDER_LOCATOR);
|
|
1299
|
-
};
|
|
1300
|
-
|
|
1301
|
-
const OYL_METADATA = {
|
|
1302
|
-
displayName: 'Oyl Wallet',
|
|
1303
|
-
icon: `${DYNAMIC_ICONIC_SPRITE_URL}#oyl`
|
|
1304
|
-
};
|
|
1305
|
-
const createOylBitcoinWalletProvider = ({ dynamicClient, injectedProvider })=>{
|
|
1306
|
-
const chain = 'BTC';
|
|
1307
|
-
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
1308
|
-
const key = formatWalletProviderKey({
|
|
1309
|
-
chain,
|
|
1310
|
-
displayName: OYL_METADATA.displayName,
|
|
1311
|
-
walletProviderType
|
|
1312
|
-
});
|
|
1313
|
-
const connect = async ()=>{
|
|
1314
|
-
const connectedAddresses = await injectedProvider.getAddresses();
|
|
1315
|
-
const addresses = [];
|
|
1316
|
-
const ordinalsAddress = connectedAddresses.taproot;
|
|
1317
|
-
if (ordinalsAddress) {
|
|
1318
|
-
addresses.push({
|
|
1319
|
-
address: ordinalsAddress.address,
|
|
1320
|
-
publicKey: ordinalsAddress.publicKey,
|
|
1321
|
-
type: 'ordinals'
|
|
1322
|
-
});
|
|
1323
|
-
}
|
|
1324
|
-
const paymentAddress = connectedAddresses.nativeSegwit;
|
|
1325
|
-
if (paymentAddress) {
|
|
1326
|
-
addresses.push({
|
|
1327
|
-
address: paymentAddress.address,
|
|
1328
|
-
publicKey: paymentAddress.publicKey,
|
|
1329
|
-
type: 'payment'
|
|
1330
|
-
});
|
|
1331
|
-
}
|
|
1332
|
-
return {
|
|
1333
|
-
addresses
|
|
1334
|
-
};
|
|
1335
|
-
};
|
|
1336
|
-
const getActiveNetworkId = async ()=>{
|
|
1337
|
-
const network = await injectedProvider.getNetwork();
|
|
1338
|
-
return getNetworkIdFromNetworkName({
|
|
1339
|
-
networkName: network
|
|
1340
|
-
}, dynamicClient);
|
|
1341
|
-
};
|
|
1342
|
-
// there's no specific method to get connected addresses in Oyl
|
|
1343
|
-
// so we check if the selected account is connected and return the addresses
|
|
1344
|
-
// if not, we return an empty array
|
|
1345
|
-
const getConnectedAddresses = async ()=>{
|
|
1346
|
-
const isSelectedAccountConnected = await injectedProvider.isConnected();
|
|
1347
|
-
if (!isSelectedAccountConnected) {
|
|
1348
|
-
return {
|
|
1349
|
-
addresses: []
|
|
1350
|
-
};
|
|
1351
|
-
}
|
|
1352
|
-
// calling connect won't prompt the user to connect again if isConnected is true
|
|
1353
|
-
const { addresses } = await connect();
|
|
1354
|
-
return {
|
|
1355
|
-
addresses: addresses.map((address)=>address.address)
|
|
1356
|
-
};
|
|
1357
|
-
};
|
|
1358
|
-
const signMessage = async ({ message, walletAccount, addressType, protocol })=>{
|
|
1359
|
-
assertDefined(walletAccount, 'Wallet account not found');
|
|
1360
|
-
await assertWalletAccountSigningAvailability({
|
|
1361
|
-
walletAccount
|
|
1362
|
-
}, dynamicClient);
|
|
1363
|
-
let addressToSignWith = walletAccount.address;
|
|
1364
|
-
if (addressType) {
|
|
1365
|
-
var _getWalletAccountAddressByType;
|
|
1366
|
-
addressToSignWith = (_getWalletAccountAddressByType = getWalletAccountAddressByType({
|
|
1367
|
-
type: addressType,
|
|
1368
|
-
walletAccount
|
|
1369
|
-
})) != null ? _getWalletAccountAddressByType : addressToSignWith;
|
|
1370
|
-
}
|
|
1371
|
-
const result = await injectedProvider.signMessage({
|
|
1372
|
-
address: addressToSignWith,
|
|
1373
|
-
message,
|
|
1374
|
-
// Oyl Wallet calls it just bip322 instead of bip322-simple
|
|
1375
|
-
protocol: protocol === 'bip322-simple' ? 'bip322' : protocol
|
|
1376
|
-
});
|
|
1377
|
-
return {
|
|
1378
|
-
signature: result.signature
|
|
1379
|
-
};
|
|
1380
|
-
};
|
|
1381
|
-
const signPsbt = async ({ request, walletAccount })=>{
|
|
1382
|
-
await assertWalletAccountSigningAvailability({
|
|
1383
|
-
walletAccount
|
|
1384
|
-
}, dynamicClient);
|
|
1385
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
1386
|
-
const { psbt: signedPsbtHex } = await injectedProvider.signPsbt({
|
|
1387
|
-
broadcast: false,
|
|
1388
|
-
finalize: false,
|
|
1389
|
-
psbt: psbtFromBase64.toHex()
|
|
1390
|
-
});
|
|
1391
|
-
return {
|
|
1392
|
-
signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64()
|
|
1393
|
-
};
|
|
1394
|
-
};
|
|
1395
|
-
const signPsbts = async ({ requests, walletAccount })=>{
|
|
1396
|
-
await assertWalletAccountSigningAvailability({
|
|
1397
|
-
walletAccount
|
|
1398
|
-
}, dynamicClient);
|
|
1399
|
-
const signedPsbts = [];
|
|
1400
|
-
for (const request of requests){
|
|
1401
|
-
const signedPsbtResponse = await signPsbt({
|
|
1402
|
-
request,
|
|
1403
|
-
walletAccount
|
|
1404
|
-
});
|
|
1405
|
-
if (signedPsbtResponse) {
|
|
1406
|
-
signedPsbts.push(signedPsbtResponse.signedPsbt);
|
|
1407
|
-
}
|
|
1408
|
-
}
|
|
1409
|
-
return {
|
|
1410
|
-
signedPsbts
|
|
1411
|
-
};
|
|
1412
|
-
};
|
|
1413
|
-
return {
|
|
1414
|
-
chain,
|
|
1415
|
-
connect,
|
|
1416
|
-
getActiveNetworkId,
|
|
1417
|
-
getConnectedAddresses,
|
|
1418
|
-
groupKey: formatWalletProviderGroupKey(OYL_METADATA.displayName),
|
|
1419
|
-
key,
|
|
1420
|
-
metadata: OYL_METADATA,
|
|
1421
|
-
signMessage,
|
|
1422
|
-
signPsbt,
|
|
1423
|
-
signPsbts,
|
|
1424
|
-
walletProviderType
|
|
1425
|
-
};
|
|
1426
|
-
};
|
|
1427
|
-
|
|
1428
|
-
const OYL_BITCOIN_PROVIDER_LOCATOR = 'oyl';
|
|
1429
|
-
const getOylBitcoinInjectedProvider = ()=>{
|
|
1430
|
-
return getInjectedProviderFromWindow(OYL_BITCOIN_PROVIDER_LOCATOR);
|
|
1431
|
-
};
|
|
1432
|
-
|
|
1433
|
-
const PHANTOM_METADATA = {
|
|
1434
|
-
displayName: 'Phantom',
|
|
1435
|
-
icon: `${DYNAMIC_ICONIC_SPRITE_URL}#phantom`
|
|
1436
|
-
};
|
|
1437
|
-
const createPhantomBitcoinWalletProvider = ({ dynamicClient, injectedProvider })=>{
|
|
1438
|
-
const chain = 'BTC';
|
|
1439
|
-
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
1440
|
-
const key = formatWalletProviderKey({
|
|
1441
|
-
chain,
|
|
1442
|
-
displayName: PHANTOM_METADATA.displayName,
|
|
1443
|
-
walletProviderType
|
|
1444
|
-
});
|
|
1445
|
-
const connect = async ()=>{
|
|
1446
|
-
const accounts = await injectedProvider.requestAccounts();
|
|
1447
|
-
const addresses = accounts.map((account)=>({
|
|
1448
|
-
address: account.address,
|
|
1449
|
-
publicKey: account.publicKey,
|
|
1450
|
-
type: account.purpose === 'payment' ? 'payment' : 'ordinals'
|
|
1451
|
-
}));
|
|
1452
|
-
// put ordinals addresses first, as they should be the main walletAccount address
|
|
1453
|
-
addresses.sort((a)=>a.type === 'ordinals' ? -1 : 1);
|
|
1454
|
-
return {
|
|
1455
|
-
addresses
|
|
1456
|
-
};
|
|
1457
|
-
};
|
|
1458
|
-
const getActiveNetworkId = async ()=>getActiveNetworkIdFromLastKnownRegistry({
|
|
1459
|
-
client: dynamicClient,
|
|
1460
|
-
walletProviderKey: key
|
|
1461
|
-
});
|
|
1462
|
-
// there's no specific method to get connected addresses in Phantom
|
|
1463
|
-
// so we use the connect method to get the addresses
|
|
1464
|
-
const getConnectedAddresses = async ()=>{
|
|
1465
|
-
const { addresses } = await connect();
|
|
1466
|
-
return {
|
|
1467
|
-
addresses: addresses.map((address)=>address.address)
|
|
1468
|
-
};
|
|
1469
|
-
};
|
|
1470
|
-
const signMessage = async ({ message, walletAccount, addressType })=>{
|
|
1471
|
-
assertDefined(walletAccount, 'Wallet account not found');
|
|
1472
|
-
await assertWalletAccountSigningAvailability({
|
|
1473
|
-
walletAccount
|
|
1474
|
-
}, dynamicClient);
|
|
1475
|
-
let addressToSignWith = walletAccount.address;
|
|
1476
|
-
if (addressType) {
|
|
1477
|
-
var _getWalletAccountAddressByType;
|
|
1478
|
-
addressToSignWith = (_getWalletAccountAddressByType = getWalletAccountAddressByType({
|
|
1479
|
-
type: addressType,
|
|
1480
|
-
walletAccount
|
|
1481
|
-
})) != null ? _getWalletAccountAddressByType : addressToSignWith;
|
|
1482
|
-
}
|
|
1483
|
-
const result = await injectedProvider.signMessage(addressToSignWith, new TextEncoder().encode(message));
|
|
1484
|
-
return {
|
|
1485
|
-
signature: getBuffer().from(result.signature).toString('base64')
|
|
1486
|
-
};
|
|
1487
|
-
};
|
|
1488
|
-
const signPsbt = async ({ request, walletAccount })=>{
|
|
1489
|
-
var _request_signature;
|
|
1490
|
-
await assertWalletAccountSigningAvailability({
|
|
1491
|
-
walletAccount
|
|
1492
|
-
}, dynamicClient);
|
|
1493
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
1494
|
-
var _request_signature_map;
|
|
1495
|
-
const inputsToSign = (_request_signature_map = (_request_signature = request.signature) == null ? void 0 : _request_signature.map((sig)=>{
|
|
1496
|
-
var _sig_signingIndexes;
|
|
1497
|
-
return {
|
|
1498
|
-
address: sig.address,
|
|
1499
|
-
sigHash: request.allowedSighash[0],
|
|
1500
|
-
signingIndexes: (_sig_signingIndexes = sig.signingIndexes) != null ? _sig_signingIndexes : []
|
|
1501
|
-
};
|
|
1502
|
-
})) != null ? _request_signature_map : [];
|
|
1503
|
-
const signedPsbt = await injectedProvider.signPSBT(psbtFromBase64.toBuffer(), {
|
|
1504
|
-
inputsToSign
|
|
1505
|
-
});
|
|
1506
|
-
return {
|
|
1507
|
-
signedPsbt: Psbt.fromBuffer(signedPsbt).toBase64()
|
|
1508
|
-
};
|
|
1509
|
-
};
|
|
1510
|
-
const signPsbts = async ({ requests, walletAccount })=>{
|
|
1511
|
-
await assertWalletAccountSigningAvailability({
|
|
1512
|
-
walletAccount
|
|
1513
|
-
}, dynamicClient);
|
|
1514
|
-
const signedPsbts = [];
|
|
1515
|
-
for (const request of requests){
|
|
1516
|
-
const signedPsbtResponse = await signPsbt({
|
|
1517
|
-
request,
|
|
1518
|
-
walletAccount
|
|
1519
|
-
});
|
|
1520
|
-
if (signedPsbtResponse) {
|
|
1521
|
-
signedPsbts.push(signedPsbtResponse.signedPsbt);
|
|
1522
|
-
}
|
|
1523
|
-
}
|
|
1524
|
-
return {
|
|
1525
|
-
signedPsbts
|
|
1526
|
-
};
|
|
1527
|
-
};
|
|
1528
|
-
const { getEventEmitter, cleanupEventEmitter } = createWalletProviderEventEmitter({
|
|
1529
|
-
removeEventListeners: ()=>{
|
|
1530
|
-
injectedProvider == null ? void 0 : injectedProvider.removeAllListeners();
|
|
1531
|
-
},
|
|
1532
|
-
setupEventListeners: ({ handleAccountsChanged })=>{
|
|
1533
|
-
injectedProvider == null ? void 0 : injectedProvider.on('accountsChanged', (accounts)=>{
|
|
1534
|
-
handleAccountsChanged({
|
|
1535
|
-
addresses: accounts.map((account)=>account.address)
|
|
1536
|
-
});
|
|
1537
|
-
});
|
|
1538
|
-
},
|
|
1539
|
-
supportedEvents: [
|
|
1540
|
-
'accountsChanged'
|
|
1541
|
-
]
|
|
1542
|
-
});
|
|
1543
|
-
const terminate = async ()=>{
|
|
1544
|
-
cleanupEventEmitter();
|
|
1545
|
-
};
|
|
1546
|
-
return {
|
|
1547
|
-
chain,
|
|
1548
|
-
connect,
|
|
1549
|
-
get events () {
|
|
1550
|
-
return getEventEmitter();
|
|
1551
|
-
},
|
|
1552
|
-
getActiveNetworkId,
|
|
1553
|
-
getConnectedAddresses,
|
|
1554
|
-
groupKey: formatWalletProviderGroupKey(PHANTOM_METADATA.displayName),
|
|
1555
|
-
key,
|
|
1556
|
-
metadata: PHANTOM_METADATA,
|
|
1557
|
-
signMessage,
|
|
1558
|
-
signPsbt,
|
|
1559
|
-
signPsbts,
|
|
1560
|
-
terminate,
|
|
1561
|
-
walletProviderType
|
|
1562
|
-
};
|
|
1563
|
-
};
|
|
1564
|
-
|
|
1565
|
-
const PHANTOM_BITCOIN_PROVIDER_LOCATOR = 'phantom.bitcoin';
|
|
1566
|
-
const getPhantomInjectedProvider = ()=>{
|
|
1567
|
-
return getInjectedProviderFromWindow(PHANTOM_BITCOIN_PROVIDER_LOCATOR);
|
|
1568
|
-
};
|
|
1569
|
-
|
|
1570
|
-
// using `unisat_wallet` instead of `unisat` to avoid conflicts with other wallets
|
|
1571
|
-
// injecting themselves into the window.unisat object, like OneKey wallet.
|
|
1572
|
-
const UNISAT_PROVIDER_LOCATOR = 'unisat_wallet';
|
|
1573
|
-
const getUnisatInjectedProvider = ()=>{
|
|
1574
|
-
return getInjectedProviderFromWindow(UNISAT_PROVIDER_LOCATOR);
|
|
1575
|
-
};
|
|
1576
|
-
|
|
1577
|
-
const signMultipleTransactionsWithSatsConnect = async ({ network, psbts, provider })=>{
|
|
1578
|
-
const response = await new Promise((resolve, reject)=>{
|
|
1579
|
-
void signMultipleTransactions({
|
|
1580
|
-
getProvider: ()=>Promise.resolve(provider),
|
|
1581
|
-
onCancel: ()=>{
|
|
1582
|
-
reject(new UserRejectedError({
|
|
1583
|
-
action: 'sign psbts'
|
|
1584
|
-
}));
|
|
1585
|
-
},
|
|
1586
|
-
onFinish: (response)=>{
|
|
1587
|
-
resolve(response);
|
|
1588
|
-
},
|
|
1589
|
-
payload: {
|
|
1590
|
-
message: 'Sign Psbts',
|
|
1591
|
-
network,
|
|
1592
|
-
psbts
|
|
1593
|
-
}
|
|
1594
|
-
});
|
|
1595
|
-
});
|
|
1596
|
-
return {
|
|
1597
|
-
signedPsbts: response.map((response)=>response.psbtBase64)
|
|
1598
|
-
};
|
|
1599
|
-
};
|
|
1600
|
-
|
|
1601
|
-
const XVERSE_METADATA = {
|
|
1602
|
-
displayName: 'Xverse',
|
|
1603
|
-
icon: `${DYNAMIC_ICONIC_SPRITE_URL}#xverse`
|
|
1604
|
-
};
|
|
1605
|
-
// https://docs.xverse.app/sats-connect/wallet-methods/request-methods
|
|
1606
|
-
const createXverseBitcoinWalletProvider = ({ dynamicClient, satsConnectProvider })=>{
|
|
1607
|
-
const chain = 'BTC';
|
|
1608
|
-
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
1609
|
-
const key = formatWalletProviderKey({
|
|
1610
|
-
chain,
|
|
1611
|
-
displayName: XVERSE_METADATA.displayName,
|
|
1612
|
-
walletProviderType
|
|
1613
|
-
});
|
|
1614
|
-
const requestPermissions = async ()=>{
|
|
1615
|
-
const response = await request('wallet_requestPermissions', undefined);
|
|
1616
|
-
if (response.status === 'success') {
|
|
1617
|
-
return;
|
|
1618
|
-
}
|
|
1619
|
-
throw response.error;
|
|
1620
|
-
};
|
|
1621
|
-
const connect = async ()=>{
|
|
1622
|
-
// requesting permissions on initial connect will avoid
|
|
1623
|
-
// connection prompt for other requests
|
|
1624
|
-
await requestPermissions();
|
|
1625
|
-
const response = await request('wallet_connect', null);
|
|
1626
|
-
if (response.status !== 'success') {
|
|
1627
|
-
throw response.error;
|
|
1628
|
-
}
|
|
1629
|
-
const { addresses: connectedAddresses } = response.result;
|
|
1630
|
-
const { addresses } = parseBitcoinConnectionResult({
|
|
1631
|
-
connectedAddresses
|
|
1632
|
-
});
|
|
1633
|
-
return {
|
|
1634
|
-
addresses
|
|
1635
|
-
};
|
|
1636
|
-
};
|
|
1637
|
-
const disconnect = async ()=>{
|
|
1638
|
-
await request('wallet_renouncePermissions', null);
|
|
1639
|
-
};
|
|
1640
|
-
const getActiveNetworkId = async ()=>{
|
|
1641
|
-
const response = await request('wallet_getNetwork', null);
|
|
1642
|
-
let networkName = 'mainnet';
|
|
1643
|
-
if (response.status === 'success') {
|
|
1644
|
-
networkName = response.result.bitcoin.name.toLowerCase();
|
|
1645
|
-
}
|
|
1646
|
-
return getNetworkIdFromNetworkName({
|
|
1647
|
-
networkName
|
|
1648
|
-
}, dynamicClient);
|
|
1649
|
-
};
|
|
1650
|
-
const getConnectedAddresses = async ()=>{
|
|
1651
|
-
const response = await request('wallet_getAccount', null);
|
|
1652
|
-
if (response.status === 'success') {
|
|
1653
|
-
return {
|
|
1654
|
-
addresses: response.result.addresses.map((address)=>address.address)
|
|
1655
|
-
};
|
|
1656
|
-
}
|
|
1657
|
-
if (response.error.code !== RpcErrorCode.ACCESS_DENIED) {
|
|
1658
|
-
throw response.error;
|
|
1659
|
-
}
|
|
1660
|
-
// if error is access denied, it means that the selected account is not
|
|
1661
|
-
// connected to the app, so return empty array
|
|
1662
|
-
return {
|
|
1663
|
-
addresses: []
|
|
1664
|
-
};
|
|
1665
|
-
};
|
|
1666
|
-
const sendBitcoin = async ({ transaction, walletAccount })=>{
|
|
1667
|
-
await assertWalletAccountSigningAvailability({
|
|
1668
|
-
walletAccount
|
|
1669
|
-
}, dynamicClient);
|
|
1670
|
-
const response = await request('sendTransfer', {
|
|
1671
|
-
recipients: [
|
|
1672
|
-
{
|
|
1673
|
-
address: transaction.recipientAddress,
|
|
1674
|
-
amount: Number(transaction.amount)
|
|
1675
|
-
}
|
|
1676
|
-
]
|
|
1677
|
-
});
|
|
1678
|
-
if (response.status !== 'success') {
|
|
1679
|
-
throw response.error;
|
|
1680
|
-
}
|
|
1681
|
-
return {
|
|
1682
|
-
transactionId: response.result.txid
|
|
1683
|
-
};
|
|
1684
|
-
};
|
|
1685
|
-
const signMessage = async ({ message, walletAccount, protocol, addressType })=>{
|
|
1686
|
-
assertDefined(walletAccount, 'Wallet account not found');
|
|
1687
|
-
await assertWalletAccountSigningAvailability({
|
|
1688
|
-
walletAccount
|
|
1689
|
-
}, dynamicClient);
|
|
1690
|
-
let addressToSignWith = walletAccount.address;
|
|
1691
|
-
if (addressType) {
|
|
1692
|
-
var _getWalletAccountAddressByType;
|
|
1693
|
-
addressToSignWith = (_getWalletAccountAddressByType = getWalletAccountAddressByType({
|
|
1694
|
-
type: addressType,
|
|
1695
|
-
walletAccount
|
|
1696
|
-
})) != null ? _getWalletAccountAddressByType : addressToSignWith;
|
|
1697
|
-
}
|
|
1698
|
-
const response = await request('signMessage', {
|
|
1699
|
-
address: addressToSignWith,
|
|
1700
|
-
message,
|
|
1701
|
-
protocol: getSatsConnectSigningProtocol(protocol)
|
|
1702
|
-
});
|
|
1703
|
-
if (response.status !== 'success') {
|
|
1704
|
-
throw response.error;
|
|
1705
|
-
}
|
|
1706
|
-
return {
|
|
1707
|
-
signature: response.result.signature
|
|
1708
|
-
};
|
|
1709
|
-
};
|
|
1710
|
-
const signPsbt = async ({ request: request$1, walletAccount })=>{
|
|
1711
|
-
if (!request$1.allowedSighash.length) {
|
|
1712
|
-
throw new InvalidPsbtError('allowedSighash cannot be an empty array');
|
|
1713
|
-
}
|
|
1714
|
-
await assertWalletAccountSigningAvailability({
|
|
1715
|
-
walletAccount
|
|
1716
|
-
}, dynamicClient);
|
|
1717
|
-
const activeNetworkId = await getActiveNetworkId();
|
|
1718
|
-
const network = convertNetworkIdForPsbt(activeNetworkId.networkId);
|
|
1719
|
-
const psbtFromBase64 = Psbt.fromBase64(request$1.unsignedPsbtBase64, {
|
|
1720
|
-
network
|
|
1721
|
-
});
|
|
1722
|
-
const inputsToSign = getPsbtInputsToSignForSatsConnect({
|
|
1723
|
-
psbt: psbtFromBase64,
|
|
1724
|
-
request: request$1
|
|
1725
|
-
});
|
|
1726
|
-
const signPbstPayload = {
|
|
1727
|
-
broadcast: false,
|
|
1728
|
-
psbt: request$1.unsignedPsbtBase64,
|
|
1729
|
-
// we have to combine signing indexes for like addresses
|
|
1730
|
-
signInputs: inputsToSign.reduce((accum, curr)=>{
|
|
1731
|
-
if (!accum[curr.address]) {
|
|
1732
|
-
accum[curr.address] = [];
|
|
1733
|
-
}
|
|
1734
|
-
accum[curr.address].push(...curr.signingIndexes);
|
|
1735
|
-
return accum;
|
|
1736
|
-
}, {})
|
|
1737
|
-
};
|
|
1738
|
-
const response = await request('signPsbt', signPbstPayload);
|
|
1739
|
-
if (response.status !== 'success') {
|
|
1740
|
-
throw response.error;
|
|
1741
|
-
}
|
|
1742
|
-
return {
|
|
1743
|
-
signedPsbt: response.result.psbt
|
|
1744
|
-
};
|
|
1745
|
-
};
|
|
1746
|
-
const signPsbts = async ({ requests, walletAccount })=>{
|
|
1747
|
-
await assertWalletAccountSigningAvailability({
|
|
1748
|
-
walletAccount
|
|
1749
|
-
}, dynamicClient);
|
|
1750
|
-
const activeNetworkId = await getActiveNetworkId();
|
|
1751
|
-
const network = convertNetworkIdForPsbt(activeNetworkId.networkId);
|
|
1752
|
-
const networkType = convertNetworkIdToSatsConnectNetworkType(activeNetworkId.networkId);
|
|
1753
|
-
const psbtsToSign = [];
|
|
1754
|
-
for (const request of requests){
|
|
1755
|
-
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64, {
|
|
1756
|
-
network
|
|
1757
|
-
});
|
|
1758
|
-
const inputsToSign = getPsbtInputsToSignForSatsConnect({
|
|
1759
|
-
psbt: psbtFromBase64,
|
|
1760
|
-
request
|
|
1761
|
-
});
|
|
1762
|
-
psbtsToSign.push({
|
|
1763
|
-
inputsToSign,
|
|
1764
|
-
psbtBase64: request.unsignedPsbtBase64
|
|
1765
|
-
});
|
|
1766
|
-
}
|
|
1767
|
-
const response = await signMultipleTransactionsWithSatsConnect({
|
|
1768
|
-
network: {
|
|
1769
|
-
type: networkType
|
|
1770
|
-
},
|
|
1771
|
-
provider: satsConnectProvider,
|
|
1772
|
-
psbts: psbtsToSign
|
|
1773
|
-
});
|
|
1774
|
-
return {
|
|
1775
|
-
signedPsbts: response.signedPsbts
|
|
1776
|
-
};
|
|
1777
|
-
};
|
|
1778
|
-
const { getEventEmitter, cleanupEventEmitter } = createWalletProviderEventEmitter({
|
|
1779
|
-
removeEventListeners: ({ setupReturnValue })=>{
|
|
1780
|
-
assertDefined(setupReturnValue, 'Setup return value not defined');
|
|
1781
|
-
setupReturnValue.removeAccountChangeListener();
|
|
1782
|
-
setupReturnValue.accountDisconnectedListener();
|
|
1783
|
-
},
|
|
1784
|
-
setupEventListeners: ({ handleAccountsChanged, handleDisconnected })=>{
|
|
1785
|
-
const removeAccountChangeListener = addListener('accountChange', ({ addresses })=>{
|
|
1786
|
-
if (!addresses) {
|
|
1787
|
-
return;
|
|
1788
|
-
}
|
|
1789
|
-
handleAccountsChanged({
|
|
1790
|
-
addresses: addresses.map((address)=>address.address)
|
|
1791
|
-
});
|
|
1792
|
-
});
|
|
1793
|
-
const accountDisconnectedListener = addListener('accountDisconnected', ()=>{
|
|
1794
|
-
handleDisconnected();
|
|
1795
|
-
});
|
|
1796
|
-
return {
|
|
1797
|
-
accountDisconnectedListener,
|
|
1798
|
-
removeAccountChangeListener
|
|
1799
|
-
};
|
|
1800
|
-
},
|
|
1801
|
-
supportedEvents: [
|
|
1802
|
-
'accountsChanged',
|
|
1803
|
-
'disconnected'
|
|
1804
|
-
]
|
|
1805
|
-
});
|
|
1806
|
-
const terminate = async ()=>{
|
|
1807
|
-
cleanupEventEmitter();
|
|
1808
|
-
};
|
|
1809
|
-
return {
|
|
1810
|
-
chain,
|
|
1811
|
-
connect,
|
|
1812
|
-
disconnect,
|
|
1813
|
-
get events () {
|
|
1814
|
-
return getEventEmitter();
|
|
1815
|
-
},
|
|
1816
|
-
getActiveNetworkId,
|
|
1817
|
-
getConnectedAddresses,
|
|
1818
|
-
groupKey: formatWalletProviderGroupKey(XVERSE_METADATA.displayName),
|
|
1819
|
-
key,
|
|
1820
|
-
metadata: XVERSE_METADATA,
|
|
1821
|
-
sendBitcoin,
|
|
1822
|
-
signMessage,
|
|
1823
|
-
signPsbt,
|
|
1824
|
-
signPsbts,
|
|
1825
|
-
terminate,
|
|
1826
|
-
walletProviderType
|
|
1827
|
-
};
|
|
1828
|
-
};
|
|
1829
|
-
|
|
1830
|
-
const XVERSE_BITCOIN_PROVIDER_LOCATOR = 'XverseProviders.BitcoinProvider';
|
|
1831
|
-
const getXverseInjectedProvider = ()=>{
|
|
1832
|
-
return getInjectedProviderFromWindow(XVERSE_BITCOIN_PROVIDER_LOCATOR);
|
|
1833
|
-
};
|
|
1834
|
-
|
|
1835
|
-
const BITCOIN_INJECTED_WALLETS_EXTENSION_KEY = 'bitcoinInjectedWallets';
|
|
1836
|
-
/**
|
|
1837
|
-
* Adds the Bitcoin Injected Wallets extension to the Dynamic client.
|
|
1838
|
-
*
|
|
1839
|
-
* This extension enables integration with many Bitcoin wallets, like MagicEden, Xverse, Unisat, Phantom, and more.
|
|
1840
|
-
*
|
|
1841
|
-
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
1842
|
-
*/ const addBitcoinInjectedWalletsExtension = (client = getDefaultClient())=>{
|
|
1843
|
-
if (hasExtension({
|
|
1844
|
-
extensionKey: BITCOIN_INJECTED_WALLETS_EXTENSION_KEY
|
|
1845
|
-
}, client)) {
|
|
1846
|
-
return;
|
|
1847
|
-
}
|
|
1848
|
-
registerExtension({
|
|
1849
|
-
extensionKey: BITCOIN_INJECTED_WALLETS_EXTENSION_KEY
|
|
1850
|
-
}, client);
|
|
1851
|
-
registerBitcoinNetworkProviderBuilder(client);
|
|
1852
|
-
const walletProviderRegistry = getWalletProviderRegistry(client);
|
|
1853
|
-
const injectedWalletProviders = [];
|
|
1854
|
-
// Create and register Unisat wallet provider
|
|
1855
|
-
const unisatInjectedProvider = getUnisatInjectedProvider();
|
|
1856
|
-
if (unisatInjectedProvider) {
|
|
1857
|
-
const unisatWalletProvider = createUnisatWalletProvider({
|
|
1858
|
-
dynamicClient: client,
|
|
1859
|
-
injectedProvider: unisatInjectedProvider
|
|
1860
|
-
});
|
|
1861
|
-
injectedWalletProviders.push(unisatWalletProvider);
|
|
1862
|
-
}
|
|
1863
|
-
// Create and register Phantom wallet provider
|
|
1864
|
-
const phantomInjectedProvider = getPhantomInjectedProvider();
|
|
1865
|
-
if (phantomInjectedProvider) {
|
|
1866
|
-
const phantomWalletProvider = createPhantomBitcoinWalletProvider({
|
|
1867
|
-
dynamicClient: client,
|
|
1868
|
-
injectedProvider: phantomInjectedProvider
|
|
1869
|
-
});
|
|
1870
|
-
injectedWalletProviders.push(phantomWalletProvider);
|
|
1871
|
-
}
|
|
1872
|
-
// Create and register Xverse wallet provider
|
|
1873
|
-
const xverseInjectedProvider = getXverseInjectedProvider();
|
|
1874
|
-
if (xverseInjectedProvider) {
|
|
1875
|
-
const xverseWalletProvider = createXverseBitcoinWalletProvider({
|
|
1876
|
-
dynamicClient: client,
|
|
1877
|
-
satsConnectProvider: xverseInjectedProvider
|
|
1878
|
-
});
|
|
1879
|
-
injectedWalletProviders.push(xverseWalletProvider);
|
|
1880
|
-
}
|
|
1881
|
-
// Create and register MagicEden wallet provider
|
|
1882
|
-
const magicEdenInjectedProvider = getMagicEdenInjectedProvider();
|
|
1883
|
-
if (magicEdenInjectedProvider) {
|
|
1884
|
-
const magicEdenWalletProvider = createMagicEdenBitcoinWalletProvider({
|
|
1885
|
-
dynamicClient: client,
|
|
1886
|
-
satsConnectProvider: magicEdenInjectedProvider
|
|
1887
|
-
});
|
|
1888
|
-
injectedWalletProviders.push(magicEdenWalletProvider);
|
|
1889
|
-
}
|
|
1890
|
-
// Create and register OKX wallet provider
|
|
1891
|
-
const okxInjectedProvider = getOkxBitcoinInjectedProvider();
|
|
1892
|
-
if (okxInjectedProvider) {
|
|
1893
|
-
const okxWalletProvider = createOkxBitcoinWalletProvider({
|
|
1894
|
-
dynamicClient: client,
|
|
1895
|
-
injectedProvider: okxInjectedProvider
|
|
1896
|
-
});
|
|
1897
|
-
injectedWalletProviders.push(okxWalletProvider);
|
|
1898
|
-
}
|
|
1899
|
-
// Create and register OneKey wallet provider
|
|
1900
|
-
const oneKeyInjectedProvider = getOneKeyBitcoinInjectedProvider();
|
|
1901
|
-
if (oneKeyInjectedProvider) {
|
|
1902
|
-
const oneKeyWalletProvider = createOneKeyBitcoinWalletProvider({
|
|
1903
|
-
dynamicClient: client,
|
|
1904
|
-
injectedProvider: oneKeyInjectedProvider
|
|
1905
|
-
});
|
|
1906
|
-
injectedWalletProviders.push(oneKeyWalletProvider);
|
|
1907
|
-
}
|
|
1908
|
-
// Create and register Bitget wallet provider
|
|
1909
|
-
const bitgetInjectedProvider = getBitgetBitcoinInjectedProvider();
|
|
1910
|
-
if (bitgetInjectedProvider) {
|
|
1911
|
-
const bitgetWalletProvider = createBitgetBitcoinWalletProvider({
|
|
1912
|
-
dynamicClient: client,
|
|
1913
|
-
injectedProvider: bitgetInjectedProvider
|
|
1914
|
-
});
|
|
1915
|
-
injectedWalletProviders.push(bitgetWalletProvider);
|
|
1916
|
-
}
|
|
1917
|
-
// Create and register Binance wallet provider
|
|
1918
|
-
const binanceInjectedProvider = getBinanceBitcoinInjectedProvider();
|
|
1919
|
-
if (binanceInjectedProvider) {
|
|
1920
|
-
const binanceWalletProvider = createBinanceBitcoinWalletProvider({
|
|
1921
|
-
dynamicClient: client,
|
|
1922
|
-
injectedProvider: binanceInjectedProvider
|
|
1923
|
-
});
|
|
1924
|
-
injectedWalletProviders.push(binanceWalletProvider);
|
|
1925
|
-
}
|
|
1926
|
-
// Create and register OYL wallet provider
|
|
1927
|
-
const oylInjectedProvider = getOylBitcoinInjectedProvider();
|
|
1928
|
-
if (oylInjectedProvider) {
|
|
1929
|
-
const oylWalletProvider = createOylBitcoinWalletProvider({
|
|
1930
|
-
dynamicClient: client,
|
|
1931
|
-
injectedProvider: oylInjectedProvider
|
|
1932
|
-
});
|
|
1933
|
-
injectedWalletProviders.push(oylWalletProvider);
|
|
1934
|
-
}
|
|
1935
|
-
// Create and register Leather wallet provider
|
|
1936
|
-
const leatherInjectedProvider = getLeatherBitcoinInjectedProvider();
|
|
1937
|
-
if (leatherInjectedProvider) {
|
|
1938
|
-
const leatherWalletProvider = createLeatherBitcoinWalletProvider({
|
|
1939
|
-
dynamicClient: client,
|
|
1940
|
-
injectedProvider: leatherInjectedProvider
|
|
1941
|
-
});
|
|
1942
|
-
injectedWalletProviders.push(leatherWalletProvider);
|
|
1943
|
-
}
|
|
1944
|
-
injectedWalletProviders.forEach((walletProvider)=>{
|
|
1945
|
-
walletProviderRegistry.register({
|
|
1946
|
-
priority: WalletProviderPriority.WINDOW_INJECT,
|
|
1947
|
-
walletProvider
|
|
1948
|
-
});
|
|
1949
|
-
});
|
|
1950
|
-
};
|
|
1951
|
-
|
|
1952
|
-
export { InvalidPsbtError as I, addBitcoinInjectedWalletsExtension as a, getMempoolApiUrl as g, name as n, version as v };
|