@dynamic-labs-sdk/bitcoin 0.17.3 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/dist/addBitcoinExtension/addBitcoinExtension.d.ts +1 -0
  2. package/dist/addBitcoinExtension/addBitcoinExtension.d.ts.map +1 -1
  3. package/dist/{addBitcoinInjectedWalletsExtension-7P_IBwWp.esm.js → addBitcoinInjectedWalletsExtension-BKCQdYmc.esm.js} +48 -2
  4. package/dist/addBitcoinInjectedWalletsExtension-BKCQdYmc.esm.js.map +1 -0
  5. package/dist/{addBitcoinInjectedWalletsExtension-DM96WiNE.cjs.js → addBitcoinInjectedWalletsExtension-NvVOlBz9.cjs.js} +48 -2
  6. package/dist/addBitcoinInjectedWalletsExtension-NvVOlBz9.cjs.js.map +1 -0
  7. package/dist/buildPsbt/buildPsbt.d.ts +1 -0
  8. package/dist/buildPsbt/buildPsbt.d.ts.map +1 -1
  9. package/dist/index.cjs.js +21 -1
  10. package/dist/index.cjs.js.map +1 -1
  11. package/dist/index.esm.js +21 -1
  12. package/dist/index.esm.js.map +1 -1
  13. package/dist/injected/addBitcoinInjectedWalletsExtension/addBitcoinInjectedWalletsExtension.d.ts +1 -0
  14. package/dist/injected/addBitcoinInjectedWalletsExtension/addBitcoinInjectedWalletsExtension.d.ts.map +1 -1
  15. package/dist/injected/utils/binance/createBinanceBitcoinWalletProvider/createBinanceBitcoinWalletProvider.d.ts +1 -0
  16. package/dist/injected/utils/binance/createBinanceBitcoinWalletProvider/createBinanceBitcoinWalletProvider.d.ts.map +1 -1
  17. package/dist/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.d.ts +1 -0
  18. package/dist/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.d.ts.map +1 -1
  19. package/dist/injected/utils/bitget/createBitgetBitcoinWalletProvider/createBitgetBitcoinWalletProvider.d.ts +1 -0
  20. package/dist/injected/utils/bitget/createBitgetBitcoinWalletProvider/createBitgetBitcoinWalletProvider.d.ts.map +1 -1
  21. package/dist/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.d.ts +1 -0
  22. package/dist/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.d.ts.map +1 -1
  23. package/dist/injected/utils/leather/convertNetworkIdToLeatherNetworkName/convertNetworkIdToLeatherNetworkName.d.ts +1 -0
  24. package/dist/injected/utils/leather/convertNetworkIdToLeatherNetworkName/convertNetworkIdToLeatherNetworkName.d.ts.map +1 -1
  25. package/dist/injected/utils/leather/createLeatherBitcoinWalletProvider/createLeatherBitcoinWalletProvider.d.ts +1 -0
  26. package/dist/injected/utils/leather/createLeatherBitcoinWalletProvider/createLeatherBitcoinWalletProvider.d.ts.map +1 -1
  27. package/dist/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.d.ts +1 -0
  28. package/dist/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.d.ts.map +1 -1
  29. package/dist/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/createMagicEdenBitcoinWalletProvider.d.ts +1 -0
  30. package/dist/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/createMagicEdenBitcoinWalletProvider.d.ts.map +1 -1
  31. package/dist/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.d.ts +1 -0
  32. package/dist/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.d.ts.map +1 -1
  33. package/dist/injected/utils/okx/createOkxBitcoinWalletProvider/createOkxBitcoinWalletProvider.d.ts +1 -0
  34. package/dist/injected/utils/okx/createOkxBitcoinWalletProvider/createOkxBitcoinWalletProvider.d.ts.map +1 -1
  35. package/dist/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.d.ts +1 -0
  36. package/dist/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.d.ts.map +1 -1
  37. package/dist/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/createOneKeyBitcoinWalletProvider.d.ts +1 -0
  38. package/dist/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/createOneKeyBitcoinWalletProvider.d.ts.map +1 -1
  39. package/dist/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.d.ts +1 -0
  40. package/dist/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.d.ts.map +1 -1
  41. package/dist/injected/utils/oyl/createOylBitcoinWalletProvider/createOylBitcoinWalletProvider.d.ts +1 -0
  42. package/dist/injected/utils/oyl/createOylBitcoinWalletProvider/createOylBitcoinWalletProvider.d.ts.map +1 -1
  43. package/dist/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.d.ts +1 -0
  44. package/dist/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.d.ts.map +1 -1
  45. package/dist/injected/utils/phantom/createPhantomBitcoinWalletProvider/createPhantomBitcoinWalletProvider.d.ts +1 -0
  46. package/dist/injected/utils/phantom/createPhantomBitcoinWalletProvider/createPhantomBitcoinWalletProvider.d.ts.map +1 -1
  47. package/dist/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.d.ts +1 -0
  48. package/dist/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.d.ts.map +1 -1
  49. package/dist/injected/utils/unisat/createUnisatWalletProvider/createUnisatWalletProvider.d.ts +1 -0
  50. package/dist/injected/utils/unisat/createUnisatWalletProvider/createUnisatWalletProvider.d.ts.map +1 -1
  51. package/dist/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.d.ts +1 -0
  52. package/dist/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.d.ts.map +1 -1
  53. package/dist/injected/utils/xverse/createXverseBitcoinWalletProvider/createXverseBitcoinWalletProvider.d.ts +1 -0
  54. package/dist/injected/utils/xverse/createXverseBitcoinWalletProvider/createXverseBitcoinWalletProvider.d.ts.map +1 -1
  55. package/dist/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.d.ts +1 -0
  56. package/dist/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.d.ts.map +1 -1
  57. package/dist/injected.cjs.js +1 -1
  58. package/dist/injected.esm.js +1 -1
  59. package/dist/isBitcoinNetworkProvider/isBitcoinNetworkProvider.d.ts +1 -0
  60. package/dist/isBitcoinNetworkProvider/isBitcoinNetworkProvider.d.ts.map +1 -1
  61. package/dist/isBitcoinWalletAccount/isBitcoinWalletAccount.d.ts +1 -0
  62. package/dist/isBitcoinWalletAccount/isBitcoinWalletAccount.d.ts.map +1 -1
  63. package/dist/isBitcoinWalletProvider/isBitcoinWalletProvider.d.ts +1 -0
  64. package/dist/isBitcoinWalletProvider/isBitcoinWalletProvider.d.ts.map +1 -1
  65. package/dist/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.d.ts +1 -0
  66. package/dist/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.d.ts.map +1 -1
  67. package/dist/sendBitcoin/sendBitcoin.d.ts +1 -0
  68. package/dist/sendBitcoin/sendBitcoin.d.ts.map +1 -1
  69. package/dist/sendRawTransaction/sendRawTransaction.d.ts +1 -0
  70. package/dist/sendRawTransaction/sendRawTransaction.d.ts.map +1 -1
  71. package/dist/signMessageWithCustomOptions/signMessageWithCustomOptions.d.ts +1 -0
  72. package/dist/signMessageWithCustomOptions/signMessageWithCustomOptions.d.ts.map +1 -1
  73. package/dist/signPsbt/signPsbt.d.ts +1 -0
  74. package/dist/signPsbt/signPsbt.d.ts.map +1 -1
  75. package/dist/signPsbts/signPsbts.d.ts +1 -0
  76. package/dist/signPsbts/signPsbts.d.ts.map +1 -1
  77. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  78. package/dist/utils/bitcoinExecuteCheckoutTransaction/bitcoinExecuteCheckoutTransaction.d.ts +1 -0
  79. package/dist/utils/bitcoinExecuteCheckoutTransaction/bitcoinExecuteCheckoutTransaction.d.ts.map +1 -1
  80. package/dist/utils/bitcoinTransferAmount/bitcoinTransferAmount.d.ts +1 -0
  81. package/dist/utils/bitcoinTransferAmount/bitcoinTransferAmount.d.ts.map +1 -1
  82. package/dist/utils/convertNetworkIdForPsbt/convertNetworkIdForPsbt.d.ts +1 -0
  83. package/dist/utils/convertNetworkIdForPsbt/convertNetworkIdForPsbt.d.ts.map +1 -1
  84. package/dist/utils/convertNetworkIdToSatsConnectNetworkType/convertNetworkIdToSatsConnectNetworkType.d.ts +1 -0
  85. package/dist/utils/convertNetworkIdToSatsConnectNetworkType/convertNetworkIdToSatsConnectNetworkType.d.ts.map +1 -1
  86. package/dist/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.d.ts +1 -0
  87. package/dist/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.d.ts.map +1 -1
  88. package/dist/utils/createPsbtOptions/createPsbtOptions.d.ts +1 -0
  89. package/dist/utils/createPsbtOptions/createPsbtOptions.d.ts.map +1 -1
  90. package/dist/utils/fetchBtcBalance/fetchBtcBalance.d.ts +1 -0
  91. package/dist/utils/fetchBtcBalance/fetchBtcBalance.d.ts.map +1 -1
  92. package/dist/utils/getMempoolApiUrl/getMempoolApiUrl.d.ts +1 -0
  93. package/dist/utils/getMempoolApiUrl/getMempoolApiUrl.d.ts.map +1 -1
  94. package/dist/utils/getNetworkIdFromNetworkName/getNetworkIdFromNetworkName.d.ts +1 -0
  95. package/dist/utils/getNetworkIdFromNetworkName/getNetworkIdFromNetworkName.d.ts.map +1 -1
  96. package/dist/utils/getPsbtInputsToSignForSatsConnect/getPsbtInputsToSignForSatsConnect.d.ts +1 -0
  97. package/dist/utils/getPsbtInputsToSignForSatsConnect/getPsbtInputsToSignForSatsConnect.d.ts.map +1 -1
  98. package/dist/utils/getSatsConnectSigningProtocol/getSatsConnectSigningProtocol.d.ts +1 -0
  99. package/dist/utils/getSatsConnectSigningProtocol/getSatsConnectSigningProtocol.d.ts.map +1 -1
  100. package/dist/utils/getSigHashType/getSigHashType.d.ts +1 -0
  101. package/dist/utils/getSigHashType/getSigHashType.d.ts.map +1 -1
  102. package/dist/utils/parseBitcoinConnectionResult/parseBitcoinConnectionResult.d.ts +1 -0
  103. package/dist/utils/parseBitcoinConnectionResult/parseBitcoinConnectionResult.d.ts.map +1 -1
  104. package/dist/utils/satoshisToBtc/satoshisToBtc.d.ts +1 -0
  105. package/dist/utils/satoshisToBtc/satoshisToBtc.d.ts.map +1 -1
  106. package/dist/utils/signMultipleTransactionsWithSatsConnect/signMultipleTransactionsWithSatsConnect.d.ts +1 -0
  107. package/dist/utils/signMultipleTransactionsWithSatsConnect/signMultipleTransactionsWithSatsConnect.d.ts.map +1 -1
  108. package/dist/utils/validatePsbt/extractAddressFromInput/extractAddressFromInput.d.ts +1 -0
  109. package/dist/utils/validatePsbt/extractAddressFromInput/extractAddressFromInput.d.ts.map +1 -1
  110. package/dist/utils/validatePsbt/validatePsbt.d.ts +1 -0
  111. package/dist/utils/validatePsbt/validatePsbt.d.ts.map +1 -1
  112. package/dist/utils/validatePsbt/validateSigHash/validateSigHash.d.ts +1 -0
  113. package/dist/utils/validatePsbt/validateSigHash/validateSigHash.d.ts.map +1 -1
  114. package/dist/utils/validatePsbt/validateSigningAddress/validateSigningAddress.d.ts +1 -0
  115. package/dist/utils/validatePsbt/validateSigningAddress/validateSigningAddress.d.ts.map +1 -1
  116. package/dist/waas/addWaasBitcoinExtension/addWaasBitcoinExtension.d.ts +1 -0
  117. package/dist/waas/addWaasBitcoinExtension/addWaasBitcoinExtension.d.ts.map +1 -1
  118. package/dist/waas/utils/addInputsToPsbt/addInputsToPsbt.d.ts +1 -0
  119. package/dist/waas/utils/addInputsToPsbt/addInputsToPsbt.d.ts.map +1 -1
  120. package/dist/waas/utils/addOutputsToPsbt/addOutputsToPsbt.d.ts +1 -0
  121. package/dist/waas/utils/addOutputsToPsbt/addOutputsToPsbt.d.ts.map +1 -1
  122. package/dist/waas/utils/broadcastTransaction/broadcastTransaction.d.ts +1 -0
  123. package/dist/waas/utils/broadcastTransaction/broadcastTransaction.d.ts.map +1 -1
  124. package/dist/waas/utils/buildPsbt/buildPsbt.d.ts +1 -0
  125. package/dist/waas/utils/buildPsbt/buildPsbt.d.ts.map +1 -1
  126. package/dist/waas/utils/calculateFeeAndChange/calculateFeeAndChange.d.ts +1 -0
  127. package/dist/waas/utils/calculateFeeAndChange/calculateFeeAndChange.d.ts.map +1 -1
  128. package/dist/waas/utils/calculateUTXOTotal/calculateUTXOTotal.d.ts +1 -0
  129. package/dist/waas/utils/calculateUTXOTotal/calculateUTXOTotal.d.ts.map +1 -1
  130. package/dist/waas/utils/createWalletProviderForWaasBitcoin/createWalletProviderForWaasBitcoin.d.ts +1 -0
  131. package/dist/waas/utils/createWalletProviderForWaasBitcoin/createWalletProviderForWaasBitcoin.d.ts.map +1 -1
  132. package/dist/waas/utils/estimateTransactionFee/estimateTransactionFee.d.ts +1 -0
  133. package/dist/waas/utils/estimateTransactionFee/estimateTransactionFee.d.ts.map +1 -1
  134. package/dist/waas/utils/getFeeRecommendations/getFeeRecommendations.d.ts +1 -0
  135. package/dist/waas/utils/getFeeRecommendations/getFeeRecommendations.d.ts.map +1 -1
  136. package/dist/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.d.ts +1 -0
  137. package/dist/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.d.ts.map +1 -1
  138. package/dist/waas/utils/getUTXOs/getUTXOs.d.ts +1 -0
  139. package/dist/waas/utils/getUTXOs/getUTXOs.d.ts.map +1 -1
  140. package/dist/waas/utils/selectUTXOsLargestFirst/selectUTXOsLargestFirst.d.ts +1 -0
  141. package/dist/waas/utils/selectUTXOsLargestFirst/selectUTXOsLargestFirst.d.ts.map +1 -1
  142. package/dist/waas/utils/validateAndSelectUTXOs/validateAndSelectUTXOs.d.ts +1 -0
  143. package/dist/waas/utils/validateAndSelectUTXOs/validateAndSelectUTXOs.d.ts.map +1 -1
  144. package/dist/waas/utils/validateNotTaproot/validateNotTaproot.d.ts +1 -0
  145. package/dist/waas/utils/validateNotTaproot/validateNotTaproot.d.ts.map +1 -1
  146. package/package.json +4 -4
  147. package/dist/addBitcoinInjectedWalletsExtension-7P_IBwWp.esm.js.map +0 -1
  148. package/dist/addBitcoinInjectedWalletsExtension-DM96WiNE.cjs.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addBitcoinInjectedWalletsExtension-NvVOlBz9.cjs.js","names":["address","address","BaseError","InvalidParamError","Psbt","BaseError","MethodNotImplementedError","InvalidParamError","BaseError","Transaction","extractedAddress: string | undefined","address","Transaction","psbtSignOptions: SignPsbtOptions","toSignInputs: SignPsbtOptions['toSignInputs']","BINANCE_METADATA: WalletProviderMetadata","DYNAMIC_ICONIC_SPRITE_URL","chain: Chain","WalletProviderEnum","connect: BitcoinWalletProvider['connect']","getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId']","getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses']","signMessage: BitcoinWalletProvider['signMessage']","signPsbt: BitcoinWalletProvider['signPsbt']","Psbt","signPsbts: BitcoinWalletProvider['signPsbts']","signedPsbts: string[]","terminate: BitcoinWalletProvider['terminate']","UNISAT_METADATA: WalletProviderMetadata","DYNAMIC_ICONIC_SPRITE_URL","chain: Chain","WalletProviderEnum","connect: BitcoinWalletProvider['connect']","disconnect: BitcoinWalletProvider['disconnect']","getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId']","chain","getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses']","sendBitcoin: BitcoinWalletProvider['sendBitcoin']","signMessage: BitcoinWalletProvider['signMessage']","signPsbt: BitcoinWalletProvider['signPsbt']","Psbt","signPsbts: BitcoinWalletProvider['signPsbts']","psbtHexs: string[]","psbtOptions: SignPsbtOptions[]","terminate: BitcoinWalletProvider['terminate']","BITGET_METADATA: WalletProviderMetadata","DYNAMIC_ICONIC_SPRITE_URL","networks","LEATHER_METADATA: WalletProviderMetadata","DYNAMIC_ICONIC_SPRITE_URL","chain: Chain","WalletProviderEnum","connect: BitcoinWalletProvider['connect']","addresses: WalletProviderConnectAddress[]","address","getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId']","getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses']","sendBitcoin: BitcoinWalletProvider['sendBitcoin']","signMessage: BitcoinWalletProvider['signMessage']","paymentType: BitcoinPaymentTypes","signPsbt: BitcoinWalletProvider['signPsbt']","Psbt","signPsbts: BitcoinWalletProvider['signPsbts']","signedPsbts: string[]","BitcoinNetworkType","inputsToSign: InputToSign[]","MessageSigningProtocols","addresses: WalletProviderConnectAddress[]","address","MAGIC_EDEN_METADATA: WalletProviderMetadata","DYNAMIC_ICONIC_SPRITE_URL","chain: Chain","WalletProviderEnum","connect: BitcoinWalletProvider['connect']","UserRejectedError","AddressPurpose","getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId']","getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses']","address","sendBitcoin: BitcoinWalletProvider['sendBitcoin']","signMessage: BitcoinWalletProvider['signMessage']","signPsbt: BitcoinWalletProvider['signPsbt']","Psbt","signPsbts: BitcoinWalletProvider['signPsbts']","psbtsToSign: SignMultiplePsbtPayload[]","request","terminate: BitcoinWalletProvider['terminate']","OKX_METADATA: WalletProviderMetadata","DYNAMIC_ICONIC_SPRITE_URL","chain: Chain","WalletProviderEnum","connect: BitcoinWalletProvider['connect']","getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId']","getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses']","sendBitcoin: BitcoinWalletProvider['sendBitcoin']","signMessage: BitcoinWalletProvider['signMessage']","signPsbt: BitcoinWalletProvider['signPsbt']","Psbt","signPsbts: BitcoinWalletProvider['signPsbts']","psbtHexs: string[]","psbtOptions: SignPsbtOptions[]","terminate: BitcoinWalletProvider['terminate']","ONEKEY_METADATA: WalletProviderMetadata","DYNAMIC_ICONIC_SPRITE_URL","chain: Chain","WalletProviderEnum","connect: BitcoinWalletProvider['connect']","getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId']","getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses']","sendBitcoin: BitcoinWalletProvider['sendBitcoin']","signMessage: BitcoinWalletProvider['signMessage']","signPsbt: BitcoinWalletProvider['signPsbt']","Psbt","signPsbts: BitcoinWalletProvider['signPsbts']","psbtHexs: string[]","terminate: BitcoinWalletProvider['terminate']","OYL_METADATA: WalletProviderMetadata","DYNAMIC_ICONIC_SPRITE_URL","chain: Chain","WalletProviderEnum","connect: BitcoinWalletProvider['connect']","addresses: WalletProviderConnectAddress[]","getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId']","getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses']","address","signMessage: BitcoinWalletProvider['signMessage']","signPsbt: BitcoinWalletProvider['signPsbt']","Psbt","signPsbts: BitcoinWalletProvider['signPsbts']","signedPsbts: string[]","PHANTOM_METADATA: WalletProviderMetadata","DYNAMIC_ICONIC_SPRITE_URL","chain: Chain","WalletProviderEnum","connect: BitcoinWalletProvider['connect']","addresses: WalletProviderConnectAddress[]","getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId']","getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses']","address","signMessage: BitcoinWalletProvider['signMessage']","signPsbt: BitcoinWalletProvider['signPsbt']","Psbt","signPsbts: BitcoinWalletProvider['signPsbts']","signedPsbts: string[]","terminate: BitcoinWalletProvider['terminate']","UserRejectedError","XVERSE_METADATA: WalletProviderMetadata","DYNAMIC_ICONIC_SPRITE_URL","chain: Chain","WalletProviderEnum","connect: BitcoinWalletProvider['connect']","disconnect: BitcoinWalletProvider['disconnect']","getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId']","getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses']","address","RpcErrorCode","sendBitcoin: BitcoinWalletProvider['sendBitcoin']","signMessage: BitcoinWalletProvider['signMessage']","signPsbt: BitcoinWalletProvider['signPsbt']","Psbt","signPsbts: BitcoinWalletProvider['signPsbts']","psbtsToSign: SignMultiplePsbtPayload[]","terminate: BitcoinWalletProvider['terminate']","injectedWalletProviders: BitcoinWalletProvider[]","WalletProviderPriority"],"sources":["../package.json","../src/constants.ts","../src/utils/getMempoolApiUrl/getMempoolApiUrl.ts","../src/utils/satoshisToBtc/satoshisToBtc.ts","../src/utils/fetchBtcBalance/fetchBtcBalance.ts","../src/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.ts","../src/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.ts","../src/isBitcoinWalletAccount/isBitcoinWalletAccount.ts","../src/isBitcoinWalletProvider/isBitcoinWalletProvider.ts","../src/errors/SendBitcoinRawTransactionError.ts","../src/sendRawTransaction/sendRawTransaction.ts","../src/utils/bitcoinExecuteCheckoutTransaction/bitcoinExecuteCheckoutTransaction.ts","../src/errors/NotBitcoinProviderError.ts","../src/sendBitcoin/sendBitcoin.ts","../src/utils/bitcoinTransferAmount/bitcoinTransferAmount.ts","../src/errors/InvalidPsbtError.ts","../src/utils/getSigHashType/getSigHashType.ts","../src/utils/validatePsbt/validateSigHash/validateSigHash.ts","../src/utils/validatePsbt/extractAddressFromInput/extractAddressFromInput.ts","../src/utils/validatePsbt/validateSigningAddress/validateSigningAddress.ts","../src/utils/validatePsbt/validatePsbt.ts","../src/utils/createPsbtOptions/createPsbtOptions.ts","../src/utils/getNetworkIdFromNetworkName/getNetworkIdFromNetworkName.ts","../src/injected/utils/binance/createBinanceBitcoinWalletProvider/createBinanceBitcoinWalletProvider.ts","../src/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.ts","../src/injected/utils/unisat/createUnisatWalletProvider/createUnisatWalletProvider.ts","../src/injected/utils/bitget/createBitgetBitcoinWalletProvider/createBitgetBitcoinWalletProvider.ts","../src/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.ts","../src/utils/convertNetworkIdForPsbt/convertNetworkIdForPsbt.ts","../src/injected/utils/leather/convertNetworkIdToLeatherNetworkName/convertNetworkIdToLeatherNetworkName.ts","../src/injected/utils/leather/createLeatherBitcoinWalletProvider/createLeatherBitcoinWalletProvider.ts","../src/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.ts","../src/utils/convertNetworkIdToSatsConnectNetworkType/convertNetworkIdToSatsConnectNetworkType.ts","../src/utils/getPsbtInputsToSignForSatsConnect/getPsbtInputsToSignForSatsConnect.ts","../src/utils/getSatsConnectSigningProtocol/getSatsConnectSigningProtocol.ts","../src/utils/parseBitcoinConnectionResult/parseBitcoinConnectionResult.ts","../src/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/createMagicEdenBitcoinWalletProvider.ts","../src/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.ts","../src/injected/utils/okx/createOkxBitcoinWalletProvider/createOkxBitcoinWalletProvider.ts","../src/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.ts","../src/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/createOneKeyBitcoinWalletProvider.ts","../src/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.ts","../src/injected/utils/oyl/createOylBitcoinWalletProvider/createOylBitcoinWalletProvider.ts","../src/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.ts","../src/injected/utils/phantom/createPhantomBitcoinWalletProvider/createPhantomBitcoinWalletProvider.ts","../src/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.ts","../src/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.ts","../src/utils/signMultipleTransactionsWithSatsConnect/signMultipleTransactionsWithSatsConnect.ts","../src/injected/utils/xverse/createXverseBitcoinWalletProvider/createXverseBitcoinWalletProvider.ts","../src/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.ts","../src/injected/addBitcoinInjectedWalletsExtension/addBitcoinInjectedWalletsExtension.ts"],"sourcesContent":["","export const MEMPOOL_API_URL = 'https://mempool.space/api';\nexport const MEMPOOL_API_URL_TESTNET = 'https://mempool.space/testnet/api';\nexport const MEMPOOL_API_URL_SIGNET = 'https://mempool.space/signet/api';\n","import { MEMPOOL_API_URL, MEMPOOL_API_URL_TESTNET } from '../../constants';\n\n/** @not-instrumented */\nexport const getMempoolApiUrl = (address: string) =>\n address.startsWith('t') ? MEMPOOL_API_URL_TESTNET : MEMPOOL_API_URL;\n","/** @not-instrumented */\nexport const satoshisToBtc = (satoshis: number) => satoshis / 100000000;\n","import { getMempoolApiUrl } from '../getMempoolApiUrl';\nimport { satoshisToBtc } from '../satoshisToBtc';\n\n/** @not-instrumented */\nexport const fetchBtcBalance = async ({\n address,\n}: {\n address: string;\n}): Promise<string | null> => {\n const API_URL = getMempoolApiUrl(address);\n\n const response = await fetch(`${API_URL}/address/${address}`);\n\n if (!response.ok) {\n return null;\n }\n\n const addressInfo = await response.json();\n\n if (!addressInfo?.chain_stats || !addressInfo?.mempool_stats) {\n return null;\n }\n\n const confirmedBalanceInSats =\n Number(addressInfo.chain_stats.funded_txo_sum) -\n Number(addressInfo.chain_stats.spent_txo_sum);\n\n const unconfirmedBalanceInSats =\n Number(addressInfo.mempool_stats.funded_txo_sum) -\n Number(addressInfo.mempool_stats.spent_txo_sum);\n\n const balance = satoshisToBtc(\n confirmedBalanceInSats + unconfirmedBalanceInSats\n );\n\n return balance.toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { BitcoinNetworkProvider } from '../../BitcoinNetworkProvider.types';\nimport { fetchBtcBalance } from '../fetchBtcBalance';\n\n/** @not-instrumented */\nexport const createBitcoinNetworkProvider = (\n networkData: NetworkData\n): BitcoinNetworkProvider => ({\n ...createBaseNetworkProvider('BTC', networkData),\n cluster: networkData.cluster,\n getBalance: async ({ address }) => ({\n balance: await fetchBtcBalance({\n address,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createBitcoinNetworkProvider } from '../utils/createBitcoinNetworkProvider';\n\n/** @not-instrumented */\nexport const registerBitcoinNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n /**\n * If the Bitcoin network provider builder is already registered, return.\n */\n if (networkProviderBuilderRegistry.get().get('BTC')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createBitcoinNetworkProvider,\n chain: 'BTC',\n });\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { BitcoinWalletAccount } from '../BitcoinWalletAccount.types';\n\n/**\n * Type guard function to check if a wallet account is a Bitcoin wallet account.\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Bitcoin wallet account, false otherwise.\n * @not-instrumented\n */\nexport const isBitcoinWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is BitcoinWalletAccount => walletAccount.chain === 'BTC';\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { BitcoinWalletProvider } from '../BitcoinWalletProvider.types';\n\n/** @not-instrumented */\nexport const isBitcoinWalletProvider = (\n provider: WalletProvider\n): provider is BitcoinWalletProvider => {\n return provider.chain === 'BTC';\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\ntype SendBitcoinRawTransactionErrorParams = {\n originalError: unknown;\n};\n\nexport class SendBitcoinRawTransactionError extends BaseError {\n constructor({ originalError }: SendBitcoinRawTransactionErrorParams) {\n const cause = originalError instanceof Error ? originalError : null;\n\n super({\n cause,\n code: 'send_bitcoin_raw_transaction_error',\n docsUrl: null,\n name: 'SendBitcoinRawTransactionError',\n shortMessage: 'Failed to send Bitcoin raw transaction',\n });\n }\n}\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\n\nimport type { BitcoinWalletAccount } from '../BitcoinWalletAccount.types';\nimport { SendBitcoinRawTransactionError } from '../errors/SendBitcoinRawTransactionError';\nimport { getMempoolApiUrl } from '../utils/getMempoolApiUrl';\n\ntype SendRawTransactionParams = {\n rawTransaction: string;\n walletAccount: BitcoinWalletAccount;\n};\n\n/**\n * Sends a raw transaction using the mempool.space API\n * @param params.rawTransaction - The raw transaction to send\n * @param params.walletAccount - The wallet account to send the transaction from\n * @returns An object containing the transaction id\n * @not-instrumented\n */\nexport const sendRawTransaction = async (\n { rawTransaction, walletAccount }: SendRawTransactionParams,\n client = getDefaultClient()\n): Promise<{\n transactionId: string;\n}> => {\n const fetchService = getCore(client).fetch;\n\n const API_URL = getMempoolApiUrl(walletAccount.address);\n\n const response = await fetchService(`${API_URL}/tx`, {\n body: rawTransaction,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n method: 'POST',\n });\n\n if (!response.ok) {\n throw new SendBitcoinRawTransactionError({\n originalError: await response.text(),\n });\n }\n\n // this endpoint returns the transaction ID\n const transactionId = await response.text();\n\n return { transactionId };\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteCheckoutTransactionParams,\n ExecuteCheckoutTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\nimport { Psbt } from 'bitcoinjs-lib';\n\nimport type { BitcoinSigningPayload } from '../../checkoutTransaction.types';\nimport { isBitcoinWalletAccount } from '../../isBitcoinWalletAccount';\nimport { isBitcoinWalletProvider } from '../../isBitcoinWalletProvider';\nimport { sendRawTransaction } from '../../sendRawTransaction';\n\n/** @not-instrumented */\nexport const bitcoinExecuteCheckoutTransaction = async (\n {\n onStepChange,\n signingPayload,\n walletAccount,\n }: ExecuteCheckoutTransactionParams,\n client: DynamicClient\n): Promise<ExecuteCheckoutTransactionResult> => {\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (\n !isBitcoinWalletAccount(walletAccount) ||\n !isBitcoinWalletProvider(provider)\n ) {\n throw new InvalidParamError(\n 'Wallet account is not a Bitcoin wallet account'\n );\n }\n\n const bitcoinPayload = signingPayload as BitcoinSigningPayload;\n\n if (!bitcoinPayload.psbtTransaction?.psbt) {\n throw new InvalidParamError(\n 'Signing payload is missing PSBT transaction data'\n );\n }\n\n onStepChange?.('transaction');\n\n const { signedPsbt } = await provider.signPsbt({\n request: {\n allowedSighash: [1],\n unsignedPsbtBase64: bitcoinPayload.psbtTransaction.psbt,\n },\n walletAccount,\n });\n\n const psbt = Psbt.fromBase64(signedPsbt);\n\n psbt.finalizeAllInputs();\n\n const rawTxHex = psbt.extractTransaction().toHex();\n\n const { transactionId } = await sendRawTransaction(\n { rawTransaction: rawTxHex, walletAccount },\n client\n );\n\n return { transactionHash: transactionId };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotBitcoinProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_bitcoin_provider_error',\n docsUrl: null,\n name: 'NotBitcoinProviderError',\n shortMessage: 'Provider is not a Bitcoin wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport {\n MethodNotImplementedError,\n getWalletProviderFromWalletAccount,\n} from '@dynamic-labs-sdk/client/core';\n\nimport type { BitcoinWalletAccount } from '../BitcoinWalletAccount.types';\nimport type {\n BitcoinSendTransactionResponse,\n BitcoinTransaction,\n} from '../BitcoinWalletProvider.types';\nimport { NotBitcoinProviderError } from '../errors/NotBitcoinProviderError';\nimport { isBitcoinWalletProvider } from '../isBitcoinWalletProvider';\n\ntype SendBitcoinParams = {\n transaction: BitcoinTransaction;\n walletAccount: BitcoinWalletAccount;\n};\n\n/**\n * Sends a Bitcoin transaction\n * @param params.transaction - The transaction to send\n * @param params.walletAccount - The wallet account to send the transaction from\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the transaction id\n * @throws {MethodNotImplementedError} If the wallet provider does not implement the sendBitcoin method\n * @throws {NotBitcoinProviderError} If the wallet account is not a valid BitcoinWalletAccount\n * @not-instrumented\n */\nexport const sendBitcoin = async (\n { walletAccount, transaction }: SendBitcoinParams,\n client = getDefaultClient()\n): Promise<BitcoinSendTransactionResponse> => {\n const provider = getWalletProviderFromWalletAccount(\n {\n walletAccount,\n },\n client\n );\n\n if (!isBitcoinWalletProvider(provider)) {\n throw new NotBitcoinProviderError({ providerKey: provider.key });\n }\n\n if (!provider.sendBitcoin) {\n throw new MethodNotImplementedError('sendBitcoin');\n }\n\n return provider.sendBitcoin({ transaction, walletAccount });\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { InvalidParamError } from '@dynamic-labs-sdk/client';\nimport {\n type TransferAmountParams,\n parseAmountToSmallestUnit,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { isBitcoinWalletAccount } from '../../isBitcoinWalletAccount';\nimport { sendBitcoin } from '../../sendBitcoin';\n\nconst BTC_DECIMALS = 8;\n\n/**\n * Transfers native BTC from one wallet to another.\n *\n * Converts the human-readable BTC amount string to satoshis (8 decimals)\n * and delegates to `sendBitcoin`.\n *\n * @param params.amount - The amount in BTC as a decimal string (e.g. \"0.001\").\n * @param params.recipient - The recipient Bitcoin address.\n * @param params.walletAccount - The wallet account to send from.\n * @param client - The Dynamic client instance.\n * @returns An object containing the transaction hash.\n * @not-instrumented\n */\nexport const bitcoinTransferAmount = async (\n { amount, recipient, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isBitcoinWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Bitcoin wallet account'\n );\n }\n\n const satoshis = parseAmountToSmallestUnit({ amount, decimals: BTC_DECIMALS });\n\n const result = await sendBitcoin(\n {\n transaction: {\n amount: satoshis,\n recipientAddress: recipient,\n },\n walletAccount,\n },\n client\n );\n\n return { transactionHash: result.transactionId };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class InvalidPsbtError extends BaseError {\n constructor(message: string) {\n super({\n cause: null,\n code: 'invalid_psbt_error',\n docsUrl: null,\n name: 'InvalidPsbtError',\n shortMessage: message,\n });\n }\n}\n","import { type Psbt, Transaction, payments } from 'bitcoinjs-lib';\n\ntype GetSigHashTypeParams = {\n input: Psbt['data']['inputs'][0];\n};\n\n/**\n * This method will return the signature hash type for the current input.\n * If there is a sighashType, it will return that\n * If there is a witnessUtxo AND it is a taproot address, then it will return SIGHASH_DEFAULT\n * Otherwise, it will return SIGHASH_ALL\n * @not-instrumented\n */\nexport const getSigHashType = ({ input }: GetSigHashTypeParams) => {\n if (input?.sighashType) {\n return input.sighashType;\n }\n\n let isTaprootAddress = false;\n\n if (input.witnessUtxo?.script) {\n try {\n payments.p2tr({\n output: input.witnessUtxo.script,\n });\n isTaprootAddress = true;\n } catch {\n // do nothing - address is not taproot\n }\n }\n\n return isTaprootAddress\n ? Transaction.SIGHASH_DEFAULT\n : Transaction.SIGHASH_ALL;\n};\n","import type { Psbt } from 'bitcoinjs-lib';\n\nimport { InvalidPsbtError } from '../../../errors/InvalidPsbtError';\nimport { getSigHashType } from '../../getSigHashType';\n\ntype ValidateSigHashParams = {\n allowedSigHashTypes: number[];\n input: Psbt['data']['inputs'][0];\n};\n\n/** @not-instrumented */\nexport const validateSigHash = ({\n allowedSigHashTypes,\n input,\n}: ValidateSigHashParams) => {\n const sigHashType = getSigHashType({ input });\n\n // if the request has allowedSigHashTypes, then we need to make sure that the sigHashType\n // is a member of that array before continuing\n if (\n allowedSigHashTypes?.length &&\n !allowedSigHashTypes.includes(sigHashType)\n ) {\n throw new InvalidPsbtError(\n `sigHashType ${sigHashType} not in allowed list`\n );\n }\n};\n","import { type Psbt, Transaction, address } from 'bitcoinjs-lib';\n\ntype ExtractAddressFromInputParams = {\n index: number;\n input: Psbt['data']['inputs'][0];\n psbt: Psbt;\n};\n\n/**\n * This method extracts the address from the input data of the psbt.\n * The address is stored as script (Buffer) in either the witnessUtxo or nonWitnessUtxo as an output\n * @not-instrumented\n */\nexport const extractAddressFromInput = ({\n index,\n input,\n psbt,\n}: ExtractAddressFromInputParams): string | undefined => {\n let extractedAddress: string | undefined;\n\n try {\n if (input.witnessUtxo?.script) {\n extractedAddress = address.fromOutputScript(input.witnessUtxo.script);\n }\n\n if (input.nonWitnessUtxo) {\n const nonWitnessTxn = Transaction.fromBuffer(input.nonWitnessUtxo);\n const txOut = nonWitnessTxn.outs[psbt.txInputs[index].index];\n\n extractedAddress = address.fromOutputScript(txOut.script);\n }\n\n return extractedAddress;\n } catch {\n return extractedAddress;\n }\n};\n","import type { Psbt } from 'bitcoinjs-lib';\n\nimport { InvalidPsbtError } from '../../../errors/InvalidPsbtError';\nimport { extractAddressFromInput } from '../extractAddressFromInput';\n\ntype ValidateSigningAddressParams = {\n index: number;\n inputAtIndex: Psbt['data']['inputs'][0];\n psbt: Psbt;\n signingAddress: string;\n};\n\n/** @not-instrumented */\nexport const validateSigningAddress = ({\n index,\n inputAtIndex,\n psbt,\n signingAddress,\n}: ValidateSigningAddressParams) => {\n // we need to extract the address from the input at the current signing index\n // to be able to compare it to the address provided in the request for the current index\n const extractedAddress = extractAddressFromInput({\n index,\n input: inputAtIndex,\n psbt,\n });\n\n if (!extractedAddress) {\n throw new InvalidPsbtError(\n `Could not extract address from input at index ${index}`\n );\n }\n\n if (extractedAddress !== signingAddress) {\n throw new InvalidPsbtError(\n `Signing address does not match with address extracted from input at index ${index}`\n );\n }\n};\n","import type { Psbt } from 'bitcoinjs-lib';\n\nimport type { BitcoinSignPsbtRequestSignature } from '../../BitcoinWalletProvider.types';\nimport { InvalidPsbtError } from '../../errors/InvalidPsbtError';\nimport { validateSigHash } from './validateSigHash';\nimport { validateSigningAddress } from './validateSigningAddress';\n\ntype ValidatePsbtParams = {\n allowedSigHashTypes: number[];\n psbt: Psbt;\n signatureData?: BitcoinSignPsbtRequestSignature[];\n};\n\n/**\n * This method will validate the psbt against the signature data provided in the request\n * It checks 3 things:\n * - That the signing index exists in the input\n * - That the address provided in the request matches the address in the input,\n * unless the disableAddressValidation flag is set\n * - That the sigHashType of the input is a member of the allowedSigHashTypes array\n * @not-instrumented\n */\nexport const validatePsbt = ({\n allowedSigHashTypes,\n psbt,\n signatureData,\n}: ValidatePsbtParams) => {\n if (!signatureData?.length) {\n return;\n }\n\n for (const input of signatureData) {\n const {\n address: signingAddress,\n signingIndexes,\n // request from ME in cases of multi-sig. Steven wanted this defaulted to true\n disableAddressValidation = true,\n } = input;\n\n if (!signingIndexes?.length) {\n return;\n }\n\n if (!signingAddress) {\n throw new InvalidPsbtError('Missing signing address');\n }\n\n for (const index of signingIndexes) {\n const inputAtIndex = psbt.data.inputs[index];\n\n if (!inputAtIndex) {\n throw new InvalidPsbtError(`Missing input for index ${index}`);\n }\n\n if (!disableAddressValidation) {\n validateSigningAddress({\n index,\n inputAtIndex,\n psbt,\n signingAddress,\n });\n }\n\n validateSigHash({ allowedSigHashTypes, input: inputAtIndex });\n }\n }\n};\n","import type { Psbt } from 'bitcoinjs-lib';\n\nimport type {\n BitcoinSignPsbtRequest,\n SignPsbtOptions,\n} from '../../BitcoinWalletProvider.types';\nimport { validatePsbt } from '../validatePsbt';\n\ntype CreatePsbtOptionsParams = {\n psbt: Psbt;\n request: BitcoinSignPsbtRequest;\n};\n\n/**\n * This method will create the psbt sign options for the given request\n * It will validate the psbt against the signature data provided in the request\n * It will return the psbt sign options with the toSignInputs added if the signature data is provided\n * @not-instrumented\n */\nexport const createPsbtOptions = ({\n psbt,\n request,\n}: CreatePsbtOptionsParams) => {\n const psbtSignOptions: SignPsbtOptions = {\n autoFinalized: false,\n };\n\n if (!request.signature) {\n return psbtSignOptions;\n }\n\n validatePsbt({\n allowedSigHashTypes: request.allowedSighash,\n psbt,\n signatureData: request.signature,\n });\n\n const toSignInputs: SignPsbtOptions['toSignInputs'] = [];\n\n for (const signature of request.signature) {\n if (signature.signingIndexes?.length) {\n for (const index of signature.signingIndexes) {\n toSignInputs.push({\n address: signature.address,\n disableAddressValidation: signature.disableAddressValidation,\n index,\n sighashTypes: request.allowedSighash,\n });\n }\n }\n }\n\n psbtSignOptions.toSignInputs = toSignInputs;\n\n return psbtSignOptions;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworksData } from '@dynamic-labs-sdk/client';\n\ntype getNetworkIdFromNetworkNameParams = {\n networkName: string;\n};\n\n/** @not-instrumented */\nexport const getNetworkIdFromNetworkName = (\n { networkName }: getNetworkIdFromNetworkNameParams,\n client: DynamicClient\n) => {\n const networksData = getNetworksData(client);\n const btcNetworkData = networksData.filter((data) => data.chain === 'BTC');\n\n // try to find the correct networkId based on the network name (cluster)\n // if not found, default to mainnet ('1');\n const networkId =\n btcNetworkData.find((data) => data.cluster === networkName)?.networkId ??\n '1';\n\n return { networkId };\n};\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n} from '@dynamic-labs-sdk/client';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Psbt } from 'bitcoinjs-lib';\n\nimport type { BitcoinWalletProvider } from '../../../../BitcoinWalletProvider.types';\nimport { bitcoinExecuteCheckoutTransaction } from '../../../../utils/bitcoinExecuteCheckoutTransaction';\nimport { bitcoinTransferAmount } from '../../../../utils/bitcoinTransferAmount';\nimport { createPsbtOptions } from '../../../../utils/createPsbtOptions';\nimport { getNetworkIdFromNetworkName } from '../../../../utils/getNetworkIdFromNetworkName';\nimport type { BinanceBitcoinInjectedProvider } from '../BinanceBitcoinInjectedProvider.types';\n\nexport const BINANCE_METADATA: WalletProviderMetadata = {\n displayName: 'Binance Wallet',\n icon: `${DYNAMIC_ICONIC_SPRITE_URL}#onekey`,\n};\n\ntype CreateBinanceBitcoinWalletProviderParams = {\n dynamicClient: DynamicClient;\n injectedProvider: BinanceBitcoinInjectedProvider;\n};\n\n/** @not-instrumented */\nexport const createBinanceBitcoinWalletProvider = ({\n dynamicClient,\n injectedProvider,\n}: CreateBinanceBitcoinWalletProviderParams): BitcoinWalletProvider => {\n const chain: Chain = 'BTC';\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: BINANCE_METADATA.displayName,\n walletProviderType,\n });\n\n const connect: BitcoinWalletProvider['connect'] = async () => {\n const accounts = await injectedProvider.requestAccounts();\n\n const address = accounts[0];\n const publicKey = await injectedProvider.getPublicKey();\n\n return {\n addresses: [{ address, publicKey }],\n };\n };\n\n const getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId'] =\n async () => {\n const network = await injectedProvider.getNetwork();\n\n return getNetworkIdFromNetworkName(\n { networkName: network },\n dynamicClient\n );\n };\n\n const getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses'] =\n async () => {\n const accounts = await injectedProvider.getAccounts();\n\n return {\n addresses: accounts,\n };\n };\n\n const signMessage: BitcoinWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n protocol,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signedMessage = await injectedProvider.signMessage(message, protocol);\n\n return {\n signature: signedMessage,\n };\n };\n\n const signPsbt: BitcoinWalletProvider['signPsbt'] = async ({\n request,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);\n const psbtOptions = createPsbtOptions({ psbt: psbtFromBase64, request });\n\n const signedPsbtHex = await injectedProvider.signPsbt(\n psbtFromBase64.toHex(),\n {\n autoFinalized: false,\n toSignInputs: psbtOptions.toSignInputs || [],\n }\n );\n\n return { signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64() };\n };\n\n const signPsbts: BitcoinWalletProvider['signPsbts'] = async ({\n requests,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signedPsbts: string[] = [];\n\n for (const request of requests) {\n const signedPsbtResponse = await signPsbt({ request, walletAccount });\n\n if (signedPsbtResponse) {\n signedPsbts.push(signedPsbtResponse.signedPsbt);\n }\n }\n\n return {\n signedPsbts,\n };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter({\n removeEventListeners: () => {\n injectedProvider?.removeAllListeners();\n },\n\n setupEventListeners: ({\n handleAccountsChanged,\n handleNetworkChanged,\n }) => {\n injectedProvider?.on('accountsChanged', (addresses) => {\n handleAccountsChanged({ addresses });\n });\n\n injectedProvider?.on('networkChanged', (network) => {\n handleNetworkChanged({ networkId: network });\n });\n },\n\n supportedEvents: ['accountsChanged', 'networkChanged'],\n });\n\n const terminate: BitcoinWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n return {\n chain,\n connect,\n get events() {\n return getEventEmitter();\n },\n executeCheckoutTransaction: (args) =>\n bitcoinExecuteCheckoutTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(BINANCE_METADATA.displayName),\n key,\n metadata: BINANCE_METADATA,\n signMessage,\n signPsbt,\n signPsbts,\n terminate,\n transferAmount: (args) => bitcoinTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import { getInjectedProviderFromWindow } from '@dynamic-labs-sdk/client/core';\n\nimport type { BinanceBitcoinInjectedProvider } from '../BinanceBitcoinInjectedProvider.types';\n\nconst BINANCE_BITCOIN_PROVIDER_LOCATOR = 'binancew3w.bitcoin';\n\n/** @not-instrumented */\nexport const getBinanceBitcoinInjectedProvider = () => {\n return getInjectedProviderFromWindow<BinanceBitcoinInjectedProvider>(\n BINANCE_BITCOIN_PROVIDER_LOCATOR\n );\n};\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n} from '@dynamic-labs-sdk/client';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Psbt } from 'bitcoinjs-lib';\n\nimport type {\n BitcoinSendTransactionResponse,\n BitcoinWalletProvider,\n SignPsbtOptions,\n} from '../../../../BitcoinWalletProvider.types';\nimport { bitcoinExecuteCheckoutTransaction } from '../../../../utils/bitcoinExecuteCheckoutTransaction';\nimport { bitcoinTransferAmount } from '../../../../utils/bitcoinTransferAmount';\nimport { createPsbtOptions } from '../../../../utils/createPsbtOptions';\nimport { getNetworkIdFromNetworkName } from '../../../../utils/getNetworkIdFromNetworkName';\nimport type { UnisatInjectedProvider } from '../UnisatInjectedProvider.types';\n\nexport const UNISAT_METADATA: WalletProviderMetadata = {\n displayName: 'UniSat',\n icon: `${DYNAMIC_ICONIC_SPRITE_URL}#unisat`,\n};\n\ntype CreateUnisatWalletProviderParams = {\n dynamicClient: DynamicClient;\n injectedProvider: UnisatInjectedProvider;\n};\n\n/** @not-instrumented */\nexport const createUnisatWalletProvider = ({\n dynamicClient,\n injectedProvider,\n}: CreateUnisatWalletProviderParams): BitcoinWalletProvider => {\n const chain: Chain = 'BTC';\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: UNISAT_METADATA.displayName,\n walletProviderType,\n });\n\n const connect: BitcoinWalletProvider['connect'] = async () => {\n const addresses = await injectedProvider.requestAccounts();\n\n return {\n addresses: addresses.map((address) => ({\n address,\n })),\n };\n };\n\n const disconnect: BitcoinWalletProvider['disconnect'] = async () => {\n return injectedProvider.disconnect();\n };\n\n const getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId'] =\n async () => {\n const chain = await injectedProvider.getChain();\n\n let networkName = 'mainnet';\n if (chain.enum === 'BITCOIN_TESTNET') {\n networkName = 'testnet';\n } else if (chain.enum === 'BITCOIN_SIGNET') {\n networkName = 'signet';\n }\n\n return getNetworkIdFromNetworkName({ networkName }, dynamicClient);\n };\n\n const getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses'] =\n async () => {\n const accounts = await injectedProvider.getAccounts();\n\n return {\n addresses: accounts,\n };\n };\n\n const sendBitcoin: BitcoinWalletProvider['sendBitcoin'] = async ({\n transaction,\n walletAccount,\n }): Promise<BitcoinSendTransactionResponse> => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const transactionId = await injectedProvider.sendBitcoin(\n transaction.recipientAddress,\n Number(transaction.amount)\n );\n\n return {\n transactionId,\n };\n };\n\n const signMessage: BitcoinWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n protocol,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signedMessage = await injectedProvider.signMessage(message, protocol);\n\n return {\n signature: signedMessage,\n };\n };\n\n const signPsbt: BitcoinWalletProvider['signPsbt'] = async ({\n request,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);\n\n const signedPsbtHex = await injectedProvider.signPsbt(\n psbtFromBase64.toHex(),\n createPsbtOptions({ psbt: psbtFromBase64, request })\n );\n\n return { signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64() };\n };\n\n const signPsbts: BitcoinWalletProvider['signPsbts'] = async ({\n requests,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const psbtHexs: string[] = [];\n const psbtOptions: SignPsbtOptions[] = [];\n\n for (const request of requests) {\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);\n\n psbtHexs.push(psbtFromBase64.toHex());\n psbtOptions.push(createPsbtOptions({ psbt: psbtFromBase64, request }));\n }\n\n const signedPsbtHexs = await injectedProvider.signPsbts(\n psbtHexs,\n psbtOptions\n );\n\n return {\n signedPsbts: signedPsbtHexs.map((signedPsbtHex) =>\n Psbt.fromHex(signedPsbtHex).toBase64()\n ),\n };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter({\n removeEventListeners: () => {\n injectedProvider?.removeAllListeners();\n },\n\n setupEventListeners: ({\n handleAccountsChanged,\n handleNetworkChanged,\n }) => {\n injectedProvider?.on('accountsChanged', (addresses) => {\n handleAccountsChanged({ addresses });\n });\n\n injectedProvider?.on('networkChanged', (network) => {\n handleNetworkChanged({ networkId: network });\n });\n },\n\n supportedEvents: ['accountsChanged', 'networkChanged'],\n });\n\n const terminate: BitcoinWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n return {\n chain,\n connect,\n disconnect,\n get events() {\n return getEventEmitter();\n },\n executeCheckoutTransaction: (args) =>\n bitcoinExecuteCheckoutTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(UNISAT_METADATA.displayName),\n key,\n metadata: UNISAT_METADATA,\n sendBitcoin,\n signMessage,\n signPsbt,\n signPsbts,\n terminate,\n transferAmount: (args) => bitcoinTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import {\n type DynamicClient,\n type WalletProviderMetadata,\n} from '@dynamic-labs-sdk/client';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\n\nimport type { BitcoinWalletProvider } from '../../../../BitcoinWalletProvider.types';\nimport type { UnisatInjectedProvider } from '../../unisat/UnisatInjectedProvider.types';\nimport { createUnisatWalletProvider } from '../../unisat/createUnisatWalletProvider';\n\nexport const BITGET_METADATA: WalletProviderMetadata = {\n displayName: 'Bitget Wallet',\n icon: `${DYNAMIC_ICONIC_SPRITE_URL}#bitgetwallet`,\n};\n\ntype CreateBitgetBitcoinWalletProviderParams = {\n dynamicClient: DynamicClient;\n injectedProvider: UnisatInjectedProvider;\n};\n\n// The Bitget provider interface is the same as Unisat provider interface\n// https://docs.bitkeep.com/en/docs/guide/wallet/btc.html\n/** @not-instrumented */\nexport const createBitgetBitcoinWalletProvider = ({\n dynamicClient,\n injectedProvider,\n}: CreateBitgetBitcoinWalletProviderParams): BitcoinWalletProvider => {\n const unisatWalletProvider = createUnisatWalletProvider({\n dynamicClient,\n injectedProvider,\n });\n\n return {\n ...unisatWalletProvider,\n groupKey: formatWalletProviderGroupKey(BITGET_METADATA.displayName),\n key: formatWalletProviderKey({\n chain: unisatWalletProvider.chain,\n displayName: BITGET_METADATA.displayName,\n walletProviderType: unisatWalletProvider.walletProviderType,\n }),\n metadata: BITGET_METADATA,\n };\n};\n","import { getInjectedProviderFromWindow } from '@dynamic-labs-sdk/client/core';\n\nimport type { UnisatInjectedProvider } from '../../unisat/UnisatInjectedProvider.types';\n\nconst BITGET_BITCOIN_PROVIDER_LOCATOR = 'bitkeep.unisat';\n\n// The Bitget provider interface is the same as Unisat provider interface\n// https://docs.bitkeep.com/en/docs/guide/wallet/btc.html\n/** @not-instrumented */\nexport const getBitgetBitcoinInjectedProvider = () => {\n return getInjectedProviderFromWindow<UnisatInjectedProvider>(\n BITGET_BITCOIN_PROVIDER_LOCATOR\n );\n};\n","import { networks } from 'bitcoinjs-lib';\n\n/** @not-instrumented */\nexport const convertNetworkIdForPsbt = (networkId: string) => {\n if (networkId === '1') {\n return networks.bitcoin;\n }\n\n // use networks.testnet for both testnet and signet\n if (networkId === '2' || networkId === '3') {\n return networks.testnet;\n }\n\n return undefined;\n};\n","import type { LeatherNetworkName } from '../LeatherBitcoinInjectedProvider.types';\n\n/** @not-instrumented */\nexport const convertNetworkIdToLeatherNetworkName = (\n networkId: string\n): LeatherNetworkName | undefined => {\n if (networkId === '1') {\n return 'mainnet';\n }\n\n if (networkId === '2') {\n return 'testnet';\n }\n\n if (networkId === '3') {\n return 'signet';\n }\n\n return undefined;\n};\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n} from '@dynamic-labs-sdk/client';\nimport type { WalletProviderConnectAddress } from '@dynamic-labs-sdk/client/core';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n assertDefined,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport type { BitcoinPaymentTypes } from '@leather.io/rpc';\nimport { Psbt } from 'bitcoinjs-lib';\n\nimport type { BitcoinWalletProvider } from '../../../../BitcoinWalletProvider.types';\nimport { bitcoinExecuteCheckoutTransaction } from '../../../../utils/bitcoinExecuteCheckoutTransaction';\nimport { bitcoinTransferAmount } from '../../../../utils/bitcoinTransferAmount';\nimport { convertNetworkIdForPsbt } from '../../../../utils/convertNetworkIdForPsbt';\nimport type { LeatherBitcoinInjectedProvider } from '../LeatherBitcoinInjectedProvider.types';\nimport { convertNetworkIdToLeatherNetworkName } from '../convertNetworkIdToLeatherNetworkName';\n\nexport const LEATHER_METADATA: WalletProviderMetadata = {\n displayName: 'Leather',\n icon: `${DYNAMIC_ICONIC_SPRITE_URL}#leather`,\n supportedHardwareWalletVendors: ['ledger'],\n};\n\ntype CreateLeatherBitcoinWalletProviderParams = {\n dynamicClient: DynamicClient;\n injectedProvider: LeatherBitcoinInjectedProvider;\n};\n\n/** @not-instrumented */\nexport const createLeatherBitcoinWalletProvider = ({\n dynamicClient,\n injectedProvider,\n}: CreateLeatherBitcoinWalletProviderParams): BitcoinWalletProvider => {\n const chain: Chain = 'BTC';\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: LEATHER_METADATA.displayName,\n walletProviderType,\n });\n\n const getNetworkPayload = async () => {\n const { networkId } = await getActiveNetworkId();\n const networkName = convertNetworkIdToLeatherNetworkName(networkId);\n\n return {\n networkId,\n networkName,\n };\n };\n\n const connect: BitcoinWalletProvider['connect'] = async () => {\n const response = await injectedProvider\n .request('getAddresses')\n .catch(({ error }) => {\n throw error;\n });\n\n const connectedAddresses = response.result.addresses;\n\n const addresses: WalletProviderConnectAddress[] = [];\n\n const ordinalsAddress = connectedAddresses?.find(\n (address) => address.type === 'p2tr'\n );\n\n if (ordinalsAddress) {\n addresses.push({\n address: ordinalsAddress.address,\n publicKey: ordinalsAddress.publicKey,\n type: 'ordinals',\n });\n }\n\n const paymentAddress = connectedAddresses?.find(\n (address) => address.type === 'p2wpkh'\n );\n\n if (paymentAddress) {\n addresses.push({\n address: paymentAddress.address,\n publicKey: paymentAddress.publicKey,\n type: 'payment',\n });\n }\n\n return {\n addresses,\n };\n };\n\n const getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n // there's no specific method to get connected addresses in Leather\n const getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses'] =\n async () => {\n const accounts = await connect();\n return {\n addresses: accounts.addresses.map((address) => address.address),\n };\n };\n\n const sendBitcoin: BitcoinWalletProvider['sendBitcoin'] = async ({\n transaction,\n }) => {\n const { networkName } = await getNetworkPayload();\n\n const response = await injectedProvider\n .request('sendTransfer', {\n account: 0,\n address: transaction.recipientAddress,\n amount: transaction.amount.toString(),\n // network is required, so fallback to mainnet\n network: networkName ?? 'mainnet',\n })\n .catch(({ error }) => {\n throw error;\n });\n\n return {\n transactionId: response.result.txid,\n };\n };\n\n const signMessage: BitcoinWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n addressType,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n let paymentType: BitcoinPaymentTypes = 'p2tr';\n if (addressType === 'payment') {\n paymentType = 'p2wpkh';\n }\n\n const { networkName } = await getNetworkPayload();\n\n const response = await injectedProvider\n .request('signMessage', {\n message,\n network: networkName,\n paymentType,\n })\n .catch(({ error }) => {\n throw error;\n });\n\n return {\n signature: response.result.signature,\n };\n };\n\n const signPsbt: BitcoinWalletProvider['signPsbt'] = async ({ request }) => {\n const { networkId, networkName } = await getNetworkPayload();\n const psbtNetwork = convertNetworkIdForPsbt(networkId);\n\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64, {\n network: psbtNetwork,\n });\n\n const signAtIndex = request.signature\n ?.flatMap((sig) => sig.signingIndexes)\n .filter(Number.isInteger) as number[] | undefined;\n\n const response = await injectedProvider\n .request('signPsbt', {\n account: 0,\n allowedSighash: request.allowedSighash,\n broadcast: false,\n hex: psbtFromBase64.toHex(),\n // network is required, so fallback to mainnet\n network: networkName ?? 'mainnet',\n signAtIndex,\n })\n .catch(({ error }) => {\n throw error;\n });\n\n const signedPsbtHex = response.result.hex;\n\n return {\n signedPsbt: Psbt.fromHex(signedPsbtHex, {\n network: psbtNetwork,\n }).toBase64(),\n };\n };\n\n const signPsbts: BitcoinWalletProvider['signPsbts'] = async ({\n requests,\n walletAccount,\n }) => {\n const signedPsbts: string[] = [];\n\n for (const request of requests) {\n const signedPsbtResponse = await signPsbt({ request, walletAccount });\n\n if (signedPsbtResponse) {\n signedPsbts.push(signedPsbtResponse.signedPsbt);\n }\n }\n\n return {\n signedPsbts,\n };\n };\n\n return {\n chain,\n connect,\n executeCheckoutTransaction: (args) =>\n bitcoinExecuteCheckoutTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(LEATHER_METADATA.displayName),\n key,\n metadata: LEATHER_METADATA,\n sendBitcoin,\n signMessage,\n signPsbt,\n signPsbts,\n transferAmount: (args) => bitcoinTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import { getInjectedProviderFromWindow } from '@dynamic-labs-sdk/client/core';\n\nimport type { LeatherBitcoinInjectedProvider } from '../LeatherBitcoinInjectedProvider.types';\n\nconst LEATHER_BITCOIN_PROVIDER_LOCATOR = 'LeatherProvider';\n\n/** @not-instrumented */\nexport const getLeatherBitcoinInjectedProvider = () => {\n return getInjectedProviderFromWindow<LeatherBitcoinInjectedProvider>(\n LEATHER_BITCOIN_PROVIDER_LOCATOR\n );\n};\n","import { BitcoinNetworkType } from 'sats-connect';\n\n/** @not-instrumented */\nexport const convertNetworkIdToSatsConnectNetworkType = (networkId: string) => {\n if (networkId === '2') {\n return BitcoinNetworkType.Testnet;\n }\n\n if (networkId === '3') {\n return BitcoinNetworkType.Signet;\n }\n\n // fallback to mainnet\n return BitcoinNetworkType.Mainnet;\n};\n","import type { Psbt } from 'bitcoinjs-lib';\nimport type { InputToSign } from 'sats-connect';\n\nimport type { BitcoinSignPsbtRequest } from '../../BitcoinWalletProvider.types';\nimport { getSigHashType } from '../getSigHashType';\nimport { validatePsbt } from '../validatePsbt';\n\ntype GetPsbtInputsToSignForSatsConnectParams = {\n isLegacySatsConnect?: boolean;\n psbt: Psbt;\n request: BitcoinSignPsbtRequest;\n};\n\n/**\n * This method will create the psbt sign options for SatsConnect for the given request\n * It will validate the psbt against the signature data provided in the request\n * It will return the inputs to sign if the signature data is provided\n * @not-instrumented\n */\nexport const getPsbtInputsToSignForSatsConnect = ({\n psbt,\n request,\n isLegacySatsConnect,\n}: GetPsbtInputsToSignForSatsConnectParams) => {\n if (!request.signature) {\n return [];\n }\n\n validatePsbt({\n allowedSigHashTypes: request.allowedSighash,\n psbt,\n signatureData: request.signature,\n });\n\n const inputsToSign: InputToSign[] = [];\n\n for (const signature of request.signature) {\n if (signature.signingIndexes?.length) {\n for (const index of signature.signingIndexes) {\n inputsToSign.push({\n address: signature.address,\n sigHash: isLegacySatsConnect\n ? getSigHashType({ input: psbt.data.inputs[index] })\n : request.allowedSighash[0],\n signingIndexes: [index],\n });\n }\n }\n }\n\n return inputsToSign;\n};\n","import { MessageSigningProtocols } from 'sats-connect';\n\nimport type { BitcoinSignProtocol } from '../../BitcoinWalletProvider.types';\n\n/** @not-instrumented */\nexport const getSatsConnectSigningProtocol = (\n protocol: BitcoinSignProtocol | undefined\n): MessageSigningProtocols | undefined => {\n if (!protocol) {\n return undefined;\n }\n\n return protocol === 'ecdsa'\n ? MessageSigningProtocols.ECDSA\n : MessageSigningProtocols.BIP322;\n};\n","import type { WalletProviderConnectAddress } from '@dynamic-labs-sdk/client/core';\n\ntype ParseBitcoinConnectionResultParams = {\n connectedAddresses: {\n address: string;\n publicKey?: string;\n purpose: string;\n }[];\n};\n\n/** @not-instrumented */\nexport const parseBitcoinConnectionResult = ({\n connectedAddresses,\n}: ParseBitcoinConnectionResultParams) => {\n // Xverse will return other addresses/types that we don't support\n // so we filter them out\n const filteredAddresses = connectedAddresses.filter(\n (address) => address.purpose === 'ordinals' || address.purpose === 'payment'\n );\n\n const addresses: WalletProviderConnectAddress[] = filteredAddresses.map(\n (account) => ({\n address: account.address,\n publicKey: account.publicKey,\n type: account.purpose === 'payment' ? 'payment' : 'ordinals',\n })\n );\n\n // put ordinals addresses first, as they should be the main walletAccount address\n addresses.sort((a) => (a.type === 'ordinals' ? -1 : 1));\n\n return {\n addresses,\n };\n};\n","import {\n type Chain,\n type DynamicClient,\n UserRejectedError,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n getWalletAccountAddressByType,\n} from '@dynamic-labs-sdk/client';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Psbt } from 'bitcoinjs-lib';\nimport { type Json, createUnsecuredToken } from 'jsontokens';\nimport type {\n BitcoinProvider,\n GetAddressResponse,\n SignMultiplePsbtPayload,\n SignMultipleTransactionsPayload,\n} from 'sats-connect';\nimport {\n AddressPurpose,\n addListener,\n getAddress,\n signMessage as satsConnectSignMessage,\n sendBtcTransaction,\n signTransaction,\n} from 'sats-connect';\n\nimport type {\n BitcoinSendTransactionResponse,\n BitcoinWalletProvider,\n} from '../../../../BitcoinWalletProvider.types';\nimport { InvalidPsbtError } from '../../../../errors/InvalidPsbtError';\nimport { bitcoinExecuteCheckoutTransaction } from '../../../../utils/bitcoinExecuteCheckoutTransaction';\nimport { bitcoinTransferAmount } from '../../../../utils/bitcoinTransferAmount';\nimport { convertNetworkIdForPsbt } from '../../../../utils/convertNetworkIdForPsbt';\nimport { convertNetworkIdToSatsConnectNetworkType } from '../../../../utils/convertNetworkIdToSatsConnectNetworkType';\nimport { getPsbtInputsToSignForSatsConnect } from '../../../../utils/getPsbtInputsToSignForSatsConnect';\nimport { getSatsConnectSigningProtocol } from '../../../../utils/getSatsConnectSigningProtocol';\nimport { parseBitcoinConnectionResult } from '../../../../utils/parseBitcoinConnectionResult';\n\nexport const MAGIC_EDEN_METADATA: WalletProviderMetadata = {\n displayName: 'Magic Eden',\n icon: `${DYNAMIC_ICONIC_SPRITE_URL}#magiceden`,\n supportedHardwareWalletVendors: ['ledger'],\n};\n\ntype CreateMagicEdenBitcoinWalletProviderParams = {\n dynamicClient: DynamicClient;\n satsConnectProvider: BitcoinProvider;\n};\n\n// https://docs-wallet.magiceden.io/bitcoin/detecting-the-provider\n/** @not-instrumented */\nexport const createMagicEdenBitcoinWalletProvider = ({\n dynamicClient,\n satsConnectProvider,\n}: CreateMagicEdenBitcoinWalletProviderParams): BitcoinWalletProvider => {\n const chain: Chain = 'BTC';\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: MAGIC_EDEN_METADATA.displayName,\n walletProviderType,\n });\n\n const getNetworkPayload = async () => {\n const activeNetworkId = await getActiveNetworkId();\n const networkType = convertNetworkIdToSatsConnectNetworkType(\n activeNetworkId.networkId\n );\n\n return {\n network: { type: networkType },\n };\n };\n\n const connect: BitcoinWalletProvider['connect'] = async () => {\n const { network } = await getNetworkPayload();\n\n return new Promise((resolve, reject) => {\n void getAddress({\n getProvider: async () => satsConnectProvider,\n onCancel: () => {\n reject(new UserRejectedError({ action: 'connect' }));\n },\n onFinish: async (response: GetAddressResponse) => {\n const { addresses: connectedAddresses } = response;\n\n const { addresses } = parseBitcoinConnectionResult({\n connectedAddresses,\n });\n\n resolve({\n addresses,\n });\n },\n payload: {\n message: 'Address for receiving Ordinals and payments',\n network,\n purposes: [AddressPurpose.Ordinals, AddressPurpose.Payment],\n },\n });\n });\n };\n\n const getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n // there's no specific method to get connected addresses in Magic Eden\n // so we use the connect method to get the addresses\n const getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses'] =\n async () => {\n const { addresses } = await connect();\n return { addresses: addresses.map((address) => address.address) };\n };\n\n const sendBitcoin: BitcoinWalletProvider['sendBitcoin'] = async ({\n transaction,\n walletAccount,\n }): Promise<BitcoinSendTransactionResponse> => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n // should use payment address if available\n const senderAddress =\n getWalletAccountAddressByType({\n type: 'payment',\n walletAccount,\n }) ?? walletAccount.address;\n\n const { network } = await getNetworkPayload();\n\n return new Promise((resolve, reject) => {\n void sendBtcTransaction({\n getProvider: async () => satsConnectProvider,\n onCancel: () => {\n reject(new UserRejectedError({ action: 'sendBitcoin' }));\n },\n onFinish: (response) => {\n resolve({ transactionId: response });\n },\n payload: {\n network,\n recipients: [\n {\n address: transaction.recipientAddress,\n amountSats: BigInt(transaction.amount),\n },\n ],\n senderAddress,\n },\n });\n });\n };\n\n const signMessage: BitcoinWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n protocol,\n addressType,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const { network } = await getNetworkPayload();\n\n let addressToSignWith = walletAccount.address;\n if (addressType) {\n addressToSignWith =\n getWalletAccountAddressByType({\n type: addressType,\n walletAccount,\n }) ?? addressToSignWith;\n }\n\n return new Promise((resolve, reject) => {\n void satsConnectSignMessage({\n getProvider: async () => satsConnectProvider,\n onCancel: () => {\n reject(new UserRejectedError({ action: 'signMessage' }));\n },\n onFinish: async (response: string) => {\n resolve({ signature: response });\n },\n payload: {\n address: addressToSignWith,\n message: message,\n network,\n protocol: getSatsConnectSigningProtocol(protocol),\n },\n });\n });\n };\n\n const signPsbt: BitcoinWalletProvider['signPsbt'] = async ({\n request,\n walletAccount,\n }) => {\n if (!request.allowedSighash.length) {\n throw new InvalidPsbtError('allowedSighash cannot be an empty array');\n }\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const activeNetworkId = await getActiveNetworkId();\n const network = convertNetworkIdForPsbt(activeNetworkId.networkId);\n const { network: networkPayload } = await getNetworkPayload();\n\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64, {\n network,\n });\n\n const inputsToSign = getPsbtInputsToSignForSatsConnect({\n isLegacySatsConnect: true,\n psbt: psbtFromBase64,\n request,\n });\n\n return new Promise((resolve, reject) => {\n void signTransaction({\n getProvider: async () => satsConnectProvider,\n onCancel: () => {\n reject(new UserRejectedError({ action: 'signPsbt' }));\n },\n onFinish: (response) => {\n resolve({ signedPsbt: response.psbtBase64 });\n },\n payload: {\n broadcast: false,\n inputsToSign,\n message: 'Sign Pbst',\n network: networkPayload,\n psbtBase64: request.unsignedPsbtBase64,\n },\n });\n });\n };\n\n const signPsbts: BitcoinWalletProvider['signPsbts'] = async ({\n requests,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const activeNetworkId = await getActiveNetworkId();\n const network = convertNetworkIdForPsbt(activeNetworkId.networkId);\n const { network: networkPayload } = await getNetworkPayload();\n\n const psbtsToSign: SignMultiplePsbtPayload[] = [];\n\n for (const request of requests) {\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64, {\n network,\n });\n const inputsToSign = getPsbtInputsToSignForSatsConnect({\n isLegacySatsConnect: true,\n psbt: psbtFromBase64,\n request,\n });\n\n psbtsToSign.push({\n inputsToSign,\n psbtBase64: request.unsignedPsbtBase64,\n });\n }\n\n const signMultipleTransactionPayload: SignMultipleTransactionsPayload = {\n message: 'Sign Pbsts',\n network: networkPayload,\n psbts: psbtsToSign,\n };\n\n // Magic Eden has implemented their own signTransactions feature, and have requested us\n // to ensure we use it rather than the general Sats Connect API for this method\n const request = createUnsecuredToken(\n signMultipleTransactionPayload as unknown as Json\n );\n const response = await satsConnectProvider.signMultipleTransactions(\n request\n );\n\n return {\n signedPsbts: response.map((response) => response.psbtBase64),\n };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter<{\n removeAccountChangeListener: VoidFunction;\n }>({\n removeEventListeners: ({ setupReturnValue }) => {\n assertDefined(setupReturnValue, 'Setup return value not defined');\n\n setupReturnValue.removeAccountChangeListener();\n },\n\n setupEventListeners: ({ handleAccountsChanged }) => {\n const removeAccountChangeListener = addListener(\n 'accountsChanged',\n (accounts: { address: string; purpose: AddressPurpose }[]) => {\n if (!accounts) {\n return;\n }\n\n handleAccountsChanged({\n addresses: accounts.map((account) => account.address),\n });\n }\n );\n\n return {\n removeAccountChangeListener,\n };\n },\n\n supportedEvents: ['accountsChanged'],\n });\n\n const terminate: BitcoinWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n return {\n chain,\n connect,\n get events() {\n return getEventEmitter();\n },\n executeCheckoutTransaction: (args) =>\n bitcoinExecuteCheckoutTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(MAGIC_EDEN_METADATA.displayName),\n key,\n metadata: MAGIC_EDEN_METADATA,\n sendBitcoin,\n signMessage,\n signPsbt,\n signPsbts,\n terminate,\n transferAmount: (args) => bitcoinTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import { getInjectedProviderFromWindow } from '@dynamic-labs-sdk/client/core';\nimport type { BitcoinProvider } from 'sats-connect';\n\nconst MAGIC_EDEN_BITCOIN_PROVIDER_LOCATOR = 'magicEden.bitcoin';\n\n/** @not-instrumented */\nexport const getMagicEdenInjectedProvider = () => {\n return getInjectedProviderFromWindow<BitcoinProvider>(\n MAGIC_EDEN_BITCOIN_PROVIDER_LOCATOR\n );\n};\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n} from '@dynamic-labs-sdk/client';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Psbt } from 'bitcoinjs-lib';\n\nimport type {\n BitcoinSendTransactionResponse,\n BitcoinWalletProvider,\n SignPsbtOptions,\n} from '../../../../BitcoinWalletProvider.types';\nimport { bitcoinExecuteCheckoutTransaction } from '../../../../utils/bitcoinExecuteCheckoutTransaction';\nimport { bitcoinTransferAmount } from '../../../../utils/bitcoinTransferAmount';\nimport { createPsbtOptions } from '../../../../utils/createPsbtOptions';\nimport { getNetworkIdFromNetworkName } from '../../../../utils/getNetworkIdFromNetworkName';\nimport type { OkxBitcoinInjectedProvider } from '../OkxBitcoinInjectedProvider.types';\n\nexport const OKX_METADATA: WalletProviderMetadata = {\n displayName: 'OKX Wallet',\n icon: `${DYNAMIC_ICONIC_SPRITE_URL}#okx`,\n};\n\ntype CreateOkxBitcoinWalletProviderParams = {\n dynamicClient: DynamicClient;\n injectedProvider: OkxBitcoinInjectedProvider;\n};\n\n/** @not-instrumented */\nexport const createOkxBitcoinWalletProvider = ({\n dynamicClient,\n injectedProvider,\n}: CreateOkxBitcoinWalletProviderParams): BitcoinWalletProvider => {\n const chain: Chain = 'BTC';\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: OKX_METADATA.displayName,\n walletProviderType,\n });\n\n const connect: BitcoinWalletProvider['connect'] = async () => {\n const { address, publicKey } = await injectedProvider.connect();\n\n return {\n addresses: [{ address, publicKey }],\n };\n };\n\n const getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId'] =\n async () => {\n const network = await injectedProvider.getNetwork();\n\n return getNetworkIdFromNetworkName(\n { networkName: network },\n dynamicClient\n );\n };\n\n const getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses'] =\n async () => {\n const accounts = await injectedProvider.getAccounts();\n\n return {\n addresses: accounts,\n };\n };\n\n const sendBitcoin: BitcoinWalletProvider['sendBitcoin'] = async ({\n transaction,\n walletAccount,\n }): Promise<BitcoinSendTransactionResponse> => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const transactionId = await injectedProvider.sendBitcoin(\n transaction.recipientAddress,\n transaction.amount.toString()\n );\n\n return {\n transactionId,\n };\n };\n\n const signMessage: BitcoinWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n protocol,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signedMessage = await injectedProvider.signMessage(message, protocol);\n\n return {\n signature: signedMessage,\n };\n };\n\n const signPsbt: BitcoinWalletProvider['signPsbt'] = async ({\n request,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);\n\n const signedPsbtHex = await injectedProvider.signPsbt(\n psbtFromBase64.toHex(),\n createPsbtOptions({ psbt: psbtFromBase64, request })\n );\n\n return { signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64() };\n };\n\n const signPsbts: BitcoinWalletProvider['signPsbts'] = async ({\n requests,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const psbtHexs: string[] = [];\n const psbtOptions: SignPsbtOptions[] = [];\n\n for (const request of requests) {\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);\n\n psbtHexs.push(psbtFromBase64.toHex());\n psbtOptions.push(createPsbtOptions({ psbt: psbtFromBase64, request }));\n }\n\n const signedPsbtHexs = await injectedProvider.signPsbts(\n psbtHexs,\n psbtOptions\n );\n\n return {\n signedPsbts: signedPsbtHexs.map((signedPsbtHex) =>\n Psbt.fromHex(signedPsbtHex).toBase64()\n ),\n };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter({\n removeEventListeners: () => {\n injectedProvider?.removeAllListeners();\n },\n\n setupEventListeners: ({ handleAccountsChanged }) => {\n injectedProvider?.on('accountsChanged', (addresses) => {\n handleAccountsChanged({ addresses });\n });\n },\n\n supportedEvents: ['accountsChanged'],\n });\n\n const terminate: BitcoinWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n return {\n chain,\n connect,\n get events() {\n return getEventEmitter();\n },\n executeCheckoutTransaction: (args) =>\n bitcoinExecuteCheckoutTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(OKX_METADATA.displayName),\n key,\n metadata: OKX_METADATA,\n sendBitcoin,\n signMessage,\n signPsbt,\n signPsbts,\n terminate,\n transferAmount: (args) => bitcoinTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import { getInjectedProviderFromWindow } from '@dynamic-labs-sdk/client/core';\n\nimport type { OkxBitcoinInjectedProvider } from '../OkxBitcoinInjectedProvider.types';\n\nconst OKX_BITCOIN_PROVIDER_LOCATOR = 'okxwallet.bitcoin';\n\n/** @not-instrumented */\nexport const getOkxBitcoinInjectedProvider = () => {\n return getInjectedProviderFromWindow<OkxBitcoinInjectedProvider>(\n OKX_BITCOIN_PROVIDER_LOCATOR\n );\n};\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n} from '@dynamic-labs-sdk/client';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Psbt } from 'bitcoinjs-lib';\n\nimport type {\n BitcoinSendTransactionResponse,\n BitcoinWalletProvider,\n} from '../../../../BitcoinWalletProvider.types';\nimport { bitcoinExecuteCheckoutTransaction } from '../../../../utils/bitcoinExecuteCheckoutTransaction';\nimport { bitcoinTransferAmount } from '../../../../utils/bitcoinTransferAmount';\nimport { getNetworkIdFromNetworkName } from '../../../../utils/getNetworkIdFromNetworkName';\nimport type { OneKeyBitcoinInjectedProvider } from '../OneKeyBitcoinInjectedProvider.types';\n\nexport const ONEKEY_METADATA: WalletProviderMetadata = {\n displayName: 'OneKey',\n icon: `${DYNAMIC_ICONIC_SPRITE_URL}#onekey`,\n};\n\ntype CreateOneKeyBitcoinWalletProviderParams = {\n dynamicClient: DynamicClient;\n injectedProvider: OneKeyBitcoinInjectedProvider;\n};\n\n/** @not-instrumented */\nexport const createOneKeyBitcoinWalletProvider = ({\n dynamicClient,\n injectedProvider,\n}: CreateOneKeyBitcoinWalletProviderParams): BitcoinWalletProvider => {\n const chain: Chain = 'BTC';\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: ONEKEY_METADATA.displayName,\n walletProviderType,\n });\n\n const connect: BitcoinWalletProvider['connect'] = async () => {\n const accounts = await injectedProvider.requestAccounts();\n\n const address = accounts[0];\n const publicKey = await injectedProvider.getPublicKey();\n\n return {\n addresses: [{ address, publicKey }],\n };\n };\n\n const getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId'] =\n async () => {\n const network = await injectedProvider.getNetwork();\n\n return getNetworkIdFromNetworkName(\n { networkName: network },\n dynamicClient\n );\n };\n\n const getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses'] =\n async () => {\n const accounts = await injectedProvider.getAccounts();\n\n return {\n addresses: accounts,\n };\n };\n\n const sendBitcoin: BitcoinWalletProvider['sendBitcoin'] = async ({\n transaction,\n walletAccount,\n }): Promise<BitcoinSendTransactionResponse> => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const transactionId = await injectedProvider.sendBitcoin(\n transaction.recipientAddress,\n transaction.amount.toString()\n );\n\n return {\n transactionId,\n };\n };\n\n const signMessage: BitcoinWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n protocol,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signedMessage = await injectedProvider.signMessage(message, protocol);\n\n return {\n signature: signedMessage,\n };\n };\n\n const signPsbt: BitcoinWalletProvider['signPsbt'] = async ({\n request,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);\n\n const signedPsbtHex = await injectedProvider.signPsbt(\n psbtFromBase64.toHex(),\n { autoFinalized: false }\n );\n\n return { signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64() };\n };\n\n const signPsbts: BitcoinWalletProvider['signPsbts'] = async ({\n requests,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const psbtHexs: string[] = [];\n\n for (const request of requests) {\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);\n\n psbtHexs.push(psbtFromBase64.toHex());\n }\n\n const signedPsbtHexs = await injectedProvider.signPsbts(psbtHexs, {\n autoFinalized: false,\n });\n\n return {\n signedPsbts: signedPsbtHexs.map((signedPsbtHex) =>\n Psbt.fromHex(signedPsbtHex).toBase64()\n ),\n };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter({\n removeEventListeners: () => {\n injectedProvider?.removeAllListeners();\n },\n\n setupEventListeners: ({\n handleAccountsChanged,\n handleNetworkChanged,\n }) => {\n injectedProvider?.on('accountsChanged', (addresses) => {\n handleAccountsChanged({ addresses });\n });\n\n injectedProvider?.on('networkChanged', (network) => {\n handleNetworkChanged({ networkId: network });\n });\n },\n\n supportedEvents: ['accountsChanged', 'networkChanged'],\n });\n\n const terminate: BitcoinWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n return {\n chain,\n connect,\n get events() {\n return getEventEmitter();\n },\n executeCheckoutTransaction: (args) =>\n bitcoinExecuteCheckoutTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(ONEKEY_METADATA.displayName),\n key,\n metadata: ONEKEY_METADATA,\n sendBitcoin,\n signMessage,\n signPsbt,\n signPsbts,\n terminate,\n transferAmount: (args) => bitcoinTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import { getInjectedProviderFromWindow } from '@dynamic-labs-sdk/client/core';\n\nimport type { OneKeyBitcoinInjectedProvider } from '../OneKeyBitcoinInjectedProvider.types';\n\nconst ONEKEY_BITCOIN_PROVIDER_LOCATOR = '$onekey.btc';\n\n/** @not-instrumented */\nexport const getOneKeyBitcoinInjectedProvider = () => {\n return getInjectedProviderFromWindow<OneKeyBitcoinInjectedProvider>(\n ONEKEY_BITCOIN_PROVIDER_LOCATOR\n );\n};\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n getWalletAccountAddressByType,\n} from '@dynamic-labs-sdk/client';\nimport type { WalletProviderConnectAddress } from '@dynamic-labs-sdk/client/core';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n assertDefined,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Psbt } from 'bitcoinjs-lib';\n\nimport type { BitcoinWalletProvider } from '../../../../BitcoinWalletProvider.types';\nimport { bitcoinExecuteCheckoutTransaction } from '../../../../utils/bitcoinExecuteCheckoutTransaction';\nimport { bitcoinTransferAmount } from '../../../../utils/bitcoinTransferAmount';\nimport { getNetworkIdFromNetworkName } from '../../../../utils/getNetworkIdFromNetworkName';\nimport type { OylBitcoinInjectedProvider } from '../OylBitcoinInjectedProvider.types';\n\nexport const OYL_METADATA: WalletProviderMetadata = {\n displayName: 'Oyl Wallet',\n icon: `${DYNAMIC_ICONIC_SPRITE_URL}#oyl`,\n};\n\ntype CreatePhantomBitcoinWalletProviderParams = {\n dynamicClient: DynamicClient;\n injectedProvider: OylBitcoinInjectedProvider;\n};\n\n/** @not-instrumented */\nexport const createOylBitcoinWalletProvider = ({\n dynamicClient,\n injectedProvider,\n}: CreatePhantomBitcoinWalletProviderParams): BitcoinWalletProvider => {\n const chain: Chain = 'BTC';\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: OYL_METADATA.displayName,\n walletProviderType,\n });\n\n const connect: BitcoinWalletProvider['connect'] = async () => {\n const connectedAddresses = await injectedProvider.getAddresses();\n\n const addresses: WalletProviderConnectAddress[] = [];\n\n const ordinalsAddress = connectedAddresses.taproot;\n if (ordinalsAddress) {\n addresses.push({\n address: ordinalsAddress.address,\n publicKey: ordinalsAddress.publicKey,\n type: 'ordinals',\n });\n }\n\n const paymentAddress = connectedAddresses.nativeSegwit;\n if (paymentAddress) {\n addresses.push({\n address: paymentAddress.address,\n publicKey: paymentAddress.publicKey,\n type: 'payment',\n });\n }\n\n return {\n addresses,\n };\n };\n\n const getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId'] =\n async () => {\n const network = await injectedProvider.getNetwork();\n\n return getNetworkIdFromNetworkName(\n { networkName: network },\n dynamicClient\n );\n };\n\n // there's no specific method to get connected addresses in Oyl\n // so we check if the selected account is connected and return the addresses\n // if not, we return an empty array\n const getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses'] =\n async () => {\n const isSelectedAccountConnected = await injectedProvider.isConnected();\n\n if (!isSelectedAccountConnected) {\n return { addresses: [] };\n }\n\n // calling connect won't prompt the user to connect again if isConnected is true\n const { addresses } = await connect();\n return { addresses: addresses.map((address) => address.address) };\n };\n\n const signMessage: BitcoinWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n addressType,\n protocol,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n let addressToSignWith = walletAccount.address;\n if (addressType) {\n addressToSignWith =\n getWalletAccountAddressByType({\n type: addressType,\n walletAccount,\n }) ?? addressToSignWith;\n }\n\n const result = await injectedProvider.signMessage({\n address: addressToSignWith,\n message,\n // Oyl Wallet calls it just bip322 instead of bip322-simple\n protocol: protocol === 'bip322-simple' ? 'bip322' : protocol,\n });\n\n return {\n signature: result.signature,\n };\n };\n\n const signPsbt: BitcoinWalletProvider['signPsbt'] = async ({\n request,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);\n\n const { psbt: signedPsbtHex } = await injectedProvider.signPsbt({\n broadcast: false,\n finalize: false,\n psbt: psbtFromBase64.toHex(),\n });\n\n return { signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64() };\n };\n\n const signPsbts: BitcoinWalletProvider['signPsbts'] = async ({\n requests,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signedPsbts: string[] = [];\n\n for (const request of requests) {\n const signedPsbtResponse = await signPsbt({ request, walletAccount });\n\n if (signedPsbtResponse) {\n signedPsbts.push(signedPsbtResponse.signedPsbt);\n }\n }\n\n return {\n signedPsbts,\n };\n };\n\n return {\n chain,\n connect,\n executeCheckoutTransaction: (args) =>\n bitcoinExecuteCheckoutTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(OYL_METADATA.displayName),\n key,\n metadata: OYL_METADATA,\n signMessage,\n signPsbt,\n signPsbts,\n transferAmount: (args) => bitcoinTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import { getInjectedProviderFromWindow } from '@dynamic-labs-sdk/client/core';\n\nimport type { OylBitcoinInjectedProvider } from '../OylBitcoinInjectedProvider.types';\n\nconst OYL_BITCOIN_PROVIDER_LOCATOR = 'oyl';\n\n/** @not-instrumented */\nexport const getOylBitcoinInjectedProvider = () => {\n return getInjectedProviderFromWindow<OylBitcoinInjectedProvider>(\n OYL_BITCOIN_PROVIDER_LOCATOR\n );\n};\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n getWalletAccountAddressByType,\n} from '@dynamic-labs-sdk/client';\nimport type { WalletProviderConnectAddress } from '@dynamic-labs-sdk/client/core';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n getBuffer,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Psbt } from 'bitcoinjs-lib';\n\nimport type { BitcoinWalletProvider } from '../../../../BitcoinWalletProvider.types';\nimport { bitcoinExecuteCheckoutTransaction } from '../../../../utils/bitcoinExecuteCheckoutTransaction';\nimport { bitcoinTransferAmount } from '../../../../utils/bitcoinTransferAmount';\nimport type { PhantomBitcoinInjectedProvider } from '../PhantomBitcoinInjectedProvider.types';\n\nexport const PHANTOM_METADATA: WalletProviderMetadata = {\n displayName: 'Phantom',\n icon: `${DYNAMIC_ICONIC_SPRITE_URL}#phantom`,\n supportedHardwareWalletVendors: ['ledger'],\n};\n\ntype CreatePhantomBitcoinWalletProviderParams = {\n dynamicClient: DynamicClient;\n injectedProvider: PhantomBitcoinInjectedProvider;\n};\n\n/** @not-instrumented */\nexport const createPhantomBitcoinWalletProvider = ({\n dynamicClient,\n injectedProvider,\n}: CreatePhantomBitcoinWalletProviderParams): BitcoinWalletProvider => {\n const chain: Chain = 'BTC';\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: PHANTOM_METADATA.displayName,\n walletProviderType,\n });\n\n const connect: BitcoinWalletProvider['connect'] = async () => {\n const accounts = await injectedProvider.requestAccounts();\n\n const addresses: WalletProviderConnectAddress[] = accounts.map(\n (account) => ({\n address: account.address,\n publicKey: account.publicKey,\n type: account.purpose === 'payment' ? 'payment' : 'ordinals',\n })\n );\n\n // put ordinals addresses first, as they should be the main walletAccount address\n addresses.sort((a) => (a.type === 'ordinals' ? -1 : 1));\n\n return {\n addresses,\n };\n };\n\n const getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n // there's no specific method to get connected addresses in Phantom\n // so we use the connect method to get the addresses\n const getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses'] =\n async () => {\n const { addresses } = await connect();\n return { addresses: addresses.map((address) => address.address) };\n };\n\n const signMessage: BitcoinWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n addressType,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n let addressToSignWith = walletAccount.address;\n if (addressType) {\n addressToSignWith =\n getWalletAccountAddressByType({\n type: addressType,\n walletAccount,\n }) ?? addressToSignWith;\n }\n\n const result = await injectedProvider.signMessage(\n addressToSignWith,\n new TextEncoder().encode(message)\n );\n\n return {\n signature: getBuffer().from(result.signature).toString('base64'),\n };\n };\n\n const signPsbt: BitcoinWalletProvider['signPsbt'] = async ({\n request,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);\n\n const inputsToSign =\n request.signature?.map((sig) => ({\n address: sig.address,\n sigHash: request.allowedSighash[0],\n signingIndexes: sig.signingIndexes ?? [],\n })) ?? [];\n\n const signedPsbt = await injectedProvider.signPSBT(\n psbtFromBase64.toBuffer(),\n {\n inputsToSign,\n }\n );\n\n return { signedPsbt: Psbt.fromBuffer(signedPsbt).toBase64() };\n };\n\n const signPsbts: BitcoinWalletProvider['signPsbts'] = async ({\n requests,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signedPsbts: string[] = [];\n\n for (const request of requests) {\n const signedPsbtResponse = await signPsbt({ request, walletAccount });\n\n if (signedPsbtResponse) {\n signedPsbts.push(signedPsbtResponse.signedPsbt);\n }\n }\n\n return {\n signedPsbts,\n };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter({\n removeEventListeners: () => {\n injectedProvider?.removeAllListeners();\n },\n\n setupEventListeners: ({ handleAccountsChanged }) => {\n injectedProvider?.on('accountsChanged', (accounts) => {\n handleAccountsChanged({\n addresses: accounts.map((account) => account.address),\n });\n });\n },\n\n supportedEvents: ['accountsChanged'],\n });\n\n const terminate: BitcoinWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n return {\n chain,\n connect,\n get events() {\n return getEventEmitter();\n },\n executeCheckoutTransaction: (args) =>\n bitcoinExecuteCheckoutTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(PHANTOM_METADATA.displayName),\n key,\n metadata: PHANTOM_METADATA,\n signMessage,\n signPsbt,\n signPsbts,\n terminate,\n transferAmount: (args) => bitcoinTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import { getInjectedProviderFromWindow } from '@dynamic-labs-sdk/client/core';\n\nimport type { PhantomBitcoinInjectedProvider } from '../PhantomBitcoinInjectedProvider.types';\n\nconst PHANTOM_BITCOIN_PROVIDER_LOCATOR = 'phantom.bitcoin';\n\n/** @not-instrumented */\nexport const getPhantomInjectedProvider = () => {\n return getInjectedProviderFromWindow<PhantomBitcoinInjectedProvider>(\n PHANTOM_BITCOIN_PROVIDER_LOCATOR\n );\n};\n","import { getInjectedProviderFromWindow } from '@dynamic-labs-sdk/client/core';\n\nimport type { UnisatInjectedProvider } from '../UnisatInjectedProvider.types';\n\n// using `unisat_wallet` instead of `unisat` to avoid conflicts with other wallets\n// injecting themselves into the window.unisat object, like OneKey wallet.\nconst UNISAT_PROVIDER_LOCATOR = 'unisat_wallet';\n\n/** @not-instrumented */\nexport const getUnisatInjectedProvider = () => {\n return getInjectedProviderFromWindow<UnisatInjectedProvider>(\n UNISAT_PROVIDER_LOCATOR\n );\n};\n","import { UserRejectedError } from '@dynamic-labs-sdk/client';\nimport type {\n BitcoinNetwork,\n BitcoinProvider,\n SignMultiplePsbtPayload,\n SignTransactionResponse,\n} from 'sats-connect';\nimport { signMultipleTransactions } from 'sats-connect';\n\ntype SignMultipleTransactionsWithSatsConnectParams = {\n network: BitcoinNetwork;\n provider?: BitcoinProvider;\n psbts: SignMultiplePsbtPayload[];\n};\n\n/** @not-instrumented */\nexport const signMultipleTransactionsWithSatsConnect = async ({\n network,\n psbts,\n provider,\n}: SignMultipleTransactionsWithSatsConnectParams): Promise<{\n signedPsbts: string[];\n}> => {\n const response: SignTransactionResponse[] = await new Promise(\n (resolve, reject) => {\n void signMultipleTransactions({\n getProvider: () => Promise.resolve(provider),\n onCancel: () => {\n reject(\n new UserRejectedError({\n action: 'sign psbts',\n })\n );\n },\n onFinish: (response) => {\n resolve(response);\n },\n payload: {\n message: 'Sign Psbts',\n network,\n psbts,\n },\n });\n }\n );\n\n return {\n signedPsbts: response.map((response) => response.psbtBase64),\n };\n};\n","import {\n type Chain,\n type DynamicClient,\n type WalletProviderMetadata,\n assertWalletAccountSigningAvailability,\n getWalletAccountAddressByType,\n} from '@dynamic-labs-sdk/client';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Psbt } from 'bitcoinjs-lib';\nimport type {\n AccountChangeEvent,\n BitcoinProvider,\n InputToSign,\n SignMultiplePsbtPayload,\n} from 'sats-connect';\nimport {\n RpcErrorCode,\n addListener,\n request as satsConnectRequest,\n} from 'sats-connect';\n\nimport type {\n BitcoinSendTransactionResponse,\n BitcoinWalletProvider,\n} from '../../../../BitcoinWalletProvider.types';\nimport { InvalidPsbtError } from '../../../../errors/InvalidPsbtError';\nimport { bitcoinExecuteCheckoutTransaction } from '../../../../utils/bitcoinExecuteCheckoutTransaction';\nimport { bitcoinTransferAmount } from '../../../../utils/bitcoinTransferAmount';\nimport { convertNetworkIdForPsbt } from '../../../../utils/convertNetworkIdForPsbt';\nimport { convertNetworkIdToSatsConnectNetworkType } from '../../../../utils/convertNetworkIdToSatsConnectNetworkType';\nimport { getNetworkIdFromNetworkName } from '../../../../utils/getNetworkIdFromNetworkName';\nimport { getPsbtInputsToSignForSatsConnect } from '../../../../utils/getPsbtInputsToSignForSatsConnect';\nimport { getSatsConnectSigningProtocol } from '../../../../utils/getSatsConnectSigningProtocol';\nimport { parseBitcoinConnectionResult } from '../../../../utils/parseBitcoinConnectionResult';\nimport { signMultipleTransactionsWithSatsConnect } from '../../../../utils/signMultipleTransactionsWithSatsConnect';\n\nexport const XVERSE_METADATA: WalletProviderMetadata = {\n displayName: 'Xverse',\n icon: `${DYNAMIC_ICONIC_SPRITE_URL}#xverse`,\n supportedHardwareWalletVendors: ['ledger'],\n};\n\ntype CreateXverseBitcoinWalletProviderParams = {\n dynamicClient: DynamicClient;\n satsConnectProvider: BitcoinProvider;\n};\n\n// https://docs.xverse.app/sats-connect/wallet-methods/request-methods\n/** @not-instrumented */\nexport const createXverseBitcoinWalletProvider = ({\n dynamicClient,\n satsConnectProvider,\n}: CreateXverseBitcoinWalletProviderParams): BitcoinWalletProvider => {\n const chain: Chain = 'BTC';\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: XVERSE_METADATA.displayName,\n walletProviderType,\n });\n\n const requestPermissions = async (): Promise<void> => {\n const response = await satsConnectRequest(\n 'wallet_requestPermissions',\n undefined\n );\n\n if (response.status === 'success') {\n return;\n }\n\n throw response.error;\n };\n\n const connect: BitcoinWalletProvider['connect'] = async () => {\n // requesting permissions on initial connect will avoid\n // connection prompt for other requests\n await requestPermissions();\n\n const response = await satsConnectRequest('wallet_connect', null);\n\n if (response.status !== 'success') {\n throw response.error;\n }\n\n const { addresses: connectedAddresses } = response.result;\n\n const { addresses } = parseBitcoinConnectionResult({\n connectedAddresses,\n });\n\n return {\n addresses,\n };\n };\n\n const disconnect: BitcoinWalletProvider['disconnect'] = async () => {\n await satsConnectRequest('wallet_renouncePermissions', null);\n };\n\n const getActiveNetworkId: BitcoinWalletProvider['getActiveNetworkId'] =\n async () => {\n const response = await satsConnectRequest('wallet_getNetwork', null);\n\n let networkName = 'mainnet';\n if (response.status === 'success') {\n networkName = response.result.bitcoin.name.toLowerCase();\n }\n\n return getNetworkIdFromNetworkName({ networkName }, dynamicClient);\n };\n\n const getConnectedAddresses: BitcoinWalletProvider['getConnectedAddresses'] =\n async () => {\n const response = await satsConnectRequest('wallet_getAccount', null);\n\n if (response.status === 'success') {\n return {\n addresses: response.result.addresses.map(\n (address) => address.address\n ),\n };\n }\n\n if (response.error.code !== RpcErrorCode.ACCESS_DENIED) {\n throw response.error;\n }\n\n // if error is access denied, it means that the selected account is not\n // connected to the app, so return empty array\n return {\n addresses: [],\n };\n };\n\n const sendBitcoin: BitcoinWalletProvider['sendBitcoin'] = async ({\n transaction,\n walletAccount,\n }): Promise<BitcoinSendTransactionResponse> => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const response = await satsConnectRequest('sendTransfer', {\n recipients: [\n {\n address: transaction.recipientAddress,\n amount: Number(transaction.amount),\n },\n ],\n });\n\n if (response.status !== 'success') {\n throw response.error;\n }\n\n return {\n transactionId: response.result.txid,\n };\n };\n\n const signMessage: BitcoinWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n protocol,\n addressType,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n let addressToSignWith = walletAccount.address;\n if (addressType) {\n addressToSignWith =\n getWalletAccountAddressByType({\n type: addressType,\n walletAccount,\n }) ?? addressToSignWith;\n }\n\n const response = await satsConnectRequest('signMessage', {\n address: addressToSignWith,\n message,\n protocol: getSatsConnectSigningProtocol(protocol),\n });\n\n if (response.status !== 'success') {\n throw response.error;\n }\n\n return {\n signature: response.result.signature,\n };\n };\n\n const signPsbt: BitcoinWalletProvider['signPsbt'] = async ({\n request,\n walletAccount,\n }) => {\n if (!request.allowedSighash.length) {\n throw new InvalidPsbtError('allowedSighash cannot be an empty array');\n }\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const activeNetworkId = await getActiveNetworkId();\n const network = convertNetworkIdForPsbt(activeNetworkId.networkId);\n\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64, {\n network,\n });\n\n const inputsToSign = getPsbtInputsToSignForSatsConnect({\n psbt: psbtFromBase64,\n request,\n });\n\n const signPbstPayload = {\n broadcast: false,\n psbt: request.unsignedPsbtBase64,\n // we have to combine signing indexes for like addresses\n signInputs: inputsToSign.reduce(\n (accum: { [address: string]: number[] }, curr: InputToSign) => {\n if (!accum[curr.address]) {\n accum[curr.address] = [];\n }\n accum[curr.address].push(...curr.signingIndexes);\n return accum;\n },\n {}\n ),\n };\n\n const response = await satsConnectRequest('signPsbt', signPbstPayload);\n\n if (response.status !== 'success') {\n throw response.error;\n }\n\n return { signedPsbt: response.result.psbt };\n };\n\n const signPsbts: BitcoinWalletProvider['signPsbts'] = async ({\n requests,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const activeNetworkId = await getActiveNetworkId();\n const network = convertNetworkIdForPsbt(activeNetworkId.networkId);\n const networkType = convertNetworkIdToSatsConnectNetworkType(\n activeNetworkId.networkId\n );\n\n const psbtsToSign: SignMultiplePsbtPayload[] = [];\n\n for (const request of requests) {\n const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64, {\n network,\n });\n const inputsToSign = getPsbtInputsToSignForSatsConnect({\n psbt: psbtFromBase64,\n request,\n });\n\n psbtsToSign.push({\n inputsToSign,\n psbtBase64: request.unsignedPsbtBase64,\n });\n }\n\n const response = await signMultipleTransactionsWithSatsConnect({\n network: {\n type: networkType,\n },\n provider: satsConnectProvider,\n psbts: psbtsToSign,\n });\n\n return {\n signedPsbts: response.signedPsbts,\n };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter<{\n accountDisconnectedListener: VoidFunction;\n removeAccountChangeListener: VoidFunction;\n }>({\n removeEventListeners: ({ setupReturnValue }) => {\n assertDefined(setupReturnValue, 'Setup return value not defined');\n\n setupReturnValue.removeAccountChangeListener();\n setupReturnValue.accountDisconnectedListener();\n },\n\n setupEventListeners: ({ handleAccountsChanged, handleDisconnected }) => {\n const removeAccountChangeListener = addListener(\n 'accountChange',\n ({ addresses }: AccountChangeEvent) => {\n if (!addresses) {\n return;\n }\n\n handleAccountsChanged({\n addresses: addresses.map((address) => address.address),\n });\n }\n );\n\n const accountDisconnectedListener = addListener(\n 'accountDisconnected',\n () => {\n handleDisconnected();\n }\n );\n\n return {\n accountDisconnectedListener,\n removeAccountChangeListener,\n };\n },\n\n supportedEvents: ['accountsChanged', 'disconnected'],\n });\n\n const terminate: BitcoinWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n return {\n chain,\n connect,\n disconnect,\n get events() {\n return getEventEmitter();\n },\n executeCheckoutTransaction: (args) =>\n bitcoinExecuteCheckoutTransaction(args, dynamicClient),\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(XVERSE_METADATA.displayName),\n key,\n metadata: XVERSE_METADATA,\n sendBitcoin,\n signMessage,\n signPsbt,\n signPsbts,\n terminate,\n transferAmount: (args) => bitcoinTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n};\n","import { getInjectedProviderFromWindow } from '@dynamic-labs-sdk/client/core';\nimport type { BitcoinProvider } from 'sats-connect';\n\nconst XVERSE_BITCOIN_PROVIDER_LOCATOR = 'XverseProviders.BitcoinProvider';\n\n/** @not-instrumented */\nexport const getXverseInjectedProvider = () => {\n return getInjectedProviderFromWindow<BitcoinProvider>(\n XVERSE_BITCOIN_PROVIDER_LOCATOR\n );\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport type { BitcoinWalletProvider } from '../../BitcoinWalletProvider.types';\nimport { registerBitcoinNetworkProviderBuilder } from '../../registerBitcoinNetworkProviderBuilder';\nimport { createBinanceBitcoinWalletProvider } from '../utils/binance/createBinanceBitcoinWalletProvider';\nimport { getBinanceBitcoinInjectedProvider } from '../utils/binance/getBinanceBitcoinInjectedProvider';\nimport { createBitgetBitcoinWalletProvider } from '../utils/bitget/createBitgetBitcoinWalletProvider';\nimport { getBitgetBitcoinInjectedProvider } from '../utils/bitget/getBitgetBitcoinInjectedProvider';\nimport { createLeatherBitcoinWalletProvider } from '../utils/leather/createLeatherBitcoinWalletProvider';\nimport { getLeatherBitcoinInjectedProvider } from '../utils/leather/getLeatherBitcoinInjectedProvider';\nimport { createMagicEdenBitcoinWalletProvider } from '../utils/magicEden/createMagicEdenBitcoinWalletProvider';\nimport { getMagicEdenInjectedProvider } from '../utils/magicEden/getMagicEdenInjectedProvider';\nimport { createOkxBitcoinWalletProvider } from '../utils/okx/createOkxBitcoinWalletProvider';\nimport { getOkxBitcoinInjectedProvider } from '../utils/okx/getOkxBitcoinInjectedProvider';\nimport { createOneKeyBitcoinWalletProvider } from '../utils/oneKey/createOneKeyBitcoinWalletProvider';\nimport { getOneKeyBitcoinInjectedProvider } from '../utils/oneKey/getOneKeyBitcoinInjectedProvider';\nimport { createOylBitcoinWalletProvider } from '../utils/oyl/createOylBitcoinWalletProvider';\nimport { getOylBitcoinInjectedProvider } from '../utils/oyl/getOylBitcoinInjectedProvider';\nimport { createPhantomBitcoinWalletProvider } from '../utils/phantom/createPhantomBitcoinWalletProvider';\nimport { getPhantomInjectedProvider } from '../utils/phantom/getPhantomInjectedProvider';\nimport { createUnisatWalletProvider } from '../utils/unisat/createUnisatWalletProvider';\nimport { getUnisatInjectedProvider } from '../utils/unisat/getUnisatInjectedProvider';\nimport { createXverseBitcoinWalletProvider } from '../utils/xverse/createXverseBitcoinWalletProvider';\nimport { getXverseInjectedProvider } from '../utils/xverse/getXverseInjectedProvider';\n\nexport const BITCOIN_INJECTED_WALLETS_EXTENSION_KEY = 'bitcoinInjectedWallets';\n\n/**\n * Adds the Bitcoin Injected Wallets extension to the Dynamic client.\n *\n * This extension enables integration with many Bitcoin wallets, like MagicEden, Xverse, Unisat, Phantom, and more.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @not-instrumented\n */\nexport const addBitcoinInjectedWalletsExtension = (\n client = getDefaultClient()\n): void => {\n if (\n hasExtension(\n { extensionKey: BITCOIN_INJECTED_WALLETS_EXTENSION_KEY },\n client\n )\n ) {\n return;\n }\n\n registerExtension(\n { extensionKey: BITCOIN_INJECTED_WALLETS_EXTENSION_KEY },\n client\n );\n\n registerBitcoinNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const injectedWalletProviders: BitcoinWalletProvider[] = [];\n\n // Create and register Unisat wallet provider\n const unisatInjectedProvider = getUnisatInjectedProvider();\n if (unisatInjectedProvider) {\n const unisatWalletProvider = createUnisatWalletProvider({\n dynamicClient: client,\n injectedProvider: unisatInjectedProvider,\n });\n injectedWalletProviders.push(unisatWalletProvider);\n }\n\n // Create and register Phantom wallet provider\n const phantomInjectedProvider = getPhantomInjectedProvider();\n if (phantomInjectedProvider) {\n const phantomWalletProvider = createPhantomBitcoinWalletProvider({\n dynamicClient: client,\n injectedProvider: phantomInjectedProvider,\n });\n injectedWalletProviders.push(phantomWalletProvider);\n }\n\n // Create and register Xverse wallet provider\n const xverseInjectedProvider = getXverseInjectedProvider();\n if (xverseInjectedProvider) {\n const xverseWalletProvider = createXverseBitcoinWalletProvider({\n dynamicClient: client,\n satsConnectProvider: xverseInjectedProvider,\n });\n injectedWalletProviders.push(xverseWalletProvider);\n }\n\n // Create and register MagicEden wallet provider\n const magicEdenInjectedProvider = getMagicEdenInjectedProvider();\n if (magicEdenInjectedProvider) {\n const magicEdenWalletProvider = createMagicEdenBitcoinWalletProvider({\n dynamicClient: client,\n satsConnectProvider: magicEdenInjectedProvider,\n });\n injectedWalletProviders.push(magicEdenWalletProvider);\n }\n\n // Create and register OKX wallet provider\n const okxInjectedProvider = getOkxBitcoinInjectedProvider();\n if (okxInjectedProvider) {\n const okxWalletProvider = createOkxBitcoinWalletProvider({\n dynamicClient: client,\n injectedProvider: okxInjectedProvider,\n });\n injectedWalletProviders.push(okxWalletProvider);\n }\n\n // Create and register OneKey wallet provider\n const oneKeyInjectedProvider = getOneKeyBitcoinInjectedProvider();\n if (oneKeyInjectedProvider) {\n const oneKeyWalletProvider = createOneKeyBitcoinWalletProvider({\n dynamicClient: client,\n injectedProvider: oneKeyInjectedProvider,\n });\n injectedWalletProviders.push(oneKeyWalletProvider);\n }\n\n // Create and register Bitget wallet provider\n const bitgetInjectedProvider = getBitgetBitcoinInjectedProvider();\n if (bitgetInjectedProvider) {\n const bitgetWalletProvider = createBitgetBitcoinWalletProvider({\n dynamicClient: client,\n injectedProvider: bitgetInjectedProvider,\n });\n injectedWalletProviders.push(bitgetWalletProvider);\n }\n\n // Create and register Binance wallet provider\n const binanceInjectedProvider = getBinanceBitcoinInjectedProvider();\n if (binanceInjectedProvider) {\n const binanceWalletProvider = createBinanceBitcoinWalletProvider({\n dynamicClient: client,\n injectedProvider: binanceInjectedProvider,\n });\n injectedWalletProviders.push(binanceWalletProvider);\n }\n\n // Create and register OYL wallet provider\n const oylInjectedProvider = getOylBitcoinInjectedProvider();\n if (oylInjectedProvider) {\n const oylWalletProvider = createOylBitcoinWalletProvider({\n dynamicClient: client,\n injectedProvider: oylInjectedProvider,\n });\n injectedWalletProviders.push(oylWalletProvider);\n }\n\n // Create and register Leather wallet provider\n const leatherInjectedProvider = getLeatherBitcoinInjectedProvider();\n if (leatherInjectedProvider) {\n const leatherWalletProvider = createLeatherBitcoinWalletProvider({\n dynamicClient: client,\n injectedProvider: leatherInjectedProvider,\n });\n injectedWalletProviders.push(leatherWalletProvider);\n }\n\n injectedWalletProviders.forEach((walletProvider) => {\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n });\n};\n"],"mappings":"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"}
@@ -18,6 +18,7 @@ type BuildPsbtResult = {
18
18
  * @returns An object containing the unsigned PSBT in base64 format and the fee priority used
19
19
  * @throws {MethodNotImplementedError} If the wallet provider does not implement the buildPsbt method
20
20
  * @throws {NotBitcoinProviderError} If the wallet account is not a valid BitcoinWalletAccount
21
+ * @not-instrumented
21
22
  */
22
23
  export declare const buildPsbt: ({ walletAccount, transaction }: BuildPsbtParams, client?: import("@dynamic-labs-sdk/client").DynamicClient) => Promise<BuildPsbtResult>;
23
24
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"buildPsbt.d.ts","sourceRoot":"","sources":["../../src/buildPsbt/buildPsbt.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAG1E,OAAO,KAAK,EACV,WAAW,EACX,sBAAsB,EACvB,MAAM,yCAAyC,CAAC;AAEjD,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE,sBAAsB,CAAC;IACpC,aAAa,EAAE,oBAAoB,CAAC;CACrC,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,mCACY,eAAe,gEAE9C,OAAO,CAAC,eAAe,CAuBzB,CAAC"}
1
+ {"version":3,"file":"buildPsbt.d.ts","sourceRoot":"","sources":["../../src/buildPsbt/buildPsbt.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAG1E,OAAO,KAAK,EACV,WAAW,EACX,sBAAsB,EACvB,MAAM,yCAAyC,CAAC;AAEjD,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE,sBAAsB,CAAC;IACpC,aAAa,EAAE,oBAAoB,CAAC;CACrC,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,mCACY,eAAe,gEAE9C,OAAO,CAAC,eAAe,CAuBzB,CAAC"}
package/dist/index.cjs.js CHANGED
@@ -25,7 +25,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
25
25
  }) : target, mod));
26
26
 
27
27
  //#endregion
28
- const require_addBitcoinInjectedWalletsExtension = require('./addBitcoinInjectedWalletsExtension-DM96WiNE.cjs.js');
28
+ const require_addBitcoinInjectedWalletsExtension = require('./addBitcoinInjectedWalletsExtension-NvVOlBz9.cjs.js');
29
29
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
30
30
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
31
31
  let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
@@ -113,6 +113,7 @@ const RBF_SEQUENCE = 4294967293;
113
113
  * @returns The transaction ID
114
114
  * @throws {TransactionRequiredError} if no transaction is specified
115
115
  * @throws {TransactionBroadcastFailedError} if broadcasting fails
116
+ * @not-instrumented
116
117
  */
117
118
  const broadcastTransaction = async (rawTransaction) => {
118
119
  if (!rawTransaction) throw new TransactionRequiredError();
@@ -203,6 +204,7 @@ var SegwitOutputScriptError = class extends _dynamic_labs_sdk_client.BaseError {
203
204
  * @param options.psbt - The PSBT instance to add inputs to
204
205
  * @param options.publicKeyPair - Key pair containing the public key for witness script
205
206
  * @param options.selectedUTXOs - Array of UTXOs to add as inputs
207
+ * @not-instrumented
206
208
  */
207
209
  const addInputsToPsbt = (options) => {
208
210
  const { network, psbt, publicKeyPair, selectedUTXOs } = options;
@@ -237,6 +239,7 @@ const addInputsToPsbt = (options) => {
237
239
  * @param options.network - Bitcoin network configuration (mainnet or testnet)
238
240
  * @param options.psbt - The PSBT instance to add outputs to
239
241
  * @param options.recipientAddress - The recipient's Bitcoin address
242
+ * @not-instrumented
240
243
  */
241
244
  const addOutputsToPsbt = (options) => {
242
245
  const { accountAddress, amountInSatoshis, changeAmount, hasChangeOutput, network, psbt, recipientAddress } = options;
@@ -278,6 +281,7 @@ var FeeRecommendationsFetchError = class extends _dynamic_labs_sdk_client.BaseEr
278
281
  *
279
282
  * @returns Fee recommendation data with rates in sat/vB
280
283
  * @throws FeeRecommendationsFetchError if fetching fee recommendations fails
284
+ * @not-instrumented
281
285
  */
282
286
  const getFeeRecommendations = async () => {
283
287
  const response = await fetch(`${MEMPOOL_API_URL}/v1/fees/recommended`);
@@ -294,6 +298,7 @@ const getFeeRecommendations = async () => {
294
298
  * @param options.numInputs - Number of transaction inputs (UTXOs being spent)
295
299
  * @param options.numOutputs - Number of transaction outputs
296
300
  * @returns Estimated fee in satoshis
301
+ * @not-instrumented
297
302
  */
298
303
  const estimateTransactionFee = async ({ feePriority = "medium", numInputs, numOutputs }) => {
299
304
  try {
@@ -319,6 +324,7 @@ const estimateTransactionFee = async ({ feePriority = "medium", numInputs, numOu
319
324
  * @param options.selectedTotalValue - Total value of selected UTXOs in satoshis
320
325
  * @param options.selectedUTXOs - Array of selected UTXOs for the transaction
321
326
  * @returns Object with feeEstimate, changeAmountNumber, and hasChangeOutput
327
+ * @not-instrumented
322
328
  */
323
329
  const calculateFeeAndChange = async ({ amountInSatoshis, feePriority, selectedTotalValue, selectedUTXOs }) => {
324
330
  let feeEstimate = await estimateTransactionFee({
@@ -354,6 +360,7 @@ const calculateFeeAndChange = async ({ amountInSatoshis, feePriority, selectedTo
354
360
  *
355
361
  * @param utxos - Array of UTXOs
356
362
  * @returns Total value in satoshis
363
+ * @not-instrumented
357
364
  */
358
365
  const calculateUTXOTotal = (utxos) => utxos.reduce((total, utxo) => total + utxo.value, 0);
359
366
 
@@ -384,6 +391,7 @@ var UTXOsFetchError = class extends _dynamic_labs_sdk_client.BaseError {
384
391
  * @param address - The Bitcoin address to get UTXOs for
385
392
  * @returns Array of UTXOs
386
393
  * @throws UTXOsFetchError if fetching UTXOs fails
394
+ * @not-instrumented
387
395
  */
388
396
  const getUTXOs = async (address$1) => {
389
397
  const response = await fetch(`${MEMPOOL_API_URL}/address/${address$1}/utxo`);
@@ -403,6 +411,7 @@ const getUTXOs = async (address$1) => {
403
411
  * @param options.targetAmount - Target amount in satoshis (amount + fees + dust limit)
404
412
  * @param options.utxos - Array of available UTXOs to select from
405
413
  * @returns Selected UTXOs
414
+ * @not-instrumented
406
415
  */
407
416
  const selectUTXOsLargestFirst = (options) => {
408
417
  const { targetAmount, utxos } = options;
@@ -429,6 +438,7 @@ const selectUTXOsLargestFirst = (options) => {
429
438
  * @param options.selectedUTXOs - Array of initially selected UTXOs
430
439
  * @returns Validated selected UTXOs
431
440
  * @throws InsufficientFundsError if insufficient funds
441
+ * @not-instrumented
432
442
  */
433
443
  const validateAndSelectUTXOs = (options) => {
434
444
  const { allUTXOs, amountInSatoshis, feeEstimate, selectedTotal, selectedUTXOs } = options;
@@ -470,6 +480,7 @@ var TaprootAddressNotSupportedError = class extends _dynamic_labs_sdk_client.Bas
470
480
  *
471
481
  * @param accountAddress - The account address to check
472
482
  * @throws TaprootAddressNotSupportedError if address is Taproot
483
+ * @not-instrumented
473
484
  */
474
485
  const validateNotTaproot = (accountAddress) => {
475
486
  if (accountAddress.toLowerCase().startsWith("bc1p") || accountAddress.toLowerCase().startsWith("tb1p")) throw new TaprootAddressNotSupportedError();
@@ -489,6 +500,7 @@ const validateNotTaproot = (accountAddress) => {
489
500
  * @param options.recipientAddress - The recipient's Bitcoin address
490
501
  * @returns A PSBT in Base64 format
491
502
  * @throws Error if insufficient funds, no UTXOs, or other errors
503
+ * @not-instrumented
492
504
  */
493
505
  const buildPsbt = async ({ accountAddress, amountInSatoshis, feePriority = "medium", network, publicKeyHex, recipientAddress }) => {
494
506
  if (amountInSatoshis <= BigInt(0)) throw new InvalidAmountError({
@@ -566,6 +578,7 @@ var PublicKeyNotFoundError = class extends _dynamic_labs_sdk_client.BaseError {
566
578
  //#region src/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.ts
567
579
  /**
568
580
  * Gets the public key for a wallet account from the user's verified credentials
581
+ * @not-instrumented
569
582
  */
570
583
  const getPublicKeyForWalletAccount = (walletAccount, client) => {
571
584
  const user = (0, _dynamic_labs_sdk_client_core.getCore)(client).state.get().user;
@@ -578,6 +591,7 @@ const getPublicKeyForWalletAccount = (walletAccount, client) => {
578
591
 
579
592
  //#endregion
580
593
  //#region src/waas/utils/createWalletProviderForWaasBitcoin/createWalletProviderForWaasBitcoin.ts
594
+ /** @not-instrumented */
581
595
  const createWalletProviderForWaasBitcoin = (sdkClient) => {
582
596
  const chain = "BTC";
583
597
  const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.EmbeddedWallet;
@@ -703,6 +717,7 @@ const WAAS_BITCOIN_EXTENSION_KEY = "waasBitcoin";
703
717
  * allowing users to have wallets managed by Dynamic's infrastructure.
704
718
  *
705
719
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
720
+ * @not-instrumented
706
721
  */
707
722
  const addWaasBitcoinExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
708
723
  if ((0, _dynamic_labs_sdk_client_core.hasExtension)({ extensionKey: WAAS_BITCOIN_EXTENSION_KEY }, client)) return;
@@ -727,6 +742,7 @@ const addWaasBitcoinExtension = (client = (0, _dynamic_labs_sdk_client_core.getD
727
742
  * managed by Dynamic's infrastructure.
728
743
  *
729
744
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
745
+ * @not-instrumented
730
746
  */
731
747
  const addBitcoinExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
732
748
  require_addBitcoinInjectedWalletsExtension.addBitcoinInjectedWalletsExtension(client);
@@ -740,6 +756,7 @@ const addBitcoinExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefau
740
756
  *
741
757
  * @param networkProvider - The network provider to check.
742
758
  * @returns True if the network provider is a Bitcoin network provider, false otherwise.
759
+ * @not-instrumented
743
760
  */
744
761
  const isBitcoinNetworkProvider = (networkProvider) => networkProvider.chain === "BTC";
745
762
 
@@ -758,6 +775,7 @@ const isBitcoinNetworkProvider = (networkProvider) => networkProvider.chain ===
758
775
  * @returns An object containing the signature
759
776
  * @throws {MethodNotImplementedError} If the wallet provider does not implement the signMessage method
760
777
  * @throws {NotBitcoinProviderError} If the wallet account is not a valid BitcoinWalletAccount
778
+ * @not-instrumented
761
779
  */
762
780
  const signMessageWithCustomOptions = async ({ walletAccount, message, protocol, addressType }, client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
763
781
  const provider = (0, _dynamic_labs_sdk_client_core.getWalletProviderFromWalletAccount)({ walletAccount }, client);
@@ -779,6 +797,7 @@ const signMessageWithCustomOptions = async ({ walletAccount, message, protocol,
779
797
  * @param params.walletAccount - The wallet account to sign the PSBT with
780
798
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
781
799
  * @returns An object containing the signed PSBT
800
+ * @not-instrumented
782
801
  */
783
802
  const signPsbt = async ({ walletAccount, request }, client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
784
803
  const provider = (0, _dynamic_labs_sdk_client_core.getWalletProviderFromWalletAccount)({ walletAccount }, client);
@@ -797,6 +816,7 @@ const signPsbt = async ({ walletAccount, request }, client = (0, _dynamic_labs_s
797
816
  * @param params.walletAccount - The wallet account to sign the PSBT with
798
817
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
799
818
  * @returns An object containing the signed PSBT
819
+ * @not-instrumented
800
820
  */
801
821
  const signPsbts = async ({ walletAccount, requests }, client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
802
822
  const provider = (0, _dynamic_labs_sdk_client_core.getWalletProviderFromWalletAccount)({ walletAccount }, client);