@dynamic-labs-sdk/bitcoin 1.12.2 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addBitcoinExtension/addBitcoinExtension.d.ts +1 -1
- package/dist/{addBitcoinInjectedWalletsExtension-XOWDo0YD.cjs → addBitcoinInjectedWalletsExtension-7B6XpQTP.cjs} +39 -39
- package/dist/addBitcoinInjectedWalletsExtension-7B6XpQTP.cjs.map +1 -0
- package/dist/{addBitcoinInjectedWalletsExtension-BuSLLGoj.esm.js → addBitcoinInjectedWalletsExtension-BGVwF1Wf.esm.js} +38 -38
- package/dist/addBitcoinInjectedWalletsExtension-BGVwF1Wf.esm.js.map +1 -0
- package/dist/{addWaasBitcoinExtension-DvLl84Py.cjs → addWaasBitcoinExtension-BW-wPM4S.cjs} +17 -17
- package/dist/addWaasBitcoinExtension-BW-wPM4S.cjs.map +1 -0
- package/dist/{addWaasBitcoinExtension-6VcplBLA.esm.js → addWaasBitcoinExtension-DCZIo4Xi.esm.js} +17 -17
- package/dist/addWaasBitcoinExtension-DCZIo4Xi.esm.js.map +1 -0
- package/dist/{bitcoinTransferAmount-CDTF7GGL.esm.js → bitcoinTransferAmount-4ysAev3I.esm.js} +14 -14
- package/dist/bitcoinTransferAmount-4ysAev3I.esm.js.map +1 -0
- package/dist/{bitcoinTransferAmount-pia-kREy.cjs → bitcoinTransferAmount-6OOzrVRM.cjs} +15 -15
- package/dist/bitcoinTransferAmount-6OOzrVRM.cjs.map +1 -0
- package/dist/buildPsbt/buildPsbt.d.ts +1 -1
- package/dist/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +8 -8
- package/dist/index.esm.js.map +1 -1
- package/dist/injected/addBitcoinInjectedWalletsExtension/addBitcoinInjectedWalletsExtension.d.ts +1 -1
- package/dist/injected/utils/binance/createBinanceBitcoinWalletProvider/createBinanceBitcoinWalletProvider.d.ts +1 -1
- package/dist/injected/utils/binance/createBinanceBitcoinWalletProvider/createBinanceBitcoinWalletProvider.d.ts.map +1 -1
- package/dist/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.d.ts +1 -1
- package/dist/injected/utils/binance/getBinanceBitcoinInjectedProvider/getBinanceBitcoinInjectedProvider.d.ts.map +1 -1
- package/dist/injected/utils/bitget/createBitgetBitcoinWalletProvider/createBitgetBitcoinWalletProvider.d.ts +1 -1
- package/dist/injected/utils/bitget/createBitgetBitcoinWalletProvider/createBitgetBitcoinWalletProvider.d.ts.map +1 -1
- package/dist/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.d.ts +1 -1
- package/dist/injected/utils/bitget/getBitgetBitcoinInjectedProvider/getBitgetBitcoinInjectedProvider.d.ts.map +1 -1
- package/dist/injected/utils/leather/convertNetworkIdToLeatherNetworkName/convertNetworkIdToLeatherNetworkName.d.ts +1 -1
- package/dist/injected/utils/leather/convertNetworkIdToLeatherNetworkName/convertNetworkIdToLeatherNetworkName.d.ts.map +1 -1
- package/dist/injected/utils/leather/createLeatherBitcoinWalletProvider/createLeatherBitcoinWalletProvider.d.ts +1 -1
- package/dist/injected/utils/leather/createLeatherBitcoinWalletProvider/createLeatherBitcoinWalletProvider.d.ts.map +1 -1
- package/dist/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.d.ts +1 -1
- package/dist/injected/utils/leather/getLeatherBitcoinInjectedProvider/getLeatherBitcoinInjectedProvider.d.ts.map +1 -1
- package/dist/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/createMagicEdenBitcoinWalletProvider.d.ts +1 -1
- package/dist/injected/utils/magicEden/createMagicEdenBitcoinWalletProvider/createMagicEdenBitcoinWalletProvider.d.ts.map +1 -1
- package/dist/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.d.ts +1 -1
- package/dist/injected/utils/magicEden/getMagicEdenInjectedProvider/getMagicEdenInjectedProvider.d.ts.map +1 -1
- package/dist/injected/utils/okx/createOkxBitcoinWalletProvider/createOkxBitcoinWalletProvider.d.ts +1 -1
- package/dist/injected/utils/okx/createOkxBitcoinWalletProvider/createOkxBitcoinWalletProvider.d.ts.map +1 -1
- package/dist/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.d.ts +1 -1
- package/dist/injected/utils/okx/getOkxBitcoinInjectedProvider/getOkxBitcoinInjectedProvider.d.ts.map +1 -1
- package/dist/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/createOneKeyBitcoinWalletProvider.d.ts +1 -1
- package/dist/injected/utils/oneKey/createOneKeyBitcoinWalletProvider/createOneKeyBitcoinWalletProvider.d.ts.map +1 -1
- package/dist/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.d.ts +1 -1
- package/dist/injected/utils/oneKey/getOneKeyBitcoinInjectedProvider/getOneKeyBitcoinInjectedProvider.d.ts.map +1 -1
- package/dist/injected/utils/oyl/createOylBitcoinWalletProvider/createOylBitcoinWalletProvider.d.ts +1 -1
- package/dist/injected/utils/oyl/createOylBitcoinWalletProvider/createOylBitcoinWalletProvider.d.ts.map +1 -1
- package/dist/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.d.ts +1 -1
- package/dist/injected/utils/oyl/getOylBitcoinInjectedProvider/getOylBitcoinInjectedProvider.d.ts.map +1 -1
- package/dist/injected/utils/phantom/createPhantomBitcoinWalletProvider/createPhantomBitcoinWalletProvider.d.ts +1 -1
- package/dist/injected/utils/phantom/createPhantomBitcoinWalletProvider/createPhantomBitcoinWalletProvider.d.ts.map +1 -1
- package/dist/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.d.ts +1 -1
- package/dist/injected/utils/phantom/getPhantomInjectedProvider/getPhantomInjectedProvider.d.ts.map +1 -1
- package/dist/injected/utils/unisat/createUnisatWalletProvider/createUnisatWalletProvider.d.ts +1 -1
- package/dist/injected/utils/unisat/createUnisatWalletProvider/createUnisatWalletProvider.d.ts.map +1 -1
- package/dist/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.d.ts +1 -1
- package/dist/injected/utils/unisat/getUnisatInjectedProvider/getUnisatInjectedProvider.d.ts.map +1 -1
- package/dist/injected/utils/xverse/createXverseBitcoinWalletProvider/createXverseBitcoinWalletProvider.d.ts +1 -1
- package/dist/injected/utils/xverse/createXverseBitcoinWalletProvider/createXverseBitcoinWalletProvider.d.ts.map +1 -1
- package/dist/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.d.ts +1 -1
- package/dist/injected/utils/xverse/getXverseInjectedProvider/getXverseInjectedProvider.d.ts.map +1 -1
- package/dist/injected.cjs +3 -3
- package/dist/injected.esm.js +2 -2
- package/dist/isBitcoinNetworkProvider/isBitcoinNetworkProvider.d.ts +1 -1
- package/dist/isBitcoinWalletAccount/isBitcoinWalletAccount.d.ts +1 -1
- package/dist/isBitcoinWalletProvider/isBitcoinWalletProvider.d.ts +1 -1
- package/dist/isBitcoinWalletProvider/isBitcoinWalletProvider.d.ts.map +1 -1
- package/dist/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.d.ts +1 -1
- package/dist/registerBitcoinNetworkProviderBuilder/registerBitcoinNetworkProviderBuilder.d.ts.map +1 -1
- package/dist/sendBitcoin/sendBitcoin.d.ts +1 -1
- package/dist/sendRawTransaction/sendRawTransaction.d.ts +1 -1
- package/dist/signMessageWithCustomOptions/signMessageWithCustomOptions.d.ts +1 -1
- package/dist/signPsbt/signPsbt.d.ts +1 -1
- package/dist/signPsbts/signPsbts.d.ts +1 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/utils/bitcoinConfirmTransaction/bitcoinConfirmTransaction.d.ts +1 -1
- package/dist/utils/bitcoinExecuteSwapTransaction/bitcoinExecuteSwapTransaction.d.ts +1 -1
- package/dist/utils/bitcoinExecuteSwapTransaction/bitcoinExecuteSwapTransaction.d.ts.map +1 -1
- package/dist/utils/bitcoinTransferAmount/bitcoinTransferAmount.d.ts +1 -1
- package/dist/utils/convertNetworkIdForPsbt/convertNetworkIdForPsbt.d.ts +1 -1
- package/dist/utils/convertNetworkIdForPsbt/convertNetworkIdForPsbt.d.ts.map +1 -1
- package/dist/utils/convertNetworkIdToSatsConnectNetworkType/convertNetworkIdToSatsConnectNetworkType.d.ts +1 -1
- package/dist/utils/convertNetworkIdToSatsConnectNetworkType/convertNetworkIdToSatsConnectNetworkType.d.ts.map +1 -1
- package/dist/utils/convertPsbtToBase64/convertPsbtToBase64.d.ts +1 -1
- package/dist/utils/convertPsbtToBase64/convertPsbtToBase64.d.ts.map +1 -1
- package/dist/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.d.ts +1 -1
- package/dist/utils/createBitcoinNetworkProvider/createBitcoinNetworkProvider.d.ts.map +1 -1
- package/dist/utils/createPsbtOptions/createPsbtOptions.d.ts +1 -1
- package/dist/utils/fetchBtcBalance/fetchBtcBalance.d.ts +1 -1
- package/dist/utils/fetchBtcBalance/fetchBtcBalance.d.ts.map +1 -1
- package/dist/utils/getMempoolApiUrl/getMempoolApiUrl.d.ts +1 -1
- package/dist/utils/getMempoolApiUrl/getMempoolApiUrl.d.ts.map +1 -1
- package/dist/utils/getNetworkIdFromNetworkName/getNetworkIdFromNetworkName.d.ts +1 -1
- package/dist/utils/getNetworkIdFromNetworkName/getNetworkIdFromNetworkName.d.ts.map +1 -1
- package/dist/utils/getPsbtInputsToSignForSatsConnect/getPsbtInputsToSignForSatsConnect.d.ts +1 -1
- package/dist/utils/getSatsConnectSigningProtocol/getSatsConnectSigningProtocol.d.ts +1 -1
- package/dist/utils/getSatsConnectSigningProtocol/getSatsConnectSigningProtocol.d.ts.map +1 -1
- package/dist/utils/getSigHashType/getSigHashType.d.ts +1 -1
- package/dist/utils/isHexEncodedPsbt/isHexEncodedPsbt.d.ts +1 -1
- package/dist/utils/isHexEncodedPsbt/isHexEncodedPsbt.d.ts.map +1 -1
- package/dist/utils/parseBitcoinConnectionResult/parseBitcoinConnectionResult.d.ts +1 -1
- package/dist/utils/parseBitcoinConnectionResult/parseBitcoinConnectionResult.d.ts.map +1 -1
- package/dist/utils/satoshisToBtc/satoshisToBtc.d.ts +1 -1
- package/dist/utils/satoshisToBtc/satoshisToBtc.d.ts.map +1 -1
- package/dist/utils/signMultipleTransactionsWithSatsConnect/signMultipleTransactionsWithSatsConnect.d.ts +1 -1
- package/dist/utils/signMultipleTransactionsWithSatsConnect/signMultipleTransactionsWithSatsConnect.d.ts.map +1 -1
- package/dist/utils/validatePsbt/extractAddressFromInput/extractAddressFromInput.d.ts +1 -1
- package/dist/utils/validatePsbt/validatePsbt.d.ts +1 -1
- package/dist/utils/validatePsbt/validateSigHash/validateSigHash.d.ts +1 -1
- package/dist/utils/validatePsbt/validateSigHash/validateSigHash.d.ts.map +1 -1
- package/dist/utils/validatePsbt/validateSigningAddress/validateSigningAddress.d.ts +1 -1
- package/dist/utils/validatePsbt/validateSigningAddress/validateSigningAddress.d.ts.map +1 -1
- package/dist/waas/addWaasBitcoinExtension/addWaasBitcoinExtension.d.ts +1 -1
- package/dist/waas/utils/addInputsToPsbt/addInputsToPsbt.d.ts +1 -1
- package/dist/waas/utils/addOutputsToPsbt/addOutputsToPsbt.d.ts +1 -1
- package/dist/waas/utils/broadcastTransaction/broadcastTransaction.d.ts +1 -1
- package/dist/waas/utils/buildPsbt/buildPsbt.d.ts +1 -1
- package/dist/waas/utils/calculateFeeAndChange/calculateFeeAndChange.d.ts +1 -1
- package/dist/waas/utils/calculateUTXOTotal/calculateUTXOTotal.d.ts +1 -1
- package/dist/waas/utils/createWalletProviderForWaasBitcoin/createWalletProviderForWaasBitcoin.d.ts +1 -1
- package/dist/waas/utils/createWalletProviderForWaasBitcoin/createWalletProviderForWaasBitcoin.d.ts.map +1 -1
- package/dist/waas/utils/estimateTransactionFee/estimateTransactionFee.d.ts +1 -1
- package/dist/waas/utils/getFeeRecommendations/getFeeRecommendations.d.ts +1 -1
- package/dist/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.d.ts +1 -1
- package/dist/waas/utils/getUTXOs/getUTXOs.d.ts +1 -1
- package/dist/waas/utils/selectUTXOsLargestFirst/selectUTXOsLargestFirst.d.ts +1 -1
- package/dist/waas/utils/validateAndSelectUTXOs/validateAndSelectUTXOs.d.ts +1 -1
- package/dist/waas/utils/validateNotTaproot/validateNotTaproot.d.ts +1 -1
- package/dist/waas.cjs +3 -3
- package/dist/waas.cjs.map +1 -1
- package/dist/waas.esm.js +3 -3
- package/dist/waas.esm.js.map +1 -1
- package/package.json +3 -3
- package/dist/addBitcoinInjectedWalletsExtension-BuSLLGoj.esm.js.map +0 -1
- package/dist/addBitcoinInjectedWalletsExtension-XOWDo0YD.cjs.map +0 -1
- package/dist/addWaasBitcoinExtension-6VcplBLA.esm.js.map +0 -1
- package/dist/addWaasBitcoinExtension-DvLl84Py.cjs.map +0 -1
- package/dist/bitcoinTransferAmount-CDTF7GGL.esm.js.map +0 -1
- package/dist/bitcoinTransferAmount-pia-kREy.cjs.map +0 -1
package/dist/{addWaasBitcoinExtension-6VcplBLA.esm.js → addWaasBitcoinExtension-DCZIo4Xi.esm.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as registerBitcoinNetworkProviderBuilder, i as bitcoinExecuteSwapTransaction, t as bitcoinTransferAmount } from "./bitcoinTransferAmount-
|
|
1
|
+
import { c as registerBitcoinNetworkProviderBuilder, i as bitcoinExecuteSwapTransaction, t as bitcoinTransferAmount } from "./bitcoinTransferAmount-4ysAev3I.esm.js";
|
|
2
2
|
import { WalletProviderPriority, assertDefined, consumeMfaTokenIfRequiredForAction, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getBuffer, getCore, getDefaultClient, getSignedSessionId, getWalletProviderRegistry, hasExtension, registerExtension, switchActiveNetworkInLastKnownRegistry } from "@dynamic-labs-sdk/client/core";
|
|
3
3
|
import { BaseError } from "@dynamic-labs-sdk/client";
|
|
4
4
|
import { MFAAction, WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
|
|
@@ -84,7 +84,7 @@ const RBF_SEQUENCE = 4294967293;
|
|
|
84
84
|
* @returns The transaction ID
|
|
85
85
|
* @throws {TransactionRequiredError} if no transaction is specified
|
|
86
86
|
* @throws {TransactionBroadcastFailedError} if broadcasting fails
|
|
87
|
-
* @
|
|
87
|
+
* @notInstrumented
|
|
88
88
|
*/
|
|
89
89
|
const broadcastTransaction = async (rawTransaction) => {
|
|
90
90
|
if (!rawTransaction) throw new TransactionRequiredError();
|
|
@@ -175,7 +175,7 @@ var SegwitOutputScriptError = class extends BaseError {
|
|
|
175
175
|
* @param options.psbt - The PSBT instance to add inputs to
|
|
176
176
|
* @param options.publicKeyPair - Key pair containing the public key for witness script
|
|
177
177
|
* @param options.selectedUTXOs - Array of UTXOs to add as inputs
|
|
178
|
-
* @
|
|
178
|
+
* @notInstrumented
|
|
179
179
|
*/
|
|
180
180
|
const addInputsToPsbt = (options) => {
|
|
181
181
|
const { network, psbt, publicKeyPair, selectedUTXOs } = options;
|
|
@@ -210,7 +210,7 @@ const addInputsToPsbt = (options) => {
|
|
|
210
210
|
* @param options.network - Bitcoin network configuration (mainnet or testnet)
|
|
211
211
|
* @param options.psbt - The PSBT instance to add outputs to
|
|
212
212
|
* @param options.recipientAddress - The recipient's Bitcoin address
|
|
213
|
-
* @
|
|
213
|
+
* @notInstrumented
|
|
214
214
|
*/
|
|
215
215
|
const addOutputsToPsbt = (options) => {
|
|
216
216
|
const { accountAddress, amountInSatoshis, changeAmount, hasChangeOutput, network, psbt, recipientAddress } = options;
|
|
@@ -252,7 +252,7 @@ var FeeRecommendationsFetchError = class extends BaseError {
|
|
|
252
252
|
*
|
|
253
253
|
* @returns Fee recommendation data with rates in sat/vB
|
|
254
254
|
* @throws FeeRecommendationsFetchError if fetching fee recommendations fails
|
|
255
|
-
* @
|
|
255
|
+
* @notInstrumented
|
|
256
256
|
*/
|
|
257
257
|
const getFeeRecommendations = async () => {
|
|
258
258
|
const response = await fetch(`${MEMPOOL_API_URL}/v1/fees/recommended`);
|
|
@@ -269,7 +269,7 @@ const getFeeRecommendations = async () => {
|
|
|
269
269
|
* @param options.numInputs - Number of transaction inputs (UTXOs being spent)
|
|
270
270
|
* @param options.numOutputs - Number of transaction outputs
|
|
271
271
|
* @returns Estimated fee in satoshis
|
|
272
|
-
* @
|
|
272
|
+
* @notInstrumented
|
|
273
273
|
*/
|
|
274
274
|
const estimateTransactionFee = async ({ feePriority = "medium", numInputs, numOutputs }) => {
|
|
275
275
|
try {
|
|
@@ -295,7 +295,7 @@ const estimateTransactionFee = async ({ feePriority = "medium", numInputs, numOu
|
|
|
295
295
|
* @param options.selectedTotalValue - Total value of selected UTXOs in satoshis
|
|
296
296
|
* @param options.selectedUTXOs - Array of selected UTXOs for the transaction
|
|
297
297
|
* @returns Object with feeEstimate, changeAmountNumber, and hasChangeOutput
|
|
298
|
-
* @
|
|
298
|
+
* @notInstrumented
|
|
299
299
|
*/
|
|
300
300
|
const calculateFeeAndChange = async ({ amountInSatoshis, feePriority, selectedTotalValue, selectedUTXOs }) => {
|
|
301
301
|
let feeEstimate = await estimateTransactionFee({
|
|
@@ -331,7 +331,7 @@ const calculateFeeAndChange = async ({ amountInSatoshis, feePriority, selectedTo
|
|
|
331
331
|
*
|
|
332
332
|
* @param utxos - Array of UTXOs
|
|
333
333
|
* @returns Total value in satoshis
|
|
334
|
-
* @
|
|
334
|
+
* @notInstrumented
|
|
335
335
|
*/
|
|
336
336
|
const calculateUTXOTotal = (utxos) => utxos.reduce((total, utxo) => total + utxo.value, 0);
|
|
337
337
|
|
|
@@ -362,7 +362,7 @@ var UTXOsFetchError = class extends BaseError {
|
|
|
362
362
|
* @param address - The Bitcoin address to get UTXOs for
|
|
363
363
|
* @returns Array of UTXOs
|
|
364
364
|
* @throws UTXOsFetchError if fetching UTXOs fails
|
|
365
|
-
* @
|
|
365
|
+
* @notInstrumented
|
|
366
366
|
*/
|
|
367
367
|
const getUTXOs = async (address$1) => {
|
|
368
368
|
const response = await fetch(`${MEMPOOL_API_URL}/address/${address$1}/utxo`);
|
|
@@ -382,7 +382,7 @@ const getUTXOs = async (address$1) => {
|
|
|
382
382
|
* @param options.targetAmount - Target amount in satoshis (amount + fees + dust limit)
|
|
383
383
|
* @param options.utxos - Array of available UTXOs to select from
|
|
384
384
|
* @returns Selected UTXOs
|
|
385
|
-
* @
|
|
385
|
+
* @notInstrumented
|
|
386
386
|
*/
|
|
387
387
|
const selectUTXOsLargestFirst = (options) => {
|
|
388
388
|
const { targetAmount, utxos } = options;
|
|
@@ -409,7 +409,7 @@ const selectUTXOsLargestFirst = (options) => {
|
|
|
409
409
|
* @param options.selectedUTXOs - Array of initially selected UTXOs
|
|
410
410
|
* @returns Validated selected UTXOs
|
|
411
411
|
* @throws InsufficientFundsError if insufficient funds
|
|
412
|
-
* @
|
|
412
|
+
* @notInstrumented
|
|
413
413
|
*/
|
|
414
414
|
const validateAndSelectUTXOs = (options) => {
|
|
415
415
|
const { allUTXOs, amountInSatoshis, feeEstimate, selectedTotal, selectedUTXOs } = options;
|
|
@@ -451,7 +451,7 @@ var TaprootAddressNotSupportedError = class extends BaseError {
|
|
|
451
451
|
*
|
|
452
452
|
* @param accountAddress - The account address to check
|
|
453
453
|
* @throws TaprootAddressNotSupportedError if address is Taproot
|
|
454
|
-
* @
|
|
454
|
+
* @notInstrumented
|
|
455
455
|
*/
|
|
456
456
|
const validateNotTaproot = (accountAddress) => {
|
|
457
457
|
if (accountAddress.toLowerCase().startsWith("bc1p") || accountAddress.toLowerCase().startsWith("tb1p")) throw new TaprootAddressNotSupportedError();
|
|
@@ -471,7 +471,7 @@ const validateNotTaproot = (accountAddress) => {
|
|
|
471
471
|
* @param options.recipientAddress - The recipient's Bitcoin address
|
|
472
472
|
* @returns A PSBT in Base64 format
|
|
473
473
|
* @throws Error if insufficient funds, no UTXOs, or other errors
|
|
474
|
-
* @
|
|
474
|
+
* @notInstrumented
|
|
475
475
|
*/
|
|
476
476
|
const buildPsbt = async ({ accountAddress, amountInSatoshis, feePriority = "medium", network, publicKeyHex, recipientAddress }) => {
|
|
477
477
|
if (amountInSatoshis <= BigInt(0)) throw new InvalidAmountError({
|
|
@@ -549,7 +549,7 @@ var PublicKeyNotFoundError = class extends BaseError {
|
|
|
549
549
|
//#region src/waas/utils/getPublicKeyForWalletAccount/getPublicKeyForWalletAccount.ts
|
|
550
550
|
/**
|
|
551
551
|
* Gets the public key for a wallet account from the user's verified credentials
|
|
552
|
-
* @
|
|
552
|
+
* @notInstrumented
|
|
553
553
|
*/
|
|
554
554
|
const getPublicKeyForWalletAccount = (walletAccount, client) => {
|
|
555
555
|
const user = getCore(client).state.get().user;
|
|
@@ -562,7 +562,7 @@ const getPublicKeyForWalletAccount = (walletAccount, client) => {
|
|
|
562
562
|
|
|
563
563
|
//#endregion
|
|
564
564
|
//#region src/waas/utils/createWalletProviderForWaasBitcoin/createWalletProviderForWaasBitcoin.ts
|
|
565
|
-
/** @
|
|
565
|
+
/** @notInstrumented */
|
|
566
566
|
const createWalletProviderForWaasBitcoin = (sdkClient) => {
|
|
567
567
|
const chain = "BTC";
|
|
568
568
|
const walletProviderType = WalletProviderEnum.EmbeddedWallet;
|
|
@@ -688,7 +688,7 @@ const WAAS_BITCOIN_EXTENSION_KEY = "waasBitcoin";
|
|
|
688
688
|
* allowing users to have wallets managed by Dynamic's infrastructure.
|
|
689
689
|
*
|
|
690
690
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
691
|
-
* @
|
|
691
|
+
* @notInstrumented
|
|
692
692
|
*/
|
|
693
693
|
const addWaasBitcoinExtension = (client = getDefaultClient()) => {
|
|
694
694
|
if (hasExtension({ extensionKey: WAAS_BITCOIN_EXTENSION_KEY }, client)) return;
|
|
@@ -704,4 +704,4 @@ const addWaasBitcoinExtension = (client = getDefaultClient()) => {
|
|
|
704
704
|
|
|
705
705
|
//#endregion
|
|
706
706
|
export { TransactionRequiredError as n, TransactionBroadcastFailedError as r, addWaasBitcoinExtension as t };
|
|
707
|
-
//# sourceMappingURL=addWaasBitcoinExtension-
|
|
707
|
+
//# sourceMappingURL=addWaasBitcoinExtension-DCZIo4Xi.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addWaasBitcoinExtension-DCZIo4Xi.esm.js","names":["address","feePerByte: number","address","address","selected: UTXO[]","address","getActiveNetworkId: WaasBitcoinWalletProvider['getActiveNetworkId']","switchActiveNetwork: WaasBitcoinWalletProvider['switchActiveNetwork']","getConnectedAddresses: WaasBitcoinWalletProvider['getConnectedAddresses']","signPsbt: WaasBitcoinWalletProvider['signPsbt']","signPsbts: WaasBitcoinWalletProvider['signPsbts']","signMessage: WaasBitcoinWalletProvider['signMessage']","buildPsbt: WaasBitcoinWalletProvider['buildPsbt']","buildPsbtUtil","sendBitcoin: WaasBitcoinWalletProvider['sendBitcoin']","buildPsbt"],"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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"}
|
package/dist/{bitcoinTransferAmount-CDTF7GGL.esm.js → bitcoinTransferAmount-4ysAev3I.esm.js}
RENAMED
|
@@ -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.
|
|
7
|
+
var version = "1.14.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
|
-
/** @
|
|
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
|
-
/** @
|
|
21
|
+
/** @notInstrumented */
|
|
22
22
|
const satoshisToBtc = (satoshis) => satoshis / 1e8;
|
|
23
23
|
|
|
24
24
|
//#endregion
|
|
25
25
|
//#region src/utils/fetchBtcBalance/fetchBtcBalance.ts
|
|
26
|
-
/** @
|
|
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
|
-
/** @
|
|
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
|
-
/** @
|
|
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
|
-
* @
|
|
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
|
-
/** @
|
|
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
|
-
* @
|
|
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
|
-
/** @
|
|
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
|
-
/** @
|
|
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
|
-
* @
|
|
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
|
-
* @
|
|
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-
|
|
222
|
+
//# sourceMappingURL=bitcoinTransferAmount-4ysAev3I.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitcoinTransferAmount-4ysAev3I.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-
|
|
1
|
+
const require_addWaasBitcoinExtension = require('./addWaasBitcoinExtension-BW-wPM4S.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.
|
|
8
|
+
var version = "1.14.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
|
-
/** @
|
|
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
|
-
/** @
|
|
22
|
+
/** @notInstrumented */
|
|
23
23
|
const satoshisToBtc = (satoshis) => satoshis / 1e8;
|
|
24
24
|
|
|
25
25
|
//#endregion
|
|
26
26
|
//#region src/utils/fetchBtcBalance/fetchBtcBalance.ts
|
|
27
|
-
/** @
|
|
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
|
-
/** @
|
|
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
|
-
/** @
|
|
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
|
-
* @
|
|
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
|
-
/** @
|
|
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
|
-
* @
|
|
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
|
-
/** @
|
|
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
|
-
/** @
|
|
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
|
-
* @
|
|
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
|
-
* @
|
|
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-
|
|
288
|
+
//# sourceMappingURL=bitcoinTransferAmount-6OOzrVRM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitcoinTransferAmount-6OOzrVRM.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
|
-
* @
|
|
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 {};
|