@dynamic-labs-sdk/bitcoin 1.33.2 → 1.33.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. package/dist/{InvalidPsbtError-zPwecmMx.esm.js → InvalidPsbtError-GvagS-H3.esm.js} +2 -2
  2. package/dist/{InvalidPsbtError-zPwecmMx.esm.js.map → InvalidPsbtError-GvagS-H3.esm.js.map} +1 -1
  3. package/dist/{InvalidPsbtError-BjbXNa_0.cjs → InvalidPsbtError-Ir3PZqdH.cjs} +3 -3
  4. package/dist/{InvalidPsbtError-BjbXNa_0.cjs.map → InvalidPsbtError-Ir3PZqdH.cjs.map} +1 -1
  5. package/dist/{addBitcoinInjectedWalletsExtension-BpGfbvk_.esm.js → addBitcoinInjectedWalletsExtension-Bbv3O0Ls.esm.js} +2 -2
  6. package/dist/{addBitcoinInjectedWalletsExtension-BpGfbvk_.esm.js.map → addBitcoinInjectedWalletsExtension-Bbv3O0Ls.esm.js.map} +1 -1
  7. package/dist/{addBitcoinInjectedWalletsExtension-frboaGpy.cjs → addBitcoinInjectedWalletsExtension-tzBwEBVD.cjs} +3 -3
  8. package/dist/{addBitcoinInjectedWalletsExtension-frboaGpy.cjs.map → addBitcoinInjectedWalletsExtension-tzBwEBVD.cjs.map} +1 -1
  9. package/dist/{addWaasBitcoinExtension-BzXQaHXZ.esm.js → addWaasBitcoinExtension-dMyyJgj6.esm.js} +2 -2
  10. package/dist/{addWaasBitcoinExtension-BzXQaHXZ.esm.js.map → addWaasBitcoinExtension-dMyyJgj6.esm.js.map} +1 -1
  11. package/dist/{addWaasBitcoinExtension-DbXABGxu.cjs → addWaasBitcoinExtension-wOiiKLxj.cjs} +2 -2
  12. package/dist/{addWaasBitcoinExtension-DbXABGxu.cjs.map → addWaasBitcoinExtension-wOiiKLxj.cjs.map} +1 -1
  13. package/dist/index.cjs +3 -3
  14. package/dist/index.esm.js +3 -3
  15. package/dist/injected.cjs +3 -3
  16. package/dist/injected.esm.js +2 -2
  17. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  18. package/dist/waas.cjs +2 -2
  19. package/dist/waas.esm.js +2 -2
  20. package/package.json +4 -4
@@ -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.33.2";
7
+ var version = "1.33.4";
8
8
 
9
9
  //#endregion
10
10
  //#region src/constants.ts
@@ -266,4 +266,4 @@ var InvalidPsbtError = class extends BaseError {
266
266
 
267
267
  //#endregion
268
268
  export { bitcoinExecuteSwapTransaction as a, isBitcoinWalletAccount as c, MEMPOOL_API_URL as d, MEMPOOL_API_URL_SIGNET as f, version as h, NotBitcoinProviderError as i, registerBitcoinNetworkProviderBuilder as l, name as m, bitcoinTransferAmount as n, sendRawTransaction as o, MEMPOOL_API_URL_TESTNET as p, sendBitcoin as r, isBitcoinWalletProvider as s, InvalidPsbtError as t, getMempoolApiUrl as u };
269
- //# sourceMappingURL=InvalidPsbtError-zPwecmMx.esm.js.map
269
+ //# sourceMappingURL=InvalidPsbtError-GvagS-H3.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InvalidPsbtError-zPwecmMx.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","../src/errors/InvalidPsbtError.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\ntype MempoolApiUrl = typeof MEMPOOL_API_URL | typeof MEMPOOL_API_URL_TESTNET;\n\n/** @notInstrumented */\nexport const getMempoolApiUrl = (address: string): MempoolApiUrl =>\n address.startsWith('t') ? MEMPOOL_API_URL_TESTNET : MEMPOOL_API_URL;\n","/** @notInstrumented */\nexport const satoshisToBtc = (satoshis: number): 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 * @example\n * ```ts\n * const accounts = getWalletAccounts();\n * const btcAccounts = accounts.filter(isBitcoinWalletAccount);\n * ```\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Bitcoin wallet account, false otherwise.\n * @see isBitcoinNetworkProvider\n * @see addBitcoinExtension\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\ntype SendRawTransactionResult = {\n transactionId: string;\n};\n\n/**\n * Sends a raw transaction using the mempool.space API.\n *\n * @example\n * ```ts\n * const { transactionId } = await sendRawTransaction({\n * walletAccount: btcAccount,\n * rawTransaction: '0200000001...',\n * });\n * ```\n *\n * @param params.rawTransaction - The raw transaction hex to broadcast.\n * @param params.walletAccount - The wallet account whose network determines the API endpoint.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the transaction id.\n * @throws {SendBitcoinRawTransactionError} If the mempool API returns an error.\n * @see sendBitcoin\n * @see signPsbt\n * @notInstrumented\n */\nexport const sendRawTransaction = async (\n { rawTransaction, walletAccount }: SendRawTransactionParams,\n client = getDefaultClient()\n): Promise<SendRawTransactionResult> => {\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 *\n * @example\n * ```ts\n * const { transactionId } = await sendBitcoin({\n * walletAccount: btcAccount,\n * transaction: { recipientAddress: 'bc1q...', amount: 50000n },\n * });\n * ```\n *\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 * @see sendRawTransaction\n * @see signPsbt\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\ntype BitcoinTransferAmountResult = { transactionHash: string };\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<BitcoinTransferAmountResult> => {\n if (!isBitcoinWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Bitcoin wallet account'\n );\n }\n\n const satoshis = parseAmountToSmallestUnit({ amount, decimals: BTC_DECIMALS });\n\n const result = await sendBitcoin(\n {\n transaction: {\n amount: satoshis,\n recipientAddress: recipient,\n },\n walletAccount,\n },\n client\n );\n\n return { transactionHash: result.transactionId };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class InvalidPsbtError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(message: string) {\n super({\n cause: null,\n code: 'invalid_psbt_error',\n docsUrl: null,\n name: 'InvalidPsbtError',\n shortMessage: message,\n });\n }\n}\n"],"mappings":";;;;;;;;;;ACAA,MAAa,kBAAkB;AAC/B,MAAa,0BAA0B;AACvC,MAAa,yBAAyB;;;;;ACGtC,MAAa,oBAAoB,cAC/BA,UAAQ,WAAW,IAAI,GAAG,0BAA0B;;;;;ACLtD,MAAa,iBAAiB,aAA6B,WAAW;;;;;ACGtE,MAAa,kBAAkB,OAAO,EACpC,yBAG4B;CAC5B,MAAM,UAAU,iBAAiBC,UAAQ;CAEzC,MAAM,WAAW,MAAM,MAAM,GAAG,QAAQ,WAAWA,YAAU;AAE7D,KAAI,CAAC,SAAS,GACZ,QAAO;CAGT,MAAM,cAAc,MAAM,SAAS,MAAM;AAEzC,KAAI,CAAC,aAAa,eAAe,CAAC,aAAa,cAC7C,QAAO;AAeT,QAJgB,cAPd,OAAO,YAAY,YAAY,eAAe,GAC9C,OAAO,YAAY,YAAY,cAAc,IAG7C,OAAO,YAAY,cAAc,eAAe,GAChD,OAAO,YAAY,cAAc,cAAc,EAIhD,CAEc,UAAU;;;;;;AC5B3B,MAAa,gCACX,iBAC4B;CAC5B,GAAG,0BAA0B,OAAO,YAAY;CAChD,SAAS,YAAY;CACrB,YAAY,OAAO,EAAE,0BAAe,EAClC,SAAS,MAAM,gBAAgB,EAC7B,oBACD,CAAC,EACH;CACF;;;;;ACXD,MAAa,yCACX,WACS;CACT,MAAM,iCACJ,kCAAkC,OAAO;;;;AAK3C,KAAI,+BAA+B,KAAK,CAAC,IAAI,MAAM,CACjD;AAGF,gCAA+B,SAAS;EACtC,SAAS;EACT,OAAO;EACR,CAAC;;;;;;;;;;;;;;;;;;;;ACHJ,MAAa,0BACX,kBAC0C,cAAc,UAAU;;;;;AChBpE,MAAa,2BACX,aACsC;AACtC,QAAO,SAAS,UAAU;;;;;ACF5B,IAAa,iCAAb,cAAoD,UAAU;CAC5D,YAAY,EAAE,iBAAuD;EACnE,MAAM,QAAQ,yBAAyB,QAAQ,gBAAgB;AAE/D,QAAM;GACJ;GACA,MAAM;GACN,SAAS;GACT,MAAM;GACN,cAAc;GACf,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;ACoBN,MAAa,qBAAqB,OAChC,EAAE,gBAAgB,iBAClB,SAASC,oBAAkB,KACW;CACtC,MAAM,eAAe,QAAQ,OAAO,CAAC;CAIrC,MAAM,WAAW,MAAM,aAAa,GAFpB,iBAAiB,cAAc,QAAQ,CAER,MAAM;EACnD,MAAM;EACN,SAAS,EACP,gBAAgB,qCACjB;EACD,QAAQ;EACT,CAAC;AAEF,KAAI,CAAC,SAAS,GACZ,OAAM,IAAI,+BAA+B,EACvC,eAAe,MAAM,SAAS,MAAM,EACrC,CAAC;AAMJ,QAAO,EAAE,eAFa,MAAM,SAAS,MAAM,EAEnB;;;;;;ACzD1B,MAAa,uBAAuB,SAAyB;AAM3D,QAJmB,KAAK,aAAa,CAAC,WAAW,aAAa,GAC1D,WAAW,CAAC,KAAK,MAAM,MAAM,CAAC,SAAS,SAAS,GAChD;;;;;;ACSN,MAAa,gCAAgC,OAC3C,EAAE,cAAc,gBAAgB,iBAChC,WAC0C;CAC1C,MAAM,WAAW,mCACf,EAAE,eAAe,EACjB,OACD;AAED,KACE,CAAC,uBAAuB,cAAc,IACtC,CAAC,wBAAwB,SAAS,CAElC,OAAM,IAAI,kBACR,iDACD;AAGH,KAAI,CAAC,eAAe,KAClB,OAAM,IAAI,kBACR,mDACD;AAGH,gBAAe,cAAc;CAG7B,MAAM,aAAa,oBAAoB,eAAe,KAAK;CAM3D,MAAM,iBADe,KAAK,WAAW,WAAW,CACZ,SAAS,KAAK,GAAG,MAAM,EAAE;CAE7D,MAAM,EAAE,eAAe,MAAM,SAAS,SAAS;EAC7C,SAAS;GACP,gBAAgB,CAAC,EAAE;GACnB,WAAW,CACT;IACE,SAAS,cAAc;IACvB;IACD,CACF;GACD,oBAAoB;GACrB;EACD;EACD,CAAC;CAEF,MAAM,OAAO,KAAK,WAAW,WAAW;AAIxC,MAAK,KAAK,OAAO,SAAS,OAAO,QAAQ;AACvC,MAAI,CAAC,MAAM,kBAAkB,CAAC,MAAM,mBAClC,MAAK,cAAc,IAAI;GAEzB;CAIF,MAAM,EAAE,kBAAkB,MAAM,mBAC9B;EAAE,gBAHa,KAAK,oBAAoB,CAAC,OAAO;EAGpB;EAAe,EAC3C,OACD;AAED,QAAO,EAAE,iBAAiB,eAAe;;;;;ACjF3C,IAAa,0BAAb,cAA6C,UAAU;CACrD,AAAgB;CAEhB,YAAY,QAAiC;AAC3C,QAAM;GACJ,OAAO;GACP,MAAM;GACN,SAAS;GACT,MAAM;GACN,cAAc;GACf,CAAC;AAEF,OAAK,cAAc,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;AC0B9B,MAAa,cAAc,OACzB,EAAE,eAAe,eACjB,SAASC,oBAAkB,KACiB;CAC5C,MAAM,WAAW,mCACf,EACE,eACD,EACD,OACD;AAED,KAAI,CAAC,wBAAwB,SAAS,CACpC,OAAM,IAAI,wBAAwB,EAAE,aAAa,SAAS,KAAK,CAAC;AAGlE,KAAI,CAAC,SAAS,YACZ,OAAM,IAAI,0BAA0B,cAAc;AAGpD,QAAO,SAAS,YAAY;EAAE;EAAa;EAAe,CAAC;;;;;ACjD7D,MAAM,eAAe;;;;;;;;;;;;;;AAiBrB,MAAa,wBAAwB,OACnC,EAAE,QAAQ,WAAW,iBACrB,WACyC;AACzC,KAAI,CAAC,uBAAuB,cAAc,CACxC,OAAM,IAAI,kBACR,iDACD;AAgBH,QAAO,EAAE,kBAXM,MAAM,YACnB;EACE,aAAa;GACX,QALW,0BAA0B;IAAE;IAAQ,UAAU;IAAc,CAAC;GAMxE,kBAAkB;GACnB;EACD;EACD,EACD,OACD,EAEgC,eAAe;;;;;AChDlD,IAAa,mBAAb,cAAsC,UAAU;CAE9C,YAAY,SAAiB;AAC3B,QAAM;GACJ,OAAO;GACP,MAAM;GACN,SAAS;GACT,MAAM;GACN,cAAc;GACf,CAAC"}
1
+ {"version":3,"file":"InvalidPsbtError-GvagS-H3.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","../src/errors/InvalidPsbtError.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\ntype MempoolApiUrl = typeof MEMPOOL_API_URL | typeof MEMPOOL_API_URL_TESTNET;\n\n/** @notInstrumented */\nexport const getMempoolApiUrl = (address: string): MempoolApiUrl =>\n address.startsWith('t') ? MEMPOOL_API_URL_TESTNET : MEMPOOL_API_URL;\n","/** @notInstrumented */\nexport const satoshisToBtc = (satoshis: number): 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 * @example\n * ```ts\n * const accounts = getWalletAccounts();\n * const btcAccounts = accounts.filter(isBitcoinWalletAccount);\n * ```\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Bitcoin wallet account, false otherwise.\n * @see isBitcoinNetworkProvider\n * @see addBitcoinExtension\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\ntype SendRawTransactionResult = {\n transactionId: string;\n};\n\n/**\n * Sends a raw transaction using the mempool.space API.\n *\n * @example\n * ```ts\n * const { transactionId } = await sendRawTransaction({\n * walletAccount: btcAccount,\n * rawTransaction: '0200000001...',\n * });\n * ```\n *\n * @param params.rawTransaction - The raw transaction hex to broadcast.\n * @param params.walletAccount - The wallet account whose network determines the API endpoint.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the transaction id.\n * @throws {SendBitcoinRawTransactionError} If the mempool API returns an error.\n * @see sendBitcoin\n * @see signPsbt\n * @notInstrumented\n */\nexport const sendRawTransaction = async (\n { rawTransaction, walletAccount }: SendRawTransactionParams,\n client = getDefaultClient()\n): Promise<SendRawTransactionResult> => {\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 *\n * @example\n * ```ts\n * const { transactionId } = await sendBitcoin({\n * walletAccount: btcAccount,\n * transaction: { recipientAddress: 'bc1q...', amount: 50000n },\n * });\n * ```\n *\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 * @see sendRawTransaction\n * @see signPsbt\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\ntype BitcoinTransferAmountResult = { transactionHash: string };\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<BitcoinTransferAmountResult> => {\n if (!isBitcoinWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Bitcoin wallet account'\n );\n }\n\n const satoshis = parseAmountToSmallestUnit({ amount, decimals: BTC_DECIMALS });\n\n const result = await sendBitcoin(\n {\n transaction: {\n amount: satoshis,\n recipientAddress: recipient,\n },\n walletAccount,\n },\n client\n );\n\n return { transactionHash: result.transactionId };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class InvalidPsbtError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(message: string) {\n super({\n cause: null,\n code: 'invalid_psbt_error',\n docsUrl: null,\n name: 'InvalidPsbtError',\n shortMessage: message,\n });\n }\n}\n"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- const require_addWaasBitcoinExtension = require('./addWaasBitcoinExtension-DbXABGxu.cjs');
1
+ const require_addWaasBitcoinExtension = require('./addWaasBitcoinExtension-wOiiKLxj.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.33.2";
8
+ var version = "1.33.4";
9
9
 
10
10
  //#endregion
11
11
  //#region src/constants.ts
@@ -356,4 +356,4 @@ Object.defineProperty(exports, 'version', {
356
356
  return version;
357
357
  }
358
358
  });
359
- //# sourceMappingURL=InvalidPsbtError-BjbXNa_0.cjs.map
359
+ //# sourceMappingURL=InvalidPsbtError-Ir3PZqdH.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"InvalidPsbtError-BjbXNa_0.cjs","names":["BaseError","InvalidParamError","Psbt","BaseError","MethodNotImplementedError","InvalidParamError","BaseError"],"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","../src/errors/InvalidPsbtError.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\ntype MempoolApiUrl = typeof MEMPOOL_API_URL | typeof MEMPOOL_API_URL_TESTNET;\n\n/** @notInstrumented */\nexport const getMempoolApiUrl = (address: string): MempoolApiUrl =>\n address.startsWith('t') ? MEMPOOL_API_URL_TESTNET : MEMPOOL_API_URL;\n","/** @notInstrumented */\nexport const satoshisToBtc = (satoshis: number): 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 * @example\n * ```ts\n * const accounts = getWalletAccounts();\n * const btcAccounts = accounts.filter(isBitcoinWalletAccount);\n * ```\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Bitcoin wallet account, false otherwise.\n * @see isBitcoinNetworkProvider\n * @see addBitcoinExtension\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\ntype SendRawTransactionResult = {\n transactionId: string;\n};\n\n/**\n * Sends a raw transaction using the mempool.space API.\n *\n * @example\n * ```ts\n * const { transactionId } = await sendRawTransaction({\n * walletAccount: btcAccount,\n * rawTransaction: '0200000001...',\n * });\n * ```\n *\n * @param params.rawTransaction - The raw transaction hex to broadcast.\n * @param params.walletAccount - The wallet account whose network determines the API endpoint.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the transaction id.\n * @throws {SendBitcoinRawTransactionError} If the mempool API returns an error.\n * @see sendBitcoin\n * @see signPsbt\n * @notInstrumented\n */\nexport const sendRawTransaction = async (\n { rawTransaction, walletAccount }: SendRawTransactionParams,\n client = getDefaultClient()\n): Promise<SendRawTransactionResult> => {\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 *\n * @example\n * ```ts\n * const { transactionId } = await sendBitcoin({\n * walletAccount: btcAccount,\n * transaction: { recipientAddress: 'bc1q...', amount: 50000n },\n * });\n * ```\n *\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 * @see sendRawTransaction\n * @see signPsbt\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\ntype BitcoinTransferAmountResult = { transactionHash: string };\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<BitcoinTransferAmountResult> => {\n if (!isBitcoinWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Bitcoin wallet account'\n );\n }\n\n const satoshis = parseAmountToSmallestUnit({ amount, decimals: BTC_DECIMALS });\n\n const result = await sendBitcoin(\n {\n transaction: {\n amount: satoshis,\n recipientAddress: recipient,\n },\n walletAccount,\n },\n client\n );\n\n return { transactionHash: result.transactionId };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class InvalidPsbtError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(message: string) {\n super({\n cause: null,\n code: 'invalid_psbt_error',\n docsUrl: null,\n name: 'InvalidPsbtError',\n shortMessage: message,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"InvalidPsbtError-Ir3PZqdH.cjs","names":["BaseError","InvalidParamError","Psbt","BaseError","MethodNotImplementedError","InvalidParamError","BaseError"],"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","../src/errors/InvalidPsbtError.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\ntype MempoolApiUrl = typeof MEMPOOL_API_URL | typeof MEMPOOL_API_URL_TESTNET;\n\n/** @notInstrumented */\nexport const getMempoolApiUrl = (address: string): MempoolApiUrl =>\n address.startsWith('t') ? MEMPOOL_API_URL_TESTNET : MEMPOOL_API_URL;\n","/** @notInstrumented */\nexport const satoshisToBtc = (satoshis: number): 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 * @example\n * ```ts\n * const accounts = getWalletAccounts();\n * const btcAccounts = accounts.filter(isBitcoinWalletAccount);\n * ```\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Bitcoin wallet account, false otherwise.\n * @see isBitcoinNetworkProvider\n * @see addBitcoinExtension\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\ntype SendRawTransactionResult = {\n transactionId: string;\n};\n\n/**\n * Sends a raw transaction using the mempool.space API.\n *\n * @example\n * ```ts\n * const { transactionId } = await sendRawTransaction({\n * walletAccount: btcAccount,\n * rawTransaction: '0200000001...',\n * });\n * ```\n *\n * @param params.rawTransaction - The raw transaction hex to broadcast.\n * @param params.walletAccount - The wallet account whose network determines the API endpoint.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the transaction id.\n * @throws {SendBitcoinRawTransactionError} If the mempool API returns an error.\n * @see sendBitcoin\n * @see signPsbt\n * @notInstrumented\n */\nexport const sendRawTransaction = async (\n { rawTransaction, walletAccount }: SendRawTransactionParams,\n client = getDefaultClient()\n): Promise<SendRawTransactionResult> => {\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 *\n * @example\n * ```ts\n * const { transactionId } = await sendBitcoin({\n * walletAccount: btcAccount,\n * transaction: { recipientAddress: 'bc1q...', amount: 50000n },\n * });\n * ```\n *\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 * @see sendRawTransaction\n * @see signPsbt\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\ntype BitcoinTransferAmountResult = { transactionHash: string };\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<BitcoinTransferAmountResult> => {\n if (!isBitcoinWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Bitcoin wallet account'\n );\n }\n\n const satoshis = parseAmountToSmallestUnit({ amount, decimals: BTC_DECIMALS });\n\n const result = await sendBitcoin(\n {\n transaction: {\n amount: satoshis,\n recipientAddress: recipient,\n },\n walletAccount,\n },\n client\n );\n\n return { transactionHash: result.transactionId };\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class InvalidPsbtError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(message: string) {\n super({\n cause: null,\n code: 'invalid_psbt_error',\n docsUrl: null,\n name: 'InvalidPsbtError',\n shortMessage: message,\n });\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { a as bitcoinExecuteSwapTransaction, c as isBitcoinWalletAccount, l as registerBitcoinNetworkProviderBuilder, n as bitcoinTransferAmount, t as InvalidPsbtError, u as getMempoolApiUrl } from "./InvalidPsbtError-zPwecmMx.esm.js";
1
+ import { a as bitcoinExecuteSwapTransaction, c as isBitcoinWalletAccount, l as registerBitcoinNetworkProviderBuilder, n as bitcoinTransferAmount, t as InvalidPsbtError, u as getMempoolApiUrl } from "./InvalidPsbtError-GvagS-H3.esm.js";
2
2
  import { DYNAMIC_ICONIC_SPRITE_URL, WalletProviderPriority, assertDefined, createWalletProviderEventEmitter, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getBuffer, getCore, getDefaultClient, getInjectedProviderFromWindow, getWalletProviderRegistry, hasExtension, registerExtension } from "@dynamic-labs-sdk/client/core";
3
3
  import { InvalidParamError, UserRejectedError, assertWalletAccountSigningAvailability, getNetworksData, getWalletAccountAddressByType } from "@dynamic-labs-sdk/client";
4
4
  import { WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
@@ -1526,4 +1526,4 @@ const addBitcoinInjectedWalletsExtension = (client = getDefaultClient()) => {
1526
1526
 
1527
1527
  //#endregion
1528
1528
  export { addBitcoinInjectedWalletsExtension as t };
1529
- //# sourceMappingURL=addBitcoinInjectedWalletsExtension-BpGfbvk_.esm.js.map
1529
+ //# sourceMappingURL=addBitcoinInjectedWalletsExtension-Bbv3O0Ls.esm.js.map