@dynamic-labs-sdk/evm 0.17.3 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/{addEIP6963Extension-DCfr2ICp.esm.js → addEIP6963Extension-DHoMRXFO.esm.js} +6 -3
  2. package/dist/addEIP6963Extension-DHoMRXFO.esm.js.map +1 -0
  3. package/dist/{addEIP6963Extension-C0_HkkB3.cjs.js → addEIP6963Extension-DyBwspCu.cjs.js} +6 -3
  4. package/dist/addEIP6963Extension-DyBwspCu.cjs.js.map +1 -0
  5. package/dist/addEvmExtension/addEvmExtension.d.ts +1 -0
  6. package/dist/addEvmExtension/addEvmExtension.d.ts.map +1 -1
  7. package/dist/{addWaasEvmExtension-Bk1L1pKN.cjs.js → addWaasEvmExtension-0FSUvikO.cjs.js} +8 -3
  8. package/dist/addWaasEvmExtension-0FSUvikO.cjs.js.map +1 -0
  9. package/dist/{addWaasEvmExtension-BgNK6o4z.esm.js → addWaasEvmExtension-CTtgp2ig.esm.js} +8 -3
  10. package/dist/addWaasEvmExtension-CTtgp2ig.esm.js.map +1 -0
  11. package/dist/{createPublicClientFromNetworkData-CJt0ucj2.cjs.js → createPublicClientFromNetworkData-CW0Q--rC.cjs.js} +8 -2
  12. package/dist/createPublicClientFromNetworkData-CW0Q--rC.cjs.js.map +1 -0
  13. package/dist/{createPublicClientFromNetworkData-BP-UWaex.esm.js → createPublicClientFromNetworkData-zSfskEzJ.esm.js} +8 -2
  14. package/dist/createPublicClientFromNetworkData-zSfskEzJ.esm.js.map +1 -0
  15. package/dist/{createWalletProviderFromEIP1193Provider-HbdO_Ol0.esm.js → createWalletProviderFromEIP1193Provider-CEj4LJyn.esm.js} +7 -2
  16. package/dist/createWalletProviderFromEIP1193Provider-CEj4LJyn.esm.js.map +1 -0
  17. package/dist/{createWalletProviderFromEIP1193Provider-Dtdi7o4i.cjs.js → createWalletProviderFromEIP1193Provider-CR6FlB39.cjs.js} +7 -2
  18. package/dist/createWalletProviderFromEIP1193Provider-CR6FlB39.cjs.js.map +1 -0
  19. package/dist/eip6963/addEIP6963Extension/addEIP6963Extension.d.ts +1 -0
  20. package/dist/eip6963/addEIP6963Extension/addEIP6963Extension.d.ts.map +1 -1
  21. package/dist/eip6963/utils/isEip6963Event/isEip6963Event.d.ts +1 -0
  22. package/dist/eip6963/utils/isEip6963Event/isEip6963Event.d.ts.map +1 -1
  23. package/dist/eip6963/utils/listenForEIP6963ProviderAnnouncement/listenForEIP6963ProviderAnnouncement.d.ts +1 -0
  24. package/dist/eip6963/utils/listenForEIP6963ProviderAnnouncement/listenForEIP6963ProviderAnnouncement.d.ts.map +1 -1
  25. package/dist/eip6963.cjs.js +4 -4
  26. package/dist/eip6963.esm.js +4 -4
  27. package/dist/{evmTransferAmount-C8IPTmEv.cjs.js → evmTransferAmount-CQeB3NnB.cjs.js} +11 -2
  28. package/dist/evmTransferAmount-CQeB3NnB.cjs.js.map +1 -0
  29. package/dist/{evmTransferAmount-D1ueI25q.esm.js → evmTransferAmount-DxF5HN1H.esm.js} +11 -2
  30. package/dist/evmTransferAmount-DxF5HN1H.esm.js.map +1 -0
  31. package/dist/index.cjs.js +9 -5
  32. package/dist/index.cjs.js.map +1 -1
  33. package/dist/index.esm.js +9 -5
  34. package/dist/index.esm.js.map +1 -1
  35. package/dist/isEvmNetworkProvider/isEvmNetworkProvider.d.ts +1 -0
  36. package/dist/isEvmNetworkProvider/isEvmNetworkProvider.d.ts.map +1 -1
  37. package/dist/isEvmWalletProvider/isEvmWalletProvider.d.ts +1 -0
  38. package/dist/isEvmWalletProvider/isEvmWalletProvider.d.ts.map +1 -1
  39. package/dist/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.d.ts +1 -0
  40. package/dist/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.d.ts.map +1 -1
  41. package/dist/simulateEvmTransaction/simulateEvmTransaction.d.ts +1 -0
  42. package/dist/simulateEvmTransaction/simulateEvmTransaction.d.ts.map +1 -1
  43. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  44. package/dist/utils/approveErc20/approveErc20.d.ts +1 -0
  45. package/dist/utils/approveErc20/approveErc20.d.ts.map +1 -1
  46. package/dist/utils/approveErc20IfRequiredAndWaitReceipt/approveErc20IfRequiredAndWaitReceipt.d.ts +1 -0
  47. package/dist/utils/approveErc20IfRequiredAndWaitReceipt/approveErc20IfRequiredAndWaitReceipt.d.ts.map +1 -1
  48. package/dist/utils/calculateEvmTransactionFee/calculateEvmTransactionFee.d.ts +1 -0
  49. package/dist/utils/calculateEvmTransactionFee/calculateEvmTransactionFee.d.ts.map +1 -1
  50. package/dist/utils/createEvmNetworkProvider/createEvmNetworkProvider.d.ts +1 -0
  51. package/dist/utils/createEvmNetworkProvider/createEvmNetworkProvider.d.ts.map +1 -1
  52. package/dist/utils/createWalletProviderFromEIP1193Provider/addNetwork/addNetwork.d.ts +1 -0
  53. package/dist/utils/createWalletProviderFromEIP1193Provider/addNetwork/addNetwork.d.ts.map +1 -1
  54. package/dist/utils/createWalletProviderFromEIP1193Provider/createWalletProviderFromEIP1193Provider.d.ts +1 -0
  55. package/dist/utils/createWalletProviderFromEIP1193Provider/createWalletProviderFromEIP1193Provider.d.ts.map +1 -1
  56. package/dist/utils/createWalletProviderFromEIP1193Provider/getActiveNetworkId/getActiveNetworkId.d.ts +1 -0
  57. package/dist/utils/createWalletProviderFromEIP1193Provider/getActiveNetworkId/getActiveNetworkId.d.ts.map +1 -1
  58. package/dist/utils/createWalletProviderFromEIP1193Provider/isUnrecognizedChainError/isUnrecognizedChainError.d.ts +1 -0
  59. package/dist/utils/createWalletProviderFromEIP1193Provider/isUnrecognizedChainError/isUnrecognizedChainError.d.ts.map +1 -1
  60. package/dist/utils/createWalletProviderFromEIP1193Provider/switchActiveNetwork/switchActiveNetwork.d.ts +1 -0
  61. package/dist/utils/createWalletProviderFromEIP1193Provider/switchActiveNetwork/switchActiveNetwork.d.ts.map +1 -1
  62. package/dist/utils/evmExecuteCheckoutTransaction/evmExecuteCheckoutTransaction.d.ts +1 -0
  63. package/dist/utils/evmExecuteCheckoutTransaction/evmExecuteCheckoutTransaction.d.ts.map +1 -1
  64. package/dist/utils/evmTransferAmount/evmTransferAmount.d.ts +1 -0
  65. package/dist/utils/evmTransferAmount/evmTransferAmount.d.ts.map +1 -1
  66. package/dist/utils/fetchEvmBalance/fetchEvmBalance.d.ts +1 -0
  67. package/dist/utils/fetchEvmBalance/fetchEvmBalance.d.ts.map +1 -1
  68. package/dist/utils/getErc20Allowance/getErc20Allowance.d.ts +1 -0
  69. package/dist/utils/getErc20Allowance/getErc20Allowance.d.ts.map +1 -1
  70. package/dist/utils/isEIP1193Provider/isEIP1193Provider.d.ts +1 -0
  71. package/dist/utils/isEIP1193Provider/isEIP1193Provider.d.ts.map +1 -1
  72. package/dist/utils/isEvmWalletAccount/isEvmWalletAccount.d.ts +1 -0
  73. package/dist/utils/isEvmWalletAccount/isEvmWalletAccount.d.ts.map +1 -1
  74. package/dist/viem/createPublicClientFromNetworkData/createPublicClientFromNetworkData.d.ts +1 -0
  75. package/dist/viem/createPublicClientFromNetworkData/createPublicClientFromNetworkData.d.ts.map +1 -1
  76. package/dist/viem/createWalletClientForWalletAccount/createWalletClientForWalletAccount.d.ts +1 -0
  77. package/dist/viem/createWalletClientForWalletAccount/createWalletClientForWalletAccount.d.ts.map +1 -1
  78. package/dist/viem/utils/mapNetworkDataToViemChain/mapNetworkDataToViemChain.d.ts +1 -0
  79. package/dist/viem/utils/mapNetworkDataToViemChain/mapNetworkDataToViemChain.d.ts.map +1 -1
  80. package/dist/viem/utils/walletProviderHasCustomWalletClient/isEvmWalletProviderWithCustomViemClient.d.ts +1 -0
  81. package/dist/viem/utils/walletProviderHasCustomWalletClient/isEvmWalletProviderWithCustomViemClient.d.ts.map +1 -1
  82. package/dist/viem.cjs.js +1 -1
  83. package/dist/viem.esm.js +1 -1
  84. package/dist/waas/addWaasEvmExtension/addWaasEvmExtension.d.ts +1 -0
  85. package/dist/waas/addWaasEvmExtension/addWaasEvmExtension.d.ts.map +1 -1
  86. package/dist/waas/utils/createWalletProviderForWaasEvm/createViemWalletClientForWaas/createViemWalletClientForWaas.d.ts +1 -0
  87. package/dist/waas/utils/createWalletProviderForWaasEvm/createViemWalletClientForWaas/createViemWalletClientForWaas.d.ts.map +1 -1
  88. package/dist/waas/utils/createWalletProviderForWaasEvm/createWalletProviderForWaasEvm.d.ts +1 -0
  89. package/dist/waas/utils/createWalletProviderForWaasEvm/createWalletProviderForWaasEvm.d.ts.map +1 -1
  90. package/dist/waas/utils/createWalletProviderForWaasEvm/signAuthorization/signAuthorization.d.ts +1 -0
  91. package/dist/waas/utils/createWalletProviderForWaasEvm/signAuthorization/signAuthorization.d.ts.map +1 -1
  92. package/dist/waas/utils/createWalletProviderForWaasEvm/signTypedData/signTypedData.d.ts +1 -0
  93. package/dist/waas/utils/createWalletProviderForWaasEvm/signTypedData/signTypedData.d.ts.map +1 -1
  94. package/dist/waas.cjs.js +3 -3
  95. package/dist/waas.esm.js +3 -3
  96. package/dist/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.d.ts +1 -0
  97. package/dist/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.d.ts.map +1 -1
  98. package/dist/walletConnect/connectAndVerifyWithWalletConnectEvm/connectAndVerifyWithWalletConnectEvm.d.ts +1 -0
  99. package/dist/walletConnect/connectAndVerifyWithWalletConnectEvm/connectAndVerifyWithWalletConnectEvm.d.ts.map +1 -1
  100. package/dist/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.d.ts +1 -0
  101. package/dist/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.d.ts.map +1 -1
  102. package/dist/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.d.ts +1 -0
  103. package/dist/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.d.ts.map +1 -1
  104. package/dist/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.d.ts +1 -0
  105. package/dist/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.d.ts.map +1 -1
  106. package/dist/walletConnect.cjs.js +7 -2
  107. package/dist/walletConnect.cjs.js.map +1 -1
  108. package/dist/walletConnect.esm.js +7 -2
  109. package/dist/walletConnect.esm.js.map +1 -1
  110. package/dist/windowInjected/addEvmWindowInjectedExtension/addEvmWindowInjectedExtension.d.ts +1 -0
  111. package/dist/windowInjected/addEvmWindowInjectedExtension/addEvmWindowInjectedExtension.d.ts.map +1 -1
  112. package/dist/windowInjected/utils/detectEvmWalletFromProvider/detectEvmWalletFromProvider.d.ts +1 -0
  113. package/dist/windowInjected/utils/detectEvmWalletFromProvider/detectEvmWalletFromProvider.d.ts.map +1 -1
  114. package/dist/windowInjected/utils/getEvmInjectedProviders/getEvmInjectedProviders.d.ts +1 -0
  115. package/dist/windowInjected/utils/getEvmInjectedProviders/getEvmInjectedProviders.d.ts.map +1 -1
  116. package/dist/windowInjected.cjs.js +6 -3
  117. package/dist/windowInjected.cjs.js.map +1 -1
  118. package/dist/windowInjected.esm.js +6 -3
  119. package/dist/windowInjected.esm.js.map +1 -1
  120. package/package.json +5 -5
  121. package/dist/addEIP6963Extension-C0_HkkB3.cjs.js.map +0 -1
  122. package/dist/addEIP6963Extension-DCfr2ICp.esm.js.map +0 -1
  123. package/dist/addWaasEvmExtension-BgNK6o4z.esm.js.map +0 -1
  124. package/dist/addWaasEvmExtension-Bk1L1pKN.cjs.js.map +0 -1
  125. package/dist/createPublicClientFromNetworkData-BP-UWaex.esm.js.map +0 -1
  126. package/dist/createPublicClientFromNetworkData-CJt0ucj2.cjs.js.map +0 -1
  127. package/dist/createWalletProviderFromEIP1193Provider-Dtdi7o4i.cjs.js.map +0 -1
  128. package/dist/createWalletProviderFromEIP1193Provider-HbdO_Ol0.esm.js.map +0 -1
  129. package/dist/evmTransferAmount-C8IPTmEv.cjs.js.map +0 -1
  130. package/dist/evmTransferAmount-D1ueI25q.esm.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWalletProviderFromEIP1193Provider-CR6FlB39.cjs.js","names":["addNetwork: AddNetwork","payload: RequestAddChainPayload","getActiveNetworkId: GetActiveNetworkId","switchActiveNetwork: switchActiveNetwork","UserRejectedError","NetworkSwitchingUnavailableError","networkData","UnrecognizedNetworkError","NetworkNotAddedError","chain: Chain","WalletProviderEnum","addNetworkWrapped: EvmWalletProvider['addNetwork']","connect: EvmWalletProvider['connect']","disconnect: EvmWalletProvider['disconnect']","getConnectedAddresses: EvmWalletProvider['getConnectedAddresses']","signMessage: EvmWalletProvider['signMessage']","chain","terminate: EvmWalletProvider['terminate']","evmExecuteCheckoutTransaction","evmTransferAmount"],"sources":["../src/utils/createWalletProviderFromEIP1193Provider/addNetwork/addNetwork.ts","../src/utils/createWalletProviderFromEIP1193Provider/getActiveNetworkId/getActiveNetworkId.ts","../src/utils/createWalletProviderFromEIP1193Provider/isUnrecognizedChainError/isUnrecognizedChainError.ts","../src/utils/createWalletProviderFromEIP1193Provider/switchActiveNetwork/switchActiveNetwork.ts","../src/utils/createWalletProviderFromEIP1193Provider/createWalletProviderFromEIP1193Provider.ts"],"sourcesContent":["import type { ExtendParameters } from '@dynamic-labs-sdk/client/core';\nimport { toHex } from 'viem';\n\nimport type {\n EIP1193Provider,\n EvmWalletProvider,\n} from '../../../EvmWalletProvider.types';\n\n// source: https://docs.metamask.io/wallet/reference/json-rpc-methods/wallet_addethereumchain/\ntype RequestAddChainPayload = {\n /**\n * An array of one or more URLs pointing to block explorer sites for the chain.\n */\n blockExplorerUrls?: string[];\n /**\n * The chain ID as a 0x-prefixed hexadecimal string, per the eth_chainId method.\n * MetaMask compares this chain ID value with the eth_chainId return value.\n * If these values aren't identical, MetaMask rejects the request.\n */\n chainId: string;\n /**\n * A human-readable name for the chain.\n */\n chainName: string;\n /**\n * An array of one or more URLs pointing to icons that can be used to visually identify the chain.\n */\n iconUrls?: string[];\n /**\n * An object containing information about the native currency of the chain.\n */\n nativeCurrency: {\n /**\n * A non-negative integer representing the number of decimals the native currency uses.\n */\n decimals: number;\n /**\n * A human-readable name of the native currency.\n */\n name: string;\n /**\n * A human-readable symbol of the native currency.\n */\n symbol: string;\n };\n /**\n * An array of one or more URLs pointing to RPC endpoints that can be used to communicate with the chain.\n * At least one item is required.\n */\n rpcUrls: string[];\n};\n\ntype AddNetwork = ExtendParameters<\n EvmWalletProvider['addNetwork'],\n {\n eip1193: EIP1193Provider;\n }\n>;\n\n/**\n * Allows requesting that the eip1193 provider adds a network to its list of available networks.\n * @not-instrumented\n */\nexport const addNetwork: AddNetwork = async ({ eip1193, networkData }) => {\n const chainId = toHex(parseInt(networkData.networkId));\n\n const payload: RequestAddChainPayload = {\n blockExplorerUrls: networkData.blockExplorerUrls,\n chainId,\n chainName: networkData.displayName,\n iconUrls: [networkData.iconUrl],\n nativeCurrency: networkData.nativeCurrency,\n rpcUrls: networkData.rpcUrls.http,\n };\n\n await eip1193.request({\n method: 'wallet_addEthereumChain',\n params: [payload],\n });\n};\n","import type {\n EIP1193Provider,\n EvmWalletProvider,\n} from '../../../EvmWalletProvider.types';\n\ntype GetActiveNetworkId = (args: {\n eip1193: EIP1193Provider;\n}) => ReturnType<EvmWalletProvider['getActiveNetworkId']>;\n\n/** @not-instrumented */\nexport const getActiveNetworkId: GetActiveNetworkId = async ({ eip1193 }) => {\n const chainIdHex = (await eip1193.request({\n method: 'eth_chainId',\n params: [],\n })) as string;\n\n return { networkId: `${parseInt(chainIdHex, 16)}` };\n};\n","// Sources:\n// https://docs.metamask.io/wallet/reference/json-rpc-methods/wallet_switchethereumchain/\n// https://docs.metamask.io/guide/rpc-api.html#usage-with-wallet-switchethereumchain\n\nconst isRecord = (value: unknown) =>\n typeof value === 'object' && value !== null;\n\n/** @not-instrumented */\nexport const isUnrecognizedChainError = (error: object) => {\n const isCode4902 = 'code' in error && error.code === 4902;\n\n const hasUnrecognizedChainMessage =\n 'message' in error &&\n typeof error.message === 'string' &&\n error.message.toLowerCase().includes('unrecognized chain');\n\n const isOriginalErrorCode4902 =\n 'data' in error &&\n isRecord(error.data) &&\n 'originalError' in error.data &&\n isRecord(error.data.originalError) &&\n 'code' in error.data.originalError &&\n error.data.originalError.code === 4902;\n\n return isCode4902 || hasUnrecognizedChainMessage || isOriginalErrorCode4902;\n};\n","import {\n type DynamicClient,\n NetworkNotAddedError,\n NetworkSwitchingUnavailableError,\n UnrecognizedNetworkError,\n UserRejectedError,\n getNetworksData,\n} from '@dynamic-labs-sdk/client';\nimport type { ExtendParameters } from '@dynamic-labs-sdk/client/core';\nimport { toHex } from 'viem';\n\nimport type {\n EIP1193Provider,\n EvmWalletProvider,\n} from '../../../EvmWalletProvider.types';\nimport { isUnrecognizedChainError } from '../isUnrecognizedChainError';\n\ntype switchActiveNetwork = ExtendParameters<\n EvmWalletProvider['switchActiveNetwork'],\n {\n client: DynamicClient;\n eip1193: EIP1193Provider;\n walletProviderKey: string;\n }\n>;\n\n/** @not-instrumented */\nexport const switchActiveNetwork: switchActiveNetwork = async ({\n networkId,\n client,\n eip1193,\n walletProviderKey,\n}) => {\n const chainId = toHex(parseInt(networkId));\n\n try {\n await eip1193.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId }],\n });\n } catch (error) {\n // We declare this error here to DRY it from being created in 2 different points below\n const userRejectedError = new UserRejectedError({\n action: 'switch wallet active network',\n });\n\n if (typeof error === 'string' && error.includes('rejected')) {\n throw userRejectedError;\n }\n\n if (typeof error !== 'object' || error === null) {\n throw error;\n }\n\n if (\n 'details' in error &&\n Array.isArray(error.details) &&\n error.details.includes(\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n '\"wallet_switchEthereumChain\" not implemented'\n )\n ) {\n throw new NetworkSwitchingUnavailableError({\n originalError: error,\n walletProviderKey,\n });\n }\n\n // Bear in mind: the unrecognized chain error also contains 'rejected' in message,\n // so it needs to be checked for before the rejection error itself.\n if (isUnrecognizedChainError(error)) {\n const networkData = getNetworksData(client).find(\n (networkData) =>\n networkData.networkId === networkId && networkData.chain === 'EVM'\n );\n\n if (!networkData) {\n throw new UnrecognizedNetworkError({\n networkId,\n originalError: error,\n walletProviderKey,\n });\n }\n\n throw new NetworkNotAddedError({\n networkData,\n networkId,\n originalError: error,\n walletProviderKey,\n });\n } else if (\n 'message' in error &&\n typeof error.message === 'string' &&\n error.message.includes('rejected')\n ) {\n throw userRejectedError;\n } else {\n throw error;\n }\n }\n};\n","/* eslint-disable custom-rules/require-client-param */\nimport type { Chain, DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { isHex, getAddress as viemGetAddress } from 'viem';\n\nimport type {\n EIP1193Provider,\n EvmWalletProvider,\n} from '../../EvmWalletProvider.types';\nimport { evmExecuteCheckoutTransaction } from '../evmExecuteCheckoutTransaction';\nimport { evmTransferAmount } from '../evmTransferAmount';\nimport { addNetwork } from './addNetwork';\nimport { getActiveNetworkId } from './getActiveNetworkId/getActiveNetworkId';\nimport { switchActiveNetwork } from './switchActiveNetwork';\n\ntype CreateWalletProviderFromEIP1193ProviderParams = {\n displayName: string;\n eip1193: EIP1193Provider;\n icon: string;\n};\n\n/** @not-instrumented */\nexport const createWalletProviderFromEIP1193Provider = (\n { eip1193, icon, displayName }: CreateWalletProviderFromEIP1193ProviderParams,\n client: DynamicClient\n): EvmWalletProvider => {\n const chain: Chain = 'EVM';\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain,\n displayName,\n walletProviderType,\n });\n\n const addNetworkWrapped: EvmWalletProvider['addNetwork'] = async ({\n networkData,\n }) => addNetwork({ eip1193, networkData });\n\n const connect: EvmWalletProvider['connect'] = async () => {\n const addresses = (await eip1193.request({\n method: 'eth_requestAccounts',\n params: [],\n })) as string[];\n\n const formattedAddresses = addresses.map((address) =>\n viemGetAddress(address)\n );\n\n return {\n addresses: formattedAddresses.map((address) => ({\n address,\n })),\n };\n };\n\n const disconnect: EvmWalletProvider['disconnect'] = async () => {\n await eip1193.request({\n method: 'wallet_revokePermissions',\n params: [\n {\n eth_accounts: {},\n },\n ],\n });\n };\n\n const getConnectedAddresses: EvmWalletProvider['getConnectedAddresses'] =\n async () => {\n const addresses = (await eip1193.request({\n method: 'eth_accounts',\n params: [],\n })) as string[];\n\n const formattedAddresses = addresses.map((address) =>\n viemGetAddress(address)\n );\n\n return {\n addresses: formattedAddresses,\n };\n };\n\n const signMessage: EvmWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n const params = [message];\n\n if (walletAccount) {\n params.push(walletAccount.address);\n }\n\n const signedMessage = await eip1193.request({\n method: 'personal_sign',\n params,\n });\n\n return {\n signature: signedMessage as string,\n };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter({\n removeEventListeners: () => {\n eip1193.removeAllListeners();\n },\n\n setupEventListeners: ({\n handleAccountsChanged,\n handleDisconnected,\n handleNetworkChanged,\n }) => {\n eip1193.on('accountsChanged', (addresses) => {\n handleAccountsChanged({ addresses });\n });\n\n eip1193.on('disconnected', () => {\n handleDisconnected();\n });\n\n eip1193.on('chainChanged', (chain) => {\n const networkId = isHex(chain)\n ? parseInt(chain, 16).toString()\n : chain.toString();\n\n handleNetworkChanged({ networkId });\n });\n },\n });\n\n const terminate: EvmWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n return {\n addNetwork: addNetworkWrapped,\n chain,\n connect,\n disconnect,\n get events() {\n return getEventEmitter();\n },\n executeCheckoutTransaction: (args) =>\n evmExecuteCheckoutTransaction(args, client),\n getActiveNetworkId: () => getActiveNetworkId({ eip1193 }),\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(displayName),\n key,\n metadata: { displayName, icon },\n request: eip1193.request.bind(eip1193),\n signMessage,\n switchActiveNetwork: ({ networkId }) =>\n switchActiveNetwork({\n client,\n eip1193,\n networkId,\n walletProviderKey: key,\n }),\n terminate,\n transferAmount: (args) => evmTransferAmount(args, client),\n walletProviderType,\n };\n};\n"],"mappings":"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"}
@@ -7,6 +7,7 @@ export declare const EIP6963_EXTENSION_KEY = "eip6963";
7
7
  *
8
8
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
9
9
  * @returns A function that can be used to remove EIP-6963 global event listeners that were added.
10
+ * @not-instrumented
10
11
  */
11
12
  export declare const addEIP6963Extension: (client?: import("@dynamic-labs-sdk/client").DynamicClient) => VoidFunction;
12
13
  //# sourceMappingURL=addEIP6963Extension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"addEIP6963Extension.d.ts","sourceRoot":"","sources":["../../../src/eip6963/addEIP6963Extension/addEIP6963Extension.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,6EA2B/B,CAAC"}
1
+ {"version":3,"file":"addEIP6963Extension.d.ts","sourceRoot":"","sources":["../../../src/eip6963/addEIP6963Extension/addEIP6963Extension.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,6EA2B/B,CAAC"}
@@ -1,3 +1,4 @@
1
1
  import type { Eip6963AnnounceProviderEvent } from '../../eip6963.types';
2
+ /** @not-instrumented */
2
3
  export declare const isEip6963Event: (event: unknown) => event is Eip6963AnnounceProviderEvent;
3
4
  //# sourceMappingURL=isEip6963Event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isEip6963Event.d.ts","sourceRoot":"","sources":["../../../../src/eip6963/utils/isEip6963Event/isEip6963Event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAExE,eAAO,MAAM,cAAc,UAClB,OAAO,KACb,KAAK,IAAI,4BAK6C,CAAC"}
1
+ {"version":3,"file":"isEip6963Event.d.ts","sourceRoot":"","sources":["../../../../src/eip6963/utils/isEip6963Event/isEip6963Event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAExE,wBAAwB;AACxB,eAAO,MAAM,cAAc,UAClB,OAAO,KACb,KAAK,IAAI,4BAK6C,CAAC"}
@@ -1,3 +1,4 @@
1
1
  import type { EIP6963ProviderDetail } from '../../eip6963.types';
2
+ /** @not-instrumented */
2
3
  export declare const listenForEIP6963ProviderAnnouncement: (onProvider: (providerDetail: EIP6963ProviderDetail) => void, globalWindow?: Window & typeof globalThis) => VoidFunction;
3
4
  //# sourceMappingURL=listenForEIP6963ProviderAnnouncement.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"listenForEIP6963ProviderAnnouncement.d.ts","sourceRoot":"","sources":["../../../../src/eip6963/utils/listenForEIP6963ProviderAnnouncement/listenForEIP6963ProviderAnnouncement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGjE,eAAO,MAAM,oCAAoC,eACnC,CAAC,cAAc,EAAE,qBAAqB,KAAK,IAAI,gDAS1D,YAcF,CAAC"}
1
+ {"version":3,"file":"listenForEIP6963ProviderAnnouncement.d.ts","sourceRoot":"","sources":["../../../../src/eip6963/utils/listenForEIP6963ProviderAnnouncement/listenForEIP6963ProviderAnnouncement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGjE,wBAAwB;AACxB,eAAO,MAAM,oCAAoC,eACnC,CAAC,cAAc,EAAE,qBAAqB,KAAK,IAAI,gDAS1D,YAcF,CAAC"}
@@ -1,7 +1,7 @@
1
- const require_createPublicClientFromNetworkData = require('./createPublicClientFromNetworkData-CJt0ucj2.cjs.js');
2
- require('./evmTransferAmount-C8IPTmEv.cjs.js');
3
- require('./createWalletProviderFromEIP1193Provider-Dtdi7o4i.cjs.js');
4
- const require_addEIP6963Extension = require('./addEIP6963Extension-C0_HkkB3.cjs.js');
1
+ const require_createPublicClientFromNetworkData = require('./createPublicClientFromNetworkData-CW0Q--rC.cjs.js');
2
+ require('./evmTransferAmount-CQeB3NnB.cjs.js');
3
+ require('./createWalletProviderFromEIP1193Provider-CR6FlB39.cjs.js');
4
+ const require_addEIP6963Extension = require('./addEIP6963Extension-DyBwspCu.cjs.js');
5
5
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
6
6
 
7
7
  //#region src/exports/eip6963.ts
@@ -1,7 +1,7 @@
1
- import { a as version, i as name } from "./createPublicClientFromNetworkData-BP-UWaex.esm.js";
2
- import "./evmTransferAmount-D1ueI25q.esm.js";
3
- import "./createWalletProviderFromEIP1193Provider-HbdO_Ol0.esm.js";
4
- import { t as addEIP6963Extension } from "./addEIP6963Extension-DCfr2ICp.esm.js";
1
+ import { a as version, i as name } from "./createPublicClientFromNetworkData-zSfskEzJ.esm.js";
2
+ import "./evmTransferAmount-DxF5HN1H.esm.js";
3
+ import "./createWalletProviderFromEIP1193Provider-CEj4LJyn.esm.js";
4
+ import { t as addEIP6963Extension } from "./addEIP6963Extension-DHoMRXFO.esm.js";
5
5
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
6
6
 
7
7
  //#region src/exports/eip6963.ts
@@ -1,4 +1,4 @@
1
- const require_createPublicClientFromNetworkData = require('./createPublicClientFromNetworkData-CJt0ucj2.cjs.js');
1
+ const require_createPublicClientFromNetworkData = require('./createPublicClientFromNetworkData-CW0Q--rC.cjs.js');
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 viem = require("viem");
@@ -20,6 +20,7 @@ var RpcError = class extends _dynamic_labs_sdk_client.BaseError {
20
20
 
21
21
  //#endregion
22
22
  //#region src/utils/fetchEvmBalance/fetchEvmBalance.ts
23
+ /** @not-instrumented */
23
24
  const fetchEvmBalance = async ({ address, networkData }, client) => {
24
25
  const rpcUrl = networkData.rpcUrls.http[0];
25
26
  const core = (0, _dynamic_labs_sdk_client_core.getCore)(client);
@@ -60,6 +61,7 @@ const fetchEvmBalance = async ({ address, networkData }, client) => {
60
61
 
61
62
  //#endregion
62
63
  //#region src/utils/createEvmNetworkProvider/createEvmNetworkProvider.ts
64
+ /** @not-instrumented */
63
65
  const createEvmNetworkProvider = (networkData, client) => ({
64
66
  ...(0, _dynamic_labs_sdk_client_core.createBaseNetworkProvider)("EVM", networkData),
65
67
  getBalance: async ({ address }) => ({ balance: await fetchEvmBalance({
@@ -70,6 +72,7 @@ const createEvmNetworkProvider = (networkData, client) => ({
70
72
 
71
73
  //#endregion
72
74
  //#region src/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.ts
75
+ /** @not-instrumented */
73
76
  const registerEvmNetworkProviderBuilder = (client) => {
74
77
  const networkProviderBuilderRegistry = (0, _dynamic_labs_sdk_client_core.getNetworkProviderBuilderRegistry)(client);
75
78
  /**
@@ -97,6 +100,7 @@ const registerEvmNetworkProviderBuilder = (client) => {
97
100
  * @param params.walletAccount - The EVM wallet account sending the approval.
98
101
  * @param client - The Dynamic client instance.
99
102
  * @returns The approval transaction hash.
103
+ * @not-instrumented
100
104
  */
101
105
  const approveErc20 = async ({ amount, spenderAddress, tokenAddress, walletAccount }, client) => {
102
106
  const walletClient = await require_createPublicClientFromNetworkData.createWalletClientForWalletAccount({ walletAccount }, client);
@@ -126,6 +130,7 @@ const approveErc20 = async ({ amount, spenderAddress, tokenAddress, walletAccoun
126
130
  * @param [params.networkData] - The network data to use for the public client. If not provided, the active network data will be used.
127
131
  * @param client - The Dynamic client instance.
128
132
  * @returns The current allowance as a bigint in the token's smallest unit.
133
+ * @not-instrumented
129
134
  */
130
135
  const getErc20Allowance = async ({ networkData, ownerAddress, spenderAddress, tokenAddress, walletAccount }, client) => {
131
136
  if (!networkData) networkData = (await (0, _dynamic_labs_sdk_client.getActiveNetworkData)({ walletAccount }, client)).networkData;
@@ -150,6 +155,7 @@ const getErc20Allowance = async ({ networkData, ownerAddress, spenderAddress, to
150
155
  * @param params.walletAccount - The EVM wallet account used to resolve the active network.
151
156
  * @param client - The Dynamic client instance.
152
157
  * @returns The transaction receipt if an approval was sent, otherwise undefined.
158
+ * @not-instrumented
153
159
  */
154
160
  const approveErc20IfRequiredAndWaitReceipt = async ({ amount, spenderAddress, tokenAddress, walletAccount }, client) => {
155
161
  const { networkData } = await (0, _dynamic_labs_sdk_client.getActiveNetworkData)({ walletAccount }, client);
@@ -179,6 +185,7 @@ const approveErc20IfRequiredAndWaitReceipt = async ({ amount, spenderAddress, to
179
185
  *
180
186
  * @param walletAccount - The wallet account to check.
181
187
  * @returns True if the wallet account is an EVM wallet account, false otherwise.
188
+ * @not-instrumented
182
189
  */
183
190
  const isEvmWalletAccount = (walletAccount) => walletAccount.chain === "EVM";
184
191
 
@@ -198,6 +205,7 @@ const isEvmWalletAccount = (walletAccount) => walletAccount.chain === "EVM";
198
205
  * @param params.onStepChange - Optional callback invoked with `'approval'` or `'transaction'` as each step begins.
199
206
  * @param client - The Dynamic client instance.
200
207
  * @returns The main transaction hash and, if an approval was sent, the approval transaction hash.
208
+ * @not-instrumented
201
209
  */
202
210
  const evmExecuteCheckoutTransaction = async ({ onStepChange, signingPayload, walletAccount }, client) => {
203
211
  if (!isEvmWalletAccount(walletAccount)) throw new _dynamic_labs_sdk_client.InvalidParamError("Wallet account is not an EVM wallet account");
@@ -234,6 +242,7 @@ const evmExecuteCheckoutTransaction = async ({ onStepChange, signingPayload, wal
234
242
  //#endregion
235
243
  //#region src/utils/evmTransferAmount/evmTransferAmount.ts
236
244
  const DEFAULT_DECIMALS = 18;
245
+ /** @not-instrumented */
237
246
  const evmTransferAmount = async ({ amount, recipient, token, walletAccount }, client) => {
238
247
  if (!isEvmWalletAccount(walletAccount)) throw new _dynamic_labs_sdk_client.InvalidParamError("Wallet account is not an EVM wallet account");
239
248
  const { networkData } = await (0, _dynamic_labs_sdk_client.getActiveNetworkData)({ walletAccount }, client);
@@ -290,4 +299,4 @@ Object.defineProperty(exports, 'registerEvmNetworkProviderBuilder', {
290
299
  return registerEvmNetworkProviderBuilder;
291
300
  }
292
301
  });
293
- //# sourceMappingURL=evmTransferAmount-C8IPTmEv.cjs.js.map
302
+ //# sourceMappingURL=evmTransferAmount-CQeB3NnB.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evmTransferAmount-CQeB3NnB.cjs.js","names":["BaseError","createWalletClientForWalletAccount","erc20Abi","createPublicClientFromNetworkData","erc20Abi","createPublicClientFromNetworkData","InvalidParamError","createWalletClientForWalletAccount","gasParams: Record<string, bigint>","InvalidParamError","createPublicClientFromNetworkData","createWalletClientForWalletAccount","erc20Abi"],"sources":["../src/errors/RpcError.ts","../src/utils/fetchEvmBalance/fetchEvmBalance.ts","../src/utils/createEvmNetworkProvider/createEvmNetworkProvider.ts","../src/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.ts","../src/utils/approveErc20/approveErc20.ts","../src/utils/getErc20Allowance/getErc20Allowance.ts","../src/utils/approveErc20IfRequiredAndWaitReceipt/approveErc20IfRequiredAndWaitReceipt.ts","../src/utils/isEvmWalletAccount/isEvmWalletAccount.ts","../src/utils/evmExecuteCheckoutTransaction/evmExecuteCheckoutTransaction.ts","../src/utils/evmTransferAmount/evmTransferAmount.ts"],"sourcesContent":["import { BaseError, type BaseErrorParameters } from '@dynamic-labs-sdk/client';\n\nexport type RpcErrorParameters = Pick<BaseErrorParameters, 'shortMessage'> &\n Partial<Omit<BaseErrorParameters, 'shortMessage'>>;\n\nexport class RpcError extends BaseError {\n constructor(args: RpcErrorParameters) {\n super({\n cause: args.cause ?? null,\n code: args.code ?? 'rpc_error',\n details: args.details,\n docsUrl: args.docsUrl ?? null,\n metaMessages: args.metaMessages,\n name: args.name ?? 'RpcError',\n shortMessage: args.shortMessage,\n });\n }\n}\n","import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\n\nimport { RpcError } from '../../errors/RpcError';\n\ntype FetchEvmBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\n/** @not-instrumented */\nexport const fetchEvmBalance = async (\n { address, networkData }: FetchEvmBalanceParams,\n client: DynamicClient\n): Promise<string | null> => {\n const rpcUrl = networkData.rpcUrls.http[0];\n const core = getCore(client);\n\n try {\n // Perform a POST request to the RPC URL with the JSON-RPC payload\n const response = await core.fetch(rpcUrl, {\n /**\n * The JSON-RPC method 'eth_getBalance' takes the address and a block tag ('latest' is the most recent)\n * See EIP-1474: https://eips.ethereum.org/EIPS/eip-1474\n * See eth_getBalance spec: https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance\n */\n body: JSON.stringify({\n id: Math.floor(Date.now() + Math.random() * 1000),\n jsonrpc: '2.0',\n method: 'eth_getBalance',\n params: [address, 'latest'],\n }),\n\n headers: {\n 'Content-Type': 'application/json',\n },\n\n method: 'POST',\n });\n\n // Check if the network response was successful\n if (!response.ok) {\n throw new RpcError({\n code: 'http_error',\n shortMessage: `HTTP error! status: ${response.status}`,\n });\n }\n\n const data = await response.json();\n\n // Check for a JSON-RPC error in the response\n if (data.error) {\n throw new RpcError({\n cause: data.error instanceof Error ? data.error : undefined,\n code: 'json_rpc_error',\n shortMessage: `RPC Error: ${data.error.message}`,\n });\n }\n\n // The result is a hexadecimal string representing the balance in Wei\n const balanceWeiHex = data.result;\n\n // Convert the hexadecimal string to a BigInt\n const balanceWei = BigInt(balanceWeiHex);\n\n // Convert the balance from Wei to Ether (1 Ether = 10^18 Wei)\n // We use a BigInt for the conversion to maintain precision with large numbers\n const oneEther = BigInt(1e18);\n\n // Perform the division and return the result as a number\n // Note: This conversion can lose precision for very small amounts, but is generally fine for display purposes.\n const balanceEther = Number(balanceWei) / Number(oneEther);\n\n return balanceEther.toString();\n } catch (error) {\n if (error instanceof Error) {\n throw new RpcError({\n cause: error,\n code: 'rpc_error',\n shortMessage: `Failed to fetch balance for address ${address}`,\n });\n }\n\n throw error;\n }\n};\n","import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { EvmNetworkProvider } from '../../EvmNetworkProvider';\nimport { fetchEvmBalance } from '../fetchEvmBalance';\n\n/** @not-instrumented */\nexport const createEvmNetworkProvider = (\n networkData: NetworkData,\n client: DynamicClient\n): EvmNetworkProvider => ({\n ...createBaseNetworkProvider('EVM', networkData),\n\n getBalance: async ({ address }) => ({\n balance: await fetchEvmBalance(\n {\n address,\n networkData,\n },\n client\n ),\n }),\n});\n","import { type DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createEvmNetworkProvider } from '../utils/createEvmNetworkProvider';\n\n/** @not-instrumented */\nexport const registerEvmNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n /**\n * If the Ethereum network provider builder is already registered, return.\n */\n if (networkProviderBuilderRegistry.get().get('EVM')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: (networkData) => createEvmNetworkProvider(networkData, client),\n chain: 'EVM',\n });\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { encodeFunctionData, erc20Abi } from 'viem';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\nimport { createWalletClientForWalletAccount } from '../../viem/createWalletClientForWalletAccount';\n\ntype ApproveErc20Params = {\n amount: bigint;\n spenderAddress: string;\n tokenAddress: string;\n walletAccount: EvmWalletAccount;\n};\n\n/**\n * Sends an ERC-20 `approve` transaction, granting a spender an allowance\n * to transfer tokens on behalf of the wallet account.\n *\n * Encodes the `approve(spender, amount)` call using viem's `encodeFunctionData`\n * and sends it through the wallet account's viem wallet client.\n *\n * @param params.amount - The amount to approve in the token's smallest unit.\n * @param params.spenderAddress - The address being granted the allowance.\n * @param params.tokenAddress - The ERC-20 token contract address.\n * @param params.walletAccount - The EVM wallet account sending the approval.\n * @param client - The Dynamic client instance.\n * @returns The approval transaction hash.\n * @not-instrumented\n */\nexport const approveErc20 = async (\n { amount, spenderAddress, tokenAddress, walletAccount }: ApproveErc20Params,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n const walletClient = await createWalletClientForWalletAccount(\n { walletAccount },\n client\n );\n\n const data = encodeFunctionData({\n abi: erc20Abi,\n args: [spenderAddress as `0x${string}`, amount],\n functionName: 'approve',\n });\n\n const hash = await walletClient.sendTransaction({\n data,\n to: tokenAddress as `0x${string}`,\n });\n\n return { transactionHash: hash };\n};\n","import {\n type DynamicClient,\n type NetworkData,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\nimport { erc20Abi } from 'viem';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\nimport { createPublicClientFromNetworkData } from '../../viem/createPublicClientFromNetworkData';\n\ntype GetErc20AllowanceParams = {\n networkData?: NetworkData;\n ownerAddress: string;\n spenderAddress: string;\n tokenAddress: string;\n walletAccount: EvmWalletAccount;\n};\n\n/**\n * Reads the current ERC-20 token allowance granted by an owner to a spender.\n *\n * Uses a viem public client derived from the wallet account's active network\n * to call the `allowance(owner, spender)` method on the token contract.\n *\n * @param params.tokenAddress - The ERC-20 token contract address.\n * @param params.ownerAddress - The address that granted the allowance.\n * @param params.spenderAddress - The address allowed to spend the tokens.\n * @param params.walletAccount - The EVM wallet account used to resolve the active network.\n * @param [params.networkData] - The network data to use for the public client. If not provided, the active network data will be used.\n * @param client - The Dynamic client instance.\n * @returns The current allowance as a bigint in the token's smallest unit.\n * @not-instrumented\n */\nexport const getErc20Allowance = async (\n {\n networkData,\n ownerAddress,\n spenderAddress,\n tokenAddress,\n walletAccount,\n }: GetErc20AllowanceParams,\n client: DynamicClient\n): Promise<bigint> => {\n if (!networkData) {\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n client\n );\n networkData = activeNetworkData.networkData;\n }\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const publicClient = createPublicClientFromNetworkData({ networkData });\n\n return publicClient.readContract({\n abi: erc20Abi,\n address: tokenAddress as `0x${string}`,\n args: [ownerAddress as `0x${string}`, spenderAddress as `0x${string}`],\n functionName: 'allowance',\n });\n};\n","import {\n type DynamicClient,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\nimport type { TransactionReceipt } from 'viem';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\nimport { createPublicClientFromNetworkData } from '../../viem/createPublicClientFromNetworkData';\nimport { approveErc20 } from '../approveErc20';\nimport { getErc20Allowance } from '../getErc20Allowance';\n\ntype ApproveErc20IfRequiredAndWaitReceiptParams = {\n amount: string;\n spenderAddress: string;\n tokenAddress: string;\n walletAccount: EvmWalletAccount;\n};\n\n/**\n * Approves an ERC-20 token if the current allowance is insufficient and waits for the transaction receipt.\n *\n * @param params.amount - The amount of tokens to approve.\n * @param params.ownerAddress - The address that granted the allowance.\n * @param params.spenderAddress - The address allowed to spend the tokens.\n * @param params.tokenAddress - The ERC-20 token contract address.\n * @param params.walletAccount - The EVM wallet account used to resolve the active network.\n * @param client - The Dynamic client instance.\n * @returns The transaction receipt if an approval was sent, otherwise undefined.\n * @not-instrumented\n */\nexport const approveErc20IfRequiredAndWaitReceipt = async (\n {\n amount,\n spenderAddress,\n tokenAddress,\n walletAccount,\n }: ApproveErc20IfRequiredAndWaitReceiptParams,\n client: DynamicClient\n): Promise<{ receipt: TransactionReceipt } | undefined> => {\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const currentAllowance = await getErc20Allowance(\n {\n networkData,\n ownerAddress: walletAccount.address,\n spenderAddress,\n tokenAddress,\n walletAccount,\n },\n client\n );\n\n const approvalAmount = BigInt(amount);\n\n if (currentAllowance >= approvalAmount) {\n return undefined;\n }\n\n const result = await approveErc20(\n {\n amount: approvalAmount,\n spenderAddress,\n tokenAddress,\n walletAccount,\n },\n client\n );\n const approvalTransactionHash = result.transactionHash;\n\n const publicClient = createPublicClientFromNetworkData({ networkData });\n\n const receipt = await publicClient.waitForTransactionReceipt({\n hash: approvalTransactionHash as `0x${string}`,\n });\n\n return { receipt };\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\n\n/**\n * Type guard function to check if a wallet account is an EVM wallet account.\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is an EVM wallet account, false otherwise.\n * @not-instrumented\n */\nexport const isEvmWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is EvmWalletAccount => walletAccount.chain === 'EVM';\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteCheckoutTransactionParams,\n ExecuteCheckoutTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\n\nimport type { EvmSigningPayload } from '../../checkoutTransaction.types';\nimport { createWalletClientForWalletAccount } from '../../viem/createWalletClientForWalletAccount';\nimport { approveErc20IfRequiredAndWaitReceipt } from '../approveErc20IfRequiredAndWaitReceipt';\nimport { isEvmWalletAccount } from '../isEvmWalletAccount';\n\n/**\n * Executes an EVM checkout transaction by handling optional ERC-20 approval\n * and sending the main swap transaction on-chain.\n *\n * 1. Validates that the wallet account is an EVM wallet account\n * 2. If the signing payload includes an `evmApproval`, checks the current\n * ERC-20 allowance and sends an approve transaction when insufficient\n * 3. Sends the main transaction using the viem wallet client\n *\n * @param params.signingPayload - The chain-aware signing payload containing `evmTransaction` and optional `evmApproval`.\n * @param params.walletAccount - The wallet account used to sign and send transactions.\n * @param params.onStepChange - Optional callback invoked with `'approval'` or `'transaction'` as each step begins.\n * @param client - The Dynamic client instance.\n * @returns The main transaction hash and, if an approval was sent, the approval transaction hash.\n * @not-instrumented\n */\nexport const evmExecuteCheckoutTransaction = async (\n {\n onStepChange,\n signingPayload,\n walletAccount,\n }: ExecuteCheckoutTransactionParams,\n client: DynamicClient\n): Promise<ExecuteCheckoutTransactionResult> => {\n if (!isEvmWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not an EVM wallet account');\n }\n\n const evmPayload = signingPayload as EvmSigningPayload;\n\n if (!evmPayload.evmTransaction) {\n throw new InvalidParamError(\n 'Signing payload is missing EVM transaction data'\n );\n }\n\n const { evmTransaction, evmApproval } = evmPayload;\n\n if (evmApproval) {\n onStepChange?.('approval');\n\n await approveErc20IfRequiredAndWaitReceipt(\n {\n amount: evmApproval.amount,\n spenderAddress: evmApproval.spenderAddress,\n tokenAddress: evmApproval.tokenAddress,\n walletAccount,\n },\n client\n );\n }\n\n onStepChange?.('transaction');\n\n const walletClient = await createWalletClientForWalletAccount(\n { walletAccount },\n client\n );\n\n // sendTransaction expects gasPrice or maxFeePerGas and maxPriorityFeePerGas\n let gasParams: Record<string, bigint> = {};\n if (evmTransaction.maxFeePerGas && evmTransaction.maxPriorityFeePerGas) {\n gasParams = {\n maxFeePerGas: BigInt(evmTransaction.maxFeePerGas),\n maxPriorityFeePerGas: BigInt(evmTransaction.maxPriorityFeePerGas),\n };\n } else {\n gasParams = {\n ...(evmTransaction.gasPrice && {\n gasPrice: BigInt(evmTransaction.gasPrice),\n }),\n };\n }\n\n const transactionHash = await walletClient.sendTransaction({\n data: evmTransaction.data as `0x${string}`,\n to: evmTransaction.to as `0x${string}`,\n value: evmTransaction.value ? BigInt(evmTransaction.value) : 0n,\n ...(evmTransaction.gasLimit && { gas: BigInt(evmTransaction.gasLimit) }),\n ...gasParams,\n ...(evmTransaction.nonce && { nonce: evmTransaction.nonce }),\n });\n\n return { transactionHash };\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\nimport type { TransferAmountParams } from '@dynamic-labs-sdk/client/core';\nimport { encodeFunctionData, erc20Abi, parseEther, parseUnits } from 'viem';\n\nimport { createPublicClientFromNetworkData } from '../../viem/createPublicClientFromNetworkData';\nimport { createWalletClientForWalletAccount } from '../../viem/createWalletClientForWalletAccount';\nimport { isEvmWalletAccount } from '../isEvmWalletAccount';\n\nconst DEFAULT_DECIMALS = 18;\n\n/** @not-instrumented */\nexport const evmTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isEvmWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not an EVM wallet account');\n }\n\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const publicClient = createPublicClientFromNetworkData({ networkData });\n const nonce = await publicClient.getTransactionCount({\n address: walletAccount.address as `0x${string}`,\n });\n\n const walletClient = await createWalletClientForWalletAccount(\n { walletAccount },\n client\n );\n\n // non-native token transfers\n if (token) {\n const decimals = token.decimals ?? DEFAULT_DECIMALS;\n\n const data = encodeFunctionData({\n abi: erc20Abi,\n args: [recipient as `0x${string}`, parseUnits(amount, decimals)],\n functionName: 'transfer',\n });\n\n const hash = await walletClient.sendTransaction({\n data,\n nonce,\n to: token.address as `0x${string}`,\n });\n\n return { transactionHash: hash };\n }\n\n // native token transfers\n const hash = await walletClient.sendTransaction({\n nonce,\n to: recipient as `0x${string}`,\n value: parseEther(amount),\n });\n\n return { transactionHash: hash };\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { n as createWalletClientForWalletAccount, t as createPublicClientFromNetworkData } from "./createPublicClientFromNetworkData-BP-UWaex.esm.js";
1
+ import { n as createWalletClientForWalletAccount, t as createPublicClientFromNetworkData } from "./createPublicClientFromNetworkData-zSfskEzJ.esm.js";
2
2
  import { assertDefined, createBaseNetworkProvider, getCore, getNetworkProviderBuilderRegistry } from "@dynamic-labs-sdk/client/core";
3
3
  import { BaseError, InvalidParamError, getActiveNetworkData } from "@dynamic-labs-sdk/client";
4
4
  import { encodeFunctionData, erc20Abi, parseEther, parseUnits } from "viem";
@@ -20,6 +20,7 @@ var RpcError = class extends BaseError {
20
20
 
21
21
  //#endregion
22
22
  //#region src/utils/fetchEvmBalance/fetchEvmBalance.ts
23
+ /** @not-instrumented */
23
24
  const fetchEvmBalance = async ({ address, networkData }, client) => {
24
25
  const rpcUrl = networkData.rpcUrls.http[0];
25
26
  const core = getCore(client);
@@ -60,6 +61,7 @@ const fetchEvmBalance = async ({ address, networkData }, client) => {
60
61
 
61
62
  //#endregion
62
63
  //#region src/utils/createEvmNetworkProvider/createEvmNetworkProvider.ts
64
+ /** @not-instrumented */
63
65
  const createEvmNetworkProvider = (networkData, client) => ({
64
66
  ...createBaseNetworkProvider("EVM", networkData),
65
67
  getBalance: async ({ address }) => ({ balance: await fetchEvmBalance({
@@ -70,6 +72,7 @@ const createEvmNetworkProvider = (networkData, client) => ({
70
72
 
71
73
  //#endregion
72
74
  //#region src/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.ts
75
+ /** @not-instrumented */
73
76
  const registerEvmNetworkProviderBuilder = (client) => {
74
77
  const networkProviderBuilderRegistry = getNetworkProviderBuilderRegistry(client);
75
78
  /**
@@ -97,6 +100,7 @@ const registerEvmNetworkProviderBuilder = (client) => {
97
100
  * @param params.walletAccount - The EVM wallet account sending the approval.
98
101
  * @param client - The Dynamic client instance.
99
102
  * @returns The approval transaction hash.
103
+ * @not-instrumented
100
104
  */
101
105
  const approveErc20 = async ({ amount, spenderAddress, tokenAddress, walletAccount }, client) => {
102
106
  const walletClient = await createWalletClientForWalletAccount({ walletAccount }, client);
@@ -126,6 +130,7 @@ const approveErc20 = async ({ amount, spenderAddress, tokenAddress, walletAccoun
126
130
  * @param [params.networkData] - The network data to use for the public client. If not provided, the active network data will be used.
127
131
  * @param client - The Dynamic client instance.
128
132
  * @returns The current allowance as a bigint in the token's smallest unit.
133
+ * @not-instrumented
129
134
  */
130
135
  const getErc20Allowance = async ({ networkData, ownerAddress, spenderAddress, tokenAddress, walletAccount }, client) => {
131
136
  if (!networkData) networkData = (await getActiveNetworkData({ walletAccount }, client)).networkData;
@@ -150,6 +155,7 @@ const getErc20Allowance = async ({ networkData, ownerAddress, spenderAddress, to
150
155
  * @param params.walletAccount - The EVM wallet account used to resolve the active network.
151
156
  * @param client - The Dynamic client instance.
152
157
  * @returns The transaction receipt if an approval was sent, otherwise undefined.
158
+ * @not-instrumented
153
159
  */
154
160
  const approveErc20IfRequiredAndWaitReceipt = async ({ amount, spenderAddress, tokenAddress, walletAccount }, client) => {
155
161
  const { networkData } = await getActiveNetworkData({ walletAccount }, client);
@@ -179,6 +185,7 @@ const approveErc20IfRequiredAndWaitReceipt = async ({ amount, spenderAddress, to
179
185
  *
180
186
  * @param walletAccount - The wallet account to check.
181
187
  * @returns True if the wallet account is an EVM wallet account, false otherwise.
188
+ * @not-instrumented
182
189
  */
183
190
  const isEvmWalletAccount = (walletAccount) => walletAccount.chain === "EVM";
184
191
 
@@ -198,6 +205,7 @@ const isEvmWalletAccount = (walletAccount) => walletAccount.chain === "EVM";
198
205
  * @param params.onStepChange - Optional callback invoked with `'approval'` or `'transaction'` as each step begins.
199
206
  * @param client - The Dynamic client instance.
200
207
  * @returns The main transaction hash and, if an approval was sent, the approval transaction hash.
208
+ * @not-instrumented
201
209
  */
202
210
  const evmExecuteCheckoutTransaction = async ({ onStepChange, signingPayload, walletAccount }, client) => {
203
211
  if (!isEvmWalletAccount(walletAccount)) throw new InvalidParamError("Wallet account is not an EVM wallet account");
@@ -234,6 +242,7 @@ const evmExecuteCheckoutTransaction = async ({ onStepChange, signingPayload, wal
234
242
  //#endregion
235
243
  //#region src/utils/evmTransferAmount/evmTransferAmount.ts
236
244
  const DEFAULT_DECIMALS = 18;
245
+ /** @not-instrumented */
237
246
  const evmTransferAmount = async ({ amount, recipient, token, walletAccount }, client) => {
238
247
  if (!isEvmWalletAccount(walletAccount)) throw new InvalidParamError("Wallet account is not an EVM wallet account");
239
248
  const { networkData } = await getActiveNetworkData({ walletAccount }, client);
@@ -261,4 +270,4 @@ const evmTransferAmount = async ({ amount, recipient, token, walletAccount }, cl
261
270
 
262
271
  //#endregion
263
272
  export { RpcError as a, registerEvmNetworkProviderBuilder as i, evmExecuteCheckoutTransaction as n, isEvmWalletAccount as r, evmTransferAmount as t };
264
- //# sourceMappingURL=evmTransferAmount-D1ueI25q.esm.js.map
273
+ //# sourceMappingURL=evmTransferAmount-DxF5HN1H.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evmTransferAmount-DxF5HN1H.esm.js","names":["gasParams: Record<string, bigint>"],"sources":["../src/errors/RpcError.ts","../src/utils/fetchEvmBalance/fetchEvmBalance.ts","../src/utils/createEvmNetworkProvider/createEvmNetworkProvider.ts","../src/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.ts","../src/utils/approveErc20/approveErc20.ts","../src/utils/getErc20Allowance/getErc20Allowance.ts","../src/utils/approveErc20IfRequiredAndWaitReceipt/approveErc20IfRequiredAndWaitReceipt.ts","../src/utils/isEvmWalletAccount/isEvmWalletAccount.ts","../src/utils/evmExecuteCheckoutTransaction/evmExecuteCheckoutTransaction.ts","../src/utils/evmTransferAmount/evmTransferAmount.ts"],"sourcesContent":["import { BaseError, type BaseErrorParameters } from '@dynamic-labs-sdk/client';\n\nexport type RpcErrorParameters = Pick<BaseErrorParameters, 'shortMessage'> &\n Partial<Omit<BaseErrorParameters, 'shortMessage'>>;\n\nexport class RpcError extends BaseError {\n constructor(args: RpcErrorParameters) {\n super({\n cause: args.cause ?? null,\n code: args.code ?? 'rpc_error',\n details: args.details,\n docsUrl: args.docsUrl ?? null,\n metaMessages: args.metaMessages,\n name: args.name ?? 'RpcError',\n shortMessage: args.shortMessage,\n });\n }\n}\n","import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\n\nimport { RpcError } from '../../errors/RpcError';\n\ntype FetchEvmBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\n/** @not-instrumented */\nexport const fetchEvmBalance = async (\n { address, networkData }: FetchEvmBalanceParams,\n client: DynamicClient\n): Promise<string | null> => {\n const rpcUrl = networkData.rpcUrls.http[0];\n const core = getCore(client);\n\n try {\n // Perform a POST request to the RPC URL with the JSON-RPC payload\n const response = await core.fetch(rpcUrl, {\n /**\n * The JSON-RPC method 'eth_getBalance' takes the address and a block tag ('latest' is the most recent)\n * See EIP-1474: https://eips.ethereum.org/EIPS/eip-1474\n * See eth_getBalance spec: https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance\n */\n body: JSON.stringify({\n id: Math.floor(Date.now() + Math.random() * 1000),\n jsonrpc: '2.0',\n method: 'eth_getBalance',\n params: [address, 'latest'],\n }),\n\n headers: {\n 'Content-Type': 'application/json',\n },\n\n method: 'POST',\n });\n\n // Check if the network response was successful\n if (!response.ok) {\n throw new RpcError({\n code: 'http_error',\n shortMessage: `HTTP error! status: ${response.status}`,\n });\n }\n\n const data = await response.json();\n\n // Check for a JSON-RPC error in the response\n if (data.error) {\n throw new RpcError({\n cause: data.error instanceof Error ? data.error : undefined,\n code: 'json_rpc_error',\n shortMessage: `RPC Error: ${data.error.message}`,\n });\n }\n\n // The result is a hexadecimal string representing the balance in Wei\n const balanceWeiHex = data.result;\n\n // Convert the hexadecimal string to a BigInt\n const balanceWei = BigInt(balanceWeiHex);\n\n // Convert the balance from Wei to Ether (1 Ether = 10^18 Wei)\n // We use a BigInt for the conversion to maintain precision with large numbers\n const oneEther = BigInt(1e18);\n\n // Perform the division and return the result as a number\n // Note: This conversion can lose precision for very small amounts, but is generally fine for display purposes.\n const balanceEther = Number(balanceWei) / Number(oneEther);\n\n return balanceEther.toString();\n } catch (error) {\n if (error instanceof Error) {\n throw new RpcError({\n cause: error,\n code: 'rpc_error',\n shortMessage: `Failed to fetch balance for address ${address}`,\n });\n }\n\n throw error;\n }\n};\n","import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { EvmNetworkProvider } from '../../EvmNetworkProvider';\nimport { fetchEvmBalance } from '../fetchEvmBalance';\n\n/** @not-instrumented */\nexport const createEvmNetworkProvider = (\n networkData: NetworkData,\n client: DynamicClient\n): EvmNetworkProvider => ({\n ...createBaseNetworkProvider('EVM', networkData),\n\n getBalance: async ({ address }) => ({\n balance: await fetchEvmBalance(\n {\n address,\n networkData,\n },\n client\n ),\n }),\n});\n","import { type DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createEvmNetworkProvider } from '../utils/createEvmNetworkProvider';\n\n/** @not-instrumented */\nexport const registerEvmNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n /**\n * If the Ethereum network provider builder is already registered, return.\n */\n if (networkProviderBuilderRegistry.get().get('EVM')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: (networkData) => createEvmNetworkProvider(networkData, client),\n chain: 'EVM',\n });\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { encodeFunctionData, erc20Abi } from 'viem';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\nimport { createWalletClientForWalletAccount } from '../../viem/createWalletClientForWalletAccount';\n\ntype ApproveErc20Params = {\n amount: bigint;\n spenderAddress: string;\n tokenAddress: string;\n walletAccount: EvmWalletAccount;\n};\n\n/**\n * Sends an ERC-20 `approve` transaction, granting a spender an allowance\n * to transfer tokens on behalf of the wallet account.\n *\n * Encodes the `approve(spender, amount)` call using viem's `encodeFunctionData`\n * and sends it through the wallet account's viem wallet client.\n *\n * @param params.amount - The amount to approve in the token's smallest unit.\n * @param params.spenderAddress - The address being granted the allowance.\n * @param params.tokenAddress - The ERC-20 token contract address.\n * @param params.walletAccount - The EVM wallet account sending the approval.\n * @param client - The Dynamic client instance.\n * @returns The approval transaction hash.\n * @not-instrumented\n */\nexport const approveErc20 = async (\n { amount, spenderAddress, tokenAddress, walletAccount }: ApproveErc20Params,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n const walletClient = await createWalletClientForWalletAccount(\n { walletAccount },\n client\n );\n\n const data = encodeFunctionData({\n abi: erc20Abi,\n args: [spenderAddress as `0x${string}`, amount],\n functionName: 'approve',\n });\n\n const hash = await walletClient.sendTransaction({\n data,\n to: tokenAddress as `0x${string}`,\n });\n\n return { transactionHash: hash };\n};\n","import {\n type DynamicClient,\n type NetworkData,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\nimport { erc20Abi } from 'viem';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\nimport { createPublicClientFromNetworkData } from '../../viem/createPublicClientFromNetworkData';\n\ntype GetErc20AllowanceParams = {\n networkData?: NetworkData;\n ownerAddress: string;\n spenderAddress: string;\n tokenAddress: string;\n walletAccount: EvmWalletAccount;\n};\n\n/**\n * Reads the current ERC-20 token allowance granted by an owner to a spender.\n *\n * Uses a viem public client derived from the wallet account's active network\n * to call the `allowance(owner, spender)` method on the token contract.\n *\n * @param params.tokenAddress - The ERC-20 token contract address.\n * @param params.ownerAddress - The address that granted the allowance.\n * @param params.spenderAddress - The address allowed to spend the tokens.\n * @param params.walletAccount - The EVM wallet account used to resolve the active network.\n * @param [params.networkData] - The network data to use for the public client. If not provided, the active network data will be used.\n * @param client - The Dynamic client instance.\n * @returns The current allowance as a bigint in the token's smallest unit.\n * @not-instrumented\n */\nexport const getErc20Allowance = async (\n {\n networkData,\n ownerAddress,\n spenderAddress,\n tokenAddress,\n walletAccount,\n }: GetErc20AllowanceParams,\n client: DynamicClient\n): Promise<bigint> => {\n if (!networkData) {\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n client\n );\n networkData = activeNetworkData.networkData;\n }\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const publicClient = createPublicClientFromNetworkData({ networkData });\n\n return publicClient.readContract({\n abi: erc20Abi,\n address: tokenAddress as `0x${string}`,\n args: [ownerAddress as `0x${string}`, spenderAddress as `0x${string}`],\n functionName: 'allowance',\n });\n};\n","import {\n type DynamicClient,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\nimport type { TransactionReceipt } from 'viem';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\nimport { createPublicClientFromNetworkData } from '../../viem/createPublicClientFromNetworkData';\nimport { approveErc20 } from '../approveErc20';\nimport { getErc20Allowance } from '../getErc20Allowance';\n\ntype ApproveErc20IfRequiredAndWaitReceiptParams = {\n amount: string;\n spenderAddress: string;\n tokenAddress: string;\n walletAccount: EvmWalletAccount;\n};\n\n/**\n * Approves an ERC-20 token if the current allowance is insufficient and waits for the transaction receipt.\n *\n * @param params.amount - The amount of tokens to approve.\n * @param params.ownerAddress - The address that granted the allowance.\n * @param params.spenderAddress - The address allowed to spend the tokens.\n * @param params.tokenAddress - The ERC-20 token contract address.\n * @param params.walletAccount - The EVM wallet account used to resolve the active network.\n * @param client - The Dynamic client instance.\n * @returns The transaction receipt if an approval was sent, otherwise undefined.\n * @not-instrumented\n */\nexport const approveErc20IfRequiredAndWaitReceipt = async (\n {\n amount,\n spenderAddress,\n tokenAddress,\n walletAccount,\n }: ApproveErc20IfRequiredAndWaitReceiptParams,\n client: DynamicClient\n): Promise<{ receipt: TransactionReceipt } | undefined> => {\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const currentAllowance = await getErc20Allowance(\n {\n networkData,\n ownerAddress: walletAccount.address,\n spenderAddress,\n tokenAddress,\n walletAccount,\n },\n client\n );\n\n const approvalAmount = BigInt(amount);\n\n if (currentAllowance >= approvalAmount) {\n return undefined;\n }\n\n const result = await approveErc20(\n {\n amount: approvalAmount,\n spenderAddress,\n tokenAddress,\n walletAccount,\n },\n client\n );\n const approvalTransactionHash = result.transactionHash;\n\n const publicClient = createPublicClientFromNetworkData({ networkData });\n\n const receipt = await publicClient.waitForTransactionReceipt({\n hash: approvalTransactionHash as `0x${string}`,\n });\n\n return { receipt };\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\n\n/**\n * Type guard function to check if a wallet account is an EVM wallet account.\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is an EVM wallet account, false otherwise.\n * @not-instrumented\n */\nexport const isEvmWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is EvmWalletAccount => walletAccount.chain === 'EVM';\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteCheckoutTransactionParams,\n ExecuteCheckoutTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\n\nimport type { EvmSigningPayload } from '../../checkoutTransaction.types';\nimport { createWalletClientForWalletAccount } from '../../viem/createWalletClientForWalletAccount';\nimport { approveErc20IfRequiredAndWaitReceipt } from '../approveErc20IfRequiredAndWaitReceipt';\nimport { isEvmWalletAccount } from '../isEvmWalletAccount';\n\n/**\n * Executes an EVM checkout transaction by handling optional ERC-20 approval\n * and sending the main swap transaction on-chain.\n *\n * 1. Validates that the wallet account is an EVM wallet account\n * 2. If the signing payload includes an `evmApproval`, checks the current\n * ERC-20 allowance and sends an approve transaction when insufficient\n * 3. Sends the main transaction using the viem wallet client\n *\n * @param params.signingPayload - The chain-aware signing payload containing `evmTransaction` and optional `evmApproval`.\n * @param params.walletAccount - The wallet account used to sign and send transactions.\n * @param params.onStepChange - Optional callback invoked with `'approval'` or `'transaction'` as each step begins.\n * @param client - The Dynamic client instance.\n * @returns The main transaction hash and, if an approval was sent, the approval transaction hash.\n * @not-instrumented\n */\nexport const evmExecuteCheckoutTransaction = async (\n {\n onStepChange,\n signingPayload,\n walletAccount,\n }: ExecuteCheckoutTransactionParams,\n client: DynamicClient\n): Promise<ExecuteCheckoutTransactionResult> => {\n if (!isEvmWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not an EVM wallet account');\n }\n\n const evmPayload = signingPayload as EvmSigningPayload;\n\n if (!evmPayload.evmTransaction) {\n throw new InvalidParamError(\n 'Signing payload is missing EVM transaction data'\n );\n }\n\n const { evmTransaction, evmApproval } = evmPayload;\n\n if (evmApproval) {\n onStepChange?.('approval');\n\n await approveErc20IfRequiredAndWaitReceipt(\n {\n amount: evmApproval.amount,\n spenderAddress: evmApproval.spenderAddress,\n tokenAddress: evmApproval.tokenAddress,\n walletAccount,\n },\n client\n );\n }\n\n onStepChange?.('transaction');\n\n const walletClient = await createWalletClientForWalletAccount(\n { walletAccount },\n client\n );\n\n // sendTransaction expects gasPrice or maxFeePerGas and maxPriorityFeePerGas\n let gasParams: Record<string, bigint> = {};\n if (evmTransaction.maxFeePerGas && evmTransaction.maxPriorityFeePerGas) {\n gasParams = {\n maxFeePerGas: BigInt(evmTransaction.maxFeePerGas),\n maxPriorityFeePerGas: BigInt(evmTransaction.maxPriorityFeePerGas),\n };\n } else {\n gasParams = {\n ...(evmTransaction.gasPrice && {\n gasPrice: BigInt(evmTransaction.gasPrice),\n }),\n };\n }\n\n const transactionHash = await walletClient.sendTransaction({\n data: evmTransaction.data as `0x${string}`,\n to: evmTransaction.to as `0x${string}`,\n value: evmTransaction.value ? BigInt(evmTransaction.value) : 0n,\n ...(evmTransaction.gasLimit && { gas: BigInt(evmTransaction.gasLimit) }),\n ...gasParams,\n ...(evmTransaction.nonce && { nonce: evmTransaction.nonce }),\n });\n\n return { transactionHash };\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\nimport type { TransferAmountParams } from '@dynamic-labs-sdk/client/core';\nimport { encodeFunctionData, erc20Abi, parseEther, parseUnits } from 'viem';\n\nimport { createPublicClientFromNetworkData } from '../../viem/createPublicClientFromNetworkData';\nimport { createWalletClientForWalletAccount } from '../../viem/createWalletClientForWalletAccount';\nimport { isEvmWalletAccount } from '../isEvmWalletAccount';\n\nconst DEFAULT_DECIMALS = 18;\n\n/** @not-instrumented */\nexport const evmTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isEvmWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not an EVM wallet account');\n }\n\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const publicClient = createPublicClientFromNetworkData({ networkData });\n const nonce = await publicClient.getTransactionCount({\n address: walletAccount.address as `0x${string}`,\n });\n\n const walletClient = await createWalletClientForWalletAccount(\n { walletAccount },\n client\n );\n\n // non-native token transfers\n if (token) {\n const decimals = token.decimals ?? DEFAULT_DECIMALS;\n\n const data = encodeFunctionData({\n abi: erc20Abi,\n args: [recipient as `0x${string}`, parseUnits(amount, decimals)],\n functionName: 'transfer',\n });\n\n const hash = await walletClient.sendTransaction({\n data,\n nonce,\n to: token.address as `0x${string}`,\n });\n\n return { transactionHash: hash };\n }\n\n // native token transfers\n const hash = await walletClient.sendTransaction({\n nonce,\n to: recipient as `0x${string}`,\n value: parseEther(amount),\n });\n\n return { transactionHash: hash };\n};\n"],"mappings":"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"}
package/dist/index.cjs.js CHANGED
@@ -1,8 +1,8 @@
1
- const require_createPublicClientFromNetworkData = require('./createPublicClientFromNetworkData-CJt0ucj2.cjs.js');
2
- const require_evmTransferAmount = require('./evmTransferAmount-C8IPTmEv.cjs.js');
3
- require('./createWalletProviderFromEIP1193Provider-Dtdi7o4i.cjs.js');
4
- const require_addEIP6963Extension = require('./addEIP6963Extension-C0_HkkB3.cjs.js');
5
- const require_addWaasEvmExtension = require('./addWaasEvmExtension-Bk1L1pKN.cjs.js');
1
+ const require_createPublicClientFromNetworkData = require('./createPublicClientFromNetworkData-CW0Q--rC.cjs.js');
2
+ const require_evmTransferAmount = require('./evmTransferAmount-CQeB3NnB.cjs.js');
3
+ require('./createWalletProviderFromEIP1193Provider-CR6FlB39.cjs.js');
4
+ const require_addEIP6963Extension = require('./addEIP6963Extension-DyBwspCu.cjs.js');
5
+ const require_addWaasEvmExtension = require('./addWaasEvmExtension-0FSUvikO.cjs.js');
6
6
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
7
7
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
8
8
  let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
@@ -17,6 +17,7 @@ let viem = require("viem");
17
17
  * including standard wallets and embedded wallets managed by Dynamic's infrastructure.
18
18
  *
19
19
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
20
+ * @not-instrumented
20
21
  */
21
22
  const addEvmExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
22
23
  require_addEIP6963Extension.addEIP6963Extension(client);
@@ -30,6 +31,7 @@ const addEvmExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultCl
30
31
  *
31
32
  * @param networkProvider - The network provider to check.
32
33
  * @returns True if the network provider is an EVM network provider, false otherwise.
34
+ * @not-instrumented
33
35
  */
34
36
  const isEvmNetworkProvider = (networkProvider) => networkProvider.chain === "EVM";
35
37
 
@@ -47,6 +49,7 @@ const isEvmNetworkProvider = (networkProvider) => networkProvider.chain === "EVM
47
49
  * @param params.nativeTokenPriceUsd - Optional USD price of the native token for fee conversion.
48
50
  * @returns Fee data including gas estimates and human-readable amounts.
49
51
  * @throws {FeeEstimationFailedError} If gas estimation or fee retrieval fails.
52
+ * @not-instrumented
50
53
  */
51
54
  const calculateEvmTransactionFee = async ({ transaction, networkData, nativeTokenPriceUsd }) => {
52
55
  try {
@@ -107,6 +110,7 @@ const calculateEvmTransactionFee = async ({ transaction, networkData, nativeToke
107
110
  * @throws {InvalidParamError} If wallet account is not an EVM account or network ID is not configured.
108
111
  * @throws {SimulationFailedError} If the simulation API call fails.
109
112
  * @throws {FeeEstimationFailedError} If includeFees is true and fee calculation fails.
113
+ * @not-instrumented
110
114
  */
111
115
  const simulateEvmTransaction = async ({ walletAccount, transaction, includeFees = false }, client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
112
116
  if (!require_evmTransferAmount.isEvmWalletAccount(walletAccount)) throw new _dynamic_labs_sdk_client.InvalidParamError("Wallet account must be an EVM wallet account");
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","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 */\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 */\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 */\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 */\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":";;;;;;;;;;;;;;;;;;;;AAcA,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,4EAAkC,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;;;;;;mECxHeC,gDAAaC,kDAAe"}
1
+ {"version":3,"file":"index.cjs.js","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,4EAAkC,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,gDAAaC,kDAAe"}
package/dist/index.esm.js CHANGED
@@ -1,8 +1,8 @@
1
- import { a as version, i as name, t as createPublicClientFromNetworkData } from "./createPublicClientFromNetworkData-BP-UWaex.esm.js";
2
- import { a as RpcError, r as isEvmWalletAccount } from "./evmTransferAmount-D1ueI25q.esm.js";
3
- import "./createWalletProviderFromEIP1193Provider-HbdO_Ol0.esm.js";
4
- import { t as addEIP6963Extension } from "./addEIP6963Extension-DCfr2ICp.esm.js";
5
- import { t as addWaasEvmExtension } from "./addWaasEvmExtension-BgNK6o4z.esm.js";
1
+ import { a as version, i as name, t as createPublicClientFromNetworkData } from "./createPublicClientFromNetworkData-zSfskEzJ.esm.js";
2
+ import { a as RpcError, r as isEvmWalletAccount } from "./evmTransferAmount-DxF5HN1H.esm.js";
3
+ import "./createWalletProviderFromEIP1193Provider-CEj4LJyn.esm.js";
4
+ import { t as addEIP6963Extension } from "./addEIP6963Extension-DHoMRXFO.esm.js";
5
+ import { t as addWaasEvmExtension } from "./addWaasEvmExtension-CTtgp2ig.esm.js";
6
6
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
7
7
  import { createApiClient, getCore, getDefaultClient } from "@dynamic-labs-sdk/client/core";
8
8
  import { FeeEstimationFailedError, InvalidParamError, SimulationFailedError, getDefaultClient as getDefaultClient$1, getNetworksData } from "@dynamic-labs-sdk/client";
@@ -17,6 +17,7 @@ import { formatEther } from "viem";
17
17
  * including standard wallets and embedded wallets managed by Dynamic's infrastructure.
18
18
  *
19
19
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
20
+ * @not-instrumented
20
21
  */
21
22
  const addEvmExtension = (client = getDefaultClient()) => {
22
23
  addEIP6963Extension(client);
@@ -30,6 +31,7 @@ const addEvmExtension = (client = getDefaultClient()) => {
30
31
  *
31
32
  * @param networkProvider - The network provider to check.
32
33
  * @returns True if the network provider is an EVM network provider, false otherwise.
34
+ * @not-instrumented
33
35
  */
34
36
  const isEvmNetworkProvider = (networkProvider) => networkProvider.chain === "EVM";
35
37
 
@@ -47,6 +49,7 @@ const isEvmNetworkProvider = (networkProvider) => networkProvider.chain === "EVM
47
49
  * @param params.nativeTokenPriceUsd - Optional USD price of the native token for fee conversion.
48
50
  * @returns Fee data including gas estimates and human-readable amounts.
49
51
  * @throws {FeeEstimationFailedError} If gas estimation or fee retrieval fails.
52
+ * @not-instrumented
50
53
  */
51
54
  const calculateEvmTransactionFee = async ({ transaction, networkData, nativeTokenPriceUsd }) => {
52
55
  try {
@@ -107,6 +110,7 @@ const calculateEvmTransactionFee = async ({ transaction, networkData, nativeToke
107
110
  * @throws {InvalidParamError} If wallet account is not an EVM account or network ID is not configured.
108
111
  * @throws {SimulationFailedError} If the simulation API call fails.
109
112
  * @throws {FeeEstimationFailedError} If includeFees is true and fee calculation fails.
113
+ * @not-instrumented
110
114
  */
111
115
  const simulateEvmTransaction = async ({ walletAccount, transaction, includeFees = false }, client = getDefaultClient$1()) => {
112
116
  if (!isEvmWalletAccount(walletAccount)) throw new InvalidParamError("Wallet account must be an EVM wallet account");
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","names":["maxFeePerGas: bigint | undefined","maxPriorityFeePerGas: bigint | undefined","gasPrice: bigint | undefined","nativeAmount: bigint","getDefaultClient","feeData: EvmSimulationResult['feeData']","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 */\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 */\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 */\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 */\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":";;;;;;;;;;;;;;;;;;;;AAcA,MAAa,mBAAmB,SAAS,kBAAkB,KAAW;AACpE,qBAAoB,OAAO;AAC3B,qBAAoB,OAAO;;;;;;;;;;;ACN7B,MAAa,wBACX,oBAC0C,gBAAgB,UAAU;;;;;;;;;;;;;;;;;ACiBtE,MAAa,6BAA6B,OAAO,EAC/C,aACA,aACA,0BACsE;AACtE,KAAI;EACF,MAAM,eAAe,kCAAkC,EAAE,aAAa,CAAC;EAGvE,MAAM,cAAc,MAAM,aAAa,YAAY;GACjD,SAAS,YAAY;GACrB,MAAM,YAAY;GAClB,IAAI,YAAY;GAChB,OAAO,YAAY;GACpB,CAAC;EAGF,IAAIA;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,sBAAsB,YAAY,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,IAAI,yBAAyB;GACjC,OAAO,iBAAiB,QAAQ,QAAQ;GACxC,SAAS;GACV,CAAC;;;;;;;;;;;;;;;;;;;;;;;AC5CN,MAAa,yBAAyB,OACpC,EACE,eACA,aACA,cAAc,SAEhB,SAASC,oBAAkB,KACM;AAEjC,KAAI,CAAC,mBAAmB,cAAc,CACpC,OAAM,IAAI,kBAAkB,+CAA+C;CAK7E,MAAM,cADe,gBAAgB,OAAO,CACX,MAC9B,SAAS,KAAK,cAAc,YAAY,aAAa,KAAK,UAAU,MACtE;AAED,KAAI,CAAC,YACH,OAAM,IAAI,kBACR,mBAAmB,YAAY,UAAU,wCAC1C;AAGH,KAAI;EAEF,MAAM,OAAO,QAAQ,OAAO;EAC5B,MAAM,YAAY,gBAAgB,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,iBAAiB,yBACnB,OAAM;AAGR,QAAM,IAAI,sBAAsB;GAC9B,OAAO,iBAAiB,QAAQ,QAAQ;GACxC,SAAS;GACV,CAAC;;;;;;ACxHN,qBAAqBC,MAAaC,QAAe"}
1
+ {"version":3,"file":"index.esm.js","names":["maxFeePerGas: bigint | undefined","maxPriorityFeePerGas: bigint | undefined","gasPrice: bigint | undefined","nativeAmount: bigint","getDefaultClient","feeData: EvmSimulationResult['feeData']","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,SAAS,kBAAkB,KAAW;AACpE,qBAAoB,OAAO;AAC3B,qBAAoB,OAAO;;;;;;;;;;;;ACN7B,MAAa,wBACX,oBAC0C,gBAAgB,UAAU;;;;;;;;;;;;;;;;;;ACiBtE,MAAa,6BAA6B,OAAO,EAC/C,aACA,aACA,0BACsE;AACtE,KAAI;EACF,MAAM,eAAe,kCAAkC,EAAE,aAAa,CAAC;EAGvE,MAAM,cAAc,MAAM,aAAa,YAAY;GACjD,SAAS,YAAY;GACrB,MAAM,YAAY;GAClB,IAAI,YAAY;GAChB,OAAO,YAAY;GACpB,CAAC;EAGF,IAAIA;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,sBAAsB,YAAY,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,IAAI,yBAAyB;GACjC,OAAO,iBAAiB,QAAQ,QAAQ;GACxC,SAAS;GACV,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AC5CN,MAAa,yBAAyB,OACpC,EACE,eACA,aACA,cAAc,SAEhB,SAASC,oBAAkB,KACM;AAEjC,KAAI,CAAC,mBAAmB,cAAc,CACpC,OAAM,IAAI,kBAAkB,+CAA+C;CAK7E,MAAM,cADe,gBAAgB,OAAO,CACX,MAC9B,SAAS,KAAK,cAAc,YAAY,aAAa,KAAK,UAAU,MACtE;AAED,KAAI,CAAC,YACH,OAAM,IAAI,kBACR,mBAAmB,YAAY,UAAU,wCAC1C;AAGH,KAAI;EAEF,MAAM,OAAO,QAAQ,OAAO;EAC5B,MAAM,YAAY,gBAAgB,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,iBAAiB,yBACnB,OAAM;AAGR,QAAM,IAAI,sBAAsB;GAC9B,OAAO,iBAAiB,QAAQ,QAAQ;GACxC,SAAS;GACV,CAAC;;;;;;ACzHN,qBAAqBC,MAAaC,QAAe"}