@dynamic-labs-sdk/bitcoin 1.12.2 → 1.13.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 (139) hide show
  1. package/dist/addBitcoinExtension/addBitcoinExtension.d.ts +1 -1
  2. package/dist/{addBitcoinInjectedWalletsExtension-XOWDo0YD.cjs → addBitcoinInjectedWalletsExtension-4PZq-LrG.cjs} +39 -39
  3. package/dist/addBitcoinInjectedWalletsExtension-4PZq-LrG.cjs.map +1 -0
  4. package/dist/{addBitcoinInjectedWalletsExtension-BuSLLGoj.esm.js → addBitcoinInjectedWalletsExtension-CnmrfHNE.esm.js} +38 -38
  5. package/dist/addBitcoinInjectedWalletsExtension-CnmrfHNE.esm.js.map +1 -0
  6. package/dist/{addWaasBitcoinExtension-6VcplBLA.esm.js → addWaasBitcoinExtension-CToQ5AXu.esm.js} +17 -17
  7. package/dist/addWaasBitcoinExtension-CToQ5AXu.esm.js.map +1 -0
  8. package/dist/{addWaasBitcoinExtension-DvLl84Py.cjs → addWaasBitcoinExtension-iCWkOG-U.cjs} +17 -17
  9. package/dist/addWaasBitcoinExtension-iCWkOG-U.cjs.map +1 -0
  10. package/dist/{bitcoinTransferAmount-CDTF7GGL.esm.js → bitcoinTransferAmount-BHPqrjl2.esm.js} +14 -14
  11. package/dist/bitcoinTransferAmount-BHPqrjl2.esm.js.map +1 -0
  12. package/dist/{bitcoinTransferAmount-pia-kREy.cjs → bitcoinTransferAmount-Ba-8Zsty.cjs} +15 -15
  13. package/dist/bitcoinTransferAmount-Ba-8Zsty.cjs.map +1 -0
  14. package/dist/buildPsbt/buildPsbt.d.ts +1 -1
  15. package/dist/index.cjs +8 -8
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.esm.js +8 -8
  18. package/dist/index.esm.js.map +1 -1
  19. package/dist/injected/addBitcoinInjectedWalletsExtension/addBitcoinInjectedWalletsExtension.d.ts +1 -1
  20. package/dist/injected/utils/binance/createBinanceBitcoinWalletProvider/createBinanceBitcoinWalletProvider.d.ts +1 -1
  21. package/dist/injected/utils/binance/createBinanceBitcoinWalletProvider/createBinanceBitcoinWalletProvider.d.ts.map +1 -1
  22. package/dist/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.d.ts +1 -1
  23. package/dist/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.d.ts.map +1 -1
  24. package/dist/injected/utils/bitget/createBitgetBitcoinWalletProvider/createBitgetBitcoinWalletProvider.d.ts +1 -1
  25. package/dist/injected/utils/bitget/createBitgetBitcoinWalletProvider/createBitgetBitcoinWalletProvider.d.ts.map +1 -1
  26. package/dist/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.d.ts +1 -1
  27. package/dist/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.d.ts.map +1 -1
  28. package/dist/injected/utils/leather/convertNetworkIdToLeatherNetworkName/convertNetworkIdToLeatherNetworkName.d.ts +1 -1
  29. package/dist/injected/utils/leather/convertNetworkIdToLeatherNetworkName/convertNetworkIdToLeatherNetworkName.d.ts.map +1 -1
  30. package/dist/injected/utils/leather/createLeatherBitcoinWalletProvider/createLeatherBitcoinWalletProvider.d.ts +1 -1
  31. package/dist/injected/utils/leather/createLeatherBitcoinWalletProvider/createLeatherBitcoinWalletProvider.d.ts.map +1 -1
  32. package/dist/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.d.ts +1 -1
  33. package/dist/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.d.ts.map +1 -1
  34. package/dist/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/createMagicEdenBitcoinWalletProvider.d.ts +1 -1
  35. package/dist/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/createMagicEdenBitcoinWalletProvider.d.ts.map +1 -1
  36. package/dist/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.d.ts +1 -1
  37. package/dist/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.d.ts.map +1 -1
  38. package/dist/injected/utils/okx/createOkxBitcoinWalletProvider/createOkxBitcoinWalletProvider.d.ts +1 -1
  39. package/dist/injected/utils/okx/createOkxBitcoinWalletProvider/createOkxBitcoinWalletProvider.d.ts.map +1 -1
  40. package/dist/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.d.ts +1 -1
  41. package/dist/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.d.ts.map +1 -1
  42. package/dist/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/createOneKeyBitcoinWalletProvider.d.ts +1 -1
  43. package/dist/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/createOneKeyBitcoinWalletProvider.d.ts.map +1 -1
  44. package/dist/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.d.ts +1 -1
  45. package/dist/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.d.ts.map +1 -1
  46. package/dist/injected/utils/oyl/createOylBitcoinWalletProvider/createOylBitcoinWalletProvider.d.ts +1 -1
  47. package/dist/injected/utils/oyl/createOylBitcoinWalletProvider/createOylBitcoinWalletProvider.d.ts.map +1 -1
  48. package/dist/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.d.ts +1 -1
  49. package/dist/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.d.ts.map +1 -1
  50. package/dist/injected/utils/phantom/createPhantomBitcoinWalletProvider/createPhantomBitcoinWalletProvider.d.ts +1 -1
  51. package/dist/injected/utils/phantom/createPhantomBitcoinWalletProvider/createPhantomBitcoinWalletProvider.d.ts.map +1 -1
  52. package/dist/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.d.ts +1 -1
  53. package/dist/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.d.ts.map +1 -1
  54. package/dist/injected/utils/unisat/createUnisatWalletProvider/createUnisatWalletProvider.d.ts +1 -1
  55. package/dist/injected/utils/unisat/createUnisatWalletProvider/createUnisatWalletProvider.d.ts.map +1 -1
  56. package/dist/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.d.ts +1 -1
  57. package/dist/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.d.ts.map +1 -1
  58. package/dist/injected/utils/xverse/createXverseBitcoinWalletProvider/createXverseBitcoinWalletProvider.d.ts +1 -1
  59. package/dist/injected/utils/xverse/createXverseBitcoinWalletProvider/createXverseBitcoinWalletProvider.d.ts.map +1 -1
  60. package/dist/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.d.ts +1 -1
  61. package/dist/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.d.ts.map +1 -1
  62. package/dist/injected.cjs +3 -3
  63. package/dist/injected.esm.js +2 -2
  64. package/dist/isBitcoinNetworkProvider/isBitcoinNetworkProvider.d.ts +1 -1
  65. package/dist/isBitcoinWalletAccount/isBitcoinWalletAccount.d.ts +1 -1
  66. package/dist/isBitcoinWalletProvider/isBitcoinWalletProvider.d.ts +1 -1
  67. package/dist/isBitcoinWalletProvider/isBitcoinWalletProvider.d.ts.map +1 -1
  68. package/dist/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.d.ts +1 -1
  69. package/dist/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.d.ts.map +1 -1
  70. package/dist/sendBitcoin/sendBitcoin.d.ts +1 -1
  71. package/dist/sendRawTransaction/sendRawTransaction.d.ts +1 -1
  72. package/dist/signMessageWithCustomOptions/signMessageWithCustomOptions.d.ts +1 -1
  73. package/dist/signPsbt/signPsbt.d.ts +1 -1
  74. package/dist/signPsbts/signPsbts.d.ts +1 -1
  75. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  76. package/dist/utils/bitcoinConfirmTransaction/bitcoinConfirmTransaction.d.ts +1 -1
  77. package/dist/utils/bitcoinExecuteSwapTransaction/bitcoinExecuteSwapTransaction.d.ts +1 -1
  78. package/dist/utils/bitcoinExecuteSwapTransaction/bitcoinExecuteSwapTransaction.d.ts.map +1 -1
  79. package/dist/utils/bitcoinTransferAmount/bitcoinTransferAmount.d.ts +1 -1
  80. package/dist/utils/convertNetworkIdForPsbt/convertNetworkIdForPsbt.d.ts +1 -1
  81. package/dist/utils/convertNetworkIdForPsbt/convertNetworkIdForPsbt.d.ts.map +1 -1
  82. package/dist/utils/convertNetworkIdToSatsConnectNetworkType/convertNetworkIdToSatsConnectNetworkType.d.ts +1 -1
  83. package/dist/utils/convertNetworkIdToSatsConnectNetworkType/convertNetworkIdToSatsConnectNetworkType.d.ts.map +1 -1
  84. package/dist/utils/convertPsbtToBase64/convertPsbtToBase64.d.ts +1 -1
  85. package/dist/utils/convertPsbtToBase64/convertPsbtToBase64.d.ts.map +1 -1
  86. package/dist/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.d.ts +1 -1
  87. package/dist/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.d.ts.map +1 -1
  88. package/dist/utils/createPsbtOptions/createPsbtOptions.d.ts +1 -1
  89. package/dist/utils/fetchBtcBalance/fetchBtcBalance.d.ts +1 -1
  90. package/dist/utils/fetchBtcBalance/fetchBtcBalance.d.ts.map +1 -1
  91. package/dist/utils/getMempoolApiUrl/getMempoolApiUrl.d.ts +1 -1
  92. package/dist/utils/getMempoolApiUrl/getMempoolApiUrl.d.ts.map +1 -1
  93. package/dist/utils/getNetworkIdFromNetworkName/getNetworkIdFromNetworkName.d.ts +1 -1
  94. package/dist/utils/getNetworkIdFromNetworkName/getNetworkIdFromNetworkName.d.ts.map +1 -1
  95. package/dist/utils/getPsbtInputsToSignForSatsConnect/getPsbtInputsToSignForSatsConnect.d.ts +1 -1
  96. package/dist/utils/getSatsConnectSigningProtocol/getSatsConnectSigningProtocol.d.ts +1 -1
  97. package/dist/utils/getSatsConnectSigningProtocol/getSatsConnectSigningProtocol.d.ts.map +1 -1
  98. package/dist/utils/getSigHashType/getSigHashType.d.ts +1 -1
  99. package/dist/utils/isHexEncodedPsbt/isHexEncodedPsbt.d.ts +1 -1
  100. package/dist/utils/isHexEncodedPsbt/isHexEncodedPsbt.d.ts.map +1 -1
  101. package/dist/utils/parseBitcoinConnectionResult/parseBitcoinConnectionResult.d.ts +1 -1
  102. package/dist/utils/parseBitcoinConnectionResult/parseBitcoinConnectionResult.d.ts.map +1 -1
  103. package/dist/utils/satoshisToBtc/satoshisToBtc.d.ts +1 -1
  104. package/dist/utils/satoshisToBtc/satoshisToBtc.d.ts.map +1 -1
  105. package/dist/utils/signMultipleTransactionsWithSatsConnect/signMultipleTransactionsWithSatsConnect.d.ts +1 -1
  106. package/dist/utils/signMultipleTransactionsWithSatsConnect/signMultipleTransactionsWithSatsConnect.d.ts.map +1 -1
  107. package/dist/utils/validatePsbt/extractAddressFromInput/extractAddressFromInput.d.ts +1 -1
  108. package/dist/utils/validatePsbt/validatePsbt.d.ts +1 -1
  109. package/dist/utils/validatePsbt/validateSigHash/validateSigHash.d.ts +1 -1
  110. package/dist/utils/validatePsbt/validateSigHash/validateSigHash.d.ts.map +1 -1
  111. package/dist/utils/validatePsbt/validateSigningAddress/validateSigningAddress.d.ts +1 -1
  112. package/dist/utils/validatePsbt/validateSigningAddress/validateSigningAddress.d.ts.map +1 -1
  113. package/dist/waas/addWaasBitcoinExtension/addWaasBitcoinExtension.d.ts +1 -1
  114. package/dist/waas/utils/addInputsToPsbt/addInputsToPsbt.d.ts +1 -1
  115. package/dist/waas/utils/addOutputsToPsbt/addOutputsToPsbt.d.ts +1 -1
  116. package/dist/waas/utils/broadcastTransaction/broadcastTransaction.d.ts +1 -1
  117. package/dist/waas/utils/buildPsbt/buildPsbt.d.ts +1 -1
  118. package/dist/waas/utils/calculateFeeAndChange/calculateFeeAndChange.d.ts +1 -1
  119. package/dist/waas/utils/calculateUTXOTotal/calculateUTXOTotal.d.ts +1 -1
  120. package/dist/waas/utils/createWalletProviderForWaasBitcoin/createWalletProviderForWaasBitcoin.d.ts +1 -1
  121. package/dist/waas/utils/createWalletProviderForWaasBitcoin/createWalletProviderForWaasBitcoin.d.ts.map +1 -1
  122. package/dist/waas/utils/estimateTransactionFee/estimateTransactionFee.d.ts +1 -1
  123. package/dist/waas/utils/getFeeRecommendations/getFeeRecommendations.d.ts +1 -1
  124. package/dist/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.d.ts +1 -1
  125. package/dist/waas/utils/getUTXOs/getUTXOs.d.ts +1 -1
  126. package/dist/waas/utils/selectUTXOsLargestFirst/selectUTXOsLargestFirst.d.ts +1 -1
  127. package/dist/waas/utils/validateAndSelectUTXOs/validateAndSelectUTXOs.d.ts +1 -1
  128. package/dist/waas/utils/validateNotTaproot/validateNotTaproot.d.ts +1 -1
  129. package/dist/waas.cjs +3 -3
  130. package/dist/waas.cjs.map +1 -1
  131. package/dist/waas.esm.js +3 -3
  132. package/dist/waas.esm.js.map +1 -1
  133. package/package.json +3 -3
  134. package/dist/addBitcoinInjectedWalletsExtension-BuSLLGoj.esm.js.map +0 -1
  135. package/dist/addBitcoinInjectedWalletsExtension-XOWDo0YD.cjs.map +0 -1
  136. package/dist/addWaasBitcoinExtension-6VcplBLA.esm.js.map +0 -1
  137. package/dist/addWaasBitcoinExtension-DvLl84Py.cjs.map +0 -1
  138. package/dist/bitcoinTransferAmount-CDTF7GGL.esm.js.map +0 -1
  139. package/dist/bitcoinTransferAmount-pia-kREy.cjs.map +0 -1
@@ -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_bitcoinTransferAmount = require('./bitcoinTransferAmount-pia-kREy.cjs');
28
+ const require_bitcoinTransferAmount = require('./bitcoinTransferAmount-Ba-8Zsty.cjs');
29
29
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
30
30
  let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
31
31
  let _dynamic_labs_sdk_api_core = require("@dynamic-labs/sdk-api-core");
@@ -112,7 +112,7 @@ const RBF_SEQUENCE = 4294967293;
112
112
  * @returns The transaction ID
113
113
  * @throws {TransactionRequiredError} if no transaction is specified
114
114
  * @throws {TransactionBroadcastFailedError} if broadcasting fails
115
- * @not-instrumented
115
+ * @notInstrumented
116
116
  */
117
117
  const broadcastTransaction = async (rawTransaction) => {
118
118
  if (!rawTransaction) throw new TransactionRequiredError();
@@ -203,7 +203,7 @@ var SegwitOutputScriptError = class extends _dynamic_labs_sdk_client.BaseError {
203
203
  * @param options.psbt - The PSBT instance to add inputs to
204
204
  * @param options.publicKeyPair - Key pair containing the public key for witness script
205
205
  * @param options.selectedUTXOs - Array of UTXOs to add as inputs
206
- * @not-instrumented
206
+ * @notInstrumented
207
207
  */
208
208
  const addInputsToPsbt = (options) => {
209
209
  const { network, psbt, publicKeyPair, selectedUTXOs } = options;
@@ -238,7 +238,7 @@ const addInputsToPsbt = (options) => {
238
238
  * @param options.network - Bitcoin network configuration (mainnet or testnet)
239
239
  * @param options.psbt - The PSBT instance to add outputs to
240
240
  * @param options.recipientAddress - The recipient's Bitcoin address
241
- * @not-instrumented
241
+ * @notInstrumented
242
242
  */
243
243
  const addOutputsToPsbt = (options) => {
244
244
  const { accountAddress, amountInSatoshis, changeAmount, hasChangeOutput, network, psbt, recipientAddress } = options;
@@ -280,7 +280,7 @@ var FeeRecommendationsFetchError = class extends _dynamic_labs_sdk_client.BaseEr
280
280
  *
281
281
  * @returns Fee recommendation data with rates in sat/vB
282
282
  * @throws FeeRecommendationsFetchError if fetching fee recommendations fails
283
- * @not-instrumented
283
+ * @notInstrumented
284
284
  */
285
285
  const getFeeRecommendations = async () => {
286
286
  const response = await fetch(`${MEMPOOL_API_URL}/v1/fees/recommended`);
@@ -297,7 +297,7 @@ const getFeeRecommendations = async () => {
297
297
  * @param options.numInputs - Number of transaction inputs (UTXOs being spent)
298
298
  * @param options.numOutputs - Number of transaction outputs
299
299
  * @returns Estimated fee in satoshis
300
- * @not-instrumented
300
+ * @notInstrumented
301
301
  */
302
302
  const estimateTransactionFee = async ({ feePriority = "medium", numInputs, numOutputs }) => {
303
303
  try {
@@ -323,7 +323,7 @@ const estimateTransactionFee = async ({ feePriority = "medium", numInputs, numOu
323
323
  * @param options.selectedTotalValue - Total value of selected UTXOs in satoshis
324
324
  * @param options.selectedUTXOs - Array of selected UTXOs for the transaction
325
325
  * @returns Object with feeEstimate, changeAmountNumber, and hasChangeOutput
326
- * @not-instrumented
326
+ * @notInstrumented
327
327
  */
328
328
  const calculateFeeAndChange = async ({ amountInSatoshis, feePriority, selectedTotalValue, selectedUTXOs }) => {
329
329
  let feeEstimate = await estimateTransactionFee({
@@ -359,7 +359,7 @@ const calculateFeeAndChange = async ({ amountInSatoshis, feePriority, selectedTo
359
359
  *
360
360
  * @param utxos - Array of UTXOs
361
361
  * @returns Total value in satoshis
362
- * @not-instrumented
362
+ * @notInstrumented
363
363
  */
364
364
  const calculateUTXOTotal = (utxos) => utxos.reduce((total, utxo) => total + utxo.value, 0);
365
365
 
@@ -390,7 +390,7 @@ var UTXOsFetchError = class extends _dynamic_labs_sdk_client.BaseError {
390
390
  * @param address - The Bitcoin address to get UTXOs for
391
391
  * @returns Array of UTXOs
392
392
  * @throws UTXOsFetchError if fetching UTXOs fails
393
- * @not-instrumented
393
+ * @notInstrumented
394
394
  */
395
395
  const getUTXOs = async (address$1) => {
396
396
  const response = await fetch(`${MEMPOOL_API_URL}/address/${address$1}/utxo`);
@@ -410,7 +410,7 @@ const getUTXOs = async (address$1) => {
410
410
  * @param options.targetAmount - Target amount in satoshis (amount + fees + dust limit)
411
411
  * @param options.utxos - Array of available UTXOs to select from
412
412
  * @returns Selected UTXOs
413
- * @not-instrumented
413
+ * @notInstrumented
414
414
  */
415
415
  const selectUTXOsLargestFirst = (options) => {
416
416
  const { targetAmount, utxos } = options;
@@ -437,7 +437,7 @@ const selectUTXOsLargestFirst = (options) => {
437
437
  * @param options.selectedUTXOs - Array of initially selected UTXOs
438
438
  * @returns Validated selected UTXOs
439
439
  * @throws InsufficientFundsError if insufficient funds
440
- * @not-instrumented
440
+ * @notInstrumented
441
441
  */
442
442
  const validateAndSelectUTXOs = (options) => {
443
443
  const { allUTXOs, amountInSatoshis, feeEstimate, selectedTotal, selectedUTXOs } = options;
@@ -479,7 +479,7 @@ var TaprootAddressNotSupportedError = class extends _dynamic_labs_sdk_client.Bas
479
479
  *
480
480
  * @param accountAddress - The account address to check
481
481
  * @throws TaprootAddressNotSupportedError if address is Taproot
482
- * @not-instrumented
482
+ * @notInstrumented
483
483
  */
484
484
  const validateNotTaproot = (accountAddress) => {
485
485
  if (accountAddress.toLowerCase().startsWith("bc1p") || accountAddress.toLowerCase().startsWith("tb1p")) throw new TaprootAddressNotSupportedError();
@@ -499,7 +499,7 @@ const validateNotTaproot = (accountAddress) => {
499
499
  * @param options.recipientAddress - The recipient's Bitcoin address
500
500
  * @returns A PSBT in Base64 format
501
501
  * @throws Error if insufficient funds, no UTXOs, or other errors
502
- * @not-instrumented
502
+ * @notInstrumented
503
503
  */
504
504
  const buildPsbt = async ({ accountAddress, amountInSatoshis, feePriority = "medium", network, publicKeyHex, recipientAddress }) => {
505
505
  if (amountInSatoshis <= BigInt(0)) throw new InvalidAmountError({
@@ -577,7 +577,7 @@ var PublicKeyNotFoundError = class extends _dynamic_labs_sdk_client.BaseError {
577
577
  //#region src/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.ts
578
578
  /**
579
579
  * Gets the public key for a wallet account from the user's verified credentials
580
- * @not-instrumented
580
+ * @notInstrumented
581
581
  */
582
582
  const getPublicKeyForWalletAccount = (walletAccount, client) => {
583
583
  const user = (0, _dynamic_labs_sdk_client_core.getCore)(client).state.get().user;
@@ -590,7 +590,7 @@ const getPublicKeyForWalletAccount = (walletAccount, client) => {
590
590
 
591
591
  //#endregion
592
592
  //#region src/waas/utils/createWalletProviderForWaasBitcoin/createWalletProviderForWaasBitcoin.ts
593
- /** @not-instrumented */
593
+ /** @notInstrumented */
594
594
  const createWalletProviderForWaasBitcoin = (sdkClient) => {
595
595
  const chain = "BTC";
596
596
  const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.EmbeddedWallet;
@@ -716,7 +716,7 @@ const WAAS_BITCOIN_EXTENSION_KEY = "waasBitcoin";
716
716
  * allowing users to have wallets managed by Dynamic's infrastructure.
717
717
  *
718
718
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
719
- * @not-instrumented
719
+ * @notInstrumented
720
720
  */
721
721
  const addWaasBitcoinExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
722
722
  if ((0, _dynamic_labs_sdk_client_core.hasExtension)({ extensionKey: WAAS_BITCOIN_EXTENSION_KEY }, client)) return;
@@ -755,4 +755,4 @@ Object.defineProperty(exports, 'addWaasBitcoinExtension', {
755
755
  return addWaasBitcoinExtension;
756
756
  }
757
757
  });
758
- //# sourceMappingURL=addWaasBitcoinExtension-DvLl84Py.cjs.map
758
+ //# sourceMappingURL=addWaasBitcoinExtension-iCWkOG-U.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addWaasBitcoinExtension-iCWkOG-U.cjs","names":["BaseError","BaseError","BaseError","BaseError","BaseError","address","BaseError","payments","address","BaseError","feePerByte: number","BaseError","address","address","selected: UTXO[]","BaseError","ecc","Psbt","BaseError","address","WalletProviderEnum","DYNAMIC_WAAS_METADATA","getActiveNetworkId: WaasBitcoinWalletProvider['getActiveNetworkId']","switchActiveNetwork: WaasBitcoinWalletProvider['switchActiveNetwork']","getConnectedAddresses: WaasBitcoinWalletProvider['getConnectedAddresses']","signPsbt: WaasBitcoinWalletProvider['signPsbt']","MFAAction","signPsbts: WaasBitcoinWalletProvider['signPsbts']","signMessage: WaasBitcoinWalletProvider['signMessage']","buildPsbt: WaasBitcoinWalletProvider['buildPsbt']","buildPsbtUtil","networks","sendBitcoin: WaasBitcoinWalletProvider['sendBitcoin']","buildPsbt","Psbt","bitcoinExecuteSwapTransaction","bitcoinTransferAmount","WalletProviderPriority"],"sources":["../src/errors/TransactionBroadcastFailedError.ts","../src/errors/TransactionRequiredError.ts","../src/waas/constants.ts","../src/waas/utils/broadcastTransaction/broadcastTransaction.ts","../src/errors/InsufficientFundsError.ts","../src/errors/InvalidAmountError.ts","../src/errors/NoUTXOsFoundError.ts","../src/errors/SegwitOutputScriptError.ts","../src/waas/utils/addInputsToPsbt/addInputsToPsbt.ts","../src/waas/utils/addOutputsToPsbt/addOutputsToPsbt.ts","../src/errors/FeeRecommendationsFetchError.ts","../src/waas/utils/getFeeRecommendations/getFeeRecommendations.ts","../src/waas/utils/estimateTransactionFee/estimateTransactionFee.ts","../src/waas/utils/calculateFeeAndChange/calculateFeeAndChange.ts","../src/waas/utils/calculateUTXOTotal/calculateUTXOTotal.ts","../src/errors/UTXOsFetchError.ts","../src/waas/utils/getUTXOs/getUTXOs.ts","../src/waas/utils/selectUTXOsLargestFirst/selectUTXOsLargestFirst.ts","../src/waas/utils/validateAndSelectUTXOs/validateAndSelectUTXOs.ts","../src/errors/TaprootAddressNotSupportedError.ts","../src/waas/utils/validateNotTaproot/validateNotTaproot.ts","../src/waas/utils/buildPsbt/buildPsbt.ts","../src/errors/PublicKeyNotFoundError.ts","../src/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.ts","../src/waas/utils/createWalletProviderForWaasBitcoin/createWalletProviderForWaasBitcoin.ts","../src/waas/addWaasBitcoinExtension/addWaasBitcoinExtension.ts"],"sourcesContent":["import { BaseError } from '@dynamic-labs-sdk/client';\n\ntype TransactionBroadcastFailedErrorParams = {\n response: Response;\n};\n\nexport class TransactionBroadcastFailedError extends BaseError {\n public readonly response: Response;\n\n constructor({ response }: TransactionBroadcastFailedErrorParams) {\n super({\n cause: null,\n code: 'transaction_broadcast_failed_error',\n details: `Status: ${response.status} ${response.statusText}`,\n docsUrl: null,\n name: 'TransactionBroadcastFailedError',\n shortMessage: 'Failed to broadcast transaction to mempool',\n });\n\n this.response = response;\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class TransactionRequiredError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'transaction_required_error',\n docsUrl: null,\n name: 'TransactionRequiredError',\n shortMessage: 'No transaction specified for broadcast',\n });\n }\n}\n","/**\n * Mempool.space API URL for mainnet\n */\nexport const MEMPOOL_API_URL = 'https://mempool.space/api';\n\n/**\n * Number of satoshis per Bitcoin\n */\nexport const SATOSHIS_PER_BTC = 100_000_000;\n\n/**\n * Bitcoin's dust limit in satoshis\n * Outputs below this value are considered \"dust\" and will be rejected by nodes\n */\nexport const DUST_LIMIT = 546;\n\n/**\n * Accurate vSize constants for Native SegWit (P2WPKH) transactions\n * Used for precise fee estimation\n */\nexport const VSIZE_OVERHEAD = 10.5;\n\nexport const VSIZE_INPUT_P2WPKH = 68;\n\nexport const VSIZE_OUTPUT_P2WPKH = 31;\n\n/**\n * Minimum relay fee in satoshis\n * Added to fee estimate to ensure transaction propagation\n */\nexport const MIN_RELAY_FEE = 111;\n\n/**\n * Conservative default fee estimate in satoshis\n * Used as fallback when fee estimation fails\n */\nexport const DEFAULT_FEE_ESTIMATE = 1000;\n\n/**\n * RBF (Replace-By-Fee) sequence number\n * 0xfffffffd = 4294967293 (enables RBF, not final)\n */\nexport const RBF_SEQUENCE = 0xfffffffd;\n","import { TransactionBroadcastFailedError } from '../../../errors/TransactionBroadcastFailedError';\nimport { TransactionRequiredError } from '../../../errors/TransactionRequiredError';\nimport { MEMPOOL_API_URL } from '../../constants';\n\n/**\n * Sends a raw Bitcoin transaction to the mempool\n *\n * @param rawTransaction - The raw transaction in hex format\n * @returns The transaction ID\n * @throws {TransactionRequiredError} if no transaction is specified\n * @throws {TransactionBroadcastFailedError} if broadcasting fails\n * @notInstrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const broadcastTransaction = async (\n rawTransaction: string\n): Promise<string> => {\n if (!rawTransaction) {\n throw new TransactionRequiredError();\n }\n\n const response = await fetch(`${MEMPOOL_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 TransactionBroadcastFailedError({ response });\n }\n\n return response.text();\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nimport { SATOSHIS_PER_BTC } from '../waas/constants';\n\ntype InsufficientFundsErrorParams = {\n availableSatoshis: number;\n requiredSatoshis: number;\n};\n\nexport class InsufficientFundsError extends BaseError {\n public readonly availableSatoshis: number;\n\n public readonly requiredSatoshis: number;\n\n constructor({ availableSatoshis, requiredSatoshis }: InsufficientFundsErrorParams) {\n const availableBtc = availableSatoshis / SATOSHIS_PER_BTC;\n const requiredBtc = requiredSatoshis / SATOSHIS_PER_BTC;\n\n super({\n cause: null,\n code: 'insufficient_funds_error',\n details: `Available: ${availableBtc} BTC (${availableSatoshis} satoshis), Required: ${requiredBtc} BTC (${requiredSatoshis} satoshis)`,\n docsUrl: null,\n name: 'InsufficientFundsError',\n shortMessage: 'Insufficient funds for transaction',\n });\n\n this.availableSatoshis = availableSatoshis;\n\n this.requiredSatoshis = requiredSatoshis;\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\ntype InvalidAmountErrorParams = {\n amountInSatoshis: number;\n reason: string;\n};\n\nexport class InvalidAmountError extends BaseError {\n public readonly amountInSatoshis: number;\n\n constructor({ amountInSatoshis, reason }: InvalidAmountErrorParams) {\n super({\n cause: null,\n code: 'invalid_amount_error',\n details: `Amount: ${amountInSatoshis} satoshis`,\n docsUrl: null,\n name: 'InvalidAmountError',\n shortMessage: reason,\n });\n\n this.amountInSatoshis = amountInSatoshis;\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\ntype NoUTXOsFoundErrorParams = {\n address: string;\n};\n\nexport class NoUTXOsFoundError extends BaseError {\n public readonly address: string;\n\n constructor({ address }: NoUTXOsFoundErrorParams) {\n super({\n cause: null,\n code: 'no_utxos_found_error',\n details: `Address: ${address}`,\n docsUrl: null,\n name: 'NoUTXOsFoundError',\n shortMessage: 'No UTXOs found for this address',\n });\n\n this.address = address;\n }\n}\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class SegwitOutputScriptError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'segwit_output_script_error',\n docsUrl: null,\n name: 'SegwitOutputScriptError',\n shortMessage: 'Failed to create segwit output script',\n });\n }\n}\n","import { getBuffer } from '@dynamic-labs-sdk/client/core';\nimport type { Network, Psbt } from 'bitcoinjs-lib';\nimport { payments } from 'bitcoinjs-lib';\n\nimport { SegwitOutputScriptError } from '../../../errors/SegwitOutputScriptError';\nimport { RBF_SEQUENCE } from '../../constants';\nimport type { UTXO } from '../../WaasBitcoinWalletProvider.types';\n\ntype AddInputsToPsbtOptions = {\n network: Network;\n psbt: Psbt;\n publicKeyPair: { publicKey: Uint8Array };\n selectedUTXOs: UTXO[];\n};\n\n/**\n * Adds inputs to PSBT from selected UTXOs\n *\n * @param options.network - Bitcoin network configuration (mainnet or testnet)\n * @param options.psbt - The PSBT instance to add inputs to\n * @param options.publicKeyPair - Key pair containing the public key for witness script\n * @param options.selectedUTXOs - Array of UTXOs to add as inputs\n * @notInstrumented\n */\nexport const addInputsToPsbt = (options: AddInputsToPsbtOptions): void => {\n const { network, psbt, publicKeyPair, selectedUTXOs } = options;\n\n for (const utxo of selectedUTXOs) {\n const outputScript = payments.p2wpkh({\n network,\n pubkey: publicKeyPair.publicKey,\n }).output;\n\n if (!outputScript) {\n throw new SegwitOutputScriptError();\n }\n\n const txidBuffer = new Uint8Array(\n getBuffer().from(utxo.txid, 'hex').reverse()\n );\n\n psbt.addInput({\n hash: txidBuffer,\n index: utxo.vout,\n sequence: RBF_SEQUENCE,\n witnessUtxo: {\n script: outputScript,\n value: BigInt(utxo.value),\n },\n });\n }\n};\n","import type { Network, Psbt } from 'bitcoinjs-lib';\nimport { address } from 'bitcoinjs-lib';\n\nimport { InvalidAmountError } from '../../../errors/InvalidAmountError';\nimport { DUST_LIMIT, SATOSHIS_PER_BTC } from '../../constants';\n\ntype AddOutputsToPsbtOptions = {\n accountAddress: string;\n amountInSatoshis: number;\n changeAmount: number;\n hasChangeOutput: boolean;\n network: Network;\n psbt: Psbt;\n recipientAddress: string;\n};\n\n/**\n * Adds outputs to PSBT (recipient and optionally change)\n *\n * @param options.accountAddress - The sender's address for receiving change\n * @param options.amountInSatoshis - Amount to send to the recipient in satoshis\n * @param options.changeAmount - Amount to return as change in satoshis\n * @param options.hasChangeOutput - Whether to include a change output\n * @param options.network - Bitcoin network configuration (mainnet or testnet)\n * @param options.psbt - The PSBT instance to add outputs to\n * @param options.recipientAddress - The recipient's Bitcoin address\n * @notInstrumented\n */\nexport const addOutputsToPsbt = (options: AddOutputsToPsbtOptions): void => {\n const {\n accountAddress,\n amountInSatoshis,\n changeAmount,\n hasChangeOutput,\n network,\n psbt,\n recipientAddress,\n } = options;\n\n if (amountInSatoshis < DUST_LIMIT) {\n throw new InvalidAmountError({\n amountInSatoshis,\n reason: `Amount is below dust limit of ${DUST_LIMIT} satoshis (${DUST_LIMIT / SATOSHIS_PER_BTC} BTC)`,\n });\n }\n\n psbt.addOutput({\n script: address.toOutputScript(recipientAddress, network),\n value: BigInt(amountInSatoshis),\n });\n\n if (hasChangeOutput) {\n psbt.addOutput({\n script: address.toOutputScript(accountAddress, network),\n value: BigInt(changeAmount),\n });\n }\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\ntype FeeRecommendationsFetchErrorParams = {\n response: Response;\n};\n\nexport class FeeRecommendationsFetchError extends BaseError {\n public readonly response: Response;\n\n constructor({ response }: FeeRecommendationsFetchErrorParams) {\n super({\n cause: null,\n code: 'fee_recommendations_fetch_error',\n details: `Status: ${response.status} ${response.statusText}`,\n docsUrl: null,\n name: 'FeeRecommendationsFetchError',\n shortMessage: 'Failed to fetch fee recommendations from mempool',\n });\n\n this.response = response;\n }\n}\n","import { FeeRecommendationsFetchError } from '../../../errors/FeeRecommendationsFetchError';\nimport { MEMPOOL_API_URL } from '../../constants';\nimport type { FeeRecommendations } from '../../WaasBitcoinWalletProvider.types';\n\n/**\n * Gets fee recommendations from mempool.space API\n *\n * @returns Fee recommendation data with rates in sat/vB\n * @throws FeeRecommendationsFetchError if fetching fee recommendations fails\n * @notInstrumented\n */\nexport const getFeeRecommendations = async (): Promise<FeeRecommendations> => {\n const response = await fetch(`${MEMPOOL_API_URL}/v1/fees/recommended`);\n\n if (!response.ok) {\n throw new FeeRecommendationsFetchError({ response });\n }\n\n return response.json();\n};\n","import {\n DEFAULT_FEE_ESTIMATE,\n MIN_RELAY_FEE,\n VSIZE_INPUT_P2WPKH,\n VSIZE_OUTPUT_P2WPKH,\n VSIZE_OVERHEAD,\n} from '../../constants';\nimport type { FeePriority } from '../../WaasBitcoinWalletProvider.types';\nimport { getFeeRecommendations } from '../getFeeRecommendations';\n\ntype EstimateTransactionFeeOptions = {\n feePriority?: FeePriority;\n numInputs: number;\n numOutputs: number;\n};\n\n/**\n * Estimates transaction fees based on number of inputs and outputs using accurate vSize\n *\n * @param options.feePriority - Priority level for fee estimation ('low', 'medium', or 'high')\n * @param options.numInputs - Number of transaction inputs (UTXOs being spent)\n * @param options.numOutputs - Number of transaction outputs\n * @returns Estimated fee in satoshis\n * @notInstrumented\n */\nexport const estimateTransactionFee = async ({\n feePriority = 'medium',\n numInputs,\n numOutputs,\n}: EstimateTransactionFeeOptions): Promise<number> => {\n try {\n const feeData = await getFeeRecommendations();\n\n let feePerByte: number;\n\n if (feePriority === 'high') {\n feePerByte = feeData.fastestFee ?? feeData.halfHourFee ?? 1;\n } else if (feePriority === 'low') {\n feePerByte = feeData.economyFee ?? feeData.hourFee ?? 1;\n } else {\n feePerByte =\n feeData.halfHourFee ?? feeData.hourFee ?? feeData.economyFee ?? 1;\n }\n\n const vSize =\n VSIZE_OVERHEAD +\n numInputs * VSIZE_INPUT_P2WPKH +\n numOutputs * VSIZE_OUTPUT_P2WPKH;\n\n return Math.ceil(feePerByte * vSize) + MIN_RELAY_FEE;\n } catch {\n return DEFAULT_FEE_ESTIMATE;\n }\n};\n","import { DUST_LIMIT } from '../../constants';\nimport type { FeePriority, UTXO } from '../../WaasBitcoinWalletProvider.types';\nimport { estimateTransactionFee } from '../estimateTransactionFee';\n\ntype CalculateFeeAndChangeOptions = {\n amountInSatoshis: bigint;\n feePriority: FeePriority;\n selectedTotalValue: number;\n selectedUTXOs: UTXO[];\n};\n\ntype CalculateFeeAndChangeResult = {\n changeAmountNumber: number;\n feeEstimate: number;\n hasChangeOutput: boolean;\n};\n\n/**\n * Calculates fee estimate and change amount, handling dust limit\n *\n * @param options.amountInSatoshis - Amount to send in satoshis\n * @param options.feePriority - Priority level for fee estimation ('low', 'medium', or 'high')\n * @param options.selectedTotalValue - Total value of selected UTXOs in satoshis\n * @param options.selectedUTXOs - Array of selected UTXOs for the transaction\n * @returns Object with feeEstimate, changeAmountNumber, and hasChangeOutput\n * @notInstrumented\n */\nexport const calculateFeeAndChange = async ({\n amountInSatoshis,\n feePriority,\n selectedTotalValue,\n selectedUTXOs,\n}: CalculateFeeAndChangeOptions): Promise<CalculateFeeAndChangeResult> => {\n let feeEstimate = await estimateTransactionFee({\n feePriority,\n numInputs: selectedUTXOs.length,\n numOutputs: 1,\n });\n\n let maxToSpend = selectedTotalValue - feeEstimate;\n let changeAmount = BigInt(maxToSpend) - amountInSatoshis;\n\n const changeAmountNumber = Number(changeAmount);\n\n if (changeAmount > 0 && changeAmountNumber >= DUST_LIMIT) {\n feeEstimate = await estimateTransactionFee({\n feePriority,\n numInputs: selectedUTXOs.length,\n numOutputs: 2,\n });\n maxToSpend = selectedTotalValue - feeEstimate;\n changeAmount = BigInt(maxToSpend) - amountInSatoshis;\n }\n\n const finalChangeAmountNumber = Number(changeAmount);\n const hasChangeOutput =\n changeAmount > 0 && finalChangeAmountNumber >= DUST_LIMIT;\n\n if (changeAmount > 0 && finalChangeAmountNumber < DUST_LIMIT) {\n feeEstimate += finalChangeAmountNumber;\n }\n\n return {\n changeAmountNumber: finalChangeAmountNumber,\n feeEstimate,\n hasChangeOutput,\n };\n};\n","import type { UTXO } from '../../WaasBitcoinWalletProvider.types';\n\n/**\n * Calculates the total value of UTXOs\n *\n * @param utxos - Array of UTXOs\n * @returns Total value in satoshis\n * @notInstrumented\n */\nexport const calculateUTXOTotal = (utxos: UTXO[]): number =>\n utxos.reduce((total: number, utxo: UTXO) => total + utxo.value, 0);\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\ntype UTXOsFetchErrorParams = {\n address: string;\n response: Response;\n};\n\nexport class UTXOsFetchError extends BaseError {\n public readonly address: string;\n\n public readonly response: Response;\n\n constructor({ address, response }: UTXOsFetchErrorParams) {\n super({\n cause: null,\n code: 'utxos_fetch_error',\n details: `Address: ${address}, Status: ${response.status} ${response.statusText}`,\n docsUrl: null,\n name: 'UTXOsFetchError',\n shortMessage: 'Failed to fetch UTXOs from mempool',\n });\n\n this.address = address;\n\n this.response = response;\n }\n}\n","import { UTXOsFetchError } from '../../../errors/UTXOsFetchError';\nimport { MEMPOOL_API_URL } from '../../constants';\nimport type { UTXO } from '../../WaasBitcoinWalletProvider.types';\n\n/**\n * Gets UTXOs for a Bitcoin address from mempool.space API\n *\n * @param address - The Bitcoin address to get UTXOs for\n * @returns Array of UTXOs\n * @throws UTXOsFetchError if fetching UTXOs fails\n * @notInstrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const getUTXOs = async (address: string): Promise<UTXO[]> => {\n const response = await fetch(`${MEMPOOL_API_URL}/address/${address}/utxo`);\n\n if (!response.ok) {\n throw new UTXOsFetchError({ address, response });\n }\n\n return response.json();\n};\n","import type { UTXO } from '../../WaasBitcoinWalletProvider.types';\n\ntype SelectUTXOsLargestFirstOptions = {\n targetAmount: number;\n utxos: UTXO[];\n};\n\n/**\n * Selects UTXOs using Largest-First (Accumulator) strategy\n * Sorts UTXOs by value (descending) and selects until we have enough to cover amount + fees\n *\n * @param options.targetAmount - Target amount in satoshis (amount + fees + dust limit)\n * @param options.utxos - Array of available UTXOs to select from\n * @returns Selected UTXOs\n * @notInstrumented\n */\nexport const selectUTXOsLargestFirst = (\n options: SelectUTXOsLargestFirstOptions\n) => {\n const { targetAmount, utxos } = options;\n\n const sortedUTXOs = [...utxos].sort((a, b) => b.value - a.value);\n\n const selected: UTXO[] = [];\n let total = 0;\n\n for (const utxo of sortedUTXOs) {\n selected.push(utxo);\n total += utxo.value;\n\n if (total >= targetAmount) {\n break;\n }\n }\n\n return selected;\n};\n","import { InsufficientFundsError } from '../../../errors/InsufficientFundsError';\nimport type { UTXO } from '../../WaasBitcoinWalletProvider.types';\nimport { calculateUTXOTotal } from '../calculateUTXOTotal';\n\ntype ValidateAndSelectUTXOsOptions = {\n allUTXOs: UTXO[];\n amountInSatoshis: number;\n feeEstimate: number;\n selectedTotal: number;\n selectedUTXOs: UTXO[];\n};\n\n/**\n * Validates and ensures sufficient funds for the transaction\n *\n * @param options.allUTXOs - Complete array of available UTXOs for the address\n * @param options.amountInSatoshis - Amount to send in satoshis\n * @param options.feeEstimate - Estimated transaction fee in satoshis\n * @param options.selectedTotal - Total value of initially selected UTXOs in satoshis\n * @param options.selectedUTXOs - Array of initially selected UTXOs\n * @returns Validated selected UTXOs\n * @throws InsufficientFundsError if insufficient funds\n * @notInstrumented\n */\nexport const validateAndSelectUTXOs = (\n options: ValidateAndSelectUTXOsOptions\n) => {\n const {\n allUTXOs,\n amountInSatoshis,\n feeEstimate,\n selectedTotal,\n selectedUTXOs,\n } = options;\n\n const requiredAmount = amountInSatoshis + feeEstimate;\n\n if (selectedTotal >= requiredAmount) {\n return selectedUTXOs;\n }\n\n if (selectedUTXOs.length < allUTXOs.length) {\n const allTotal = calculateUTXOTotal(allUTXOs);\n\n if (allTotal < requiredAmount) {\n throw new InsufficientFundsError({\n availableSatoshis: allTotal,\n requiredSatoshis: amountInSatoshis,\n });\n }\n\n return allUTXOs;\n }\n\n throw new InsufficientFundsError({\n availableSatoshis: selectedTotal,\n requiredSatoshis: amountInSatoshis,\n });\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class TaprootAddressNotSupportedError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'taproot_address_not_supported',\n docsUrl: null,\n name: 'TaprootAddressNotSupportedError',\n shortMessage:\n 'Taproot addresses are not supported for PSBT building. Only Native SegWit (P2WPKH) addresses are allowed.',\n });\n }\n}\n","import { TaprootAddressNotSupportedError } from '../../../errors/TaprootAddressNotSupportedError';\n\n/**\n * Validates that the address is not a Taproot address\n * Only Native SegWit (P2WPKH) is supported for PSBT building\n *\n * @param accountAddress - The account address to check\n * @throws TaprootAddressNotSupportedError if address is Taproot\n * @notInstrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const validateNotTaproot = (accountAddress: string): void => {\n if (\n accountAddress.toLowerCase().startsWith('bc1p') ||\n accountAddress.toLowerCase().startsWith('tb1p')\n ) {\n throw new TaprootAddressNotSupportedError();\n }\n};\n","import ecc from '@bitcoinerlab/secp256k1';\nimport { getBuffer } from '@dynamic-labs-sdk/client/core';\nimport type { Network } from 'bitcoinjs-lib';\nimport { Psbt } from 'bitcoinjs-lib';\nimport { ECPairFactory } from 'ecpair';\n\nimport { InsufficientFundsError } from '../../../errors/InsufficientFundsError';\nimport { InvalidAmountError } from '../../../errors/InvalidAmountError';\nimport { NoUTXOsFoundError } from '../../../errors/NoUTXOsFoundError';\nimport { DUST_LIMIT } from '../../constants';\nimport type { FeePriority } from '../../WaasBitcoinWalletProvider.types';\nimport { addInputsToPsbt } from '../addInputsToPsbt';\nimport { addOutputsToPsbt } from '../addOutputsToPsbt';\nimport { calculateFeeAndChange } from '../calculateFeeAndChange';\nimport { calculateUTXOTotal } from '../calculateUTXOTotal';\nimport { estimateTransactionFee } from '../estimateTransactionFee';\nimport { getUTXOs } from '../getUTXOs';\nimport { selectUTXOsLargestFirst } from '../selectUTXOsLargestFirst';\nimport { validateAndSelectUTXOs } from '../validateAndSelectUTXOs';\nimport { validateNotTaproot } from '../validateNotTaproot';\n\ntype BuildPsbtOptions = {\n accountAddress: string;\n amountInSatoshis: bigint;\n feePriority?: FeePriority;\n network: Network;\n publicKeyHex: string;\n recipientAddress: string;\n};\n\n/**\n * Builds a PSBT for a Bitcoin transaction with real UTXOs\n * Uses Largest-First UTXO selection strategy with accurate vSize fee estimation\n *\n * @param options.accountAddress - The sender's Bitcoin address\n * @param options.amountInSatoshis - Amount to send in satoshis\n * @param options.feePriority - Priority level for fee estimation ('low', 'medium', or 'high')\n * @param options.network - Bitcoin network configuration (mainnet or testnet)\n * @param options.publicKeyHex - The sender's public key in hexadecimal format\n * @param options.recipientAddress - The recipient's Bitcoin address\n * @returns A PSBT in Base64 format\n * @throws Error if insufficient funds, no UTXOs, or other errors\n * @notInstrumented\n */\nexport const buildPsbt = async ({\n accountAddress,\n amountInSatoshis,\n feePriority = 'medium',\n network,\n publicKeyHex,\n recipientAddress,\n}: BuildPsbtOptions): Promise<string> => {\n if (amountInSatoshis <= BigInt(0)) {\n throw new InvalidAmountError({\n amountInSatoshis: Number(amountInSatoshis),\n reason: 'Amount must be greater than 0',\n });\n }\n\n validateNotTaproot(accountAddress);\n\n const allUTXOs = await getUTXOs(accountAddress);\n\n if (allUTXOs.length === 0) {\n throw new NoUTXOsFoundError({ address: accountAddress });\n }\n\n const publicKeyBuffer = new Uint8Array(getBuffer().from(publicKeyHex, 'hex'));\n const ECPair = ECPairFactory(ecc);\n\n // @ts-expect-error - ecpair types are incompatible with valibot >=1.2.0\n // The options are actually optional at runtime, but TypeScript infers them as required\n const publicKeyPair = ECPair.fromPublicKey(publicKeyBuffer, {\n compressed: true,\n });\n\n const amountInSatoshisNumber = Number(amountInSatoshis);\n\n const initialFeeEstimate = await estimateTransactionFee({\n feePriority,\n numInputs: 1,\n numOutputs: 1,\n });\n\n const targetAmount = amountInSatoshisNumber + initialFeeEstimate + DUST_LIMIT;\n\n let selectedUTXOs = selectUTXOsLargestFirst({\n targetAmount,\n utxos: allUTXOs,\n });\n const selectedTotal = calculateUTXOTotal(selectedUTXOs);\n\n selectedUTXOs = validateAndSelectUTXOs({\n allUTXOs,\n amountInSatoshis: amountInSatoshisNumber,\n feeEstimate: initialFeeEstimate,\n selectedTotal,\n selectedUTXOs,\n });\n\n const selectedTotalValue = calculateUTXOTotal(selectedUTXOs);\n\n const { changeAmountNumber, feeEstimate, hasChangeOutput } =\n await calculateFeeAndChange({\n amountInSatoshis,\n feePriority,\n selectedTotalValue,\n selectedUTXOs,\n });\n\n const maxToSpend = selectedTotalValue - feeEstimate;\n\n if (maxToSpend < amountInSatoshisNumber) {\n throw new InsufficientFundsError({\n availableSatoshis: maxToSpend,\n requiredSatoshis: amountInSatoshisNumber,\n });\n }\n\n const psbt = new Psbt({ network });\n\n addInputsToPsbt({\n network,\n psbt,\n publicKeyPair,\n selectedUTXOs,\n });\n\n addOutputsToPsbt({\n accountAddress,\n amountInSatoshis: amountInSatoshisNumber,\n changeAmount: changeAmountNumber,\n hasChangeOutput,\n network,\n psbt,\n recipientAddress,\n });\n\n return psbt.toBase64();\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class PublicKeyNotFoundError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(address: string) {\n super({\n cause: null,\n code: 'public_key_not_found_error',\n docsUrl: null,\n name: 'PublicKeyNotFoundError',\n shortMessage: `No public key found for address ${address}`,\n });\n }\n}\n\n","import type { DynamicClient, WalletAccount } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\n\nimport { PublicKeyNotFoundError } from '../../../errors/PublicKeyNotFoundError';\n\n/**\n * Gets the public key for a wallet account from the user's verified credentials\n * @notInstrumented\n */\nexport const getPublicKeyForWalletAccount = (\n walletAccount: WalletAccount,\n client: DynamicClient\n): string => {\n const user = getCore(client).state.get().user;\n\n for (const credential of user?.verifiedCredentials ?? []) {\n const additionalAddress = credential.walletAdditionalAddresses?.find(\n (addr) => addr.address === walletAccount.address\n );\n\n if (additionalAddress?.publicKey) {\n return additionalAddress.publicKey;\n }\n }\n\n throw new PublicKeyNotFoundError(walletAccount.address);\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n consumeMfaTokenIfRequiredForAction,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n getSignedSessionId,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport type { BitcoinNetwork } from '@dynamic-labs-sdk/client/waas/core';\nimport {\n DYNAMIC_WAAS_METADATA,\n createWaasProvider,\n getAllUserWaasAddressesForChain,\n} from '@dynamic-labs-sdk/client/waas/core';\nimport { MFAAction, WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Psbt, networks } from 'bitcoinjs-lib';\n\nimport type { BitcoinSendTransactionResponse } from '../../../BitcoinWalletProvider.types';\nimport { bitcoinExecuteSwapTransaction } from '../../../utils/bitcoinExecuteSwapTransaction';\nimport { bitcoinTransferAmount } from '../../../utils/bitcoinTransferAmount';\nimport type {\n WaasBitcoinTransaction,\n WaasBitcoinWalletProvider,\n} from '../../WaasBitcoinWalletProvider.types';\nimport { broadcastTransaction } from '../broadcastTransaction';\nimport { buildPsbt as buildPsbtUtil } from '../buildPsbt';\nimport { getPublicKeyForWalletAccount } from '../getPublicKeyForWalletAccount/getPublicKeyForWalletAccount';\n\n/** @notInstrumented */\nexport const createWalletProviderForWaasBitcoin = (\n sdkClient: DynamicClient\n): WaasBitcoinWalletProvider => {\n const chain = 'BTC' as const;\n\n const walletProviderType = WalletProviderEnum.EmbeddedWallet;\n\n const key = formatWalletProviderKey({\n chain,\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n walletProviderType,\n });\n\n const waasProvider = createWaasProvider({ chain, sdkClient });\n\n const getActiveNetworkId: WaasBitcoinWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: sdkClient,\n walletProviderKey: key,\n });\n\n const switchActiveNetwork: WaasBitcoinWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: sdkClient,\n networkId,\n walletProviderKey: key,\n });\n\n const getConnectedAddresses: WaasBitcoinWalletProvider['getConnectedAddresses'] =\n async () => {\n const waasBitcoinAddresses = getAllUserWaasAddressesForChain(\n { chain },\n sdkClient\n );\n\n return {\n addresses: waasBitcoinAddresses,\n };\n };\n\n const signPsbt: WaasBitcoinWalletProvider['signPsbt'] = async ({\n request,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const waasClient = await waasProvider.getWaasClient();\n\n const { signature: signedSessionId } = await getSignedSessionId(sdkClient);\n\n const mfaToken = await consumeMfaTokenIfRequiredForAction(\n { mfaAction: MFAAction.WalletWaasSign },\n sdkClient\n );\n\n const signedPsbt = await waasClient.signTransaction({\n authToken: sdkClient.token ?? undefined,\n mfaToken,\n senderAddress: walletAccount.address,\n signedSessionId,\n transaction: request.unsignedPsbtBase64,\n });\n\n return { signedPsbt };\n };\n\n const signPsbts: WaasBitcoinWalletProvider['signPsbts'] = async ({\n requests,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const signedPsbts = await Promise.all(\n requests.map(async (request) => {\n const { signedPsbt } = await signPsbt({ request, walletAccount });\n\n return signedPsbt;\n })\n );\n\n return { signedPsbts };\n };\n\n const signMessage: WaasBitcoinWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const waasClient = await waasProvider.getWaasClient();\n\n const { signature: signedSessionId } = await getSignedSessionId(sdkClient);\n\n const mfaToken = await consumeMfaTokenIfRequiredForAction(\n { mfaAction: MFAAction.WalletWaasSign },\n sdkClient\n );\n\n const signature = await waasClient.signMessage({\n accountAddress: walletAccount.address,\n authToken: sdkClient.token ?? undefined,\n bitcoinConfig: {\n network: 'mainnet' as BitcoinNetwork,\n },\n message,\n mfaToken,\n signedSessionId,\n });\n\n return { signature };\n };\n\n const buildPsbt: WaasBitcoinWalletProvider['buildPsbt'] = async ({\n transaction,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const publicKeyHex = getPublicKeyForWalletAccount(walletAccount, sdkClient);\n\n return buildPsbtUtil({\n accountAddress: walletAccount.address,\n amountInSatoshis: transaction.amount,\n feePriority: transaction.feePriority ?? 'medium',\n network: networks.bitcoin,\n publicKeyHex,\n recipientAddress: transaction.recipientAddress,\n });\n };\n\n const sendBitcoin: WaasBitcoinWalletProvider['sendBitcoin'] = async ({\n transaction,\n walletAccount,\n }): Promise<BitcoinSendTransactionResponse> => {\n assertDefined(walletAccount, 'Wallet account is required');\n\n const waasTransaction: WaasBitcoinTransaction = {\n amount: transaction.amount,\n recipientAddress: transaction.recipientAddress,\n };\n\n const unsignedPsbt = await buildPsbt({\n transaction: waasTransaction,\n walletAccount,\n });\n\n const { signedPsbt } = await signPsbt({\n request: { allowedSighash: [], unsignedPsbtBase64: unsignedPsbt },\n walletAccount,\n });\n\n const psbt = Psbt.fromBase64(signedPsbt, { network: networks.bitcoin });\n\n psbt.finalizeAllInputs();\n\n const rawTx = psbt.extractTransaction().toHex();\n\n const transactionId = await broadcastTransaction(rawTx);\n\n return { transactionId };\n };\n\n return {\n ...waasProvider,\n buildPsbt,\n chain,\n executeSwapTransaction: (args) =>\n bitcoinExecuteSwapTransaction(args, sdkClient),\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(DYNAMIC_WAAS_METADATA.displayName),\n key,\n metadata: {\n displayName: DYNAMIC_WAAS_METADATA.displayName,\n icon: DYNAMIC_WAAS_METADATA.icon,\n },\n sendBitcoin,\n signMessage,\n signPsbt,\n signPsbts,\n switchActiveNetwork,\n transferAmount: (args) => bitcoinTransferAmount(args, sdkClient),\n walletProviderType,\n };\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerBitcoinNetworkProviderBuilder } from '../../registerBitcoinNetworkProviderBuilder';\nimport { createWalletProviderForWaasBitcoin } from '../utils/createWalletProviderForWaasBitcoin';\n\nexport const WAAS_BITCOIN_EXTENSION_KEY = 'waasBitcoin';\n\n/**\n * Adds the Dynamic WaaS (Wallet as a Service) Bitcoin extension to the Dynamic client.\n *\n * This extension enables embedded wallet functionality for Bitcoin blockchain,\n * allowing users to have wallets managed by Dynamic's infrastructure.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addWaasBitcoinExtension = (client = getDefaultClient()): void => {\n if (hasExtension({ extensionKey: WAAS_BITCOIN_EXTENSION_KEY }, client)) {\n return;\n }\n\n registerExtension({ extensionKey: WAAS_BITCOIN_EXTENSION_KEY }, client);\n registerBitcoinNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const walletProvider = createWalletProviderForWaasBitcoin(client);\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n};\n\n"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { Psbt } from "bitcoinjs-lib";
4
4
 
5
5
  //#region package.json
6
6
  var name = "@dynamic-labs-sdk/bitcoin";
7
- var version = "1.12.2";
7
+ var version = "1.13.0";
8
8
 
9
9
  //#endregion
10
10
  //#region src/constants.ts
@@ -13,17 +13,17 @@ const MEMPOOL_API_URL_TESTNET = "https://mempool.space/testnet/api";
13
13
 
14
14
  //#endregion
15
15
  //#region src/utils/getMempoolApiUrl/getMempoolApiUrl.ts
16
- /** @not-instrumented */
16
+ /** @notInstrumented */
17
17
  const getMempoolApiUrl = (address$1) => address$1.startsWith("t") ? MEMPOOL_API_URL_TESTNET : MEMPOOL_API_URL;
18
18
 
19
19
  //#endregion
20
20
  //#region src/utils/satoshisToBtc/satoshisToBtc.ts
21
- /** @not-instrumented */
21
+ /** @notInstrumented */
22
22
  const satoshisToBtc = (satoshis) => satoshis / 1e8;
23
23
 
24
24
  //#endregion
25
25
  //#region src/utils/fetchBtcBalance/fetchBtcBalance.ts
26
- /** @not-instrumented */
26
+ /** @notInstrumented */
27
27
  const fetchBtcBalance = async ({ address: address$1 }) => {
28
28
  const API_URL = getMempoolApiUrl(address$1);
29
29
  const response = await fetch(`${API_URL}/address/${address$1}`);
@@ -35,7 +35,7 @@ const fetchBtcBalance = async ({ address: address$1 }) => {
35
35
 
36
36
  //#endregion
37
37
  //#region src/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.ts
38
- /** @not-instrumented */
38
+ /** @notInstrumented */
39
39
  const createBitcoinNetworkProvider = (networkData) => ({
40
40
  ...createBaseNetworkProvider("BTC", networkData),
41
41
  cluster: networkData.cluster,
@@ -44,7 +44,7 @@ const createBitcoinNetworkProvider = (networkData) => ({
44
44
 
45
45
  //#endregion
46
46
  //#region src/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.ts
47
- /** @not-instrumented */
47
+ /** @notInstrumented */
48
48
  const registerBitcoinNetworkProviderBuilder = (client) => {
49
49
  const networkProviderBuilderRegistry = getNetworkProviderBuilderRegistry(client);
50
50
  /**
@@ -64,13 +64,13 @@ const registerBitcoinNetworkProviderBuilder = (client) => {
64
64
  *
65
65
  * @param walletAccount - The wallet account to check.
66
66
  * @returns True if the wallet account is a Bitcoin wallet account, false otherwise.
67
- * @not-instrumented
67
+ * @notInstrumented
68
68
  */
69
69
  const isBitcoinWalletAccount = (walletAccount) => walletAccount.chain === "BTC";
70
70
 
71
71
  //#endregion
72
72
  //#region src/isBitcoinWalletProvider/isBitcoinWalletProvider.ts
73
- /** @not-instrumented */
73
+ /** @notInstrumented */
74
74
  const isBitcoinWalletProvider = (provider) => {
75
75
  return provider.chain === "BTC";
76
76
  };
@@ -97,7 +97,7 @@ var SendBitcoinRawTransactionError = class extends BaseError {
97
97
  * @param params.rawTransaction - The raw transaction to send
98
98
  * @param params.walletAccount - The wallet account to send the transaction from
99
99
  * @returns An object containing the transaction id
100
- * @not-instrumented
100
+ * @notInstrumented
101
101
  */
102
102
  const sendRawTransaction = async ({ rawTransaction, walletAccount }, client = getDefaultClient$1()) => {
103
103
  const fetchService = getCore(client).fetch;
@@ -112,14 +112,14 @@ const sendRawTransaction = async ({ rawTransaction, walletAccount }, client = ge
112
112
 
113
113
  //#endregion
114
114
  //#region src/utils/convertPsbtToBase64/convertPsbtToBase64.ts
115
- /** @not-instrumented */
115
+ /** @notInstrumented */
116
116
  const convertPsbtToBase64 = (psbt) => {
117
117
  return psbt.toLowerCase().startsWith("70736274ff") ? getBuffer().from(psbt, "hex").toString("base64") : psbt;
118
118
  };
119
119
 
120
120
  //#endregion
121
121
  //#region src/utils/bitcoinExecuteSwapTransaction/bitcoinExecuteSwapTransaction.ts
122
- /** @not-instrumented */
122
+ /** @notInstrumented */
123
123
  const bitcoinExecuteSwapTransaction = async ({ onStepChange, signingPayload, walletAccount }, client) => {
124
124
  const provider = getWalletProviderFromWalletAccount({ walletAccount }, client);
125
125
  if (!isBitcoinWalletAccount(walletAccount) || !isBitcoinWalletProvider(provider)) throw new InvalidParamError("Wallet account is not a Bitcoin wallet account");
@@ -175,7 +175,7 @@ var NotBitcoinProviderError = class extends BaseError {
175
175
  * @returns An object containing the transaction id
176
176
  * @throws {MethodNotImplementedError} If the wallet provider does not implement the sendBitcoin method
177
177
  * @throws {NotBitcoinProviderError} If the wallet account is not a valid BitcoinWalletAccount
178
- * @not-instrumented
178
+ * @notInstrumented
179
179
  */
180
180
  const sendBitcoin = async ({ walletAccount, transaction }, client = getDefaultClient$1()) => {
181
181
  const provider = getWalletProviderFromWalletAccount({ walletAccount }, client);
@@ -201,7 +201,7 @@ const BTC_DECIMALS = 8;
201
201
  * @param params.walletAccount - The wallet account to send from.
202
202
  * @param client - The Dynamic client instance.
203
203
  * @returns An object containing the transaction hash.
204
- * @not-instrumented
204
+ * @notInstrumented
205
205
  */
206
206
  const bitcoinTransferAmount = async ({ amount, recipient, walletAccount }, client) => {
207
207
  if (!isBitcoinWalletAccount(walletAccount)) throw new InvalidParamError("Wallet account is not a Bitcoin wallet account");
@@ -219,4 +219,4 @@ const bitcoinTransferAmount = async ({ amount, recipient, walletAccount }, clien
219
219
 
220
220
  //#endregion
221
221
  export { sendRawTransaction as a, registerBitcoinNetworkProviderBuilder as c, version as d, bitcoinExecuteSwapTransaction as i, getMempoolApiUrl as l, sendBitcoin as n, isBitcoinWalletProvider as o, NotBitcoinProviderError as r, isBitcoinWalletAccount as s, bitcoinTransferAmount as t, name as u };
222
- //# sourceMappingURL=bitcoinTransferAmount-CDTF7GGL.esm.js.map
222
+ //# sourceMappingURL=bitcoinTransferAmount-BHPqrjl2.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitcoinTransferAmount-BHPqrjl2.esm.js","names":["address","address","getDefaultClient","getDefaultClient"],"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/convertPsbtToBase64/convertPsbtToBase64.ts","../src/utils/bitcoinExecuteSwapTransaction/bitcoinExecuteSwapTransaction.ts","../src/errors/NotBitcoinProviderError.ts","../src/sendBitcoin/sendBitcoin.ts","../src/utils/bitcoinTransferAmount/bitcoinTransferAmount.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/** @notInstrumented */\nexport const getMempoolApiUrl = (address: string) =>\n address.startsWith('t') ? MEMPOOL_API_URL_TESTNET : MEMPOOL_API_URL;\n","/** @notInstrumented */\nexport const satoshisToBtc = (satoshis: number) => satoshis / 100000000;\n","import { getMempoolApiUrl } from '../getMempoolApiUrl';\nimport { satoshisToBtc } from '../satoshisToBtc';\n\n/** @notInstrumented */\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/** @notInstrumented */\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/** @notInstrumented */\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 * @notInstrumented\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/** @notInstrumented */\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 * @notInstrumented\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 { getBuffer } from '@dynamic-labs-sdk/client/core';\n\n/** @notInstrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const convertPsbtToBase64 = (psbt: string): string => {\n // Lowercase to handle uppercase hex encoding (e.g., 70736274FF)\n const psbtBase64 = psbt.toLowerCase().startsWith('70736274ff')\n ? getBuffer().from(psbt, 'hex').toString('base64')\n : psbt;\n\n return psbtBase64;\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\nimport { Psbt } from 'bitcoinjs-lib';\n\nimport { isBitcoinWalletAccount } from '../../isBitcoinWalletAccount';\nimport { isBitcoinWalletProvider } from '../../isBitcoinWalletProvider';\nimport { sendRawTransaction } from '../../sendRawTransaction';\nimport { convertPsbtToBase64 } from '../convertPsbtToBase64';\n\n/** @notInstrumented */\nexport const bitcoinExecuteSwapTransaction = async (\n { onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\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 if (!signingPayload.psbt) {\n throw new InvalidParamError(\n 'Signing payload is missing PSBT transaction data'\n );\n }\n\n onStepChange?.('transaction');\n\n // make sure the psbt is base64 encoded, no matter if it comes as hex or base64\n const psbtBase64 = convertPsbtToBase64(signingPayload.psbt);\n\n // Parse the unsigned PSBT to determine which inputs need signing.\n // Explicitly passing signingIndexes ensures all wallet providers\n // (including Phantom, which requires it) know which inputs to sign.\n const unsignedPsbt = Psbt.fromBase64(psbtBase64);\n const signingIndexes = unsignedPsbt.txInputs.map((_, i) => i);\n\n const { signedPsbt } = await provider.signPsbt({\n request: {\n allowedSighash: [1],\n signature: [\n {\n address: walletAccount.address,\n signingIndexes,\n },\n ],\n unsignedPsbtBase64: psbtBase64,\n },\n walletAccount,\n });\n\n const psbt = Psbt.fromBase64(signedPsbt);\n\n // Some wallets return an already-finalized PSBT; only finalize\n // inputs that haven't been finalized yet.\n psbt.data.inputs.forEach((input, idx) => {\n if (!input.finalScriptSig && !input.finalScriptWitness) {\n psbt.finalizeInput(idx);\n }\n });\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 * @notInstrumented\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 * @notInstrumented\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"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- const require_addWaasBitcoinExtension = require('./addWaasBitcoinExtension-DvLl84Py.cjs');
1
+ const require_addWaasBitcoinExtension = require('./addWaasBitcoinExtension-iCWkOG-U.cjs');
2
2
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
3
3
  let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
4
4
  let bitcoinjs_lib = require("bitcoinjs-lib");
5
5
 
6
6
  //#region package.json
7
7
  var name = "@dynamic-labs-sdk/bitcoin";
8
- var version = "1.12.2";
8
+ var version = "1.13.0";
9
9
 
10
10
  //#endregion
11
11
  //#region src/constants.ts
@@ -14,17 +14,17 @@ const MEMPOOL_API_URL_TESTNET = "https://mempool.space/testnet/api";
14
14
 
15
15
  //#endregion
16
16
  //#region src/utils/getMempoolApiUrl/getMempoolApiUrl.ts
17
- /** @not-instrumented */
17
+ /** @notInstrumented */
18
18
  const getMempoolApiUrl = (address) => address.startsWith("t") ? MEMPOOL_API_URL_TESTNET : MEMPOOL_API_URL;
19
19
 
20
20
  //#endregion
21
21
  //#region src/utils/satoshisToBtc/satoshisToBtc.ts
22
- /** @not-instrumented */
22
+ /** @notInstrumented */
23
23
  const satoshisToBtc = (satoshis) => satoshis / 1e8;
24
24
 
25
25
  //#endregion
26
26
  //#region src/utils/fetchBtcBalance/fetchBtcBalance.ts
27
- /** @not-instrumented */
27
+ /** @notInstrumented */
28
28
  const fetchBtcBalance = async ({ address }) => {
29
29
  const API_URL = getMempoolApiUrl(address);
30
30
  const response = await fetch(`${API_URL}/address/${address}`);
@@ -36,7 +36,7 @@ const fetchBtcBalance = async ({ address }) => {
36
36
 
37
37
  //#endregion
38
38
  //#region src/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.ts
39
- /** @not-instrumented */
39
+ /** @notInstrumented */
40
40
  const createBitcoinNetworkProvider = (networkData) => ({
41
41
  ...(0, _dynamic_labs_sdk_client_core.createBaseNetworkProvider)("BTC", networkData),
42
42
  cluster: networkData.cluster,
@@ -45,7 +45,7 @@ const createBitcoinNetworkProvider = (networkData) => ({
45
45
 
46
46
  //#endregion
47
47
  //#region src/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.ts
48
- /** @not-instrumented */
48
+ /** @notInstrumented */
49
49
  const registerBitcoinNetworkProviderBuilder = (client) => {
50
50
  const networkProviderBuilderRegistry = (0, _dynamic_labs_sdk_client_core.getNetworkProviderBuilderRegistry)(client);
51
51
  /**
@@ -65,13 +65,13 @@ const registerBitcoinNetworkProviderBuilder = (client) => {
65
65
  *
66
66
  * @param walletAccount - The wallet account to check.
67
67
  * @returns True if the wallet account is a Bitcoin wallet account, false otherwise.
68
- * @not-instrumented
68
+ * @notInstrumented
69
69
  */
70
70
  const isBitcoinWalletAccount = (walletAccount) => walletAccount.chain === "BTC";
71
71
 
72
72
  //#endregion
73
73
  //#region src/isBitcoinWalletProvider/isBitcoinWalletProvider.ts
74
- /** @not-instrumented */
74
+ /** @notInstrumented */
75
75
  const isBitcoinWalletProvider = (provider) => {
76
76
  return provider.chain === "BTC";
77
77
  };
@@ -98,7 +98,7 @@ var SendBitcoinRawTransactionError = class extends _dynamic_labs_sdk_client.Base
98
98
  * @param params.rawTransaction - The raw transaction to send
99
99
  * @param params.walletAccount - The wallet account to send the transaction from
100
100
  * @returns An object containing the transaction id
101
- * @not-instrumented
101
+ * @notInstrumented
102
102
  */
103
103
  const sendRawTransaction = async ({ rawTransaction, walletAccount }, client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
104
104
  const fetchService = (0, _dynamic_labs_sdk_client_core.getCore)(client).fetch;
@@ -113,14 +113,14 @@ const sendRawTransaction = async ({ rawTransaction, walletAccount }, client = (0
113
113
 
114
114
  //#endregion
115
115
  //#region src/utils/convertPsbtToBase64/convertPsbtToBase64.ts
116
- /** @not-instrumented */
116
+ /** @notInstrumented */
117
117
  const convertPsbtToBase64 = (psbt) => {
118
118
  return psbt.toLowerCase().startsWith("70736274ff") ? (0, _dynamic_labs_sdk_client_core.getBuffer)().from(psbt, "hex").toString("base64") : psbt;
119
119
  };
120
120
 
121
121
  //#endregion
122
122
  //#region src/utils/bitcoinExecuteSwapTransaction/bitcoinExecuteSwapTransaction.ts
123
- /** @not-instrumented */
123
+ /** @notInstrumented */
124
124
  const bitcoinExecuteSwapTransaction = async ({ onStepChange, signingPayload, walletAccount }, client) => {
125
125
  const provider = (0, _dynamic_labs_sdk_client_core.getWalletProviderFromWalletAccount)({ walletAccount }, client);
126
126
  if (!isBitcoinWalletAccount(walletAccount) || !isBitcoinWalletProvider(provider)) throw new _dynamic_labs_sdk_client.InvalidParamError("Wallet account is not a Bitcoin wallet account");
@@ -176,7 +176,7 @@ var NotBitcoinProviderError = class extends _dynamic_labs_sdk_client.BaseError {
176
176
  * @returns An object containing the transaction id
177
177
  * @throws {MethodNotImplementedError} If the wallet provider does not implement the sendBitcoin method
178
178
  * @throws {NotBitcoinProviderError} If the wallet account is not a valid BitcoinWalletAccount
179
- * @not-instrumented
179
+ * @notInstrumented
180
180
  */
181
181
  const sendBitcoin = async ({ walletAccount, transaction }, client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
182
182
  const provider = (0, _dynamic_labs_sdk_client_core.getWalletProviderFromWalletAccount)({ walletAccount }, client);
@@ -202,7 +202,7 @@ const BTC_DECIMALS = 8;
202
202
  * @param params.walletAccount - The wallet account to send from.
203
203
  * @param client - The Dynamic client instance.
204
204
  * @returns An object containing the transaction hash.
205
- * @not-instrumented
205
+ * @notInstrumented
206
206
  */
207
207
  const bitcoinTransferAmount = async ({ amount, recipient, walletAccount }, client) => {
208
208
  if (!isBitcoinWalletAccount(walletAccount)) throw new _dynamic_labs_sdk_client.InvalidParamError("Wallet account is not a Bitcoin wallet account");
@@ -285,4 +285,4 @@ Object.defineProperty(exports, 'version', {
285
285
  return version;
286
286
  }
287
287
  });
288
- //# sourceMappingURL=bitcoinTransferAmount-pia-kREy.cjs.map
288
+ //# sourceMappingURL=bitcoinTransferAmount-Ba-8Zsty.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitcoinTransferAmount-Ba-8Zsty.cjs","names":["BaseError","InvalidParamError","Psbt","BaseError","MethodNotImplementedError","InvalidParamError"],"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/convertPsbtToBase64/convertPsbtToBase64.ts","../src/utils/bitcoinExecuteSwapTransaction/bitcoinExecuteSwapTransaction.ts","../src/errors/NotBitcoinProviderError.ts","../src/sendBitcoin/sendBitcoin.ts","../src/utils/bitcoinTransferAmount/bitcoinTransferAmount.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/** @notInstrumented */\nexport const getMempoolApiUrl = (address: string) =>\n address.startsWith('t') ? MEMPOOL_API_URL_TESTNET : MEMPOOL_API_URL;\n","/** @notInstrumented */\nexport const satoshisToBtc = (satoshis: number) => satoshis / 100000000;\n","import { getMempoolApiUrl } from '../getMempoolApiUrl';\nimport { satoshisToBtc } from '../satoshisToBtc';\n\n/** @notInstrumented */\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/** @notInstrumented */\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/** @notInstrumented */\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 * @notInstrumented\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/** @notInstrumented */\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 * @notInstrumented\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 { getBuffer } from '@dynamic-labs-sdk/client/core';\n\n/** @notInstrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const convertPsbtToBase64 = (psbt: string): string => {\n // Lowercase to handle uppercase hex encoding (e.g., 70736274FF)\n const psbtBase64 = psbt.toLowerCase().startsWith('70736274ff')\n ? getBuffer().from(psbt, 'hex').toString('base64')\n : psbt;\n\n return psbtBase64;\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\nimport { Psbt } from 'bitcoinjs-lib';\n\nimport { isBitcoinWalletAccount } from '../../isBitcoinWalletAccount';\nimport { isBitcoinWalletProvider } from '../../isBitcoinWalletProvider';\nimport { sendRawTransaction } from '../../sendRawTransaction';\nimport { convertPsbtToBase64 } from '../convertPsbtToBase64';\n\n/** @notInstrumented */\nexport const bitcoinExecuteSwapTransaction = async (\n { onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\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 if (!signingPayload.psbt) {\n throw new InvalidParamError(\n 'Signing payload is missing PSBT transaction data'\n );\n }\n\n onStepChange?.('transaction');\n\n // make sure the psbt is base64 encoded, no matter if it comes as hex or base64\n const psbtBase64 = convertPsbtToBase64(signingPayload.psbt);\n\n // Parse the unsigned PSBT to determine which inputs need signing.\n // Explicitly passing signingIndexes ensures all wallet providers\n // (including Phantom, which requires it) know which inputs to sign.\n const unsignedPsbt = Psbt.fromBase64(psbtBase64);\n const signingIndexes = unsignedPsbt.txInputs.map((_, i) => i);\n\n const { signedPsbt } = await provider.signPsbt({\n request: {\n allowedSighash: [1],\n signature: [\n {\n address: walletAccount.address,\n signingIndexes,\n },\n ],\n unsignedPsbtBase64: psbtBase64,\n },\n walletAccount,\n });\n\n const psbt = Psbt.fromBase64(signedPsbt);\n\n // Some wallets return an already-finalized PSBT; only finalize\n // inputs that haven't been finalized yet.\n psbt.data.inputs.forEach((input, idx) => {\n if (!input.finalScriptSig && !input.finalScriptWitness) {\n psbt.finalizeInput(idx);\n }\n });\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 * @notInstrumented\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 * @notInstrumented\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"],"mappings":"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"}
@@ -18,7 +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
+ * @notInstrumented
22
22
  */
23
23
  export declare const buildPsbt: ({ walletAccount, transaction }: BuildPsbtParams, client?: import("@dynamic-labs-sdk/client").DynamicClient) => Promise<BuildPsbtResult>;
24
24
  export {};