{"version":3,"file":"index.cjs","names":["createPublicClientFromNetworkData","maxFeePerGas: bigint | undefined","maxPriorityFeePerGas: bigint | undefined","gasPrice: bigint | undefined","nativeAmount: bigint","FeeEstimationFailedError","isEvmWalletAccount","InvalidParamError","feeData: EvmSimulationResult['feeData']","FeeEstimationFailedError","SimulationFailedError","packageName","packageVersion"],"sources":["../src/addEvmExtension/addEvmExtension.ts","../src/isEvmNetworkProvider/isEvmNetworkProvider.ts","../src/utils/calculateEvmTransactionFee/calculateEvmTransactionFee.ts","../src/simulateEvmTransaction/simulateEvmTransaction.ts","../src/exports/index.ts"],"sourcesContent":["import { getDefaultClient } from '@dynamic-labs-sdk/client/core';\n\nimport { addEIP6963Extension } from '../eip6963/addEIP6963Extension';\nimport { addWaasEvmExtension } from '../waas/addWaasEvmExtension';\n\n/**\n * Adds the EVM extension to the Dynamic client.\n *\n * This is a convenience function that adds both the EIP-6963 extension\n * and the Dynamic WaaS EVM extension, enabling support for all EVM wallet types\n * including standard wallets and embedded wallets managed by Dynamic's infrastructure.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n  * @not-instrumented\n */\nexport const addEvmExtension = (client = getDefaultClient()): void => {\n  addEIP6963Extension(client);\n  addWaasEvmExtension(client);\n};\n","import type { NetworkProvider } from '@dynamic-labs-sdk/client';\n\nimport type { EvmNetworkProvider } from '../EvmNetworkProvider';\n\n/**\n * Type guard function to check if a network provider is an EVM network provider.\n *\n * @param networkProvider - The network provider to check.\n * @returns True if the network provider is an EVM network provider, false otherwise.\n  * @not-instrumented\n */\nexport const isEvmNetworkProvider = (\n  networkProvider: NetworkProvider\n): networkProvider is EvmNetworkProvider => networkProvider.chain === 'EVM';\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { FeeEstimationFailedError } from '@dynamic-labs-sdk/client';\nimport { formatEther } from 'viem';\n\nimport type {\n  EvmTransactionFeeData,\n  EvmTransactionToSimulate,\n} from '../../transactionSimulation.types';\nimport { createPublicClientFromNetworkData } from '../../viem/createPublicClientFromNetworkData';\n\ntype CalculateEvmTransactionFeeParams = {\n  nativeTokenPriceUsd?: number;\n  networkData: NetworkData;\n  transaction: EvmTransactionToSimulate;\n};\n\n/**\n * Calculates the estimated fee for an EVM transaction.\n *\n * This function estimates gas usage and calculates the total transaction fee\n * using either legacy gas pricing or EIP-1559 pricing. The fee is returned\n * in both native units (wei) and human-readable format (ETH).\n *\n * @param params.transaction - The transaction to estimate fees for.\n * @param params.networkData - Network configuration for RPC connection.\n * @param params.nativeTokenPriceUsd - Optional USD price of the native token for fee conversion.\n * @returns Fee data including gas estimates and human-readable amounts.\n * @throws {FeeEstimationFailedError} If gas estimation or fee retrieval fails.\n  * @not-instrumented\n */\nexport const calculateEvmTransactionFee = async ({\n  transaction,\n  networkData,\n  nativeTokenPriceUsd,\n}: CalculateEvmTransactionFeeParams): Promise<EvmTransactionFeeData> => {\n  try {\n    const publicClient = createPublicClientFromNetworkData({ networkData });\n\n    // Estimate gas for the transaction\n    const gasEstimate = await publicClient.estimateGas({\n      account: transaction.from,\n      data: transaction.data,\n      to: transaction.to,\n      value: transaction.value,\n    });\n\n    // Try to get EIP-1559 fees first, fallback to legacy gas price\n    let maxFeePerGas: bigint | undefined;\n    let maxPriorityFeePerGas: bigint | undefined;\n    let gasPrice: bigint | undefined;\n    let nativeAmount: bigint;\n\n    try {\n      const feeData = await publicClient.estimateFeesPerGas();\n      maxFeePerGas = feeData.maxFeePerGas;\n      maxPriorityFeePerGas = feeData.maxPriorityFeePerGas;\n\n      // Calculate fee using EIP-1559 pricing\n      nativeAmount = gasEstimate * maxFeePerGas;\n    } catch {\n      // Fallback to legacy gas pricing\n      gasPrice = await publicClient.getGasPrice();\n      nativeAmount = gasEstimate * gasPrice;\n    }\n\n    // Format to human-readable ETH\n    const humanReadableAmount = formatEther(nativeAmount);\n\n    // Calculate USD amount if price data available\n    const usdAmount = nativeTokenPriceUsd\n      ? (Number(humanReadableAmount) * nativeTokenPriceUsd).toFixed(2)\n      : undefined;\n\n    return {\n      gasEstimate,\n      gasPrice,\n      humanReadableAmount,\n      maxFeePerGas,\n      maxPriorityFeePerGas,\n      nativeAmount,\n      usdAmount,\n    };\n  } catch (error) {\n    throw new FeeEstimationFailedError({\n      cause: error instanceof Error ? error : undefined,\n      message: 'Failed to estimate EVM transaction fee',\n    });\n  }\n};\n","import {\n  FeeEstimationFailedError,\n  InvalidParamError,\n  SimulationFailedError,\n  getDefaultClient,\n  getNetworksData,\n} from '@dynamic-labs-sdk/client';\nimport { createApiClient, getCore } from '@dynamic-labs-sdk/client/core';\nimport type { SimulateEVMTransactionRequest } from '@dynamic-labs/sdk-api-core';\n\nimport type { EvmWalletAccount } from '../EvmWalletAccount.types';\nimport type {\n  EvmSimulationResult,\n  EvmTransactionToSimulate,\n} from '../transactionSimulation.types';\nimport { calculateEvmTransactionFee } from '../utils/calculateEvmTransactionFee';\nimport { isEvmWalletAccount } from '../utils/isEvmWalletAccount';\n\ntype SimulateEvmTransactionParams = {\n  includeFees?: boolean;\n  transaction: EvmTransactionToSimulate;\n  walletAccount: EvmWalletAccount;\n};\n\n/**\n * Simulates an EVM transaction to preview its effects before execution.\n *\n * This function uses the Blockaid API to analyze the transaction and returns\n * information about asset transfers, security validation, and optionally fee estimates.\n * The simulation shows what will happen when the transaction is executed without\n * actually sending it to the blockchain.\n *\n * @param params.walletAccount - The EVM wallet account that will sign the transaction.\n * @param params.transaction - The transaction to simulate, including network ID.\n * @param params.includeFees - Whether to calculate transaction fees (default: false).\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns Simulation result with asset diffs, security validation, and optional fee data.\n * @throws {InvalidParamError} If wallet account is not an EVM account or network ID is not configured.\n * @throws {SimulationFailedError} If the simulation API call fails.\n * @throws {FeeEstimationFailedError} If includeFees is true and fee calculation fails.\n  * @not-instrumented\n */\nexport const simulateEvmTransaction = async (\n  {\n    walletAccount,\n    transaction,\n    includeFees = false,\n  }: SimulateEvmTransactionParams,\n  client = getDefaultClient()\n): Promise<EvmSimulationResult> => {\n  // Validate wallet account type\n  if (!isEvmWalletAccount(walletAccount)) {\n    throw new InvalidParamError('Wallet account must be an EVM wallet account');\n  }\n\n  // Get network data for the specified network\n  const networksData = getNetworksData(client);\n  const networkData = networksData.find(\n    (data) => data.networkId === transaction.networkId && data.chain === 'EVM'\n  );\n\n  if (!networkData) {\n    throw new InvalidParamError(\n      `Network with ID ${transaction.networkId} is not configured in project settings`\n    );\n  }\n\n  try {\n    // Create API client and call simulation endpoint\n    const core = getCore(client);\n    const apiClient = createApiClient({}, client);\n\n    const simulateEVMTransactionRequest = {\n      chainId: transaction.networkId,\n      data: transaction.data || '0x',\n      from: transaction.from,\n      to: transaction.to,\n    } as SimulateEVMTransactionRequest;\n\n    if (transaction.value !== undefined) {\n      simulateEVMTransactionRequest.value = transaction.value.toString();\n    }\n\n    const response = await apiClient.simulateEVMTransaction({\n      environmentId: core.environmentId,\n      simulateEVMTransactionRequest,\n    });\n\n    // Calculate fees if requested\n    let feeData: EvmSimulationResult['feeData'];\n\n    if (includeFees) {\n      feeData = await calculateEvmTransactionFee({\n        nativeTokenPriceUsd: response.priceData?.nativeTokenUsdPrice,\n        networkData,\n        transaction,\n      });\n    }\n\n    // Map API response to simulation result\n    return {\n      counterparties: response.counterparties,\n      feeData,\n      inAssets: response.inAssets || [],\n      outAssets: response.outAssets || [],\n      priceData: response.priceData,\n      showTotalFiat: response.showTotalFiat,\n      validation: response.validation\n        ? {\n            description: response.validation.description,\n            reason: response.validation.reason,\n            result: response.validation.result as\n              | 'benign'\n              | 'warning'\n              | 'malicious',\n          }\n        : undefined,\n    };\n  } catch (error) {\n    // Re-throw FeeEstimationFailedError as-is\n    if (error instanceof FeeEstimationFailedError) {\n      throw error;\n    }\n\n    throw new SimulationFailedError({\n      cause: error instanceof Error ? error : undefined,\n      message: 'Failed to simulate EVM transaction',\n    });\n  }\n};\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n  name as packageName,\n  version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { addEvmExtension } from '../addEvmExtension';\nexport { RpcError } from '../errors/RpcError';\nexport type { EvmNetworkProvider } from '../EvmNetworkProvider';\nexport type { EvmWalletAccount } from '../EvmWalletAccount.types';\nexport type { EvmWalletProvider } from '../EvmWalletProvider.types';\nexport { isEvmNetworkProvider } from '../isEvmNetworkProvider';\nexport { simulateEvmTransaction } from '../simulateEvmTransaction';\nexport type {\n  EvmSimulationResult,\n  EvmTransactionFeeData,\n  EvmTransactionToSimulate,\n} from '../transactionSimulation.types';\nexport { calculateEvmTransactionFee } from '../utils/calculateEvmTransactionFee';\nexport { isEvmWalletAccount } from '../utils/isEvmWalletAccount';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAeA,MAAa,mBAAmB,8DAA2B,KAAW;AACpE,iDAAoB,OAAO;AAC3B,iDAAoB,OAAO;;;;;;;;;;;;ACN7B,MAAa,wBACX,oBAC0C,gBAAgB,UAAU;;;;;;;;;;;;;;;;;;ACiBtE,MAAa,6BAA6B,OAAO,EAC/C,aACA,aACA,0BACsE;AACtE,KAAI;EACF,MAAM,eAAeA,6EAAkC,EAAE,aAAa,CAAC;EAGvE,MAAM,cAAc,MAAM,aAAa,YAAY;GACjD,SAAS,YAAY;GACrB,MAAM,YAAY;GAClB,IAAI,YAAY;GAChB,OAAO,YAAY;GACpB,CAAC;EAGF,IAAIC;EACJ,IAAIC;EACJ,IAAIC;EACJ,IAAIC;AAEJ,MAAI;GACF,MAAM,UAAU,MAAM,aAAa,oBAAoB;AACvD,kBAAe,QAAQ;AACvB,0BAAuB,QAAQ;AAG/B,kBAAe,cAAc;UACvB;AAEN,cAAW,MAAM,aAAa,aAAa;AAC3C,kBAAe,cAAc;;EAI/B,MAAM,4CAAkC,aAAa;EAGrD,MAAM,YAAY,uBACb,OAAO,oBAAoB,GAAG,qBAAqB,QAAQ,EAAE,GAC9D;AAEJ,SAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACD;UACM,OAAO;AACd,QAAM,IAAIC,kDAAyB;GACjC,OAAO,iBAAiB,QAAQ,QAAQ;GACxC,SAAS;GACV,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AC5CN,MAAa,yBAAyB,OACpC,EACE,eACA,aACA,cAAc,SAEhB,yDAA2B,KACM;AAEjC,KAAI,CAACC,6CAAmB,cAAc,CACpC,OAAM,IAAIC,2CAAkB,+CAA+C;CAK7E,MAAM,4DAD+B,OAAO,CACX,MAC9B,SAAS,KAAK,cAAc,YAAY,aAAa,KAAK,UAAU,MACtE;AAED,KAAI,CAAC,YACH,OAAM,IAAIA,2CACR,mBAAmB,YAAY,UAAU,wCAC1C;AAGH,KAAI;EAEF,MAAM,kDAAe,OAAO;EAC5B,MAAM,+DAA4B,EAAE,EAAE,OAAO;EAE7C,MAAM,gCAAgC;GACpC,SAAS,YAAY;GACrB,MAAM,YAAY,QAAQ;GAC1B,MAAM,YAAY;GAClB,IAAI,YAAY;GACjB;AAED,MAAI,YAAY,UAAU,OACxB,+BAA8B,QAAQ,YAAY,MAAM,UAAU;EAGpE,MAAM,WAAW,MAAM,UAAU,uBAAuB;GACtD,eAAe,KAAK;GACpB;GACD,CAAC;EAGF,IAAIC;AAEJ,MAAI,YACF,WAAU,MAAM,2BAA2B;GACzC,qBAAqB,SAAS,WAAW;GACzC;GACA;GACD,CAAC;AAIJ,SAAO;GACL,gBAAgB,SAAS;GACzB;GACA,UAAU,SAAS,YAAY,EAAE;GACjC,WAAW,SAAS,aAAa,EAAE;GACnC,WAAW,SAAS;GACpB,eAAe,SAAS;GACxB,YAAY,SAAS,aACjB;IACE,aAAa,SAAS,WAAW;IACjC,QAAQ,SAAS,WAAW;IAC5B,QAAQ,SAAS,WAAW;IAI7B,GACD;GACL;UACM,OAAO;AAEd,MAAI,iBAAiBC,kDACnB,OAAM;AAGR,QAAM,IAAIC,+CAAsB;GAC9B,OAAO,iBAAiB,QAAQ,QAAQ;GACxC,SAAS;GACV,CAAC;;;;;;mECzHeC,iDAAaC,mDAAe"}