@dynamic-labs-sdk/bitcoin 0.1.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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-CseEWCFz.cjs.js +1524 -0
- package/dist/addBitcoinInjectedWalletsExtension-CseEWCFz.cjs.js.map +1 -0
- package/dist/addBitcoinInjectedWalletsExtension-DXXPos47.esm.js +1495 -0
- package/dist/addBitcoinInjectedWalletsExtension-DXXPos47.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 +30 -16
- 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
|
@@ -0,0 +1,1524 @@
|
|
|
1
|
+
let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
|
|
2
|
+
let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
|
|
3
|
+
let _dynamic_labs_sdk_api_core = require("@dynamic-labs/sdk-api-core");
|
|
4
|
+
let bitcoinjs_lib = require("bitcoinjs-lib");
|
|
5
|
+
let jsontokens = require("jsontokens");
|
|
6
|
+
let sats_connect = require("sats-connect");
|
|
7
|
+
|
|
8
|
+
//#region package.json
|
|
9
|
+
var name = "@dynamic-labs-sdk/bitcoin";
|
|
10
|
+
var version = "0.2.3";
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/constants.ts
|
|
14
|
+
const MEMPOOL_API_URL = "https://mempool.space/api";
|
|
15
|
+
const MEMPOOL_API_URL_TESTNET = "https://mempool.space/testnet/api";
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region src/utils/getMempoolApiUrl/getMempoolApiUrl.ts
|
|
19
|
+
const getMempoolApiUrl = (address$1) => address$1.startsWith("t") ? MEMPOOL_API_URL_TESTNET : MEMPOOL_API_URL;
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/utils/satoshisToBtc/satoshisToBtc.ts
|
|
23
|
+
const satoshisToBtc = (satoshis) => satoshis / 1e8;
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/utils/fetchBtcBalance/fetchBtcBalance.ts
|
|
27
|
+
const fetchBtcBalance = async ({ address: address$1 }) => {
|
|
28
|
+
const API_URL = getMempoolApiUrl(address$1);
|
|
29
|
+
const response = await fetch(`${API_URL}/address/${address$1}`);
|
|
30
|
+
if (!response.ok) return null;
|
|
31
|
+
const addressInfo = await response.json();
|
|
32
|
+
if (!addressInfo?.chain_stats || !addressInfo?.mempool_stats) return null;
|
|
33
|
+
return satoshisToBtc(Number(addressInfo.chain_stats.funded_txo_sum) - Number(addressInfo.chain_stats.spent_txo_sum) + (Number(addressInfo.mempool_stats.funded_txo_sum) - Number(addressInfo.mempool_stats.spent_txo_sum))).toString();
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.ts
|
|
38
|
+
const createBitcoinNetworkProvider = (networkData) => ({
|
|
39
|
+
...(0, _dynamic_labs_sdk_client_core.createBaseNetworkProvider)("BTC", networkData),
|
|
40
|
+
cluster: networkData.cluster,
|
|
41
|
+
getBalance: async ({ address: address$1 }) => ({ balance: await fetchBtcBalance({ address: address$1 }) })
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region src/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.ts
|
|
46
|
+
const registerBitcoinNetworkProviderBuilder = (client) => {
|
|
47
|
+
const networkProviderBuilderRegistry = (0, _dynamic_labs_sdk_client_core.getNetworkProviderBuilderRegistry)(client);
|
|
48
|
+
/**
|
|
49
|
+
* If the Bitcoin network provider builder is already registered, return.
|
|
50
|
+
*/
|
|
51
|
+
if (networkProviderBuilderRegistry.get().get("BTC")) return;
|
|
52
|
+
networkProviderBuilderRegistry.register({
|
|
53
|
+
builder: createBitcoinNetworkProvider,
|
|
54
|
+
chain: "BTC"
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src/errors/InvalidPsbtError.ts
|
|
60
|
+
var InvalidPsbtError = class extends _dynamic_labs_sdk_client.BaseError {
|
|
61
|
+
constructor(message) {
|
|
62
|
+
super({
|
|
63
|
+
cause: null,
|
|
64
|
+
code: "invalid_psbt_error",
|
|
65
|
+
docsUrl: null,
|
|
66
|
+
name: "InvalidPsbtError",
|
|
67
|
+
shortMessage: message
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
//#endregion
|
|
73
|
+
//#region src/utils/getSigHashType/getSigHashType.ts
|
|
74
|
+
/**
|
|
75
|
+
* This method will return the signature hash type for the current input.
|
|
76
|
+
* If there is a sighashType, it will return that
|
|
77
|
+
* If there is a witnessUtxo AND it is a taproot address, then it will return SIGHASH_DEFAULT
|
|
78
|
+
* Otherwise, it will return SIGHASH_ALL
|
|
79
|
+
*/
|
|
80
|
+
const getSigHashType = ({ input }) => {
|
|
81
|
+
if (input?.sighashType) return input.sighashType;
|
|
82
|
+
let isTaprootAddress = false;
|
|
83
|
+
if (input.witnessUtxo?.script) try {
|
|
84
|
+
bitcoinjs_lib.payments.p2tr({ output: input.witnessUtxo.script });
|
|
85
|
+
isTaprootAddress = true;
|
|
86
|
+
} catch {}
|
|
87
|
+
return isTaprootAddress ? bitcoinjs_lib.Transaction.SIGHASH_DEFAULT : bitcoinjs_lib.Transaction.SIGHASH_ALL;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/utils/validatePsbt/validateSigHash/validateSigHash.ts
|
|
92
|
+
const validateSigHash = ({ allowedSigHashTypes, input }) => {
|
|
93
|
+
const sigHashType = getSigHashType({ input });
|
|
94
|
+
if (allowedSigHashTypes?.length && !allowedSigHashTypes.includes(sigHashType)) throw new InvalidPsbtError(`sigHashType ${sigHashType} not in allowed list`);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
//#endregion
|
|
98
|
+
//#region src/utils/validatePsbt/extractAddressFromInput/extractAddressFromInput.ts
|
|
99
|
+
/**
|
|
100
|
+
* This method extracts the address from the input data of the psbt.
|
|
101
|
+
* The address is stored as script (Buffer) in either the witnessUtxo or nonWitnessUtxo as an output
|
|
102
|
+
*/
|
|
103
|
+
const extractAddressFromInput = ({ index, input, psbt }) => {
|
|
104
|
+
let extractedAddress;
|
|
105
|
+
try {
|
|
106
|
+
if (input.witnessUtxo?.script) extractedAddress = bitcoinjs_lib.address.fromOutputScript(input.witnessUtxo.script);
|
|
107
|
+
if (input.nonWitnessUtxo) {
|
|
108
|
+
const txOut = bitcoinjs_lib.Transaction.fromBuffer(input.nonWitnessUtxo).outs[psbt.txInputs[index].index];
|
|
109
|
+
extractedAddress = bitcoinjs_lib.address.fromOutputScript(txOut.script);
|
|
110
|
+
}
|
|
111
|
+
return extractedAddress;
|
|
112
|
+
} catch {
|
|
113
|
+
return extractedAddress;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
//#endregion
|
|
118
|
+
//#region src/utils/validatePsbt/validateSigningAddress/validateSigningAddress.ts
|
|
119
|
+
const validateSigningAddress = ({ index, inputAtIndex, psbt, signingAddress }) => {
|
|
120
|
+
const extractedAddress = extractAddressFromInput({
|
|
121
|
+
index,
|
|
122
|
+
input: inputAtIndex,
|
|
123
|
+
psbt
|
|
124
|
+
});
|
|
125
|
+
if (!extractedAddress) throw new InvalidPsbtError(`Could not extract address from input at index ${index}`);
|
|
126
|
+
if (extractedAddress !== signingAddress) throw new InvalidPsbtError(`Signing address does not match with address extracted from input at index ${index}`);
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
//#endregion
|
|
130
|
+
//#region src/utils/validatePsbt/validatePsbt.ts
|
|
131
|
+
/**
|
|
132
|
+
* This method will validate the psbt against the signature data provided in the request
|
|
133
|
+
* It checks 3 things:
|
|
134
|
+
* - That the signing index exists in the input
|
|
135
|
+
* - That the address provided in the request matches the address in the input,
|
|
136
|
+
* unless the disableAddressValidation flag is set
|
|
137
|
+
* - That the sigHashType of the input is a member of the allowedSigHashTypes array
|
|
138
|
+
*/
|
|
139
|
+
const validatePsbt = ({ allowedSigHashTypes, psbt, signatureData }) => {
|
|
140
|
+
if (!signatureData?.length) return;
|
|
141
|
+
for (const input of signatureData) {
|
|
142
|
+
const { address: signingAddress, signingIndexes, disableAddressValidation = true } = input;
|
|
143
|
+
if (!signingIndexes?.length) return;
|
|
144
|
+
if (!signingAddress) throw new InvalidPsbtError("Missing signing address");
|
|
145
|
+
for (const index of signingIndexes) {
|
|
146
|
+
const inputAtIndex = psbt.data.inputs[index];
|
|
147
|
+
if (!inputAtIndex) throw new InvalidPsbtError(`Missing input for index ${index}`);
|
|
148
|
+
if (!disableAddressValidation) validateSigningAddress({
|
|
149
|
+
index,
|
|
150
|
+
inputAtIndex,
|
|
151
|
+
psbt,
|
|
152
|
+
signingAddress
|
|
153
|
+
});
|
|
154
|
+
validateSigHash({
|
|
155
|
+
allowedSigHashTypes,
|
|
156
|
+
input: inputAtIndex
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
//#endregion
|
|
163
|
+
//#region src/utils/createPsbtOptions/createPsbtOptions.ts
|
|
164
|
+
/**
|
|
165
|
+
* This method will create the psbt sign options for the given request
|
|
166
|
+
* It will validate the psbt against the signature data provided in the request
|
|
167
|
+
* It will return the psbt sign options with the toSignInputs added if the signature data is provided
|
|
168
|
+
*/
|
|
169
|
+
const createPsbtOptions = ({ psbt, request }) => {
|
|
170
|
+
const psbtSignOptions = { autoFinalized: false };
|
|
171
|
+
if (!request.signature) return psbtSignOptions;
|
|
172
|
+
validatePsbt({
|
|
173
|
+
allowedSigHashTypes: request.allowedSighash,
|
|
174
|
+
psbt,
|
|
175
|
+
signatureData: request.signature
|
|
176
|
+
});
|
|
177
|
+
const toSignInputs = [];
|
|
178
|
+
for (const signature of request.signature) if (signature.signingIndexes?.length) for (const index of signature.signingIndexes) toSignInputs.push({
|
|
179
|
+
address: signature.address,
|
|
180
|
+
disableAddressValidation: signature.disableAddressValidation,
|
|
181
|
+
index,
|
|
182
|
+
sighashTypes: request.allowedSighash
|
|
183
|
+
});
|
|
184
|
+
psbtSignOptions.toSignInputs = toSignInputs;
|
|
185
|
+
return psbtSignOptions;
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
//#endregion
|
|
189
|
+
//#region src/utils/getNetworkIdFromNetworkName/getNetworkIdFromNetworkName.ts
|
|
190
|
+
const getNetworkIdFromNetworkName = ({ networkName }, client) => {
|
|
191
|
+
return { networkId: (0, _dynamic_labs_sdk_client.getNetworksData)(client).filter((data) => data.chain === "BTC").find((data) => data.cluster === networkName)?.networkId ?? "1" };
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
//#endregion
|
|
195
|
+
//#region src/injected/utils/binance/createBinanceBitcoinWalletProvider/createBinanceBitcoinWalletProvider.ts
|
|
196
|
+
const BINANCE_METADATA = {
|
|
197
|
+
displayName: "Binance Wallet",
|
|
198
|
+
icon: `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL}#onekey`
|
|
199
|
+
};
|
|
200
|
+
const createBinanceBitcoinWalletProvider = ({ dynamicClient, injectedProvider }) => {
|
|
201
|
+
const chain = "BTC";
|
|
202
|
+
const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
|
|
203
|
+
const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
204
|
+
chain,
|
|
205
|
+
displayName: BINANCE_METADATA.displayName,
|
|
206
|
+
walletProviderType
|
|
207
|
+
});
|
|
208
|
+
const connect = async () => {
|
|
209
|
+
return { addresses: [{
|
|
210
|
+
address: (await injectedProvider.requestAccounts())[0],
|
|
211
|
+
publicKey: await injectedProvider.getPublicKey()
|
|
212
|
+
}] };
|
|
213
|
+
};
|
|
214
|
+
const getActiveNetworkId = async () => {
|
|
215
|
+
return getNetworkIdFromNetworkName({ networkName: await injectedProvider.getNetwork() }, dynamicClient);
|
|
216
|
+
};
|
|
217
|
+
const getConnectedAddresses = async () => {
|
|
218
|
+
return { addresses: await injectedProvider.getAccounts() };
|
|
219
|
+
};
|
|
220
|
+
const signMessage = async ({ message, walletAccount, protocol }) => {
|
|
221
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
|
|
222
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
223
|
+
return { signature: await injectedProvider.signMessage(message, protocol) };
|
|
224
|
+
};
|
|
225
|
+
const signPsbt = async ({ request, walletAccount }) => {
|
|
226
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
227
|
+
const psbtFromBase64 = bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
228
|
+
const psbtOptions = createPsbtOptions({
|
|
229
|
+
psbt: psbtFromBase64,
|
|
230
|
+
request
|
|
231
|
+
});
|
|
232
|
+
const signedPsbtHex = await injectedProvider.signPsbt(psbtFromBase64.toHex(), {
|
|
233
|
+
autoFinalized: false,
|
|
234
|
+
toSignInputs: psbtOptions.toSignInputs || []
|
|
235
|
+
});
|
|
236
|
+
return { signedPsbt: bitcoinjs_lib.Psbt.fromHex(signedPsbtHex).toBase64() };
|
|
237
|
+
};
|
|
238
|
+
const signPsbts = async ({ requests, walletAccount }) => {
|
|
239
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
240
|
+
const signedPsbts = [];
|
|
241
|
+
for (const request of requests) {
|
|
242
|
+
const signedPsbtResponse = await signPsbt({
|
|
243
|
+
request,
|
|
244
|
+
walletAccount
|
|
245
|
+
});
|
|
246
|
+
if (signedPsbtResponse) signedPsbts.push(signedPsbtResponse.signedPsbt);
|
|
247
|
+
}
|
|
248
|
+
return { signedPsbts };
|
|
249
|
+
};
|
|
250
|
+
const { getEventEmitter, cleanupEventEmitter } = (0, _dynamic_labs_sdk_client_core.createWalletProviderEventEmitter)({
|
|
251
|
+
removeEventListeners: () => {
|
|
252
|
+
injectedProvider?.removeAllListeners();
|
|
253
|
+
},
|
|
254
|
+
setupEventListeners: ({ handleAccountsChanged, handleNetworkChanged }) => {
|
|
255
|
+
injectedProvider?.on("accountsChanged", (addresses) => {
|
|
256
|
+
handleAccountsChanged({ addresses });
|
|
257
|
+
});
|
|
258
|
+
injectedProvider?.on("networkChanged", (network) => {
|
|
259
|
+
handleNetworkChanged({ networkId: network });
|
|
260
|
+
});
|
|
261
|
+
},
|
|
262
|
+
supportedEvents: ["accountsChanged", "networkChanged"]
|
|
263
|
+
});
|
|
264
|
+
const terminate = async () => {
|
|
265
|
+
cleanupEventEmitter();
|
|
266
|
+
};
|
|
267
|
+
return {
|
|
268
|
+
chain,
|
|
269
|
+
connect,
|
|
270
|
+
get events() {
|
|
271
|
+
return getEventEmitter();
|
|
272
|
+
},
|
|
273
|
+
getActiveNetworkId,
|
|
274
|
+
getConnectedAddresses,
|
|
275
|
+
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(BINANCE_METADATA.displayName),
|
|
276
|
+
key,
|
|
277
|
+
metadata: BINANCE_METADATA,
|
|
278
|
+
signMessage,
|
|
279
|
+
signPsbt,
|
|
280
|
+
signPsbts,
|
|
281
|
+
terminate,
|
|
282
|
+
walletProviderType
|
|
283
|
+
};
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
//#endregion
|
|
287
|
+
//#region src/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.ts
|
|
288
|
+
const BINANCE_BITCOIN_PROVIDER_LOCATOR = "binancew3w.bitcoin";
|
|
289
|
+
const getBinanceBitcoinInjectedProvider = () => {
|
|
290
|
+
return (0, _dynamic_labs_sdk_client_core.getInjectedProviderFromWindow)(BINANCE_BITCOIN_PROVIDER_LOCATOR);
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
//#endregion
|
|
294
|
+
//#region src/injected/utils/unisat/createUnisatWalletProvider/createUnisatWalletProvider.ts
|
|
295
|
+
const UNISAT_METADATA = {
|
|
296
|
+
displayName: "UniSat",
|
|
297
|
+
icon: `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL}#unisat`
|
|
298
|
+
};
|
|
299
|
+
const createUnisatWalletProvider = ({ dynamicClient, injectedProvider }) => {
|
|
300
|
+
const chain = "BTC";
|
|
301
|
+
const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
|
|
302
|
+
const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
303
|
+
chain,
|
|
304
|
+
displayName: UNISAT_METADATA.displayName,
|
|
305
|
+
walletProviderType
|
|
306
|
+
});
|
|
307
|
+
const connect = async () => {
|
|
308
|
+
return { addresses: (await injectedProvider.requestAccounts()).map((address$1) => ({ address: address$1 })) };
|
|
309
|
+
};
|
|
310
|
+
const disconnect = async () => {
|
|
311
|
+
return injectedProvider.disconnect();
|
|
312
|
+
};
|
|
313
|
+
const getActiveNetworkId = async () => {
|
|
314
|
+
const chain$1 = await injectedProvider.getChain();
|
|
315
|
+
let networkName = "mainnet";
|
|
316
|
+
if (chain$1.enum === "BITCOIN_TESTNET") networkName = "testnet";
|
|
317
|
+
else if (chain$1.enum === "BITCOIN_SIGNET") networkName = "signet";
|
|
318
|
+
return getNetworkIdFromNetworkName({ networkName }, dynamicClient);
|
|
319
|
+
};
|
|
320
|
+
const getConnectedAddresses = async () => {
|
|
321
|
+
return { addresses: await injectedProvider.getAccounts() };
|
|
322
|
+
};
|
|
323
|
+
const sendBitcoin = async ({ transaction, walletAccount }) => {
|
|
324
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
325
|
+
return { transactionId: await injectedProvider.sendBitcoin(transaction.recipientAddress, Number(transaction.amount)) };
|
|
326
|
+
};
|
|
327
|
+
const signMessage = async ({ message, walletAccount, protocol }) => {
|
|
328
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
|
|
329
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
330
|
+
return { signature: await injectedProvider.signMessage(message, protocol) };
|
|
331
|
+
};
|
|
332
|
+
const signPsbt = async ({ request, walletAccount }) => {
|
|
333
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
334
|
+
const psbtFromBase64 = bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
335
|
+
const signedPsbtHex = await injectedProvider.signPsbt(psbtFromBase64.toHex(), createPsbtOptions({
|
|
336
|
+
psbt: psbtFromBase64,
|
|
337
|
+
request
|
|
338
|
+
}));
|
|
339
|
+
return { signedPsbt: bitcoinjs_lib.Psbt.fromHex(signedPsbtHex).toBase64() };
|
|
340
|
+
};
|
|
341
|
+
const signPsbts = async ({ requests, walletAccount }) => {
|
|
342
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
343
|
+
const psbtHexs = [];
|
|
344
|
+
const psbtOptions = [];
|
|
345
|
+
for (const request of requests) {
|
|
346
|
+
const psbtFromBase64 = bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
347
|
+
psbtHexs.push(psbtFromBase64.toHex());
|
|
348
|
+
psbtOptions.push(createPsbtOptions({
|
|
349
|
+
psbt: psbtFromBase64,
|
|
350
|
+
request
|
|
351
|
+
}));
|
|
352
|
+
}
|
|
353
|
+
return { signedPsbts: (await injectedProvider.signPsbts(psbtHexs, psbtOptions)).map((signedPsbtHex) => bitcoinjs_lib.Psbt.fromHex(signedPsbtHex).toBase64()) };
|
|
354
|
+
};
|
|
355
|
+
const { getEventEmitter, cleanupEventEmitter } = (0, _dynamic_labs_sdk_client_core.createWalletProviderEventEmitter)({
|
|
356
|
+
removeEventListeners: () => {
|
|
357
|
+
injectedProvider?.removeAllListeners();
|
|
358
|
+
},
|
|
359
|
+
setupEventListeners: ({ handleAccountsChanged, handleNetworkChanged }) => {
|
|
360
|
+
injectedProvider?.on("accountsChanged", (addresses) => {
|
|
361
|
+
handleAccountsChanged({ addresses });
|
|
362
|
+
});
|
|
363
|
+
injectedProvider?.on("networkChanged", (network) => {
|
|
364
|
+
handleNetworkChanged({ networkId: network });
|
|
365
|
+
});
|
|
366
|
+
},
|
|
367
|
+
supportedEvents: ["accountsChanged", "networkChanged"]
|
|
368
|
+
});
|
|
369
|
+
const terminate = async () => {
|
|
370
|
+
cleanupEventEmitter();
|
|
371
|
+
};
|
|
372
|
+
return {
|
|
373
|
+
chain,
|
|
374
|
+
connect,
|
|
375
|
+
disconnect,
|
|
376
|
+
get events() {
|
|
377
|
+
return getEventEmitter();
|
|
378
|
+
},
|
|
379
|
+
getActiveNetworkId,
|
|
380
|
+
getConnectedAddresses,
|
|
381
|
+
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(UNISAT_METADATA.displayName),
|
|
382
|
+
key,
|
|
383
|
+
metadata: UNISAT_METADATA,
|
|
384
|
+
sendBitcoin,
|
|
385
|
+
signMessage,
|
|
386
|
+
signPsbt,
|
|
387
|
+
signPsbts,
|
|
388
|
+
terminate,
|
|
389
|
+
walletProviderType
|
|
390
|
+
};
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
//#endregion
|
|
394
|
+
//#region src/injected/utils/bitget/createBitgetBitcoinWalletProvider/createBitgetBitcoinWalletProvider.ts
|
|
395
|
+
const BITGET_METADATA = {
|
|
396
|
+
displayName: "Bitget Wallet",
|
|
397
|
+
icon: `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL}#bitgetwallet`
|
|
398
|
+
};
|
|
399
|
+
const createBitgetBitcoinWalletProvider = ({ dynamicClient, injectedProvider }) => {
|
|
400
|
+
const unisatWalletProvider = createUnisatWalletProvider({
|
|
401
|
+
dynamicClient,
|
|
402
|
+
injectedProvider
|
|
403
|
+
});
|
|
404
|
+
return {
|
|
405
|
+
...unisatWalletProvider,
|
|
406
|
+
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(BITGET_METADATA.displayName),
|
|
407
|
+
key: (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
408
|
+
chain: unisatWalletProvider.chain,
|
|
409
|
+
displayName: BITGET_METADATA.displayName,
|
|
410
|
+
walletProviderType: unisatWalletProvider.walletProviderType
|
|
411
|
+
}),
|
|
412
|
+
metadata: BITGET_METADATA
|
|
413
|
+
};
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
//#endregion
|
|
417
|
+
//#region src/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.ts
|
|
418
|
+
const BITGET_BITCOIN_PROVIDER_LOCATOR = "bitkeep.unisat";
|
|
419
|
+
const getBitgetBitcoinInjectedProvider = () => {
|
|
420
|
+
return (0, _dynamic_labs_sdk_client_core.getInjectedProviderFromWindow)(BITGET_BITCOIN_PROVIDER_LOCATOR);
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
//#endregion
|
|
424
|
+
//#region src/utils/convertNetworkIdForPsbt/convertNetworkIdForPsbt.ts
|
|
425
|
+
const convertNetworkIdForPsbt = (networkId) => {
|
|
426
|
+
if (networkId === "1") return bitcoinjs_lib.networks.bitcoin;
|
|
427
|
+
if (networkId === "2" || networkId === "3") return bitcoinjs_lib.networks.testnet;
|
|
428
|
+
};
|
|
429
|
+
|
|
430
|
+
//#endregion
|
|
431
|
+
//#region src/injected/utils/leather/convertNetworkIdToLeatherNetworkName/convertNetworkIdToLeatherNetworkName.ts
|
|
432
|
+
const convertNetworkIdToLeatherNetworkName = (networkId) => {
|
|
433
|
+
if (networkId === "1") return "mainnet";
|
|
434
|
+
if (networkId === "2") return "testnet";
|
|
435
|
+
if (networkId === "3") return "signet";
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
//#endregion
|
|
439
|
+
//#region src/injected/utils/leather/createLeatherBitcoinWalletProvider/createLeatherBitcoinWalletProvider.ts
|
|
440
|
+
const LEATHER_METADATA = {
|
|
441
|
+
displayName: "Leather",
|
|
442
|
+
icon: `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL}#leather`
|
|
443
|
+
};
|
|
444
|
+
const createLeatherBitcoinWalletProvider = ({ dynamicClient, injectedProvider }) => {
|
|
445
|
+
const chain = "BTC";
|
|
446
|
+
const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
|
|
447
|
+
const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
448
|
+
chain,
|
|
449
|
+
displayName: LEATHER_METADATA.displayName,
|
|
450
|
+
walletProviderType
|
|
451
|
+
});
|
|
452
|
+
const getNetworkPayload = async () => {
|
|
453
|
+
const { networkId } = await getActiveNetworkId();
|
|
454
|
+
return {
|
|
455
|
+
networkId,
|
|
456
|
+
networkName: convertNetworkIdToLeatherNetworkName(networkId)
|
|
457
|
+
};
|
|
458
|
+
};
|
|
459
|
+
const connect = async () => {
|
|
460
|
+
const connectedAddresses = (await injectedProvider.request("getAddresses").catch(({ error }) => {
|
|
461
|
+
throw error;
|
|
462
|
+
})).result.addresses;
|
|
463
|
+
const addresses = [];
|
|
464
|
+
const ordinalsAddress = connectedAddresses?.find((address$1) => address$1.type === "p2tr");
|
|
465
|
+
if (ordinalsAddress) addresses.push({
|
|
466
|
+
address: ordinalsAddress.address,
|
|
467
|
+
publicKey: ordinalsAddress.publicKey,
|
|
468
|
+
type: "ordinals"
|
|
469
|
+
});
|
|
470
|
+
const paymentAddress = connectedAddresses?.find((address$1) => address$1.type === "p2wpkh");
|
|
471
|
+
if (paymentAddress) addresses.push({
|
|
472
|
+
address: paymentAddress.address,
|
|
473
|
+
publicKey: paymentAddress.publicKey,
|
|
474
|
+
type: "payment"
|
|
475
|
+
});
|
|
476
|
+
return { addresses };
|
|
477
|
+
};
|
|
478
|
+
const getActiveNetworkId = async () => (0, _dynamic_labs_sdk_client_core.getActiveNetworkIdFromLastKnownRegistry)({
|
|
479
|
+
client: dynamicClient,
|
|
480
|
+
walletProviderKey: key
|
|
481
|
+
});
|
|
482
|
+
const getConnectedAddresses = async () => {
|
|
483
|
+
return { addresses: (await connect()).addresses.map((address$1) => address$1.address) };
|
|
484
|
+
};
|
|
485
|
+
const sendBitcoin = async ({ transaction }) => {
|
|
486
|
+
const { networkName } = await getNetworkPayload();
|
|
487
|
+
return { transactionId: (await injectedProvider.request("sendTransfer", {
|
|
488
|
+
account: 0,
|
|
489
|
+
address: transaction.recipientAddress,
|
|
490
|
+
amount: transaction.amount.toString(),
|
|
491
|
+
network: networkName ?? "mainnet"
|
|
492
|
+
}).catch(({ error }) => {
|
|
493
|
+
throw error;
|
|
494
|
+
})).result.txid };
|
|
495
|
+
};
|
|
496
|
+
const signMessage = async ({ message, walletAccount, addressType }) => {
|
|
497
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
|
|
498
|
+
let paymentType = "p2tr";
|
|
499
|
+
if (addressType === "payment") paymentType = "p2wpkh";
|
|
500
|
+
const { networkName } = await getNetworkPayload();
|
|
501
|
+
return { signature: (await injectedProvider.request("signMessage", {
|
|
502
|
+
message,
|
|
503
|
+
network: networkName,
|
|
504
|
+
paymentType
|
|
505
|
+
}).catch(({ error }) => {
|
|
506
|
+
throw error;
|
|
507
|
+
})).result.signature };
|
|
508
|
+
};
|
|
509
|
+
const signPsbt = async ({ request }) => {
|
|
510
|
+
const { networkId, networkName } = await getNetworkPayload();
|
|
511
|
+
const psbtNetwork = convertNetworkIdForPsbt(networkId);
|
|
512
|
+
const psbtFromBase64 = bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64, { network: psbtNetwork });
|
|
513
|
+
const signAtIndex = request.signature?.flatMap((sig) => sig.signingIndexes).filter(Number.isInteger);
|
|
514
|
+
const signedPsbtHex = (await injectedProvider.request("signPsbt", {
|
|
515
|
+
account: 0,
|
|
516
|
+
allowedSighash: request.allowedSighash,
|
|
517
|
+
broadcast: false,
|
|
518
|
+
hex: psbtFromBase64.toHex(),
|
|
519
|
+
network: networkName ?? "mainnet",
|
|
520
|
+
signAtIndex
|
|
521
|
+
}).catch(({ error }) => {
|
|
522
|
+
throw error;
|
|
523
|
+
})).result.hex;
|
|
524
|
+
return { signedPsbt: bitcoinjs_lib.Psbt.fromHex(signedPsbtHex, { network: psbtNetwork }).toBase64() };
|
|
525
|
+
};
|
|
526
|
+
const signPsbts = async ({ requests, walletAccount }) => {
|
|
527
|
+
const signedPsbts = [];
|
|
528
|
+
for (const request of requests) {
|
|
529
|
+
const signedPsbtResponse = await signPsbt({
|
|
530
|
+
request,
|
|
531
|
+
walletAccount
|
|
532
|
+
});
|
|
533
|
+
if (signedPsbtResponse) signedPsbts.push(signedPsbtResponse.signedPsbt);
|
|
534
|
+
}
|
|
535
|
+
return { signedPsbts };
|
|
536
|
+
};
|
|
537
|
+
return {
|
|
538
|
+
chain,
|
|
539
|
+
connect,
|
|
540
|
+
getActiveNetworkId,
|
|
541
|
+
getConnectedAddresses,
|
|
542
|
+
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(LEATHER_METADATA.displayName),
|
|
543
|
+
key,
|
|
544
|
+
metadata: LEATHER_METADATA,
|
|
545
|
+
sendBitcoin,
|
|
546
|
+
signMessage,
|
|
547
|
+
signPsbt,
|
|
548
|
+
signPsbts,
|
|
549
|
+
walletProviderType
|
|
550
|
+
};
|
|
551
|
+
};
|
|
552
|
+
|
|
553
|
+
//#endregion
|
|
554
|
+
//#region src/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.ts
|
|
555
|
+
const LEATHER_BITCOIN_PROVIDER_LOCATOR = "LeatherProvider";
|
|
556
|
+
const getLeatherBitcoinInjectedProvider = () => {
|
|
557
|
+
return (0, _dynamic_labs_sdk_client_core.getInjectedProviderFromWindow)(LEATHER_BITCOIN_PROVIDER_LOCATOR);
|
|
558
|
+
};
|
|
559
|
+
|
|
560
|
+
//#endregion
|
|
561
|
+
//#region src/utils/convertNetworkIdToSatsConnectNetworkType/convertNetworkIdToSatsConnectNetworkType.ts
|
|
562
|
+
const convertNetworkIdToSatsConnectNetworkType = (networkId) => {
|
|
563
|
+
if (networkId === "2") return sats_connect.BitcoinNetworkType.Testnet;
|
|
564
|
+
if (networkId === "3") return sats_connect.BitcoinNetworkType.Signet;
|
|
565
|
+
return sats_connect.BitcoinNetworkType.Mainnet;
|
|
566
|
+
};
|
|
567
|
+
|
|
568
|
+
//#endregion
|
|
569
|
+
//#region src/utils/getPsbtInputsToSignForSatsConnect/getPsbtInputsToSignForSatsConnect.ts
|
|
570
|
+
/**
|
|
571
|
+
* This method will create the psbt sign options for SatsConnect for the given request
|
|
572
|
+
* It will validate the psbt against the signature data provided in the request
|
|
573
|
+
* It will return the inputs to sign if the signature data is provided
|
|
574
|
+
*/
|
|
575
|
+
const getPsbtInputsToSignForSatsConnect = ({ psbt, request, isLegacySatsConnect }) => {
|
|
576
|
+
if (!request.signature) return [];
|
|
577
|
+
validatePsbt({
|
|
578
|
+
allowedSigHashTypes: request.allowedSighash,
|
|
579
|
+
psbt,
|
|
580
|
+
signatureData: request.signature
|
|
581
|
+
});
|
|
582
|
+
const inputsToSign = [];
|
|
583
|
+
for (const signature of request.signature) if (signature.signingIndexes?.length) for (const index of signature.signingIndexes) inputsToSign.push({
|
|
584
|
+
address: signature.address,
|
|
585
|
+
sigHash: isLegacySatsConnect ? getSigHashType({ input: psbt.data.inputs[index] }) : request.allowedSighash[0],
|
|
586
|
+
signingIndexes: [index]
|
|
587
|
+
});
|
|
588
|
+
return inputsToSign;
|
|
589
|
+
};
|
|
590
|
+
|
|
591
|
+
//#endregion
|
|
592
|
+
//#region src/utils/getSatsConnectSigningProtocol/getSatsConnectSigningProtocol.ts
|
|
593
|
+
const getSatsConnectSigningProtocol = (protocol) => {
|
|
594
|
+
if (!protocol) return;
|
|
595
|
+
return protocol === "ecdsa" ? sats_connect.MessageSigningProtocols.ECDSA : sats_connect.MessageSigningProtocols.BIP322;
|
|
596
|
+
};
|
|
597
|
+
|
|
598
|
+
//#endregion
|
|
599
|
+
//#region src/utils/parseBitcoinConnectionResult/parseBitcoinConnectionResult.ts
|
|
600
|
+
const parseBitcoinConnectionResult = ({ connectedAddresses }) => {
|
|
601
|
+
const addresses = connectedAddresses.filter((address$1) => address$1.purpose === "ordinals" || address$1.purpose === "payment").map((account) => ({
|
|
602
|
+
address: account.address,
|
|
603
|
+
publicKey: account.publicKey,
|
|
604
|
+
type: account.purpose === "payment" ? "payment" : "ordinals"
|
|
605
|
+
}));
|
|
606
|
+
addresses.sort((a) => a.type === "ordinals" ? -1 : 1);
|
|
607
|
+
return { addresses };
|
|
608
|
+
};
|
|
609
|
+
|
|
610
|
+
//#endregion
|
|
611
|
+
//#region src/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/createMagicEdenBitcoinWalletProvider.ts
|
|
612
|
+
const MAGIC_EDEN_METADATA = {
|
|
613
|
+
displayName: "Magic Eden",
|
|
614
|
+
icon: `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL}#magiceden`
|
|
615
|
+
};
|
|
616
|
+
const createMagicEdenBitcoinWalletProvider = ({ dynamicClient, satsConnectProvider }) => {
|
|
617
|
+
const chain = "BTC";
|
|
618
|
+
const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
|
|
619
|
+
const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
620
|
+
chain,
|
|
621
|
+
displayName: MAGIC_EDEN_METADATA.displayName,
|
|
622
|
+
walletProviderType
|
|
623
|
+
});
|
|
624
|
+
const getNetworkPayload = async () => {
|
|
625
|
+
return { network: { type: convertNetworkIdToSatsConnectNetworkType((await getActiveNetworkId()).networkId) } };
|
|
626
|
+
};
|
|
627
|
+
const connect = async () => {
|
|
628
|
+
const { network } = await getNetworkPayload();
|
|
629
|
+
return new Promise((resolve, reject) => {
|
|
630
|
+
(0, sats_connect.getAddress)({
|
|
631
|
+
getProvider: async () => satsConnectProvider,
|
|
632
|
+
onCancel: () => {
|
|
633
|
+
reject(new _dynamic_labs_sdk_client.UserRejectedError({ action: "connect" }));
|
|
634
|
+
},
|
|
635
|
+
onFinish: async (response) => {
|
|
636
|
+
const { addresses: connectedAddresses } = response;
|
|
637
|
+
const { addresses } = parseBitcoinConnectionResult({ connectedAddresses });
|
|
638
|
+
resolve({ addresses });
|
|
639
|
+
},
|
|
640
|
+
payload: {
|
|
641
|
+
message: "Address for receiving Ordinals and payments",
|
|
642
|
+
network,
|
|
643
|
+
purposes: [sats_connect.AddressPurpose.Ordinals, sats_connect.AddressPurpose.Payment]
|
|
644
|
+
}
|
|
645
|
+
});
|
|
646
|
+
});
|
|
647
|
+
};
|
|
648
|
+
const getActiveNetworkId = async () => (0, _dynamic_labs_sdk_client_core.getActiveNetworkIdFromLastKnownRegistry)({
|
|
649
|
+
client: dynamicClient,
|
|
650
|
+
walletProviderKey: key
|
|
651
|
+
});
|
|
652
|
+
const getConnectedAddresses = async () => {
|
|
653
|
+
const { addresses } = await connect();
|
|
654
|
+
return { addresses: addresses.map((address$1) => address$1.address) };
|
|
655
|
+
};
|
|
656
|
+
const sendBitcoin = async ({ transaction, walletAccount }) => {
|
|
657
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
658
|
+
const senderAddress = (0, _dynamic_labs_sdk_client.getWalletAccountAddressByType)({
|
|
659
|
+
type: "payment",
|
|
660
|
+
walletAccount
|
|
661
|
+
}) ?? walletAccount.address;
|
|
662
|
+
const { network } = await getNetworkPayload();
|
|
663
|
+
return new Promise((resolve, reject) => {
|
|
664
|
+
(0, sats_connect.sendBtcTransaction)({
|
|
665
|
+
getProvider: async () => satsConnectProvider,
|
|
666
|
+
onCancel: () => {
|
|
667
|
+
reject(new _dynamic_labs_sdk_client.UserRejectedError({ action: "sendBitcoin" }));
|
|
668
|
+
},
|
|
669
|
+
onFinish: (response) => {
|
|
670
|
+
resolve({ transactionId: response });
|
|
671
|
+
},
|
|
672
|
+
payload: {
|
|
673
|
+
network,
|
|
674
|
+
recipients: [{
|
|
675
|
+
address: transaction.recipientAddress,
|
|
676
|
+
amountSats: BigInt(transaction.amount)
|
|
677
|
+
}],
|
|
678
|
+
senderAddress
|
|
679
|
+
}
|
|
680
|
+
});
|
|
681
|
+
});
|
|
682
|
+
};
|
|
683
|
+
const signMessage = async ({ message, walletAccount, protocol, addressType }) => {
|
|
684
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
|
|
685
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
686
|
+
const { network } = await getNetworkPayload();
|
|
687
|
+
let addressToSignWith = walletAccount.address;
|
|
688
|
+
if (addressType) addressToSignWith = (0, _dynamic_labs_sdk_client.getWalletAccountAddressByType)({
|
|
689
|
+
type: addressType,
|
|
690
|
+
walletAccount
|
|
691
|
+
}) ?? addressToSignWith;
|
|
692
|
+
return new Promise((resolve, reject) => {
|
|
693
|
+
(0, sats_connect.signMessage)({
|
|
694
|
+
getProvider: async () => satsConnectProvider,
|
|
695
|
+
onCancel: () => {
|
|
696
|
+
reject(new _dynamic_labs_sdk_client.UserRejectedError({ action: "signMessage" }));
|
|
697
|
+
},
|
|
698
|
+
onFinish: async (response) => {
|
|
699
|
+
resolve({ signature: response });
|
|
700
|
+
},
|
|
701
|
+
payload: {
|
|
702
|
+
address: addressToSignWith,
|
|
703
|
+
message,
|
|
704
|
+
network,
|
|
705
|
+
protocol: getSatsConnectSigningProtocol(protocol)
|
|
706
|
+
}
|
|
707
|
+
});
|
|
708
|
+
});
|
|
709
|
+
};
|
|
710
|
+
const signPsbt = async ({ request, walletAccount }) => {
|
|
711
|
+
if (!request.allowedSighash.length) throw new InvalidPsbtError("allowedSighash cannot be an empty array");
|
|
712
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
713
|
+
const network = convertNetworkIdForPsbt((await getActiveNetworkId()).networkId);
|
|
714
|
+
const { network: networkPayload } = await getNetworkPayload();
|
|
715
|
+
const inputsToSign = getPsbtInputsToSignForSatsConnect({
|
|
716
|
+
isLegacySatsConnect: true,
|
|
717
|
+
psbt: bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64, { network }),
|
|
718
|
+
request
|
|
719
|
+
});
|
|
720
|
+
return new Promise((resolve, reject) => {
|
|
721
|
+
(0, sats_connect.signTransaction)({
|
|
722
|
+
getProvider: async () => satsConnectProvider,
|
|
723
|
+
onCancel: () => {
|
|
724
|
+
reject(new _dynamic_labs_sdk_client.UserRejectedError({ action: "signPsbt" }));
|
|
725
|
+
},
|
|
726
|
+
onFinish: (response) => {
|
|
727
|
+
resolve({ signedPsbt: response.psbtBase64 });
|
|
728
|
+
},
|
|
729
|
+
payload: {
|
|
730
|
+
broadcast: false,
|
|
731
|
+
inputsToSign,
|
|
732
|
+
message: "Sign Pbst",
|
|
733
|
+
network: networkPayload,
|
|
734
|
+
psbtBase64: request.unsignedPsbtBase64
|
|
735
|
+
}
|
|
736
|
+
});
|
|
737
|
+
});
|
|
738
|
+
};
|
|
739
|
+
const signPsbts = async ({ requests, walletAccount }) => {
|
|
740
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
741
|
+
const network = convertNetworkIdForPsbt((await getActiveNetworkId()).networkId);
|
|
742
|
+
const { network: networkPayload } = await getNetworkPayload();
|
|
743
|
+
const psbtsToSign = [];
|
|
744
|
+
for (const request$1 of requests) {
|
|
745
|
+
const inputsToSign = getPsbtInputsToSignForSatsConnect({
|
|
746
|
+
isLegacySatsConnect: true,
|
|
747
|
+
psbt: bitcoinjs_lib.Psbt.fromBase64(request$1.unsignedPsbtBase64, { network }),
|
|
748
|
+
request: request$1
|
|
749
|
+
});
|
|
750
|
+
psbtsToSign.push({
|
|
751
|
+
inputsToSign,
|
|
752
|
+
psbtBase64: request$1.unsignedPsbtBase64
|
|
753
|
+
});
|
|
754
|
+
}
|
|
755
|
+
const request = (0, jsontokens.createUnsecuredToken)({
|
|
756
|
+
message: "Sign Pbsts",
|
|
757
|
+
network: networkPayload,
|
|
758
|
+
psbts: psbtsToSign
|
|
759
|
+
});
|
|
760
|
+
return { signedPsbts: (await satsConnectProvider.signMultipleTransactions(request)).map((response) => response.psbtBase64) };
|
|
761
|
+
};
|
|
762
|
+
const { getEventEmitter, cleanupEventEmitter } = (0, _dynamic_labs_sdk_client_core.createWalletProviderEventEmitter)({
|
|
763
|
+
removeEventListeners: ({ setupReturnValue }) => {
|
|
764
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(setupReturnValue, "Setup return value not defined");
|
|
765
|
+
setupReturnValue.removeAccountChangeListener();
|
|
766
|
+
},
|
|
767
|
+
setupEventListeners: ({ handleAccountsChanged }) => {
|
|
768
|
+
return { removeAccountChangeListener: (0, sats_connect.addListener)("accountsChanged", (accounts) => {
|
|
769
|
+
if (!accounts) return;
|
|
770
|
+
handleAccountsChanged({ addresses: accounts.map((account) => account.address) });
|
|
771
|
+
}) };
|
|
772
|
+
},
|
|
773
|
+
supportedEvents: ["accountsChanged"]
|
|
774
|
+
});
|
|
775
|
+
const terminate = async () => {
|
|
776
|
+
cleanupEventEmitter();
|
|
777
|
+
};
|
|
778
|
+
return {
|
|
779
|
+
chain,
|
|
780
|
+
connect,
|
|
781
|
+
get events() {
|
|
782
|
+
return getEventEmitter();
|
|
783
|
+
},
|
|
784
|
+
getActiveNetworkId,
|
|
785
|
+
getConnectedAddresses,
|
|
786
|
+
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(MAGIC_EDEN_METADATA.displayName),
|
|
787
|
+
key,
|
|
788
|
+
metadata: MAGIC_EDEN_METADATA,
|
|
789
|
+
sendBitcoin,
|
|
790
|
+
signMessage,
|
|
791
|
+
signPsbt,
|
|
792
|
+
signPsbts,
|
|
793
|
+
terminate,
|
|
794
|
+
walletProviderType
|
|
795
|
+
};
|
|
796
|
+
};
|
|
797
|
+
|
|
798
|
+
//#endregion
|
|
799
|
+
//#region src/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.ts
|
|
800
|
+
const MAGIC_EDEN_BITCOIN_PROVIDER_LOCATOR = "magicEden.bitcoin";
|
|
801
|
+
const getMagicEdenInjectedProvider = () => {
|
|
802
|
+
return (0, _dynamic_labs_sdk_client_core.getInjectedProviderFromWindow)(MAGIC_EDEN_BITCOIN_PROVIDER_LOCATOR);
|
|
803
|
+
};
|
|
804
|
+
|
|
805
|
+
//#endregion
|
|
806
|
+
//#region src/injected/utils/okx/createOkxBitcoinWalletProvider/createOkxBitcoinWalletProvider.ts
|
|
807
|
+
const OKX_METADATA = {
|
|
808
|
+
displayName: "OKX Wallet",
|
|
809
|
+
icon: `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL}#okx`
|
|
810
|
+
};
|
|
811
|
+
const createOkxBitcoinWalletProvider = ({ dynamicClient, injectedProvider }) => {
|
|
812
|
+
const chain = "BTC";
|
|
813
|
+
const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
|
|
814
|
+
const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
815
|
+
chain,
|
|
816
|
+
displayName: OKX_METADATA.displayName,
|
|
817
|
+
walletProviderType
|
|
818
|
+
});
|
|
819
|
+
const connect = async () => {
|
|
820
|
+
const { address: address$1, publicKey } = await injectedProvider.connect();
|
|
821
|
+
return { addresses: [{
|
|
822
|
+
address: address$1,
|
|
823
|
+
publicKey
|
|
824
|
+
}] };
|
|
825
|
+
};
|
|
826
|
+
const getActiveNetworkId = async () => {
|
|
827
|
+
return getNetworkIdFromNetworkName({ networkName: await injectedProvider.getNetwork() }, dynamicClient);
|
|
828
|
+
};
|
|
829
|
+
const getConnectedAddresses = async () => {
|
|
830
|
+
return { addresses: await injectedProvider.getAccounts() };
|
|
831
|
+
};
|
|
832
|
+
const sendBitcoin = async ({ transaction, walletAccount }) => {
|
|
833
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
834
|
+
return { transactionId: await injectedProvider.sendBitcoin(transaction.recipientAddress, transaction.amount.toString()) };
|
|
835
|
+
};
|
|
836
|
+
const signMessage = async ({ message, walletAccount, protocol }) => {
|
|
837
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
|
|
838
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
839
|
+
return { signature: await injectedProvider.signMessage(message, protocol) };
|
|
840
|
+
};
|
|
841
|
+
const signPsbt = async ({ request, walletAccount }) => {
|
|
842
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
843
|
+
const psbtFromBase64 = bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
844
|
+
const signedPsbtHex = await injectedProvider.signPsbt(psbtFromBase64.toHex(), createPsbtOptions({
|
|
845
|
+
psbt: psbtFromBase64,
|
|
846
|
+
request
|
|
847
|
+
}));
|
|
848
|
+
return { signedPsbt: bitcoinjs_lib.Psbt.fromHex(signedPsbtHex).toBase64() };
|
|
849
|
+
};
|
|
850
|
+
const signPsbts = async ({ requests, walletAccount }) => {
|
|
851
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
852
|
+
const psbtHexs = [];
|
|
853
|
+
const psbtOptions = [];
|
|
854
|
+
for (const request of requests) {
|
|
855
|
+
const psbtFromBase64 = bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
856
|
+
psbtHexs.push(psbtFromBase64.toHex());
|
|
857
|
+
psbtOptions.push(createPsbtOptions({
|
|
858
|
+
psbt: psbtFromBase64,
|
|
859
|
+
request
|
|
860
|
+
}));
|
|
861
|
+
}
|
|
862
|
+
return { signedPsbts: (await injectedProvider.signPsbts(psbtHexs, psbtOptions)).map((signedPsbtHex) => bitcoinjs_lib.Psbt.fromHex(signedPsbtHex).toBase64()) };
|
|
863
|
+
};
|
|
864
|
+
const { getEventEmitter, cleanupEventEmitter } = (0, _dynamic_labs_sdk_client_core.createWalletProviderEventEmitter)({
|
|
865
|
+
removeEventListeners: () => {
|
|
866
|
+
injectedProvider?.removeAllListeners();
|
|
867
|
+
},
|
|
868
|
+
setupEventListeners: ({ handleAccountsChanged }) => {
|
|
869
|
+
injectedProvider?.on("accountsChanged", (addresses) => {
|
|
870
|
+
handleAccountsChanged({ addresses });
|
|
871
|
+
});
|
|
872
|
+
},
|
|
873
|
+
supportedEvents: ["accountsChanged"]
|
|
874
|
+
});
|
|
875
|
+
const terminate = async () => {
|
|
876
|
+
cleanupEventEmitter();
|
|
877
|
+
};
|
|
878
|
+
return {
|
|
879
|
+
chain,
|
|
880
|
+
connect,
|
|
881
|
+
get events() {
|
|
882
|
+
return getEventEmitter();
|
|
883
|
+
},
|
|
884
|
+
getActiveNetworkId,
|
|
885
|
+
getConnectedAddresses,
|
|
886
|
+
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(OKX_METADATA.displayName),
|
|
887
|
+
key,
|
|
888
|
+
metadata: OKX_METADATA,
|
|
889
|
+
sendBitcoin,
|
|
890
|
+
signMessage,
|
|
891
|
+
signPsbt,
|
|
892
|
+
signPsbts,
|
|
893
|
+
terminate,
|
|
894
|
+
walletProviderType
|
|
895
|
+
};
|
|
896
|
+
};
|
|
897
|
+
|
|
898
|
+
//#endregion
|
|
899
|
+
//#region src/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.ts
|
|
900
|
+
const OKX_BITCOIN_PROVIDER_LOCATOR = "okxwallet.bitcoin";
|
|
901
|
+
const getOkxBitcoinInjectedProvider = () => {
|
|
902
|
+
return (0, _dynamic_labs_sdk_client_core.getInjectedProviderFromWindow)(OKX_BITCOIN_PROVIDER_LOCATOR);
|
|
903
|
+
};
|
|
904
|
+
|
|
905
|
+
//#endregion
|
|
906
|
+
//#region src/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/createOneKeyBitcoinWalletProvider.ts
|
|
907
|
+
const ONEKEY_METADATA = {
|
|
908
|
+
displayName: "OneKey",
|
|
909
|
+
icon: `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL}#onekey`
|
|
910
|
+
};
|
|
911
|
+
const createOneKeyBitcoinWalletProvider = ({ dynamicClient, injectedProvider }) => {
|
|
912
|
+
const chain = "BTC";
|
|
913
|
+
const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
|
|
914
|
+
const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
915
|
+
chain,
|
|
916
|
+
displayName: ONEKEY_METADATA.displayName,
|
|
917
|
+
walletProviderType
|
|
918
|
+
});
|
|
919
|
+
const connect = async () => {
|
|
920
|
+
return { addresses: [{
|
|
921
|
+
address: (await injectedProvider.requestAccounts())[0],
|
|
922
|
+
publicKey: await injectedProvider.getPublicKey()
|
|
923
|
+
}] };
|
|
924
|
+
};
|
|
925
|
+
const getActiveNetworkId = async () => {
|
|
926
|
+
return getNetworkIdFromNetworkName({ networkName: await injectedProvider.getNetwork() }, dynamicClient);
|
|
927
|
+
};
|
|
928
|
+
const getConnectedAddresses = async () => {
|
|
929
|
+
return { addresses: await injectedProvider.getAccounts() };
|
|
930
|
+
};
|
|
931
|
+
const sendBitcoin = async ({ transaction, walletAccount }) => {
|
|
932
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
933
|
+
return { transactionId: await injectedProvider.sendBitcoin(transaction.recipientAddress, transaction.amount.toString()) };
|
|
934
|
+
};
|
|
935
|
+
const signMessage = async ({ message, walletAccount, protocol }) => {
|
|
936
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
|
|
937
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
938
|
+
return { signature: await injectedProvider.signMessage(message, protocol) };
|
|
939
|
+
};
|
|
940
|
+
const signPsbt = async ({ request, walletAccount }) => {
|
|
941
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
942
|
+
const psbtFromBase64 = bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
943
|
+
const signedPsbtHex = await injectedProvider.signPsbt(psbtFromBase64.toHex(), { autoFinalized: false });
|
|
944
|
+
return { signedPsbt: bitcoinjs_lib.Psbt.fromHex(signedPsbtHex).toBase64() };
|
|
945
|
+
};
|
|
946
|
+
const signPsbts = async ({ requests, walletAccount }) => {
|
|
947
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
948
|
+
const psbtHexs = [];
|
|
949
|
+
for (const request of requests) {
|
|
950
|
+
const psbtFromBase64 = bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
951
|
+
psbtHexs.push(psbtFromBase64.toHex());
|
|
952
|
+
}
|
|
953
|
+
return { signedPsbts: (await injectedProvider.signPsbts(psbtHexs, { autoFinalized: false })).map((signedPsbtHex) => bitcoinjs_lib.Psbt.fromHex(signedPsbtHex).toBase64()) };
|
|
954
|
+
};
|
|
955
|
+
const { getEventEmitter, cleanupEventEmitter } = (0, _dynamic_labs_sdk_client_core.createWalletProviderEventEmitter)({
|
|
956
|
+
removeEventListeners: () => {
|
|
957
|
+
injectedProvider?.removeAllListeners();
|
|
958
|
+
},
|
|
959
|
+
setupEventListeners: ({ handleAccountsChanged, handleNetworkChanged }) => {
|
|
960
|
+
injectedProvider?.on("accountsChanged", (addresses) => {
|
|
961
|
+
handleAccountsChanged({ addresses });
|
|
962
|
+
});
|
|
963
|
+
injectedProvider?.on("networkChanged", (network) => {
|
|
964
|
+
handleNetworkChanged({ networkId: network });
|
|
965
|
+
});
|
|
966
|
+
},
|
|
967
|
+
supportedEvents: ["accountsChanged", "networkChanged"]
|
|
968
|
+
});
|
|
969
|
+
const terminate = async () => {
|
|
970
|
+
cleanupEventEmitter();
|
|
971
|
+
};
|
|
972
|
+
return {
|
|
973
|
+
chain,
|
|
974
|
+
connect,
|
|
975
|
+
get events() {
|
|
976
|
+
return getEventEmitter();
|
|
977
|
+
},
|
|
978
|
+
getActiveNetworkId,
|
|
979
|
+
getConnectedAddresses,
|
|
980
|
+
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(ONEKEY_METADATA.displayName),
|
|
981
|
+
key,
|
|
982
|
+
metadata: ONEKEY_METADATA,
|
|
983
|
+
sendBitcoin,
|
|
984
|
+
signMessage,
|
|
985
|
+
signPsbt,
|
|
986
|
+
signPsbts,
|
|
987
|
+
terminate,
|
|
988
|
+
walletProviderType
|
|
989
|
+
};
|
|
990
|
+
};
|
|
991
|
+
|
|
992
|
+
//#endregion
|
|
993
|
+
//#region src/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.ts
|
|
994
|
+
const ONEKEY_BITCOIN_PROVIDER_LOCATOR = "$onekey.btc";
|
|
995
|
+
const getOneKeyBitcoinInjectedProvider = () => {
|
|
996
|
+
return (0, _dynamic_labs_sdk_client_core.getInjectedProviderFromWindow)(ONEKEY_BITCOIN_PROVIDER_LOCATOR);
|
|
997
|
+
};
|
|
998
|
+
|
|
999
|
+
//#endregion
|
|
1000
|
+
//#region src/injected/utils/oyl/createOylBitcoinWalletProvider/createOylBitcoinWalletProvider.ts
|
|
1001
|
+
const OYL_METADATA = {
|
|
1002
|
+
displayName: "Oyl Wallet",
|
|
1003
|
+
icon: `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL}#oyl`
|
|
1004
|
+
};
|
|
1005
|
+
const createOylBitcoinWalletProvider = ({ dynamicClient, injectedProvider }) => {
|
|
1006
|
+
const chain = "BTC";
|
|
1007
|
+
const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
|
|
1008
|
+
const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
1009
|
+
chain,
|
|
1010
|
+
displayName: OYL_METADATA.displayName,
|
|
1011
|
+
walletProviderType
|
|
1012
|
+
});
|
|
1013
|
+
const connect = async () => {
|
|
1014
|
+
const connectedAddresses = await injectedProvider.getAddresses();
|
|
1015
|
+
const addresses = [];
|
|
1016
|
+
const ordinalsAddress = connectedAddresses.taproot;
|
|
1017
|
+
if (ordinalsAddress) addresses.push({
|
|
1018
|
+
address: ordinalsAddress.address,
|
|
1019
|
+
publicKey: ordinalsAddress.publicKey,
|
|
1020
|
+
type: "ordinals"
|
|
1021
|
+
});
|
|
1022
|
+
const paymentAddress = connectedAddresses.nativeSegwit;
|
|
1023
|
+
if (paymentAddress) addresses.push({
|
|
1024
|
+
address: paymentAddress.address,
|
|
1025
|
+
publicKey: paymentAddress.publicKey,
|
|
1026
|
+
type: "payment"
|
|
1027
|
+
});
|
|
1028
|
+
return { addresses };
|
|
1029
|
+
};
|
|
1030
|
+
const getActiveNetworkId = async () => {
|
|
1031
|
+
return getNetworkIdFromNetworkName({ networkName: await injectedProvider.getNetwork() }, dynamicClient);
|
|
1032
|
+
};
|
|
1033
|
+
const getConnectedAddresses = async () => {
|
|
1034
|
+
if (!await injectedProvider.isConnected()) return { addresses: [] };
|
|
1035
|
+
const { addresses } = await connect();
|
|
1036
|
+
return { addresses: addresses.map((address$1) => address$1.address) };
|
|
1037
|
+
};
|
|
1038
|
+
const signMessage = async ({ message, walletAccount, addressType, protocol }) => {
|
|
1039
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
|
|
1040
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
1041
|
+
let addressToSignWith = walletAccount.address;
|
|
1042
|
+
if (addressType) addressToSignWith = (0, _dynamic_labs_sdk_client.getWalletAccountAddressByType)({
|
|
1043
|
+
type: addressType,
|
|
1044
|
+
walletAccount
|
|
1045
|
+
}) ?? addressToSignWith;
|
|
1046
|
+
return { signature: (await injectedProvider.signMessage({
|
|
1047
|
+
address: addressToSignWith,
|
|
1048
|
+
message,
|
|
1049
|
+
protocol: protocol === "bip322-simple" ? "bip322" : protocol
|
|
1050
|
+
})).signature };
|
|
1051
|
+
};
|
|
1052
|
+
const signPsbt = async ({ request, walletAccount }) => {
|
|
1053
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
1054
|
+
const psbtFromBase64 = bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
1055
|
+
const { psbt: signedPsbtHex } = await injectedProvider.signPsbt({
|
|
1056
|
+
broadcast: false,
|
|
1057
|
+
finalize: false,
|
|
1058
|
+
psbt: psbtFromBase64.toHex()
|
|
1059
|
+
});
|
|
1060
|
+
return { signedPsbt: bitcoinjs_lib.Psbt.fromHex(signedPsbtHex).toBase64() };
|
|
1061
|
+
};
|
|
1062
|
+
const signPsbts = async ({ requests, walletAccount }) => {
|
|
1063
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
1064
|
+
const signedPsbts = [];
|
|
1065
|
+
for (const request of requests) {
|
|
1066
|
+
const signedPsbtResponse = await signPsbt({
|
|
1067
|
+
request,
|
|
1068
|
+
walletAccount
|
|
1069
|
+
});
|
|
1070
|
+
if (signedPsbtResponse) signedPsbts.push(signedPsbtResponse.signedPsbt);
|
|
1071
|
+
}
|
|
1072
|
+
return { signedPsbts };
|
|
1073
|
+
};
|
|
1074
|
+
return {
|
|
1075
|
+
chain,
|
|
1076
|
+
connect,
|
|
1077
|
+
getActiveNetworkId,
|
|
1078
|
+
getConnectedAddresses,
|
|
1079
|
+
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(OYL_METADATA.displayName),
|
|
1080
|
+
key,
|
|
1081
|
+
metadata: OYL_METADATA,
|
|
1082
|
+
signMessage,
|
|
1083
|
+
signPsbt,
|
|
1084
|
+
signPsbts,
|
|
1085
|
+
walletProviderType
|
|
1086
|
+
};
|
|
1087
|
+
};
|
|
1088
|
+
|
|
1089
|
+
//#endregion
|
|
1090
|
+
//#region src/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.ts
|
|
1091
|
+
const OYL_BITCOIN_PROVIDER_LOCATOR = "oyl";
|
|
1092
|
+
const getOylBitcoinInjectedProvider = () => {
|
|
1093
|
+
return (0, _dynamic_labs_sdk_client_core.getInjectedProviderFromWindow)(OYL_BITCOIN_PROVIDER_LOCATOR);
|
|
1094
|
+
};
|
|
1095
|
+
|
|
1096
|
+
//#endregion
|
|
1097
|
+
//#region src/injected/utils/phantom/createPhantomBitcoinWalletProvider/createPhantomBitcoinWalletProvider.ts
|
|
1098
|
+
const PHANTOM_METADATA = {
|
|
1099
|
+
displayName: "Phantom",
|
|
1100
|
+
icon: `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL}#phantom`
|
|
1101
|
+
};
|
|
1102
|
+
const createPhantomBitcoinWalletProvider = ({ dynamicClient, injectedProvider }) => {
|
|
1103
|
+
const chain = "BTC";
|
|
1104
|
+
const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
|
|
1105
|
+
const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
1106
|
+
chain,
|
|
1107
|
+
displayName: PHANTOM_METADATA.displayName,
|
|
1108
|
+
walletProviderType
|
|
1109
|
+
});
|
|
1110
|
+
const connect = async () => {
|
|
1111
|
+
const addresses = (await injectedProvider.requestAccounts()).map((account) => ({
|
|
1112
|
+
address: account.address,
|
|
1113
|
+
publicKey: account.publicKey,
|
|
1114
|
+
type: account.purpose === "payment" ? "payment" : "ordinals"
|
|
1115
|
+
}));
|
|
1116
|
+
addresses.sort((a) => a.type === "ordinals" ? -1 : 1);
|
|
1117
|
+
return { addresses };
|
|
1118
|
+
};
|
|
1119
|
+
const getActiveNetworkId = async () => (0, _dynamic_labs_sdk_client_core.getActiveNetworkIdFromLastKnownRegistry)({
|
|
1120
|
+
client: dynamicClient,
|
|
1121
|
+
walletProviderKey: key
|
|
1122
|
+
});
|
|
1123
|
+
const getConnectedAddresses = async () => {
|
|
1124
|
+
const { addresses } = await connect();
|
|
1125
|
+
return { addresses: addresses.map((address$1) => address$1.address) };
|
|
1126
|
+
};
|
|
1127
|
+
const signMessage = async ({ message, walletAccount, addressType }) => {
|
|
1128
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
|
|
1129
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
1130
|
+
let addressToSignWith = walletAccount.address;
|
|
1131
|
+
if (addressType) addressToSignWith = (0, _dynamic_labs_sdk_client.getWalletAccountAddressByType)({
|
|
1132
|
+
type: addressType,
|
|
1133
|
+
walletAccount
|
|
1134
|
+
}) ?? addressToSignWith;
|
|
1135
|
+
const result = await injectedProvider.signMessage(addressToSignWith, new TextEncoder().encode(message));
|
|
1136
|
+
return { signature: (0, _dynamic_labs_sdk_client_core.getBuffer)().from(result.signature).toString("base64") };
|
|
1137
|
+
};
|
|
1138
|
+
const signPsbt = async ({ request, walletAccount }) => {
|
|
1139
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
1140
|
+
const psbtFromBase64 = bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
1141
|
+
const inputsToSign = request.signature?.map((sig) => ({
|
|
1142
|
+
address: sig.address,
|
|
1143
|
+
sigHash: request.allowedSighash[0],
|
|
1144
|
+
signingIndexes: sig.signingIndexes ?? []
|
|
1145
|
+
})) ?? [];
|
|
1146
|
+
const signedPsbt = await injectedProvider.signPSBT(psbtFromBase64.toBuffer(), { inputsToSign });
|
|
1147
|
+
return { signedPsbt: bitcoinjs_lib.Psbt.fromBuffer(signedPsbt).toBase64() };
|
|
1148
|
+
};
|
|
1149
|
+
const signPsbts = async ({ requests, walletAccount }) => {
|
|
1150
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
1151
|
+
const signedPsbts = [];
|
|
1152
|
+
for (const request of requests) {
|
|
1153
|
+
const signedPsbtResponse = await signPsbt({
|
|
1154
|
+
request,
|
|
1155
|
+
walletAccount
|
|
1156
|
+
});
|
|
1157
|
+
if (signedPsbtResponse) signedPsbts.push(signedPsbtResponse.signedPsbt);
|
|
1158
|
+
}
|
|
1159
|
+
return { signedPsbts };
|
|
1160
|
+
};
|
|
1161
|
+
const { getEventEmitter, cleanupEventEmitter } = (0, _dynamic_labs_sdk_client_core.createWalletProviderEventEmitter)({
|
|
1162
|
+
removeEventListeners: () => {
|
|
1163
|
+
injectedProvider?.removeAllListeners();
|
|
1164
|
+
},
|
|
1165
|
+
setupEventListeners: ({ handleAccountsChanged }) => {
|
|
1166
|
+
injectedProvider?.on("accountsChanged", (accounts) => {
|
|
1167
|
+
handleAccountsChanged({ addresses: accounts.map((account) => account.address) });
|
|
1168
|
+
});
|
|
1169
|
+
},
|
|
1170
|
+
supportedEvents: ["accountsChanged"]
|
|
1171
|
+
});
|
|
1172
|
+
const terminate = async () => {
|
|
1173
|
+
cleanupEventEmitter();
|
|
1174
|
+
};
|
|
1175
|
+
return {
|
|
1176
|
+
chain,
|
|
1177
|
+
connect,
|
|
1178
|
+
get events() {
|
|
1179
|
+
return getEventEmitter();
|
|
1180
|
+
},
|
|
1181
|
+
getActiveNetworkId,
|
|
1182
|
+
getConnectedAddresses,
|
|
1183
|
+
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(PHANTOM_METADATA.displayName),
|
|
1184
|
+
key,
|
|
1185
|
+
metadata: PHANTOM_METADATA,
|
|
1186
|
+
signMessage,
|
|
1187
|
+
signPsbt,
|
|
1188
|
+
signPsbts,
|
|
1189
|
+
terminate,
|
|
1190
|
+
walletProviderType
|
|
1191
|
+
};
|
|
1192
|
+
};
|
|
1193
|
+
|
|
1194
|
+
//#endregion
|
|
1195
|
+
//#region src/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.ts
|
|
1196
|
+
const PHANTOM_BITCOIN_PROVIDER_LOCATOR = "phantom.bitcoin";
|
|
1197
|
+
const getPhantomInjectedProvider = () => {
|
|
1198
|
+
return (0, _dynamic_labs_sdk_client_core.getInjectedProviderFromWindow)(PHANTOM_BITCOIN_PROVIDER_LOCATOR);
|
|
1199
|
+
};
|
|
1200
|
+
|
|
1201
|
+
//#endregion
|
|
1202
|
+
//#region src/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.ts
|
|
1203
|
+
const UNISAT_PROVIDER_LOCATOR = "unisat_wallet";
|
|
1204
|
+
const getUnisatInjectedProvider = () => {
|
|
1205
|
+
return (0, _dynamic_labs_sdk_client_core.getInjectedProviderFromWindow)(UNISAT_PROVIDER_LOCATOR);
|
|
1206
|
+
};
|
|
1207
|
+
|
|
1208
|
+
//#endregion
|
|
1209
|
+
//#region src/utils/signMultipleTransactionsWithSatsConnect/signMultipleTransactionsWithSatsConnect.ts
|
|
1210
|
+
const signMultipleTransactionsWithSatsConnect = async ({ network, psbts, provider }) => {
|
|
1211
|
+
return { signedPsbts: (await new Promise((resolve, reject) => {
|
|
1212
|
+
(0, sats_connect.signMultipleTransactions)({
|
|
1213
|
+
getProvider: () => Promise.resolve(provider),
|
|
1214
|
+
onCancel: () => {
|
|
1215
|
+
reject(new _dynamic_labs_sdk_client.UserRejectedError({ action: "sign psbts" }));
|
|
1216
|
+
},
|
|
1217
|
+
onFinish: (response) => {
|
|
1218
|
+
resolve(response);
|
|
1219
|
+
},
|
|
1220
|
+
payload: {
|
|
1221
|
+
message: "Sign Psbts",
|
|
1222
|
+
network,
|
|
1223
|
+
psbts
|
|
1224
|
+
}
|
|
1225
|
+
});
|
|
1226
|
+
})).map((response) => response.psbtBase64) };
|
|
1227
|
+
};
|
|
1228
|
+
|
|
1229
|
+
//#endregion
|
|
1230
|
+
//#region src/injected/utils/xverse/createXverseBitcoinWalletProvider/createXverseBitcoinWalletProvider.ts
|
|
1231
|
+
const XVERSE_METADATA = {
|
|
1232
|
+
displayName: "Xverse",
|
|
1233
|
+
icon: `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL}#xverse`
|
|
1234
|
+
};
|
|
1235
|
+
const createXverseBitcoinWalletProvider = ({ dynamicClient, satsConnectProvider }) => {
|
|
1236
|
+
const chain = "BTC";
|
|
1237
|
+
const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
|
|
1238
|
+
const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
1239
|
+
chain,
|
|
1240
|
+
displayName: XVERSE_METADATA.displayName,
|
|
1241
|
+
walletProviderType
|
|
1242
|
+
});
|
|
1243
|
+
const requestPermissions = async () => {
|
|
1244
|
+
const response = await (0, sats_connect.request)("wallet_requestPermissions", void 0);
|
|
1245
|
+
if (response.status === "success") return;
|
|
1246
|
+
throw response.error;
|
|
1247
|
+
};
|
|
1248
|
+
const connect = async () => {
|
|
1249
|
+
await requestPermissions();
|
|
1250
|
+
const response = await (0, sats_connect.request)("wallet_connect", null);
|
|
1251
|
+
if (response.status !== "success") throw response.error;
|
|
1252
|
+
const { addresses: connectedAddresses } = response.result;
|
|
1253
|
+
const { addresses } = parseBitcoinConnectionResult({ connectedAddresses });
|
|
1254
|
+
return { addresses };
|
|
1255
|
+
};
|
|
1256
|
+
const disconnect = async () => {
|
|
1257
|
+
await (0, sats_connect.request)("wallet_renouncePermissions", null);
|
|
1258
|
+
};
|
|
1259
|
+
const getActiveNetworkId = async () => {
|
|
1260
|
+
const response = await (0, sats_connect.request)("wallet_getNetwork", null);
|
|
1261
|
+
let networkName = "mainnet";
|
|
1262
|
+
if (response.status === "success") networkName = response.result.bitcoin.name.toLowerCase();
|
|
1263
|
+
return getNetworkIdFromNetworkName({ networkName }, dynamicClient);
|
|
1264
|
+
};
|
|
1265
|
+
const getConnectedAddresses = async () => {
|
|
1266
|
+
const response = await (0, sats_connect.request)("wallet_getAccount", null);
|
|
1267
|
+
if (response.status === "success") return { addresses: response.result.addresses.map((address$1) => address$1.address) };
|
|
1268
|
+
if (response.error.code !== sats_connect.RpcErrorCode.ACCESS_DENIED) throw response.error;
|
|
1269
|
+
return { addresses: [] };
|
|
1270
|
+
};
|
|
1271
|
+
const sendBitcoin = async ({ transaction, walletAccount }) => {
|
|
1272
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
1273
|
+
const response = await (0, sats_connect.request)("sendTransfer", { recipients: [{
|
|
1274
|
+
address: transaction.recipientAddress,
|
|
1275
|
+
amount: Number(transaction.amount)
|
|
1276
|
+
}] });
|
|
1277
|
+
if (response.status !== "success") throw response.error;
|
|
1278
|
+
return { transactionId: response.result.txid };
|
|
1279
|
+
};
|
|
1280
|
+
const signMessage = async ({ message, walletAccount, protocol, addressType }) => {
|
|
1281
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
|
|
1282
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
1283
|
+
let addressToSignWith = walletAccount.address;
|
|
1284
|
+
if (addressType) addressToSignWith = (0, _dynamic_labs_sdk_client.getWalletAccountAddressByType)({
|
|
1285
|
+
type: addressType,
|
|
1286
|
+
walletAccount
|
|
1287
|
+
}) ?? addressToSignWith;
|
|
1288
|
+
const response = await (0, sats_connect.request)("signMessage", {
|
|
1289
|
+
address: addressToSignWith,
|
|
1290
|
+
message,
|
|
1291
|
+
protocol: getSatsConnectSigningProtocol(protocol)
|
|
1292
|
+
});
|
|
1293
|
+
if (response.status !== "success") throw response.error;
|
|
1294
|
+
return { signature: response.result.signature };
|
|
1295
|
+
};
|
|
1296
|
+
const signPsbt = async ({ request, walletAccount }) => {
|
|
1297
|
+
if (!request.allowedSighash.length) throw new InvalidPsbtError("allowedSighash cannot be an empty array");
|
|
1298
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
1299
|
+
const network = convertNetworkIdForPsbt((await getActiveNetworkId()).networkId);
|
|
1300
|
+
const inputsToSign = getPsbtInputsToSignForSatsConnect({
|
|
1301
|
+
psbt: bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64, { network }),
|
|
1302
|
+
request
|
|
1303
|
+
});
|
|
1304
|
+
const response = await (0, sats_connect.request)("signPsbt", {
|
|
1305
|
+
broadcast: false,
|
|
1306
|
+
psbt: request.unsignedPsbtBase64,
|
|
1307
|
+
signInputs: inputsToSign.reduce((accum, curr) => {
|
|
1308
|
+
if (!accum[curr.address]) accum[curr.address] = [];
|
|
1309
|
+
accum[curr.address].push(...curr.signingIndexes);
|
|
1310
|
+
return accum;
|
|
1311
|
+
}, {})
|
|
1312
|
+
});
|
|
1313
|
+
if (response.status !== "success") throw response.error;
|
|
1314
|
+
return { signedPsbt: response.result.psbt };
|
|
1315
|
+
};
|
|
1316
|
+
const signPsbts = async ({ requests, walletAccount }) => {
|
|
1317
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
1318
|
+
const activeNetworkId = await getActiveNetworkId();
|
|
1319
|
+
const network = convertNetworkIdForPsbt(activeNetworkId.networkId);
|
|
1320
|
+
const networkType = convertNetworkIdToSatsConnectNetworkType(activeNetworkId.networkId);
|
|
1321
|
+
const psbtsToSign = [];
|
|
1322
|
+
for (const request of requests) {
|
|
1323
|
+
const inputsToSign = getPsbtInputsToSignForSatsConnect({
|
|
1324
|
+
psbt: bitcoinjs_lib.Psbt.fromBase64(request.unsignedPsbtBase64, { network }),
|
|
1325
|
+
request
|
|
1326
|
+
});
|
|
1327
|
+
psbtsToSign.push({
|
|
1328
|
+
inputsToSign,
|
|
1329
|
+
psbtBase64: request.unsignedPsbtBase64
|
|
1330
|
+
});
|
|
1331
|
+
}
|
|
1332
|
+
return { signedPsbts: (await signMultipleTransactionsWithSatsConnect({
|
|
1333
|
+
network: { type: networkType },
|
|
1334
|
+
provider: satsConnectProvider,
|
|
1335
|
+
psbts: psbtsToSign
|
|
1336
|
+
})).signedPsbts };
|
|
1337
|
+
};
|
|
1338
|
+
const { getEventEmitter, cleanupEventEmitter } = (0, _dynamic_labs_sdk_client_core.createWalletProviderEventEmitter)({
|
|
1339
|
+
removeEventListeners: ({ setupReturnValue }) => {
|
|
1340
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(setupReturnValue, "Setup return value not defined");
|
|
1341
|
+
setupReturnValue.removeAccountChangeListener();
|
|
1342
|
+
setupReturnValue.accountDisconnectedListener();
|
|
1343
|
+
},
|
|
1344
|
+
setupEventListeners: ({ handleAccountsChanged, handleDisconnected }) => {
|
|
1345
|
+
const removeAccountChangeListener = (0, sats_connect.addListener)("accountChange", ({ addresses }) => {
|
|
1346
|
+
if (!addresses) return;
|
|
1347
|
+
handleAccountsChanged({ addresses: addresses.map((address$1) => address$1.address) });
|
|
1348
|
+
});
|
|
1349
|
+
return {
|
|
1350
|
+
accountDisconnectedListener: (0, sats_connect.addListener)("accountDisconnected", () => {
|
|
1351
|
+
handleDisconnected();
|
|
1352
|
+
}),
|
|
1353
|
+
removeAccountChangeListener
|
|
1354
|
+
};
|
|
1355
|
+
},
|
|
1356
|
+
supportedEvents: ["accountsChanged", "disconnected"]
|
|
1357
|
+
});
|
|
1358
|
+
const terminate = async () => {
|
|
1359
|
+
cleanupEventEmitter();
|
|
1360
|
+
};
|
|
1361
|
+
return {
|
|
1362
|
+
chain,
|
|
1363
|
+
connect,
|
|
1364
|
+
disconnect,
|
|
1365
|
+
get events() {
|
|
1366
|
+
return getEventEmitter();
|
|
1367
|
+
},
|
|
1368
|
+
getActiveNetworkId,
|
|
1369
|
+
getConnectedAddresses,
|
|
1370
|
+
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(XVERSE_METADATA.displayName),
|
|
1371
|
+
key,
|
|
1372
|
+
metadata: XVERSE_METADATA,
|
|
1373
|
+
sendBitcoin,
|
|
1374
|
+
signMessage,
|
|
1375
|
+
signPsbt,
|
|
1376
|
+
signPsbts,
|
|
1377
|
+
terminate,
|
|
1378
|
+
walletProviderType
|
|
1379
|
+
};
|
|
1380
|
+
};
|
|
1381
|
+
|
|
1382
|
+
//#endregion
|
|
1383
|
+
//#region src/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.ts
|
|
1384
|
+
const XVERSE_BITCOIN_PROVIDER_LOCATOR = "XverseProviders.BitcoinProvider";
|
|
1385
|
+
const getXverseInjectedProvider = () => {
|
|
1386
|
+
return (0, _dynamic_labs_sdk_client_core.getInjectedProviderFromWindow)(XVERSE_BITCOIN_PROVIDER_LOCATOR);
|
|
1387
|
+
};
|
|
1388
|
+
|
|
1389
|
+
//#endregion
|
|
1390
|
+
//#region src/injected/addBitcoinInjectedWalletsExtension/addBitcoinInjectedWalletsExtension.ts
|
|
1391
|
+
const BITCOIN_INJECTED_WALLETS_EXTENSION_KEY = "bitcoinInjectedWallets";
|
|
1392
|
+
/**
|
|
1393
|
+
* Adds the Bitcoin Injected Wallets extension to the Dynamic client.
|
|
1394
|
+
*
|
|
1395
|
+
* This extension enables integration with many Bitcoin wallets, like MagicEden, Xverse, Unisat, Phantom, and more.
|
|
1396
|
+
*
|
|
1397
|
+
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
1398
|
+
*/
|
|
1399
|
+
const addBitcoinInjectedWalletsExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
|
|
1400
|
+
if ((0, _dynamic_labs_sdk_client_core.hasExtension)({ extensionKey: BITCOIN_INJECTED_WALLETS_EXTENSION_KEY }, client)) return;
|
|
1401
|
+
(0, _dynamic_labs_sdk_client_core.registerExtension)({ extensionKey: BITCOIN_INJECTED_WALLETS_EXTENSION_KEY }, client);
|
|
1402
|
+
registerBitcoinNetworkProviderBuilder(client);
|
|
1403
|
+
const walletProviderRegistry = (0, _dynamic_labs_sdk_client_core.getWalletProviderRegistry)(client);
|
|
1404
|
+
const injectedWalletProviders = [];
|
|
1405
|
+
const unisatInjectedProvider = getUnisatInjectedProvider();
|
|
1406
|
+
if (unisatInjectedProvider) {
|
|
1407
|
+
const unisatWalletProvider = createUnisatWalletProvider({
|
|
1408
|
+
dynamicClient: client,
|
|
1409
|
+
injectedProvider: unisatInjectedProvider
|
|
1410
|
+
});
|
|
1411
|
+
injectedWalletProviders.push(unisatWalletProvider);
|
|
1412
|
+
}
|
|
1413
|
+
const phantomInjectedProvider = getPhantomInjectedProvider();
|
|
1414
|
+
if (phantomInjectedProvider) {
|
|
1415
|
+
const phantomWalletProvider = createPhantomBitcoinWalletProvider({
|
|
1416
|
+
dynamicClient: client,
|
|
1417
|
+
injectedProvider: phantomInjectedProvider
|
|
1418
|
+
});
|
|
1419
|
+
injectedWalletProviders.push(phantomWalletProvider);
|
|
1420
|
+
}
|
|
1421
|
+
const xverseInjectedProvider = getXverseInjectedProvider();
|
|
1422
|
+
if (xverseInjectedProvider) {
|
|
1423
|
+
const xverseWalletProvider = createXverseBitcoinWalletProvider({
|
|
1424
|
+
dynamicClient: client,
|
|
1425
|
+
satsConnectProvider: xverseInjectedProvider
|
|
1426
|
+
});
|
|
1427
|
+
injectedWalletProviders.push(xverseWalletProvider);
|
|
1428
|
+
}
|
|
1429
|
+
const magicEdenInjectedProvider = getMagicEdenInjectedProvider();
|
|
1430
|
+
if (magicEdenInjectedProvider) {
|
|
1431
|
+
const magicEdenWalletProvider = createMagicEdenBitcoinWalletProvider({
|
|
1432
|
+
dynamicClient: client,
|
|
1433
|
+
satsConnectProvider: magicEdenInjectedProvider
|
|
1434
|
+
});
|
|
1435
|
+
injectedWalletProviders.push(magicEdenWalletProvider);
|
|
1436
|
+
}
|
|
1437
|
+
const okxInjectedProvider = getOkxBitcoinInjectedProvider();
|
|
1438
|
+
if (okxInjectedProvider) {
|
|
1439
|
+
const okxWalletProvider = createOkxBitcoinWalletProvider({
|
|
1440
|
+
dynamicClient: client,
|
|
1441
|
+
injectedProvider: okxInjectedProvider
|
|
1442
|
+
});
|
|
1443
|
+
injectedWalletProviders.push(okxWalletProvider);
|
|
1444
|
+
}
|
|
1445
|
+
const oneKeyInjectedProvider = getOneKeyBitcoinInjectedProvider();
|
|
1446
|
+
if (oneKeyInjectedProvider) {
|
|
1447
|
+
const oneKeyWalletProvider = createOneKeyBitcoinWalletProvider({
|
|
1448
|
+
dynamicClient: client,
|
|
1449
|
+
injectedProvider: oneKeyInjectedProvider
|
|
1450
|
+
});
|
|
1451
|
+
injectedWalletProviders.push(oneKeyWalletProvider);
|
|
1452
|
+
}
|
|
1453
|
+
const bitgetInjectedProvider = getBitgetBitcoinInjectedProvider();
|
|
1454
|
+
if (bitgetInjectedProvider) {
|
|
1455
|
+
const bitgetWalletProvider = createBitgetBitcoinWalletProvider({
|
|
1456
|
+
dynamicClient: client,
|
|
1457
|
+
injectedProvider: bitgetInjectedProvider
|
|
1458
|
+
});
|
|
1459
|
+
injectedWalletProviders.push(bitgetWalletProvider);
|
|
1460
|
+
}
|
|
1461
|
+
const binanceInjectedProvider = getBinanceBitcoinInjectedProvider();
|
|
1462
|
+
if (binanceInjectedProvider) {
|
|
1463
|
+
const binanceWalletProvider = createBinanceBitcoinWalletProvider({
|
|
1464
|
+
dynamicClient: client,
|
|
1465
|
+
injectedProvider: binanceInjectedProvider
|
|
1466
|
+
});
|
|
1467
|
+
injectedWalletProviders.push(binanceWalletProvider);
|
|
1468
|
+
}
|
|
1469
|
+
const oylInjectedProvider = getOylBitcoinInjectedProvider();
|
|
1470
|
+
if (oylInjectedProvider) {
|
|
1471
|
+
const oylWalletProvider = createOylBitcoinWalletProvider({
|
|
1472
|
+
dynamicClient: client,
|
|
1473
|
+
injectedProvider: oylInjectedProvider
|
|
1474
|
+
});
|
|
1475
|
+
injectedWalletProviders.push(oylWalletProvider);
|
|
1476
|
+
}
|
|
1477
|
+
const leatherInjectedProvider = getLeatherBitcoinInjectedProvider();
|
|
1478
|
+
if (leatherInjectedProvider) {
|
|
1479
|
+
const leatherWalletProvider = createLeatherBitcoinWalletProvider({
|
|
1480
|
+
dynamicClient: client,
|
|
1481
|
+
injectedProvider: leatherInjectedProvider
|
|
1482
|
+
});
|
|
1483
|
+
injectedWalletProviders.push(leatherWalletProvider);
|
|
1484
|
+
}
|
|
1485
|
+
injectedWalletProviders.forEach((walletProvider) => {
|
|
1486
|
+
walletProviderRegistry.register({
|
|
1487
|
+
priority: _dynamic_labs_sdk_client_core.WalletProviderPriority.WINDOW_INJECT,
|
|
1488
|
+
walletProvider
|
|
1489
|
+
});
|
|
1490
|
+
});
|
|
1491
|
+
};
|
|
1492
|
+
|
|
1493
|
+
//#endregion
|
|
1494
|
+
Object.defineProperty(exports, 'InvalidPsbtError', {
|
|
1495
|
+
enumerable: true,
|
|
1496
|
+
get: function () {
|
|
1497
|
+
return InvalidPsbtError;
|
|
1498
|
+
}
|
|
1499
|
+
});
|
|
1500
|
+
Object.defineProperty(exports, 'addBitcoinInjectedWalletsExtension', {
|
|
1501
|
+
enumerable: true,
|
|
1502
|
+
get: function () {
|
|
1503
|
+
return addBitcoinInjectedWalletsExtension;
|
|
1504
|
+
}
|
|
1505
|
+
});
|
|
1506
|
+
Object.defineProperty(exports, 'getMempoolApiUrl', {
|
|
1507
|
+
enumerable: true,
|
|
1508
|
+
get: function () {
|
|
1509
|
+
return getMempoolApiUrl;
|
|
1510
|
+
}
|
|
1511
|
+
});
|
|
1512
|
+
Object.defineProperty(exports, 'name', {
|
|
1513
|
+
enumerable: true,
|
|
1514
|
+
get: function () {
|
|
1515
|
+
return name;
|
|
1516
|
+
}
|
|
1517
|
+
});
|
|
1518
|
+
Object.defineProperty(exports, 'version', {
|
|
1519
|
+
enumerable: true,
|
|
1520
|
+
get: function () {
|
|
1521
|
+
return version;
|
|
1522
|
+
}
|
|
1523
|
+
});
|
|
1524
|
+
//# sourceMappingURL=addBitcoinInjectedWalletsExtension-CseEWCFz.cjs.js.map
|