@dynamic-labs-sdk/evm 1.31.1 → 1.31.2

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 (77) hide show
  1. package/dist/{addWaasEvmExtension-CyXCTxGv.esm.js → addWaasEvmExtension-BMR_gR6B.esm.js} +10 -6
  2. package/dist/addWaasEvmExtension-BMR_gR6B.esm.js.map +1 -0
  3. package/dist/{addWaasEvmExtension-CP2ibnvq.cjs → addWaasEvmExtension-BjoGfmQX.cjs} +9 -5
  4. package/dist/addWaasEvmExtension-BjoGfmQX.cjs.map +1 -0
  5. package/dist/{addWaasEvmExtension-DYKWl5DG.native.esm.js → addWaasEvmExtension-KdZlXrUW.native.esm.js} +10 -6
  6. package/dist/addWaasEvmExtension-KdZlXrUW.native.esm.js.map +1 -0
  7. package/dist/baseAccount.cjs +1 -1
  8. package/dist/baseAccount.esm.js +1 -1
  9. package/dist/baseAccount.native.esm.js +1 -1
  10. package/dist/core.cjs +1 -1
  11. package/dist/core.esm.js +1 -1
  12. package/dist/core.native.esm.js +1 -1
  13. package/dist/eip6963.cjs +1 -1
  14. package/dist/eip6963.esm.js +1 -1
  15. package/dist/eip6963.native.esm.js +1 -1
  16. package/dist/exports/metamask.d.ts +1 -0
  17. package/dist/exports/metamask.d.ts.map +1 -1
  18. package/dist/index.cjs +2 -2
  19. package/dist/index.esm.js +2 -2
  20. package/dist/index.native.esm.js +2 -2
  21. package/dist/metamask/registerMetaMaskEvmUriConnectionStarter/index.d.ts +2 -0
  22. package/dist/metamask/registerMetaMaskEvmUriConnectionStarter/index.d.ts.map +1 -0
  23. package/dist/metamask/registerMetaMaskEvmUriConnectionStarter/registerMetaMaskEvmUriConnectionStarter.d.ts +22 -0
  24. package/dist/metamask/registerMetaMaskEvmUriConnectionStarter/registerMetaMaskEvmUriConnectionStarter.d.ts.map +1 -0
  25. package/dist/metamask.cjs +32 -1
  26. package/dist/metamask.cjs.map +1 -1
  27. package/dist/metamask.esm.js +33 -3
  28. package/dist/metamask.esm.js.map +1 -1
  29. package/dist/metamask.native.esm.js +33 -3
  30. package/dist/metamask.native.esm.js.map +1 -1
  31. package/dist/{package-BnSw-03C.native.esm.js → package-DHXe8K1l.native.esm.js} +2 -2
  32. package/dist/package-DHXe8K1l.native.esm.js.map +1 -0
  33. package/dist/{package-Dk-SYXOE.cjs → package-cXTEEW7P.cjs} +2 -2
  34. package/dist/package-cXTEEW7P.cjs.map +1 -0
  35. package/dist/{package-DrSY9NJE.esm.js → package-wISL2vMS.esm.js} +2 -2
  36. package/dist/package-wISL2vMS.esm.js.map +1 -0
  37. package/dist/tempo.cjs +1 -1
  38. package/dist/tempo.esm.js +1 -1
  39. package/dist/tempo.native.esm.js +1 -1
  40. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  41. package/dist/viem.cjs +1 -1
  42. package/dist/viem.esm.js +1 -1
  43. package/dist/viem.native.esm.js +1 -1
  44. package/dist/waas/utils/createWalletProviderForWaasEvm/signAuthorization/signAuthorization.d.ts.map +1 -1
  45. package/dist/waas/utils/createWalletProviderForWaasEvm/signTypedData/signTypedData.d.ts.map +1 -1
  46. package/dist/waas.cjs +2 -2
  47. package/dist/waas.esm.js +2 -2
  48. package/dist/waas.native.esm.js +2 -2
  49. package/dist/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.d.ts.map +1 -1
  50. package/dist/walletConnect/registerWalletConnectEvmUriConnectionStarter/index.d.ts +2 -0
  51. package/dist/walletConnect/registerWalletConnectEvmUriConnectionStarter/index.d.ts.map +1 -0
  52. package/dist/walletConnect/registerWalletConnectEvmUriConnectionStarter/registerWalletConnectEvmUriConnectionStarter.d.ts +19 -0
  53. package/dist/walletConnect/registerWalletConnectEvmUriConnectionStarter/registerWalletConnectEvmUriConnectionStarter.d.ts.map +1 -0
  54. package/dist/walletConnect.cjs +85 -58
  55. package/dist/walletConnect.cjs.map +1 -1
  56. package/dist/walletConnect.esm.js +86 -59
  57. package/dist/walletConnect.esm.js.map +1 -1
  58. package/dist/walletConnect.native.esm.js +86 -59
  59. package/dist/walletConnect.native.esm.js.map +1 -1
  60. package/dist/windowInjected/utils/detectEvmWalletFromProvider/detectEvmWalletFromProvider.d.ts.map +1 -1
  61. package/dist/windowInjected/utils/isProviderSelectionRouter/index.d.ts +2 -0
  62. package/dist/windowInjected/utils/isProviderSelectionRouter/index.d.ts.map +1 -0
  63. package/dist/windowInjected/utils/isProviderSelectionRouter/isProviderSelectionRouter.d.ts +30 -0
  64. package/dist/windowInjected/utils/isProviderSelectionRouter/isProviderSelectionRouter.d.ts.map +1 -0
  65. package/dist/windowInjected.cjs +34 -1
  66. package/dist/windowInjected.cjs.map +1 -1
  67. package/dist/windowInjected.esm.js +34 -1
  68. package/dist/windowInjected.esm.js.map +1 -1
  69. package/dist/windowInjected.native.esm.js +34 -1
  70. package/dist/windowInjected.native.esm.js.map +1 -1
  71. package/package.json +5 -5
  72. package/dist/addWaasEvmExtension-CP2ibnvq.cjs.map +0 -1
  73. package/dist/addWaasEvmExtension-CyXCTxGv.esm.js.map +0 -1
  74. package/dist/addWaasEvmExtension-DYKWl5DG.native.esm.js.map +0 -1
  75. package/dist/package-BnSw-03C.native.esm.js.map +0 -1
  76. package/dist/package-Dk-SYXOE.cjs.map +0 -1
  77. package/dist/package-DrSY9NJE.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"walletConnect.esm.js","names":["methodsThatRequireUserAction: string[]","getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId']","switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork']","request: WalletConnectEvmWalletProvider['request']","disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount']","signMessage: WalletConnectEvmWalletProvider['signMessage']","getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses']","viemGetAddress","formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress']","destroy: NonNullable<\n WalletConnectEvmWalletProvider['destroy']\n >","getDefaultClient","packageName","packageVersion"],"sources":["../src/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.ts","../src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts","../src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.ts","../src/utils/getEvmNetworksData/getEvmNetworksData.ts","../src/walletConnect/consts.ts","../src/walletConnect/connectAndVerifyWithWalletConnectEvm/connectAndVerifyWithWalletConnectEvm.ts","../src/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.ts","../src/exports/walletConnect.ts"],"sourcesContent":["import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n emitEvent,\n filterDuplicates,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n getCore,\n getWalletProviderRegistry,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { SessionClosedUnexpectedlyError } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n createWalletConnectSessionEventEmitter,\n getSignClient,\n splitCaip10Token,\n} from '@dynamic-labs-sdk/wallet-connect/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { SDK_ERRORS } from '@walletconnect/utils';\nimport { getAddress as viemGetAddress } from 'viem';\n\nimport type { EIP1193ProviderRequest } from '../../EvmWalletProvider.types';\nimport { evmConfirmTransaction } from '../../utils/evmConfirmTransaction';\nimport { evmExecuteSwapTransaction } from '../../utils/evmExecuteSwapTransaction';\nimport { evmExecuteYieldTransaction } from '../../utils/evmExecuteYieldTransaction';\nimport { evmTransferAmount } from '../../utils/evmTransferAmount';\nimport type { evmMethods } from '../consts';\nimport type { WalletConnectEvmWalletProvider } from '../walletConnectEvmWalletProvider.types';\n\ntype CreateWalletProviderFromEIP155SessionParams = {\n sessionTopic: string;\n};\n\n/**\n * The list of ethereum request methods that require user action.\n * We will raise a user action requested event for these methods.\n */\nconst methodsThatRequireUserAction: string[] = [\n 'personal_sign',\n 'eth_sendTransaction',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v4',\n] satisfies (typeof evmMethods)[number][];\n\n/** @notInstrumented */\nexport const createWalletProviderFromEIP155Session = async (\n { sessionTopic }: CreateWalletProviderFromEIP155SessionParams,\n client: DynamicClient\n): Promise<WalletConnectEvmWalletProvider> => {\n const signClient = await getSignClient(client);\n\n const { logger } = getCore(client);\n\n const getSession = () => {\n const session = signClient.session.get(sessionTopic);\n\n if (!session) {\n // destroy never throws (it logs internally), but explicit .catch makes\n // the fire-and-forget intent obvious and silences static analyzers.\n destroy().catch(() => undefined);\n\n throw new SessionClosedUnexpectedlyError({\n sessionTopic,\n walletDisplayName: displayName,\n });\n }\n\n return session;\n };\n\n const displayName = getSession().peer.metadata.name;\n\n const namespaceKey = 'eip155';\n\n const walletProviderType = WalletProviderEnum.WalletConnect;\n\n const key = formatWalletProviderKey({\n chain: 'EVM',\n displayName,\n suffix: sessionTopic,\n walletProviderType,\n });\n\n const getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId'] =\n async () => {\n // Assert the session is still valid\n getSession();\n\n return await getActiveNetworkIdFromLastKnownRegistry({\n client,\n walletProviderKey: key,\n });\n };\n\n const switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) => {\n // Assert the session is still valid\n getSession();\n\n await switchActiveNetworkInLastKnownRegistry({\n client,\n networkId,\n walletProviderKey: key,\n });\n };\n\n const request: WalletConnectEvmWalletProvider['request'] = async <\n T = unknown\n >(\n args: EIP1193ProviderRequest\n ): Promise<T> => {\n const { networkId } = await getActiveNetworkId();\n\n const session = getSession();\n\n if (methodsThatRequireUserAction.includes(args.method)) {\n emitEvent(\n {\n args: {\n walletMetadata: session.peer.metadata,\n walletProviderKey: key,\n },\n event: 'walletConnectUserActionRequested',\n },\n client\n );\n }\n\n try {\n const result = await signClient.request<T>({\n // signClient expects the chainId to be in CAIP-2 format \"eip155:<networkId>\"\n chainId: `${namespaceKey}:${networkId}`,\n request: args,\n topic: sessionTopic,\n });\n\n return result;\n } catch (err) {\n logger.debug(\n '[createWalletProviderFromEIP155Session] Error requesting from signClient',\n { error: err, method: args.method, networkId }\n );\n\n // WC sessions don't always advertise eth_chainId in their namespaces.methods,\n // so the wallet may reject it. Fall back to the locally known networkId.\n if (args.method === 'eth_chainId') {\n return `0x${Number(networkId).toString(16)}` as never;\n }\n throw err;\n }\n };\n\n /**\n * We actually clear up the entire WC session and its wallet provider\n */\n const disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount'] =\n async () => destroy();\n\n const signMessage: WalletConnectEvmWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n const params = [message];\n\n if (walletAccount) {\n params.push(walletAccount.address);\n }\n\n const requestPromise = request<string>({\n method: 'personal_sign',\n params,\n });\n\n const signature = await requestPromise;\n\n return { signature };\n };\n\n const getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses'] =\n async () => {\n const addresses = filterDuplicates(\n getSession().namespaces[namespaceKey].accounts.map(\n (account) => splitCaip10Token(account).address\n )\n ).map((address) => viemGetAddress(address));\n\n return { addresses };\n };\n\n const formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress'] =\n ({ address }) => viemGetAddress(address);\n\n const { cleanupEventEmitter, getEventEmitter } =\n createWalletConnectSessionEventEmitter({\n formatAddress: viemGetAddress,\n getSession,\n namespaceKey,\n sessionTopic,\n signClient,\n });\n\n const destroy: NonNullable<\n WalletConnectEvmWalletProvider['destroy']\n > = async () => {\n cleanupEventEmitter();\n try {\n await signClient.disconnect({\n reason: SDK_ERRORS.USER_DISCONNECTED,\n topic: sessionTopic,\n });\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n walletProviderRegistry.unregister(key);\n } catch (err) {\n getCore(client).logger.error(\n `[${key}] destroy: remote signal failed`,\n err\n );\n }\n };\n\n return {\n chain: 'EVM',\n confirmTransaction: (args) => evmConfirmTransaction(args, client),\n destroy,\n disconnectWalletAccount,\n get events() {\n return getEventEmitter();\n },\n executeSwapTransaction: (args) => evmExecuteSwapTransaction(args, client),\n executeYieldTransaction: (args) =>\n evmExecuteYieldTransaction(args, client),\n formatWalletAddress,\n getActiveNetworkId,\n getConnectedAddresses,\n getSession,\n groupKey: formatWalletProviderGroupKey(displayName),\n key,\n metadata: {\n displayName,\n icon: getSession().peer.metadata.icons[0],\n },\n namespaceKey,\n request,\n signMessage,\n switchActiveNetwork,\n transferAmount: (args) => evmTransferAmount(args, client),\n walletProviderType,\n };\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n WalletProviderPriority,\n getWalletProviderRegistry,\n waitForProjectSettings,\n} from '@dynamic-labs-sdk/client/core';\nimport { getSignClient } from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\n/** @notInstrumented */\nexport const recoverEvmWalletConnectWalletProviders = async (\n client: DynamicClient\n): Promise<void> => {\n await waitForProjectSettings(client);\n\n const signClient = await getSignClient(client);\n\n /**\n * Recreate the wallet providers for all existing EVM sessions\n */\n const sessions = signClient.session.getAll();\n\n const currentTime = Math.floor(Date.now() / 1000);\n\n for (const session of sessions) {\n if (!('eip155' in session.namespaces)) {\n continue;\n }\n\n if (session.expiry <= currentTime) {\n continue;\n }\n\n const walletProvider = await createWalletProviderFromEIP155Session(\n {\n sessionTopic: session.topic,\n },\n client\n );\n\n getWalletProviderRegistry(client).register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n }\n};\n","import { getDefaultClient, hasExtension } from '@dynamic-labs-sdk/client';\nimport { registerExtension } from '@dynamic-labs-sdk/client/core';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { recoverEvmWalletConnectWalletProviders } from '../recoverEvmWalletConnectWalletProviders';\n\nexport const WALLET_CONNECT_EVM_EXTENSION_KEY = 'walletConnectEvm';\n\n/** @notInstrumented */\nexport const addWalletConnectEvmExtension = async (\n client = getDefaultClient()\n): Promise<void> => {\n if (\n hasExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client);\n registerEvmNetworkProviderBuilder(client);\n\n await recoverEvmWalletConnectWalletProviders(client);\n};\n","import {\n type DynamicClient,\n type NetworkData,\n getNetworksData,\n} from '@dynamic-labs-sdk/client';\n\n/**\n * Returns the network configuration objects for the EVM networks configured\n * on the Dynamic client. Generic helper available to any EVM extension that\n * needs the full network metadata (RPC URLs, native currency, etc.) for the\n * configured EVM chain set — for instance, to build the `supportedNetworks`\n * map required by third-party SDKs such as MetaMask or Base Account.\n *\n * @param client - The Dynamic client whose project settings drive the result.\n * @notInstrumented\n */\nexport const getEvmNetworksData = (client: DynamicClient): NetworkData[] =>\n getNetworksData(client).filter((network) => network.chain === 'EVM');\n","import { CHAINS_INFO_MAP } from '@dynamic-labs-sdk/client/core';\n\nexport const evmApiChainName = CHAINS_INFO_MAP.EVM.apiChainName;\n\n/**\n * List of methods that may be requested from EVM wallet applications.\n *\n * Source: https://github.com/WalletConnect/walletconnect-monorepo/blob/v2.0/providers/ethereum-provider/src/EthereumProvider.ts\n */\nexport const evmMethods = [\n 'personal_sign',\n 'eth_sendTransaction',\n 'eth_accounts',\n 'eth_requestAccounts',\n 'eth_call',\n 'eth_getBalance',\n 'eth_sendRawTransaction',\n 'eth_sign',\n 'eth_signTransaction',\n 'eth_signTypedData',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v3',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v4',\n 'wallet_switchEthereumChain',\n 'wallet_addEthereumChain',\n 'wallet_getPermissions',\n 'wallet_requestPermissions',\n 'wallet_registerOnboarding',\n 'wallet_watchAsset',\n 'wallet_scanQRCode',\n 'wallet_sendCalls',\n 'wallet_getCapabilities',\n 'wallet_getCallsStatus',\n 'wallet_showCallsStatus',\n] as const;\n","import {\n assertDefined,\n assertNonEmptyArray,\n createSignInMessageStatement,\n getAppMetadata,\n getCore,\n getDefaultClient,\n getNonce,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WalletConnectConnectionResult } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n getSignClient,\n importWalletConnectAuthResponse,\n} from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { getEvmNetworksData } from '../../utils/getEvmNetworksData';\nimport { evmMethods } from '../consts';\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\n/**\n * Connects to a WalletConnect EVM wallet and verifies ownership through message signing.\n *\n * This function combines wallet connection and verification in a single step,\n * requiring the user to sign a message to prove wallet ownership before\n * the wallet account is added to their profile.\n *\n * If the wallet app does not support the WalletConnect authenticate method,\n * this prompts for connection and then verification as 2 separate steps.\n *\n * @see WalletConnect's docs on [session authentication](https://docs.reown.com/advanced/api/sign/dapp-usage#session-authenticate-with-recaps)\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns A promise that resolves to the connected and verified wallet account.\n * @notInstrumented\n */\nexport const connectAndVerifyWithWalletConnectEvm = async (\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n const core = getCore(client);\n\n const { appUniversalLink } = getAppMetadata(client);\n\n assertDefined(appUniversalLink, 'Universal link is not set');\n\n const url = new URL(appUniversalLink);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n /**\n * Customer enabled networks, with mainnet first if available. Read through\n * getNetworksData (via the EVM helper) rather than raw project settings so\n * client-side network transformers apply to the chains advertised in the\n * WalletConnect session.\n */\n const evmNetworks = getEvmNetworksData(client).sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertNonEmptyArray(evmNetworks, 'EVM networks not found');\n\n const caip2Networks = evmNetworks.map(\n (network) => `eip155:${network.networkId}`\n );\n\n /**\n * WalletConnect formats its own message for SIWE, so we need to provide the fields.\n * We later reconstruct what that message was so we can verify the signature in backend.\n */\n const nonce = await getNonce(client);\n\n /**\n * A WalletConnect connection request generates a URI and a promise.\n *\n * The URI must be handed to an external wallet application that will use it\n * to establish a connection via a WalletConnect relay server. Typically, this\n * is done by scanning a QR code or deep linking to the wallet application.\n *\n * The promise will resolve when the connection is established.\n */\n const { uri, response } = await signClient.authenticate({\n chainId: evmNetworks[0].networkId,\n chains: caip2Networks,\n domain: url.host,\n iat: new Date().toISOString(),\n methods: evmMethods as unknown as string[],\n nonce,\n requestId: core.environmentId,\n statement: createSignInMessageStatement(client),\n uri: url.toString(),\n });\n\n assertDefined(\n uri,\n 'Failed to establish WalletConnect session: no URI returned'\n );\n\n /**\n * Once the approval promise resolves, the WalletConnect session is established\n * between the wallet application and the dapp (this app).\n */\n const walletAccountsPromise = response().then((authResponse) =>\n importWalletConnectAuthResponse(\n {\n authResponse,\n chain: 'EVM',\n walletProviderBuilder: createWalletProviderFromEIP155Session,\n },\n client\n )\n );\n\n return { approval: () => walletAccountsPromise, uri };\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n assertNonEmptyArray,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WalletConnectConnectionResult } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n getSignClient,\n importWalletConnectSession,\n} from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { getEvmNetworksData } from '../../utils/getEvmNetworksData';\nimport { evmMethods } from '../consts';\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\ntype ConnectWithWalletConnectEvmParams = {\n /**\n * Whether this session's wallet accounts should be added to the dynamic's wallet accounts.\n */\n addToDynamicWalletAccounts?: boolean;\n};\n\n/** @notInstrumented */\nexport const connectWithWalletConnectEvm = async (\n { addToDynamicWalletAccounts = true }: ConnectWithWalletConnectEvmParams = {},\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n // Read through getNetworksData (via the EVM helper) rather than raw project\n // settings so client-side network transformers apply to the chains\n // advertised in the WalletConnect session.\n const evmNetworks = getEvmNetworksData(client);\n\n assertNonEmptyArray(evmNetworks, 'EVM networks not found');\n\n const walletConnectChains = evmNetworks.map(\n (network) => `eip155:${network.networkId}`\n );\n\n /**\n * A WalletConnect connection request generates a URI and a promise.\n *\n * The URI must be handed to an external wallet application that will use it\n * to establish a connection via a WalletConnect relay server. Typically, this\n * is done by scanning a QR code or deep linking to the wallet application.\n *\n * The promise will resolve when the connection is established.\n */\n const { approval, uri } = await signClient.connect({\n optionalNamespaces: {\n eip155: {\n chains: walletConnectChains,\n events: ['accountsChanged', 'chainChanged', 'disconnected'],\n methods: evmMethods as unknown as string[],\n },\n },\n });\n\n assertDefined(\n uri,\n 'Failed to establish WalletConnect session: no URI returned'\n );\n\n /**\n * Once the approval promise resolves, the WalletConnect session is established\n * between the wallet application and the dapp (this app).\n */\n const walletAccountsPromise = approval().then(async (session) => {\n assertDefined(\n session.namespaces.eip155,\n `WalletConnect session did not establish an EIP155 connection. Found instead: ${Object.keys(\n session.namespaces\n ).join(', ')}`\n );\n\n return importWalletConnectSession(\n {\n addToDynamicWalletAccounts,\n sessionTopic: session.topic,\n walletProviderBuilder: createWalletProviderFromEIP155Session,\n },\n client\n );\n });\n\n return { approval: () => walletAccountsPromise, uri };\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\n// TODO: on the v2 major release, move @dynamic-labs-sdk/wallet-connect and the\n// @walletconnect/* dependencies of this package to optional peer dependencies,\n// so apps that never connect external wallets don't install them at all.\n// The same applies to @dynamic-labs-sdk/solana.\nexport { addWalletConnectEvmExtension } from '../walletConnect/addWalletConnectEvmExtension';\nexport { connectAndVerifyWithWalletConnectEvm } from '../walletConnect/connectAndVerifyWithWalletConnectEvm';\nexport { connectWithWalletConnectEvm } from '../walletConnect/connectWithWalletConnectEvm';\nexport type { WalletConnectEvmWalletProvider } from '../walletConnect/walletConnectEvmWalletProvider.types';\n"],"mappings":";;;;;;;;;;;;;;;;;AAqCA,MAAMA,+BAAyC;CAC7C;CACA;CAEA;CACD;;AAGD,MAAa,wCAAwC,OACnD,EAAE,gBACF,WAC4C;CAC5C,MAAM,aAAa,MAAM,cAAc,OAAO;CAE9C,MAAM,EAAE,WAAW,QAAQ,OAAO;CAElC,MAAM,mBAAmB;EACvB,MAAM,UAAU,WAAW,QAAQ,IAAI,aAAa;AAEpD,MAAI,CAAC,SAAS;AAGZ,YAAS,CAAC,YAAY,OAAU;AAEhC,SAAM,IAAI,+BAA+B;IACvC;IACA,mBAAmB;IACpB,CAAC;;AAGJ,SAAO;;CAGT,MAAM,cAAc,YAAY,CAAC,KAAK,SAAS;CAE/C,MAAM,eAAe;CAErB,MAAM,qBAAqB,mBAAmB;CAE9C,MAAM,MAAM,wBAAwB;EAClC,OAAO;EACP;EACA,QAAQ;EACR;EACD,CAAC;CAEF,MAAMC,qBACJ,YAAY;AAEV,cAAY;AAEZ,SAAO,MAAM,wCAAwC;GACnD;GACA,mBAAmB;GACpB,CAAC;;CAGN,MAAMC,sBACJ,OAAO,EAAE,gBAAgB;AAEvB,cAAY;AAEZ,QAAM,uCAAuC;GAC3C;GACA;GACA,mBAAmB;GACpB,CAAC;;CAGN,MAAMC,UAAqD,OAGzD,SACe;EACf,MAAM,EAAE,cAAc,MAAM,oBAAoB;EAEhD,MAAM,UAAU,YAAY;AAE5B,MAAI,6BAA6B,SAAS,KAAK,OAAO,CACpD,WACE;GACE,MAAM;IACJ,gBAAgB,QAAQ,KAAK;IAC7B,mBAAmB;IACpB;GACD,OAAO;GACR,EACD,OACD;AAGH,MAAI;AAQF,UAPe,MAAM,WAAW,QAAW;IAEzC,SAAS,GAAG,aAAa,GAAG;IAC5B,SAAS;IACT,OAAO;IACR,CAAC;WAGK,KAAK;AACZ,UAAO,MACL,4EACA;IAAE,OAAO;IAAK,QAAQ,KAAK;IAAQ;IAAW,CAC/C;AAID,OAAI,KAAK,WAAW,cAClB,QAAO,KAAK,OAAO,UAAU,CAAC,SAAS,GAAG;AAE5C,SAAM;;;;;;CAOV,MAAMC,0BACJ,YAAY,SAAS;CAEvB,MAAMC,cAA6D,OAAO,EACxE,SACA,oBACI;EACJ,MAAM,SAAS,CAAC,QAAQ;AAExB,MAAI,cACF,QAAO,KAAK,cAAc,QAAQ;AAUpC,SAAO,EAAE,WAFS,MALK,QAAgB;GACrC,QAAQ;GACR;GACD,CAAC,EAIkB;;CAGtB,MAAMC,wBACJ,YAAY;AAOV,SAAO,EAAE,WANS,iBAChB,YAAY,CAAC,WAAW,cAAc,SAAS,KAC5C,YAAY,iBAAiB,QAAQ,CAAC,QACxC,CACF,CAAC,KAAK,YAAYC,WAAe,QAAQ,CAAC,EAEvB;;CAGxB,MAAMC,uBACH,EAAE,cAAcD,WAAe,QAAQ;CAE1C,MAAM,EAAE,qBAAqB,oBAC3B,uCAAuC;EACrC,eAAeA;EACf;EACA;EACA;EACA;EACD,CAAC;CAEJ,MAAME,UAEF,YAAY;AACd,uBAAqB;AACrB,MAAI;AACF,SAAM,WAAW,WAAW;IAC1B,QAAQ,WAAW;IACnB,OAAO;IACR,CAAC;AAIF,GAF+B,0BAA0B,OAAO,CAEzC,WAAW,IAAI;WAC/B,KAAK;AACZ,WAAQ,OAAO,CAAC,OAAO,MACrB,IAAI,IAAI,kCACR,IACD;;;AAIL,QAAO;EACL,OAAO;EACP,qBAAqB,SAAS,sBAAsB,MAAM,OAAO;EACjE;EACA;EACA,IAAI,SAAS;AACX,UAAO,iBAAiB;;EAE1B,yBAAyB,SAAS,0BAA0B,MAAM,OAAO;EACzE,0BAA0B,SACxB,2BAA2B,MAAM,OAAO;EAC1C;EACA;EACA;EACA;EACA,UAAU,6BAA6B,YAAY;EACnD;EACA,UAAU;GACR;GACA,MAAM,YAAY,CAAC,KAAK,SAAS,MAAM;GACxC;EACD;EACA;EACA;EACA;EACA,iBAAiB,SAAS,kBAAkB,MAAM,OAAO;EACzD;EACD;;;;;;AC9OH,MAAa,yCAAyC,OACpD,WACkB;AAClB,OAAM,uBAAuB,OAAO;;;;CAOpC,MAAM,YALa,MAAM,cAAc,OAAO,EAKlB,QAAQ,QAAQ;CAE5C,MAAM,cAAc,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;AAEjD,MAAK,MAAM,WAAW,UAAU;AAC9B,MAAI,EAAE,YAAY,QAAQ,YACxB;AAGF,MAAI,QAAQ,UAAU,YACpB;EAGF,MAAM,iBAAiB,MAAM,sCAC3B,EACE,cAAc,QAAQ,OACvB,EACD,OACD;AAED,4BAA0B,OAAO,CAAC,SAAS;GACzC,UAAU,uBAAuB;GACjC;GACD,CAAC;;;;;;ACtCN,MAAa,mCAAmC;;AAGhD,MAAa,+BAA+B,OAC1C,SAAS,kBAAkB,KACT;AAClB,KACE,aAAa,EAAE,cAAc,kCAAkC,EAAE,OAAO,CAExE;AAGF,mBAAkB,EAAE,cAAc,kCAAkC,EAAE,OAAO;AAC7E,mCAAkC,OAAO;AAEzC,OAAM,uCAAuC,OAAO;;;;;;;;;;;;;;;ACLtD,MAAa,sBAAsB,WACjC,gBAAgB,OAAO,CAAC,QAAQ,YAAY,QAAQ,UAAU,MAAM;;;;ACftE,MAAa,kBAAkB,gBAAgB,IAAI;;;;;;AAOnD,MAAa,aAAa;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;;;;;;;;;;;;;;ACDD,MAAa,uCAAuC,OAClD,SAASC,oBAAkB,KACgB;CAC3C,MAAM,aAAa,MAAM,cAAc,OAAO;CAC9C,MAAM,OAAO,QAAQ,OAAO;CAE5B,MAAM,EAAE,qBAAqB,eAAe,OAAO;AAEnD,eAAc,kBAAkB,4BAA4B;CAE5D,MAAM,MAAM,IAAI,IAAI,iBAAiB;AAErC,eAAc,OAAO,iBAAiB,+BAA+B;;;;;;;CAQrE,MAAM,cAAc,mBAAmB,OAAO,CAAC,MAAM,GAAG,MAAM;AAC5D,MAAI,EAAE,cAAc,IAAK,QAAO;AAChC,MAAI,EAAE,cAAc,IAAK,QAAO;AAEhC,SAAO;GACP;AAEF,qBAAoB,aAAa,yBAAyB;CAE1D,MAAM,gBAAgB,YAAY,KAC/B,YAAY,UAAU,QAAQ,YAChC;;;;;CAMD,MAAM,QAAQ,MAAM,SAAS,OAAO;;;;;;;;;;CAWpC,MAAM,EAAE,KAAK,aAAa,MAAM,WAAW,aAAa;EACtD,SAAS,YAAY,GAAG;EACxB,QAAQ;EACR,QAAQ,IAAI;EACZ,sBAAK,IAAI,MAAM,EAAC,aAAa;EAC7B,SAAS;EACT;EACA,WAAW,KAAK;EAChB,WAAW,6BAA6B,OAAO;EAC/C,KAAK,IAAI,UAAU;EACpB,CAAC;AAEF,eACE,KACA,6DACD;;;;;CAMD,MAAM,wBAAwB,UAAU,CAAC,MAAM,iBAC7C,gCACE;EACE;EACA,OAAO;EACP,uBAAuB;EACxB,EACD,OACD,CACF;AAED,QAAO;EAAE,gBAAgB;EAAuB;EAAK;;;;;;AC3FvD,MAAa,8BAA8B,OACzC,EAAE,6BAA6B,SAA4C,EAAE,EAC7E,SAAS,kBAAkB,KACgB;CAC3C,MAAM,aAAa,MAAM,cAAc,OAAO;AAE9C,eAAc,OAAO,iBAAiB,+BAA+B;CAKrE,MAAM,cAAc,mBAAmB,OAAO;AAE9C,qBAAoB,aAAa,yBAAyB;CAE1D,MAAM,sBAAsB,YAAY,KACrC,YAAY,UAAU,QAAQ,YAChC;;;;;;;;;;CAWD,MAAM,EAAE,UAAU,QAAQ,MAAM,WAAW,QAAQ,EACjD,oBAAoB,EAClB,QAAQ;EACN,QAAQ;EACR,QAAQ;GAAC;GAAmB;GAAgB;GAAe;EAC3D,SAAS;EACV,EACF,EACF,CAAC;AAEF,eACE,KACA,6DACD;;;;;CAMD,MAAM,wBAAwB,UAAU,CAAC,KAAK,OAAO,YAAY;AAC/D,gBACE,QAAQ,WAAW,QACnB,gFAAgF,OAAO,KACrF,QAAQ,WACT,CAAC,KAAK,KAAK,GACb;AAED,SAAO,2BACL;GACE;GACA,cAAc,QAAQ;GACtB,uBAAuB;GACxB,EACD,OACD;GACD;AAEF,QAAO;EAAE,gBAAgB;EAAuB;EAAK;;;;;AClFvD,qBAAqBC,MAAaC,QAAe"}
1
+ {"version":3,"file":"walletConnect.esm.js","names":["methodsThatRequireUserAction: string[]","getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId']","switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork']","request: WalletConnectEvmWalletProvider['request']","disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount']","signMessage: WalletConnectEvmWalletProvider['signMessage']","getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses']","viemGetAddress","formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress']","destroy: NonNullable<\n WalletConnectEvmWalletProvider['destroy']\n >","getDefaultClient","packageName","packageVersion"],"sources":["../src/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.ts","../src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts","../src/utils/getEvmNetworksData/getEvmNetworksData.ts","../src/walletConnect/consts.ts","../src/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.ts","../src/walletConnect/registerWalletConnectEvmUriConnectionStarter/registerWalletConnectEvmUriConnectionStarter.ts","../src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.ts","../src/walletConnect/connectAndVerifyWithWalletConnectEvm/connectAndVerifyWithWalletConnectEvm.ts","../src/exports/walletConnect.ts"],"sourcesContent":["import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n emitEvent,\n filterDuplicates,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n getCore,\n getWalletProviderRegistry,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { SessionClosedUnexpectedlyError } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n createWalletConnectSessionEventEmitter,\n getSignClient,\n splitCaip10Token,\n} from '@dynamic-labs-sdk/wallet-connect/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { SDK_ERRORS } from '@walletconnect/utils';\nimport { getAddress as viemGetAddress } from 'viem';\n\nimport type { EIP1193ProviderRequest } from '../../EvmWalletProvider.types';\nimport { evmConfirmTransaction } from '../../utils/evmConfirmTransaction';\nimport { evmExecuteSwapTransaction } from '../../utils/evmExecuteSwapTransaction';\nimport { evmExecuteYieldTransaction } from '../../utils/evmExecuteYieldTransaction';\nimport { evmTransferAmount } from '../../utils/evmTransferAmount';\nimport type { evmMethods } from '../consts';\nimport type { WalletConnectEvmWalletProvider } from '../walletConnectEvmWalletProvider.types';\n\ntype CreateWalletProviderFromEIP155SessionParams = {\n sessionTopic: string;\n};\n\n/**\n * The list of ethereum request methods that require user action.\n * We will raise a user action requested event for these methods.\n */\nconst methodsThatRequireUserAction: string[] = [\n 'personal_sign',\n 'eth_sendTransaction',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v4',\n] satisfies (typeof evmMethods)[number][];\n\n/** @notInstrumented */\nexport const createWalletProviderFromEIP155Session = async (\n { sessionTopic }: CreateWalletProviderFromEIP155SessionParams,\n client: DynamicClient\n): Promise<WalletConnectEvmWalletProvider> => {\n const signClient = await getSignClient(client);\n\n const { logger } = getCore(client);\n\n const getSession = () => {\n const session = signClient.session.get(sessionTopic);\n\n if (!session) {\n // destroy never throws (it logs internally), but explicit .catch makes\n // the fire-and-forget intent obvious and silences static analyzers.\n destroy().catch(() => undefined);\n\n throw new SessionClosedUnexpectedlyError({\n sessionTopic,\n walletDisplayName: displayName,\n });\n }\n\n return session;\n };\n\n const displayName = getSession().peer.metadata.name;\n\n const namespaceKey = 'eip155';\n\n const walletProviderType = WalletProviderEnum.WalletConnect;\n\n const key = formatWalletProviderKey({\n chain: 'EVM',\n displayName,\n suffix: sessionTopic,\n walletProviderType,\n });\n\n const getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId'] =\n async () => {\n // Assert the session is still valid\n getSession();\n\n return await getActiveNetworkIdFromLastKnownRegistry({\n client,\n walletProviderKey: key,\n });\n };\n\n const switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) => {\n // Assert the session is still valid\n getSession();\n\n await switchActiveNetworkInLastKnownRegistry({\n client,\n networkId,\n walletProviderKey: key,\n });\n };\n\n const request: WalletConnectEvmWalletProvider['request'] = async <\n T = unknown\n >(\n args: EIP1193ProviderRequest\n ): Promise<T> => {\n const { networkId } = await getActiveNetworkId();\n\n const session = getSession();\n\n if (methodsThatRequireUserAction.includes(args.method)) {\n emitEvent(\n {\n args: {\n walletMetadata: session.peer.metadata,\n walletProviderKey: key,\n },\n event: 'walletConnectUserActionRequested',\n },\n client\n );\n }\n\n try {\n const result = await signClient.request<T>({\n // signClient expects the chainId to be in CAIP-2 format \"eip155:<networkId>\"\n chainId: `${namespaceKey}:${networkId}`,\n request: args,\n topic: sessionTopic,\n });\n\n return result;\n } catch (err) {\n logger.debug(\n '[createWalletProviderFromEIP155Session] Error requesting from signClient',\n { error: err, method: args.method, networkId }\n );\n\n // WC sessions don't always advertise eth_chainId in their namespaces.methods,\n // so the wallet may reject it. Fall back to the locally known networkId.\n if (args.method === 'eth_chainId') {\n return `0x${Number(networkId).toString(16)}` as never;\n }\n throw err;\n }\n };\n\n /**\n * We actually clear up the entire WC session and its wallet provider\n */\n const disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount'] =\n async () => destroy();\n\n const signMessage: WalletConnectEvmWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n const params = [message];\n\n if (walletAccount) {\n params.push(walletAccount.address);\n }\n\n const requestPromise = request<string>({\n method: 'personal_sign',\n params,\n });\n\n const signature = await requestPromise;\n\n return { signature };\n };\n\n const getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses'] =\n async () => {\n const addresses = filterDuplicates(\n getSession().namespaces[namespaceKey].accounts.map(\n (account) => splitCaip10Token(account).address\n )\n ).map((address) => viemGetAddress(address));\n\n return { addresses };\n };\n\n const formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress'] =\n ({ address }) => viemGetAddress(address);\n\n const { cleanupEventEmitter, getEventEmitter } =\n createWalletConnectSessionEventEmitter({\n formatAddress: viemGetAddress,\n getSession,\n namespaceKey,\n sessionTopic,\n signClient,\n });\n\n const destroy: NonNullable<\n WalletConnectEvmWalletProvider['destroy']\n > = async () => {\n cleanupEventEmitter();\n try {\n await signClient.disconnect({\n reason: SDK_ERRORS.USER_DISCONNECTED,\n topic: sessionTopic,\n });\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n walletProviderRegistry.unregister(key);\n } catch (err) {\n getCore(client).logger.error(\n `[${key}] destroy: remote signal failed`,\n err\n );\n }\n };\n\n return {\n chain: 'EVM',\n confirmTransaction: (args) => evmConfirmTransaction(args, client),\n destroy,\n disconnectWalletAccount,\n get events() {\n return getEventEmitter();\n },\n executeSwapTransaction: (args) => evmExecuteSwapTransaction(args, client),\n executeYieldTransaction: (args) =>\n evmExecuteYieldTransaction(args, client),\n formatWalletAddress,\n getActiveNetworkId,\n getConnectedAddresses,\n getSession,\n groupKey: formatWalletProviderGroupKey(displayName),\n key,\n metadata: {\n displayName,\n icon: getSession().peer.metadata.icons[0],\n },\n namespaceKey,\n request,\n signMessage,\n switchActiveNetwork,\n transferAmount: (args) => evmTransferAmount(args, client),\n walletProviderType,\n };\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n WalletProviderPriority,\n getWalletProviderRegistry,\n waitForProjectSettings,\n} from '@dynamic-labs-sdk/client/core';\nimport { getSignClient } from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\n/** @notInstrumented */\nexport const recoverEvmWalletConnectWalletProviders = async (\n client: DynamicClient\n): Promise<void> => {\n await waitForProjectSettings(client);\n\n const signClient = await getSignClient(client);\n\n /**\n * Recreate the wallet providers for all existing EVM sessions\n */\n const sessions = signClient.session.getAll();\n\n const currentTime = Math.floor(Date.now() / 1000);\n\n for (const session of sessions) {\n if (!('eip155' in session.namespaces)) {\n continue;\n }\n\n if (session.expiry <= currentTime) {\n continue;\n }\n\n const walletProvider = await createWalletProviderFromEIP155Session(\n {\n sessionTopic: session.topic,\n },\n client\n );\n\n getWalletProviderRegistry(client).register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n }\n};\n","import {\n type DynamicClient,\n type NetworkData,\n getNetworksData,\n} from '@dynamic-labs-sdk/client';\n\n/**\n * Returns the network configuration objects for the EVM networks configured\n * on the Dynamic client. Generic helper available to any EVM extension that\n * needs the full network metadata (RPC URLs, native currency, etc.) for the\n * configured EVM chain set — for instance, to build the `supportedNetworks`\n * map required by third-party SDKs such as MetaMask or Base Account.\n *\n * @param client - The Dynamic client whose project settings drive the result.\n * @notInstrumented\n */\nexport const getEvmNetworksData = (client: DynamicClient): NetworkData[] =>\n getNetworksData(client).filter((network) => network.chain === 'EVM');\n","import { CHAINS_INFO_MAP } from '@dynamic-labs-sdk/client/core';\n\nexport const evmApiChainName = CHAINS_INFO_MAP.EVM.apiChainName;\n\n/**\n * List of methods that may be requested from EVM wallet applications.\n *\n * Source: https://github.com/WalletConnect/walletconnect-monorepo/blob/v2.0/providers/ethereum-provider/src/EthereumProvider.ts\n */\nexport const evmMethods = [\n 'personal_sign',\n 'eth_sendTransaction',\n 'eth_accounts',\n 'eth_requestAccounts',\n 'eth_call',\n 'eth_getBalance',\n 'eth_sendRawTransaction',\n 'eth_sign',\n 'eth_signTransaction',\n 'eth_signTypedData',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v3',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v4',\n 'wallet_switchEthereumChain',\n 'wallet_addEthereumChain',\n 'wallet_getPermissions',\n 'wallet_requestPermissions',\n 'wallet_registerOnboarding',\n 'wallet_watchAsset',\n 'wallet_scanQRCode',\n 'wallet_sendCalls',\n 'wallet_getCapabilities',\n 'wallet_getCallsStatus',\n 'wallet_showCallsStatus',\n] as const;\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n assertNonEmptyArray,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WalletConnectConnectionResult } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n getSignClient,\n importWalletConnectSession,\n} from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { getEvmNetworksData } from '../../utils/getEvmNetworksData';\nimport { evmMethods } from '../consts';\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\ntype ConnectWithWalletConnectEvmParams = {\n /**\n * Whether this session's wallet accounts should be added to the dynamic's wallet accounts.\n */\n addToDynamicWalletAccounts?: boolean;\n};\n\n/** @notInstrumented */\nexport const connectWithWalletConnectEvm = async (\n { addToDynamicWalletAccounts = true }: ConnectWithWalletConnectEvmParams = {},\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n // Read through getNetworksData (via the EVM helper) rather than raw project\n // settings so client-side network transformers apply to the chains\n // advertised in the WalletConnect session.\n const evmNetworks = getEvmNetworksData(client);\n\n assertNonEmptyArray(evmNetworks, 'EVM networks not found');\n\n const walletConnectChains = evmNetworks.map(\n (network) => `eip155:${network.networkId}`\n );\n\n /**\n * A WalletConnect connection request generates a URI and a promise.\n *\n * The URI must be handed to an external wallet application that will use it\n * to establish a connection via a WalletConnect relay server. Typically, this\n * is done by scanning a QR code or deep linking to the wallet application.\n *\n * The promise will resolve when the connection is established.\n */\n const { approval, uri } = await signClient.connect({\n optionalNamespaces: {\n eip155: {\n chains: walletConnectChains,\n events: ['accountsChanged', 'chainChanged', 'disconnected'],\n methods: evmMethods as unknown as string[],\n },\n },\n });\n\n assertDefined(\n uri,\n 'Failed to establish WalletConnect session: no URI returned'\n );\n\n /**\n * Once the approval promise resolves, the WalletConnect session is established\n * between the wallet application and the dapp (this app).\n */\n const walletAccountsPromise = approval().then(async (session) => {\n assertDefined(\n session.namespaces.eip155,\n `WalletConnect session did not establish an EIP155 connection. Found instead: ${Object.keys(\n session.namespaces\n ).join(', ')}`\n );\n\n return importWalletConnectSession(\n {\n addToDynamicWalletAccounts,\n sessionTopic: session.topic,\n walletProviderBuilder: createWalletProviderFromEIP155Session,\n },\n client\n );\n });\n\n return { approval: () => walletAccountsPromise, uri };\n};\n","import { type DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getUriConnectionStarterRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { connectWithWalletConnectEvm } from '../connectWithWalletConnectEvm';\n\n/**\n * Registers the WalletConnect EVM URI pairing with the client, so higher level\n * connection APIs can mint a WalletConnect URI for EVM without depending on\n * this package.\n *\n * @example\n * ```ts\n * registerWalletConnectEvmUriConnectionStarter(client);\n * ```\n *\n * @param client - The Dynamic client instance to register the starter with.\n * @returns Nothing.\n * @see connectWithWalletConnectEvm\n * @see getUriConnectionStarterRegistry\n * @notInstrumented\n */\nexport const registerWalletConnectEvmUriConnectionStarter = (\n client: DynamicClient\n): void => {\n getUriConnectionStarterRegistry(client).register({\n chain: 'EVM',\n start: ({ addToDynamicWalletAccounts }) =>\n connectWithWalletConnectEvm({ addToDynamicWalletAccounts }, client),\n type: 'walletConnect',\n });\n};\n","import { getDefaultClient, hasExtension } from '@dynamic-labs-sdk/client';\nimport { registerExtension } from '@dynamic-labs-sdk/client/core';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { recoverEvmWalletConnectWalletProviders } from '../recoverEvmWalletConnectWalletProviders';\nimport { registerWalletConnectEvmUriConnectionStarter } from '../registerWalletConnectEvmUriConnectionStarter';\n\nexport const WALLET_CONNECT_EVM_EXTENSION_KEY = 'walletConnectEvm';\n\n/** @notInstrumented */\nexport const addWalletConnectEvmExtension = async (\n client = getDefaultClient()\n): Promise<void> => {\n if (\n hasExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client);\n registerEvmNetworkProviderBuilder(client);\n registerWalletConnectEvmUriConnectionStarter(client);\n\n await recoverEvmWalletConnectWalletProviders(client);\n};\n","import {\n assertDefined,\n assertNonEmptyArray,\n createSignInMessageStatement,\n getAppMetadata,\n getCore,\n getDefaultClient,\n getNonce,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WalletConnectConnectionResult } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n getSignClient,\n importWalletConnectAuthResponse,\n} from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { getEvmNetworksData } from '../../utils/getEvmNetworksData';\nimport { evmMethods } from '../consts';\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\n/**\n * Connects to a WalletConnect EVM wallet and verifies ownership through message signing.\n *\n * This function combines wallet connection and verification in a single step,\n * requiring the user to sign a message to prove wallet ownership before\n * the wallet account is added to their profile.\n *\n * If the wallet app does not support the WalletConnect authenticate method,\n * this prompts for connection and then verification as 2 separate steps.\n *\n * @see WalletConnect's docs on [session authentication](https://docs.reown.com/advanced/api/sign/dapp-usage#session-authenticate-with-recaps)\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns A promise that resolves to the connected and verified wallet account.\n * @notInstrumented\n */\nexport const connectAndVerifyWithWalletConnectEvm = async (\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n const core = getCore(client);\n\n const { appUniversalLink } = getAppMetadata(client);\n\n assertDefined(appUniversalLink, 'Universal link is not set');\n\n const url = new URL(appUniversalLink);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n /**\n * Customer enabled networks, with mainnet first if available. Read through\n * getNetworksData (via the EVM helper) rather than raw project settings so\n * client-side network transformers apply to the chains advertised in the\n * WalletConnect session.\n */\n const evmNetworks = getEvmNetworksData(client).sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertNonEmptyArray(evmNetworks, 'EVM networks not found');\n\n const caip2Networks = evmNetworks.map(\n (network) => `eip155:${network.networkId}`\n );\n\n /**\n * WalletConnect formats its own message for SIWE, so we need to provide the fields.\n * We later reconstruct what that message was so we can verify the signature in backend.\n */\n const nonce = await getNonce(client);\n\n /**\n * A WalletConnect connection request generates a URI and a promise.\n *\n * The URI must be handed to an external wallet application that will use it\n * to establish a connection via a WalletConnect relay server. Typically, this\n * is done by scanning a QR code or deep linking to the wallet application.\n *\n * The promise will resolve when the connection is established.\n */\n const { uri, response } = await signClient.authenticate({\n chainId: evmNetworks[0].networkId,\n chains: caip2Networks,\n domain: url.host,\n iat: new Date().toISOString(),\n methods: evmMethods as unknown as string[],\n nonce,\n requestId: core.environmentId,\n statement: createSignInMessageStatement(client),\n uri: url.toString(),\n });\n\n assertDefined(\n uri,\n 'Failed to establish WalletConnect session: no URI returned'\n );\n\n /**\n * Once the approval promise resolves, the WalletConnect session is established\n * between the wallet application and the dapp (this app).\n */\n const walletAccountsPromise = response().then((authResponse) =>\n importWalletConnectAuthResponse(\n {\n authResponse,\n chain: 'EVM',\n walletProviderBuilder: createWalletProviderFromEIP155Session,\n },\n client\n )\n );\n\n return { approval: () => walletAccountsPromise, uri };\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\n// TODO: on the v2 major release, move @dynamic-labs-sdk/wallet-connect and the\n// @walletconnect/* dependencies of this package to optional peer dependencies,\n// so apps that never connect external wallets don't install them at all.\n// The same applies to @dynamic-labs-sdk/solana.\nexport { addWalletConnectEvmExtension } from '../walletConnect/addWalletConnectEvmExtension';\nexport { connectAndVerifyWithWalletConnectEvm } from '../walletConnect/connectAndVerifyWithWalletConnectEvm';\nexport { connectWithWalletConnectEvm } from '../walletConnect/connectWithWalletConnectEvm';\nexport type { WalletConnectEvmWalletProvider } from '../walletConnect/walletConnectEvmWalletProvider.types';\n"],"mappings":";;;;;;;;;;;;;;;;;AAqCA,MAAMA,+BAAyC;CAC7C;CACA;CAEA;CACD;;AAGD,MAAa,wCAAwC,OACnD,EAAE,gBACF,WAC4C;CAC5C,MAAM,aAAa,MAAM,cAAc,OAAO;CAE9C,MAAM,EAAE,WAAW,QAAQ,OAAO;CAElC,MAAM,mBAAmB;EACvB,MAAM,UAAU,WAAW,QAAQ,IAAI,aAAa;AAEpD,MAAI,CAAC,SAAS;AAGZ,YAAS,CAAC,YAAY,OAAU;AAEhC,SAAM,IAAI,+BAA+B;IACvC;IACA,mBAAmB;IACpB,CAAC;;AAGJ,SAAO;;CAGT,MAAM,cAAc,YAAY,CAAC,KAAK,SAAS;CAE/C,MAAM,eAAe;CAErB,MAAM,qBAAqB,mBAAmB;CAE9C,MAAM,MAAM,wBAAwB;EAClC,OAAO;EACP;EACA,QAAQ;EACR;EACD,CAAC;CAEF,MAAMC,qBACJ,YAAY;AAEV,cAAY;AAEZ,SAAO,MAAM,wCAAwC;GACnD;GACA,mBAAmB;GACpB,CAAC;;CAGN,MAAMC,sBACJ,OAAO,EAAE,gBAAgB;AAEvB,cAAY;AAEZ,QAAM,uCAAuC;GAC3C;GACA;GACA,mBAAmB;GACpB,CAAC;;CAGN,MAAMC,UAAqD,OAGzD,SACe;EACf,MAAM,EAAE,cAAc,MAAM,oBAAoB;EAEhD,MAAM,UAAU,YAAY;AAE5B,MAAI,6BAA6B,SAAS,KAAK,OAAO,CACpD,WACE;GACE,MAAM;IACJ,gBAAgB,QAAQ,KAAK;IAC7B,mBAAmB;IACpB;GACD,OAAO;GACR,EACD,OACD;AAGH,MAAI;AAQF,UAPe,MAAM,WAAW,QAAW;IAEzC,SAAS,GAAG,aAAa,GAAG;IAC5B,SAAS;IACT,OAAO;IACR,CAAC;WAGK,KAAK;AACZ,UAAO,MACL,4EACA;IAAE,OAAO;IAAK,QAAQ,KAAK;IAAQ;IAAW,CAC/C;AAID,OAAI,KAAK,WAAW,cAClB,QAAO,KAAK,OAAO,UAAU,CAAC,SAAS,GAAG;AAE5C,SAAM;;;;;;CAOV,MAAMC,0BACJ,YAAY,SAAS;CAEvB,MAAMC,cAA6D,OAAO,EACxE,SACA,oBACI;EACJ,MAAM,SAAS,CAAC,QAAQ;AAExB,MAAI,cACF,QAAO,KAAK,cAAc,QAAQ;AAUpC,SAAO,EAAE,WAFS,MALK,QAAgB;GACrC,QAAQ;GACR;GACD,CAAC,EAIkB;;CAGtB,MAAMC,wBACJ,YAAY;AAOV,SAAO,EAAE,WANS,iBAChB,YAAY,CAAC,WAAW,cAAc,SAAS,KAC5C,YAAY,iBAAiB,QAAQ,CAAC,QACxC,CACF,CAAC,KAAK,YAAYC,WAAe,QAAQ,CAAC,EAEvB;;CAGxB,MAAMC,uBACH,EAAE,cAAcD,WAAe,QAAQ;CAE1C,MAAM,EAAE,qBAAqB,oBAC3B,uCAAuC;EACrC,eAAeA;EACf;EACA;EACA;EACA;EACD,CAAC;CAEJ,MAAME,UAEF,YAAY;AACd,uBAAqB;AACrB,MAAI;AACF,SAAM,WAAW,WAAW;IAC1B,QAAQ,WAAW;IACnB,OAAO;IACR,CAAC;AAIF,GAF+B,0BAA0B,OAAO,CAEzC,WAAW,IAAI;WAC/B,KAAK;AACZ,WAAQ,OAAO,CAAC,OAAO,MACrB,IAAI,IAAI,kCACR,IACD;;;AAIL,QAAO;EACL,OAAO;EACP,qBAAqB,SAAS,sBAAsB,MAAM,OAAO;EACjE;EACA;EACA,IAAI,SAAS;AACX,UAAO,iBAAiB;;EAE1B,yBAAyB,SAAS,0BAA0B,MAAM,OAAO;EACzE,0BAA0B,SACxB,2BAA2B,MAAM,OAAO;EAC1C;EACA;EACA;EACA;EACA,UAAU,6BAA6B,YAAY;EACnD;EACA,UAAU;GACR;GACA,MAAM,YAAY,CAAC,KAAK,SAAS,MAAM;GACxC;EACD;EACA;EACA;EACA;EACA,iBAAiB,SAAS,kBAAkB,MAAM,OAAO;EACzD;EACD;;;;;;AC9OH,MAAa,yCAAyC,OACpD,WACkB;AAClB,OAAM,uBAAuB,OAAO;;;;CAOpC,MAAM,YALa,MAAM,cAAc,OAAO,EAKlB,QAAQ,QAAQ;CAE5C,MAAM,cAAc,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;AAEjD,MAAK,MAAM,WAAW,UAAU;AAC9B,MAAI,EAAE,YAAY,QAAQ,YACxB;AAGF,MAAI,QAAQ,UAAU,YACpB;EAGF,MAAM,iBAAiB,MAAM,sCAC3B,EACE,cAAc,QAAQ,OACvB,EACD,OACD;AAED,4BAA0B,OAAO,CAAC,SAAS;GACzC,UAAU,uBAAuB;GACjC;GACD,CAAC;;;;;;;;;;;;;;;;AC5BN,MAAa,sBAAsB,WACjC,gBAAgB,OAAO,CAAC,QAAQ,YAAY,QAAQ,UAAU,MAAM;;;;ACftE,MAAa,kBAAkB,gBAAgB,IAAI;;;;;;AAOnD,MAAa,aAAa;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;ACZD,MAAa,8BAA8B,OACzC,EAAE,6BAA6B,SAA4C,EAAE,EAC7E,SAAS,kBAAkB,KACgB;CAC3C,MAAM,aAAa,MAAM,cAAc,OAAO;AAE9C,eAAc,OAAO,iBAAiB,+BAA+B;CAKrE,MAAM,cAAc,mBAAmB,OAAO;AAE9C,qBAAoB,aAAa,yBAAyB;CAE1D,MAAM,sBAAsB,YAAY,KACrC,YAAY,UAAU,QAAQ,YAChC;;;;;;;;;;CAWD,MAAM,EAAE,UAAU,QAAQ,MAAM,WAAW,QAAQ,EACjD,oBAAoB,EAClB,QAAQ;EACN,QAAQ;EACR,QAAQ;GAAC;GAAmB;GAAgB;GAAe;EAC3D,SAAS;EACV,EACF,EACF,CAAC;AAEF,eACE,KACA,6DACD;;;;;CAMD,MAAM,wBAAwB,UAAU,CAAC,KAAK,OAAO,YAAY;AAC/D,gBACE,QAAQ,WAAW,QACnB,gFAAgF,OAAO,KACrF,QAAQ,WACT,CAAC,KAAK,KAAK,GACb;AAED,SAAO,2BACL;GACE;GACA,cAAc,QAAQ;GACtB,uBAAuB;GACxB,EACD,OACD;GACD;AAEF,QAAO;EAAE,gBAAgB;EAAuB;EAAK;;;;;;;;;;;;;;;;;;;;;ACnEvD,MAAa,gDACX,WACS;AACT,iCAAgC,OAAO,CAAC,SAAS;EAC/C,OAAO;EACP,QAAQ,EAAE,iCACR,4BAA4B,EAAE,4BAA4B,EAAE,OAAO;EACrE,MAAM;EACP,CAAC;;;;;ACtBJ,MAAa,mCAAmC;;AAGhD,MAAa,+BAA+B,OAC1C,SAAS,kBAAkB,KACT;AAClB,KACE,aAAa,EAAE,cAAc,kCAAkC,EAAE,OAAO,CAExE;AAGF,mBAAkB,EAAE,cAAc,kCAAkC,EAAE,OAAO;AAC7E,mCAAkC,OAAO;AACzC,8CAA6C,OAAO;AAEpD,OAAM,uCAAuC,OAAO;;;;;;;;;;;;;;;;;;;;ACWtD,MAAa,uCAAuC,OAClD,SAASC,oBAAkB,KACgB;CAC3C,MAAM,aAAa,MAAM,cAAc,OAAO;CAC9C,MAAM,OAAO,QAAQ,OAAO;CAE5B,MAAM,EAAE,qBAAqB,eAAe,OAAO;AAEnD,eAAc,kBAAkB,4BAA4B;CAE5D,MAAM,MAAM,IAAI,IAAI,iBAAiB;AAErC,eAAc,OAAO,iBAAiB,+BAA+B;;;;;;;CAQrE,MAAM,cAAc,mBAAmB,OAAO,CAAC,MAAM,GAAG,MAAM;AAC5D,MAAI,EAAE,cAAc,IAAK,QAAO;AAChC,MAAI,EAAE,cAAc,IAAK,QAAO;AAEhC,SAAO;GACP;AAEF,qBAAoB,aAAa,yBAAyB;CAE1D,MAAM,gBAAgB,YAAY,KAC/B,YAAY,UAAU,QAAQ,YAChC;;;;;CAMD,MAAM,QAAQ,MAAM,SAAS,OAAO;;;;;;;;;;CAWpC,MAAM,EAAE,KAAK,aAAa,MAAM,WAAW,aAAa;EACtD,SAAS,YAAY,GAAG;EACxB,QAAQ;EACR,QAAQ,IAAI;EACZ,sBAAK,IAAI,MAAM,EAAC,aAAa;EAC7B,SAAS;EACT;EACA,WAAW,KAAK;EAChB,WAAW,6BAA6B,OAAO;EAC/C,KAAK,IAAI,UAAU;EACpB,CAAC;AAEF,eACE,KACA,6DACD;;;;;CAMD,MAAM,wBAAwB,UAAU,CAAC,MAAM,iBAC7C,gCACE;EACE;EACA,OAAO;EACP,uBAAuB;EACxB,EACD,OACD,CACF;AAED,QAAO;EAAE,gBAAgB;EAAuB;EAAK;;;;;AC5GvD,qBAAqBC,MAAaC,QAAe"}
@@ -1,9 +1,9 @@
1
- import { n as version, t as name } from "./package-BnSw-03C.native.esm.js";
1
+ import { n as version, t as name } from "./package-DHXe8K1l.native.esm.js";
2
2
  import { a as evmConfirmTransaction, n as evmExecuteYieldTransaction, r as evmExecuteSwapTransaction, s as registerEvmNetworkProviderBuilder, t as evmTransferAmount } from "./evmTransferAmount-BftkuI-H.native.esm.js";
3
3
  import "./createPublicClientFromNetworkData-9g8Hsu4A.native.esm.js";
4
4
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
5
5
  import { getDefaultClient, getNetworksData, hasExtension } from "@dynamic-labs-sdk/client";
6
- import { CHAINS_INFO_MAP, WalletProviderPriority, assertDefined, assertNonEmptyArray, createSignInMessageStatement, emitEvent, filterDuplicates, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getAppMetadata, getCore, getDefaultClient as getDefaultClient$1, getNonce, getWalletProviderRegistry, registerExtension, switchActiveNetworkInLastKnownRegistry, waitForProjectSettings } from "@dynamic-labs-sdk/client/core";
6
+ import { CHAINS_INFO_MAP, WalletProviderPriority, assertDefined, assertNonEmptyArray, createSignInMessageStatement, emitEvent, filterDuplicates, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getAppMetadata, getCore, getDefaultClient as getDefaultClient$1, getNonce, getUriConnectionStarterRegistry, getWalletProviderRegistry, registerExtension, switchActiveNetworkInLastKnownRegistry, waitForProjectSettings } from "@dynamic-labs-sdk/client/core";
7
7
  import { getAddress } from "viem";
8
8
  import { WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
9
9
  import { createWalletConnectSessionEventEmitter, getSignClient, importWalletConnectAuthResponse, importWalletConnectSession, splitCaip10Token } from "@dynamic-labs-sdk/wallet-connect/core";
@@ -170,17 +170,6 @@ const recoverEvmWalletConnectWalletProviders = async (client) => {
170
170
  }
171
171
  };
172
172
 
173
- //#endregion
174
- //#region src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.ts
175
- const WALLET_CONNECT_EVM_EXTENSION_KEY = "walletConnectEvm";
176
- /** @notInstrumented */
177
- const addWalletConnectEvmExtension = async (client = getDefaultClient()) => {
178
- if (hasExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client)) return;
179
- registerExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client);
180
- registerEvmNetworkProviderBuilder(client);
181
- await recoverEvmWalletConnectWalletProviders(client);
182
- };
183
-
184
173
  //#endregion
185
174
  //#region src/utils/getEvmNetworksData/getEvmNetworksData.ts
186
175
  /**
@@ -229,6 +218,90 @@ const evmMethods = [
229
218
  "wallet_showCallsStatus"
230
219
  ];
231
220
 
221
+ //#endregion
222
+ //#region src/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.ts
223
+ /** @notInstrumented */
224
+ const connectWithWalletConnectEvm = async ({ addToDynamicWalletAccounts = true } = {}, client = getDefaultClient()) => {
225
+ const signClient = await getSignClient(client);
226
+ assertDefined(client.projectSettings, "Project settings unavailable");
227
+ const evmNetworks = getEvmNetworksData(client);
228
+ assertNonEmptyArray(evmNetworks, "EVM networks not found");
229
+ const walletConnectChains = evmNetworks.map((network) => `eip155:${network.networkId}`);
230
+ /**
231
+ * A WalletConnect connection request generates a URI and a promise.
232
+ *
233
+ * The URI must be handed to an external wallet application that will use it
234
+ * to establish a connection via a WalletConnect relay server. Typically, this
235
+ * is done by scanning a QR code or deep linking to the wallet application.
236
+ *
237
+ * The promise will resolve when the connection is established.
238
+ */
239
+ const { approval, uri } = await signClient.connect({ optionalNamespaces: { eip155: {
240
+ chains: walletConnectChains,
241
+ events: [
242
+ "accountsChanged",
243
+ "chainChanged",
244
+ "disconnected"
245
+ ],
246
+ methods: evmMethods
247
+ } } });
248
+ assertDefined(uri, "Failed to establish WalletConnect session: no URI returned");
249
+ /**
250
+ * Once the approval promise resolves, the WalletConnect session is established
251
+ * between the wallet application and the dapp (this app).
252
+ */
253
+ const walletAccountsPromise = approval().then(async (session) => {
254
+ assertDefined(session.namespaces.eip155, `WalletConnect session did not establish an EIP155 connection. Found instead: ${Object.keys(session.namespaces).join(", ")}`);
255
+ return importWalletConnectSession({
256
+ addToDynamicWalletAccounts,
257
+ sessionTopic: session.topic,
258
+ walletProviderBuilder: createWalletProviderFromEIP155Session
259
+ }, client);
260
+ });
261
+ return {
262
+ approval: () => walletAccountsPromise,
263
+ uri
264
+ };
265
+ };
266
+
267
+ //#endregion
268
+ //#region src/walletConnect/registerWalletConnectEvmUriConnectionStarter/registerWalletConnectEvmUriConnectionStarter.ts
269
+ /**
270
+ * Registers the WalletConnect EVM URI pairing with the client, so higher level
271
+ * connection APIs can mint a WalletConnect URI for EVM without depending on
272
+ * this package.
273
+ *
274
+ * @example
275
+ * ```ts
276
+ * registerWalletConnectEvmUriConnectionStarter(client);
277
+ * ```
278
+ *
279
+ * @param client - The Dynamic client instance to register the starter with.
280
+ * @returns Nothing.
281
+ * @see connectWithWalletConnectEvm
282
+ * @see getUriConnectionStarterRegistry
283
+ * @notInstrumented
284
+ */
285
+ const registerWalletConnectEvmUriConnectionStarter = (client) => {
286
+ getUriConnectionStarterRegistry(client).register({
287
+ chain: "EVM",
288
+ start: ({ addToDynamicWalletAccounts }) => connectWithWalletConnectEvm({ addToDynamicWalletAccounts }, client),
289
+ type: "walletConnect"
290
+ });
291
+ };
292
+
293
+ //#endregion
294
+ //#region src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.ts
295
+ const WALLET_CONNECT_EVM_EXTENSION_KEY = "walletConnectEvm";
296
+ /** @notInstrumented */
297
+ const addWalletConnectEvmExtension = async (client = getDefaultClient()) => {
298
+ if (hasExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client)) return;
299
+ registerExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client);
300
+ registerEvmNetworkProviderBuilder(client);
301
+ registerWalletConnectEvmUriConnectionStarter(client);
302
+ await recoverEvmWalletConnectWalletProviders(client);
303
+ };
304
+
232
305
  //#endregion
233
306
  //#region src/walletConnect/connectAndVerifyWithWalletConnectEvm/connectAndVerifyWithWalletConnectEvm.ts
234
307
  /**
@@ -307,52 +380,6 @@ const connectAndVerifyWithWalletConnectEvm = async (client = getDefaultClient$1(
307
380
  };
308
381
  };
309
382
 
310
- //#endregion
311
- //#region src/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.ts
312
- /** @notInstrumented */
313
- const connectWithWalletConnectEvm = async ({ addToDynamicWalletAccounts = true } = {}, client = getDefaultClient()) => {
314
- const signClient = await getSignClient(client);
315
- assertDefined(client.projectSettings, "Project settings unavailable");
316
- const evmNetworks = getEvmNetworksData(client);
317
- assertNonEmptyArray(evmNetworks, "EVM networks not found");
318
- const walletConnectChains = evmNetworks.map((network) => `eip155:${network.networkId}`);
319
- /**
320
- * A WalletConnect connection request generates a URI and a promise.
321
- *
322
- * The URI must be handed to an external wallet application that will use it
323
- * to establish a connection via a WalletConnect relay server. Typically, this
324
- * is done by scanning a QR code or deep linking to the wallet application.
325
- *
326
- * The promise will resolve when the connection is established.
327
- */
328
- const { approval, uri } = await signClient.connect({ optionalNamespaces: { eip155: {
329
- chains: walletConnectChains,
330
- events: [
331
- "accountsChanged",
332
- "chainChanged",
333
- "disconnected"
334
- ],
335
- methods: evmMethods
336
- } } });
337
- assertDefined(uri, "Failed to establish WalletConnect session: no URI returned");
338
- /**
339
- * Once the approval promise resolves, the WalletConnect session is established
340
- * between the wallet application and the dapp (this app).
341
- */
342
- const walletAccountsPromise = approval().then(async (session) => {
343
- assertDefined(session.namespaces.eip155, `WalletConnect session did not establish an EIP155 connection. Found instead: ${Object.keys(session.namespaces).join(", ")}`);
344
- return importWalletConnectSession({
345
- addToDynamicWalletAccounts,
346
- sessionTopic: session.topic,
347
- walletProviderBuilder: createWalletProviderFromEIP155Session
348
- }, client);
349
- });
350
- return {
351
- approval: () => walletAccountsPromise,
352
- uri
353
- };
354
- };
355
-
356
383
  //#endregion
357
384
  //#region src/exports/walletConnect.ts
358
385
  assertPackageVersion(name, version);
@@ -1 +1 @@
1
- {"version":3,"file":"walletConnect.native.esm.js","names":["methodsThatRequireUserAction: string[]","getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId']","switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork']","request: WalletConnectEvmWalletProvider['request']","disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount']","signMessage: WalletConnectEvmWalletProvider['signMessage']","getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses']","viemGetAddress","formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress']","destroy: NonNullable<\n WalletConnectEvmWalletProvider['destroy']\n >","getDefaultClient","packageName","packageVersion"],"sources":["../src/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.ts","../src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts","../src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.ts","../src/utils/getEvmNetworksData/getEvmNetworksData.ts","../src/walletConnect/consts.ts","../src/walletConnect/connectAndVerifyWithWalletConnectEvm/connectAndVerifyWithWalletConnectEvm.ts","../src/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.ts","../src/exports/walletConnect.ts"],"sourcesContent":["import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n emitEvent,\n filterDuplicates,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n getCore,\n getWalletProviderRegistry,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { SessionClosedUnexpectedlyError } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n createWalletConnectSessionEventEmitter,\n getSignClient,\n splitCaip10Token,\n} from '@dynamic-labs-sdk/wallet-connect/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { SDK_ERRORS } from '@walletconnect/utils';\nimport { getAddress as viemGetAddress } from 'viem';\n\nimport type { EIP1193ProviderRequest } from '../../EvmWalletProvider.types';\nimport { evmConfirmTransaction } from '../../utils/evmConfirmTransaction';\nimport { evmExecuteSwapTransaction } from '../../utils/evmExecuteSwapTransaction';\nimport { evmExecuteYieldTransaction } from '../../utils/evmExecuteYieldTransaction';\nimport { evmTransferAmount } from '../../utils/evmTransferAmount';\nimport type { evmMethods } from '../consts';\nimport type { WalletConnectEvmWalletProvider } from '../walletConnectEvmWalletProvider.types';\n\ntype CreateWalletProviderFromEIP155SessionParams = {\n sessionTopic: string;\n};\n\n/**\n * The list of ethereum request methods that require user action.\n * We will raise a user action requested event for these methods.\n */\nconst methodsThatRequireUserAction: string[] = [\n 'personal_sign',\n 'eth_sendTransaction',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v4',\n] satisfies (typeof evmMethods)[number][];\n\n/** @notInstrumented */\nexport const createWalletProviderFromEIP155Session = async (\n { sessionTopic }: CreateWalletProviderFromEIP155SessionParams,\n client: DynamicClient\n): Promise<WalletConnectEvmWalletProvider> => {\n const signClient = await getSignClient(client);\n\n const { logger } = getCore(client);\n\n const getSession = () => {\n const session = signClient.session.get(sessionTopic);\n\n if (!session) {\n // destroy never throws (it logs internally), but explicit .catch makes\n // the fire-and-forget intent obvious and silences static analyzers.\n destroy().catch(() => undefined);\n\n throw new SessionClosedUnexpectedlyError({\n sessionTopic,\n walletDisplayName: displayName,\n });\n }\n\n return session;\n };\n\n const displayName = getSession().peer.metadata.name;\n\n const namespaceKey = 'eip155';\n\n const walletProviderType = WalletProviderEnum.WalletConnect;\n\n const key = formatWalletProviderKey({\n chain: 'EVM',\n displayName,\n suffix: sessionTopic,\n walletProviderType,\n });\n\n const getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId'] =\n async () => {\n // Assert the session is still valid\n getSession();\n\n return await getActiveNetworkIdFromLastKnownRegistry({\n client,\n walletProviderKey: key,\n });\n };\n\n const switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) => {\n // Assert the session is still valid\n getSession();\n\n await switchActiveNetworkInLastKnownRegistry({\n client,\n networkId,\n walletProviderKey: key,\n });\n };\n\n const request: WalletConnectEvmWalletProvider['request'] = async <\n T = unknown\n >(\n args: EIP1193ProviderRequest\n ): Promise<T> => {\n const { networkId } = await getActiveNetworkId();\n\n const session = getSession();\n\n if (methodsThatRequireUserAction.includes(args.method)) {\n emitEvent(\n {\n args: {\n walletMetadata: session.peer.metadata,\n walletProviderKey: key,\n },\n event: 'walletConnectUserActionRequested',\n },\n client\n );\n }\n\n try {\n const result = await signClient.request<T>({\n // signClient expects the chainId to be in CAIP-2 format \"eip155:<networkId>\"\n chainId: `${namespaceKey}:${networkId}`,\n request: args,\n topic: sessionTopic,\n });\n\n return result;\n } catch (err) {\n logger.debug(\n '[createWalletProviderFromEIP155Session] Error requesting from signClient',\n { error: err, method: args.method, networkId }\n );\n\n // WC sessions don't always advertise eth_chainId in their namespaces.methods,\n // so the wallet may reject it. Fall back to the locally known networkId.\n if (args.method === 'eth_chainId') {\n return `0x${Number(networkId).toString(16)}` as never;\n }\n throw err;\n }\n };\n\n /**\n * We actually clear up the entire WC session and its wallet provider\n */\n const disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount'] =\n async () => destroy();\n\n const signMessage: WalletConnectEvmWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n const params = [message];\n\n if (walletAccount) {\n params.push(walletAccount.address);\n }\n\n const requestPromise = request<string>({\n method: 'personal_sign',\n params,\n });\n\n const signature = await requestPromise;\n\n return { signature };\n };\n\n const getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses'] =\n async () => {\n const addresses = filterDuplicates(\n getSession().namespaces[namespaceKey].accounts.map(\n (account) => splitCaip10Token(account).address\n )\n ).map((address) => viemGetAddress(address));\n\n return { addresses };\n };\n\n const formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress'] =\n ({ address }) => viemGetAddress(address);\n\n const { cleanupEventEmitter, getEventEmitter } =\n createWalletConnectSessionEventEmitter({\n formatAddress: viemGetAddress,\n getSession,\n namespaceKey,\n sessionTopic,\n signClient,\n });\n\n const destroy: NonNullable<\n WalletConnectEvmWalletProvider['destroy']\n > = async () => {\n cleanupEventEmitter();\n try {\n await signClient.disconnect({\n reason: SDK_ERRORS.USER_DISCONNECTED,\n topic: sessionTopic,\n });\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n walletProviderRegistry.unregister(key);\n } catch (err) {\n getCore(client).logger.error(\n `[${key}] destroy: remote signal failed`,\n err\n );\n }\n };\n\n return {\n chain: 'EVM',\n confirmTransaction: (args) => evmConfirmTransaction(args, client),\n destroy,\n disconnectWalletAccount,\n get events() {\n return getEventEmitter();\n },\n executeSwapTransaction: (args) => evmExecuteSwapTransaction(args, client),\n executeYieldTransaction: (args) =>\n evmExecuteYieldTransaction(args, client),\n formatWalletAddress,\n getActiveNetworkId,\n getConnectedAddresses,\n getSession,\n groupKey: formatWalletProviderGroupKey(displayName),\n key,\n metadata: {\n displayName,\n icon: getSession().peer.metadata.icons[0],\n },\n namespaceKey,\n request,\n signMessage,\n switchActiveNetwork,\n transferAmount: (args) => evmTransferAmount(args, client),\n walletProviderType,\n };\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n WalletProviderPriority,\n getWalletProviderRegistry,\n waitForProjectSettings,\n} from '@dynamic-labs-sdk/client/core';\nimport { getSignClient } from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\n/** @notInstrumented */\nexport const recoverEvmWalletConnectWalletProviders = async (\n client: DynamicClient\n): Promise<void> => {\n await waitForProjectSettings(client);\n\n const signClient = await getSignClient(client);\n\n /**\n * Recreate the wallet providers for all existing EVM sessions\n */\n const sessions = signClient.session.getAll();\n\n const currentTime = Math.floor(Date.now() / 1000);\n\n for (const session of sessions) {\n if (!('eip155' in session.namespaces)) {\n continue;\n }\n\n if (session.expiry <= currentTime) {\n continue;\n }\n\n const walletProvider = await createWalletProviderFromEIP155Session(\n {\n sessionTopic: session.topic,\n },\n client\n );\n\n getWalletProviderRegistry(client).register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n }\n};\n","import { getDefaultClient, hasExtension } from '@dynamic-labs-sdk/client';\nimport { registerExtension } from '@dynamic-labs-sdk/client/core';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { recoverEvmWalletConnectWalletProviders } from '../recoverEvmWalletConnectWalletProviders';\n\nexport const WALLET_CONNECT_EVM_EXTENSION_KEY = 'walletConnectEvm';\n\n/** @notInstrumented */\nexport const addWalletConnectEvmExtension = async (\n client = getDefaultClient()\n): Promise<void> => {\n if (\n hasExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client);\n registerEvmNetworkProviderBuilder(client);\n\n await recoverEvmWalletConnectWalletProviders(client);\n};\n","import {\n type DynamicClient,\n type NetworkData,\n getNetworksData,\n} from '@dynamic-labs-sdk/client';\n\n/**\n * Returns the network configuration objects for the EVM networks configured\n * on the Dynamic client. Generic helper available to any EVM extension that\n * needs the full network metadata (RPC URLs, native currency, etc.) for the\n * configured EVM chain set — for instance, to build the `supportedNetworks`\n * map required by third-party SDKs such as MetaMask or Base Account.\n *\n * @param client - The Dynamic client whose project settings drive the result.\n * @notInstrumented\n */\nexport const getEvmNetworksData = (client: DynamicClient): NetworkData[] =>\n getNetworksData(client).filter((network) => network.chain === 'EVM');\n","import { CHAINS_INFO_MAP } from '@dynamic-labs-sdk/client/core';\n\nexport const evmApiChainName = CHAINS_INFO_MAP.EVM.apiChainName;\n\n/**\n * List of methods that may be requested from EVM wallet applications.\n *\n * Source: https://github.com/WalletConnect/walletconnect-monorepo/blob/v2.0/providers/ethereum-provider/src/EthereumProvider.ts\n */\nexport const evmMethods = [\n 'personal_sign',\n 'eth_sendTransaction',\n 'eth_accounts',\n 'eth_requestAccounts',\n 'eth_call',\n 'eth_getBalance',\n 'eth_sendRawTransaction',\n 'eth_sign',\n 'eth_signTransaction',\n 'eth_signTypedData',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v3',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v4',\n 'wallet_switchEthereumChain',\n 'wallet_addEthereumChain',\n 'wallet_getPermissions',\n 'wallet_requestPermissions',\n 'wallet_registerOnboarding',\n 'wallet_watchAsset',\n 'wallet_scanQRCode',\n 'wallet_sendCalls',\n 'wallet_getCapabilities',\n 'wallet_getCallsStatus',\n 'wallet_showCallsStatus',\n] as const;\n","import {\n assertDefined,\n assertNonEmptyArray,\n createSignInMessageStatement,\n getAppMetadata,\n getCore,\n getDefaultClient,\n getNonce,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WalletConnectConnectionResult } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n getSignClient,\n importWalletConnectAuthResponse,\n} from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { getEvmNetworksData } from '../../utils/getEvmNetworksData';\nimport { evmMethods } from '../consts';\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\n/**\n * Connects to a WalletConnect EVM wallet and verifies ownership through message signing.\n *\n * This function combines wallet connection and verification in a single step,\n * requiring the user to sign a message to prove wallet ownership before\n * the wallet account is added to their profile.\n *\n * If the wallet app does not support the WalletConnect authenticate method,\n * this prompts for connection and then verification as 2 separate steps.\n *\n * @see WalletConnect's docs on [session authentication](https://docs.reown.com/advanced/api/sign/dapp-usage#session-authenticate-with-recaps)\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns A promise that resolves to the connected and verified wallet account.\n * @notInstrumented\n */\nexport const connectAndVerifyWithWalletConnectEvm = async (\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n const core = getCore(client);\n\n const { appUniversalLink } = getAppMetadata(client);\n\n assertDefined(appUniversalLink, 'Universal link is not set');\n\n const url = new URL(appUniversalLink);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n /**\n * Customer enabled networks, with mainnet first if available. Read through\n * getNetworksData (via the EVM helper) rather than raw project settings so\n * client-side network transformers apply to the chains advertised in the\n * WalletConnect session.\n */\n const evmNetworks = getEvmNetworksData(client).sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertNonEmptyArray(evmNetworks, 'EVM networks not found');\n\n const caip2Networks = evmNetworks.map(\n (network) => `eip155:${network.networkId}`\n );\n\n /**\n * WalletConnect formats its own message for SIWE, so we need to provide the fields.\n * We later reconstruct what that message was so we can verify the signature in backend.\n */\n const nonce = await getNonce(client);\n\n /**\n * A WalletConnect connection request generates a URI and a promise.\n *\n * The URI must be handed to an external wallet application that will use it\n * to establish a connection via a WalletConnect relay server. Typically, this\n * is done by scanning a QR code or deep linking to the wallet application.\n *\n * The promise will resolve when the connection is established.\n */\n const { uri, response } = await signClient.authenticate({\n chainId: evmNetworks[0].networkId,\n chains: caip2Networks,\n domain: url.host,\n iat: new Date().toISOString(),\n methods: evmMethods as unknown as string[],\n nonce,\n requestId: core.environmentId,\n statement: createSignInMessageStatement(client),\n uri: url.toString(),\n });\n\n assertDefined(\n uri,\n 'Failed to establish WalletConnect session: no URI returned'\n );\n\n /**\n * Once the approval promise resolves, the WalletConnect session is established\n * between the wallet application and the dapp (this app).\n */\n const walletAccountsPromise = response().then((authResponse) =>\n importWalletConnectAuthResponse(\n {\n authResponse,\n chain: 'EVM',\n walletProviderBuilder: createWalletProviderFromEIP155Session,\n },\n client\n )\n );\n\n return { approval: () => walletAccountsPromise, uri };\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n assertNonEmptyArray,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WalletConnectConnectionResult } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n getSignClient,\n importWalletConnectSession,\n} from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { getEvmNetworksData } from '../../utils/getEvmNetworksData';\nimport { evmMethods } from '../consts';\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\ntype ConnectWithWalletConnectEvmParams = {\n /**\n * Whether this session's wallet accounts should be added to the dynamic's wallet accounts.\n */\n addToDynamicWalletAccounts?: boolean;\n};\n\n/** @notInstrumented */\nexport const connectWithWalletConnectEvm = async (\n { addToDynamicWalletAccounts = true }: ConnectWithWalletConnectEvmParams = {},\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n // Read through getNetworksData (via the EVM helper) rather than raw project\n // settings so client-side network transformers apply to the chains\n // advertised in the WalletConnect session.\n const evmNetworks = getEvmNetworksData(client);\n\n assertNonEmptyArray(evmNetworks, 'EVM networks not found');\n\n const walletConnectChains = evmNetworks.map(\n (network) => `eip155:${network.networkId}`\n );\n\n /**\n * A WalletConnect connection request generates a URI and a promise.\n *\n * The URI must be handed to an external wallet application that will use it\n * to establish a connection via a WalletConnect relay server. Typically, this\n * is done by scanning a QR code or deep linking to the wallet application.\n *\n * The promise will resolve when the connection is established.\n */\n const { approval, uri } = await signClient.connect({\n optionalNamespaces: {\n eip155: {\n chains: walletConnectChains,\n events: ['accountsChanged', 'chainChanged', 'disconnected'],\n methods: evmMethods as unknown as string[],\n },\n },\n });\n\n assertDefined(\n uri,\n 'Failed to establish WalletConnect session: no URI returned'\n );\n\n /**\n * Once the approval promise resolves, the WalletConnect session is established\n * between the wallet application and the dapp (this app).\n */\n const walletAccountsPromise = approval().then(async (session) => {\n assertDefined(\n session.namespaces.eip155,\n `WalletConnect session did not establish an EIP155 connection. Found instead: ${Object.keys(\n session.namespaces\n ).join(', ')}`\n );\n\n return importWalletConnectSession(\n {\n addToDynamicWalletAccounts,\n sessionTopic: session.topic,\n walletProviderBuilder: createWalletProviderFromEIP155Session,\n },\n client\n );\n });\n\n return { approval: () => walletAccountsPromise, uri };\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\n// TODO: on the v2 major release, move @dynamic-labs-sdk/wallet-connect and the\n// @walletconnect/* dependencies of this package to optional peer dependencies,\n// so apps that never connect external wallets don't install them at all.\n// The same applies to @dynamic-labs-sdk/solana.\nexport { addWalletConnectEvmExtension } from '../walletConnect/addWalletConnectEvmExtension';\nexport { connectAndVerifyWithWalletConnectEvm } from '../walletConnect/connectAndVerifyWithWalletConnectEvm';\nexport { connectWithWalletConnectEvm } from '../walletConnect/connectWithWalletConnectEvm';\nexport type { WalletConnectEvmWalletProvider } from '../walletConnect/walletConnectEvmWalletProvider.types';\n"],"mappings":"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"}
1
+ {"version":3,"file":"walletConnect.native.esm.js","names":["methodsThatRequireUserAction: string[]","getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId']","switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork']","request: WalletConnectEvmWalletProvider['request']","disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount']","signMessage: WalletConnectEvmWalletProvider['signMessage']","getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses']","viemGetAddress","formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress']","destroy: NonNullable<\n WalletConnectEvmWalletProvider['destroy']\n >","getDefaultClient","packageName","packageVersion"],"sources":["../src/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.ts","../src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts","../src/utils/getEvmNetworksData/getEvmNetworksData.ts","../src/walletConnect/consts.ts","../src/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.ts","../src/walletConnect/registerWalletConnectEvmUriConnectionStarter/registerWalletConnectEvmUriConnectionStarter.ts","../src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.ts","../src/walletConnect/connectAndVerifyWithWalletConnectEvm/connectAndVerifyWithWalletConnectEvm.ts","../src/exports/walletConnect.ts"],"sourcesContent":["import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n emitEvent,\n filterDuplicates,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n getCore,\n getWalletProviderRegistry,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { SessionClosedUnexpectedlyError } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n createWalletConnectSessionEventEmitter,\n getSignClient,\n splitCaip10Token,\n} from '@dynamic-labs-sdk/wallet-connect/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { SDK_ERRORS } from '@walletconnect/utils';\nimport { getAddress as viemGetAddress } from 'viem';\n\nimport type { EIP1193ProviderRequest } from '../../EvmWalletProvider.types';\nimport { evmConfirmTransaction } from '../../utils/evmConfirmTransaction';\nimport { evmExecuteSwapTransaction } from '../../utils/evmExecuteSwapTransaction';\nimport { evmExecuteYieldTransaction } from '../../utils/evmExecuteYieldTransaction';\nimport { evmTransferAmount } from '../../utils/evmTransferAmount';\nimport type { evmMethods } from '../consts';\nimport type { WalletConnectEvmWalletProvider } from '../walletConnectEvmWalletProvider.types';\n\ntype CreateWalletProviderFromEIP155SessionParams = {\n sessionTopic: string;\n};\n\n/**\n * The list of ethereum request methods that require user action.\n * We will raise a user action requested event for these methods.\n */\nconst methodsThatRequireUserAction: string[] = [\n 'personal_sign',\n 'eth_sendTransaction',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v4',\n] satisfies (typeof evmMethods)[number][];\n\n/** @notInstrumented */\nexport const createWalletProviderFromEIP155Session = async (\n { sessionTopic }: CreateWalletProviderFromEIP155SessionParams,\n client: DynamicClient\n): Promise<WalletConnectEvmWalletProvider> => {\n const signClient = await getSignClient(client);\n\n const { logger } = getCore(client);\n\n const getSession = () => {\n const session = signClient.session.get(sessionTopic);\n\n if (!session) {\n // destroy never throws (it logs internally), but explicit .catch makes\n // the fire-and-forget intent obvious and silences static analyzers.\n destroy().catch(() => undefined);\n\n throw new SessionClosedUnexpectedlyError({\n sessionTopic,\n walletDisplayName: displayName,\n });\n }\n\n return session;\n };\n\n const displayName = getSession().peer.metadata.name;\n\n const namespaceKey = 'eip155';\n\n const walletProviderType = WalletProviderEnum.WalletConnect;\n\n const key = formatWalletProviderKey({\n chain: 'EVM',\n displayName,\n suffix: sessionTopic,\n walletProviderType,\n });\n\n const getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId'] =\n async () => {\n // Assert the session is still valid\n getSession();\n\n return await getActiveNetworkIdFromLastKnownRegistry({\n client,\n walletProviderKey: key,\n });\n };\n\n const switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) => {\n // Assert the session is still valid\n getSession();\n\n await switchActiveNetworkInLastKnownRegistry({\n client,\n networkId,\n walletProviderKey: key,\n });\n };\n\n const request: WalletConnectEvmWalletProvider['request'] = async <\n T = unknown\n >(\n args: EIP1193ProviderRequest\n ): Promise<T> => {\n const { networkId } = await getActiveNetworkId();\n\n const session = getSession();\n\n if (methodsThatRequireUserAction.includes(args.method)) {\n emitEvent(\n {\n args: {\n walletMetadata: session.peer.metadata,\n walletProviderKey: key,\n },\n event: 'walletConnectUserActionRequested',\n },\n client\n );\n }\n\n try {\n const result = await signClient.request<T>({\n // signClient expects the chainId to be in CAIP-2 format \"eip155:<networkId>\"\n chainId: `${namespaceKey}:${networkId}`,\n request: args,\n topic: sessionTopic,\n });\n\n return result;\n } catch (err) {\n logger.debug(\n '[createWalletProviderFromEIP155Session] Error requesting from signClient',\n { error: err, method: args.method, networkId }\n );\n\n // WC sessions don't always advertise eth_chainId in their namespaces.methods,\n // so the wallet may reject it. Fall back to the locally known networkId.\n if (args.method === 'eth_chainId') {\n return `0x${Number(networkId).toString(16)}` as never;\n }\n throw err;\n }\n };\n\n /**\n * We actually clear up the entire WC session and its wallet provider\n */\n const disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount'] =\n async () => destroy();\n\n const signMessage: WalletConnectEvmWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n const params = [message];\n\n if (walletAccount) {\n params.push(walletAccount.address);\n }\n\n const requestPromise = request<string>({\n method: 'personal_sign',\n params,\n });\n\n const signature = await requestPromise;\n\n return { signature };\n };\n\n const getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses'] =\n async () => {\n const addresses = filterDuplicates(\n getSession().namespaces[namespaceKey].accounts.map(\n (account) => splitCaip10Token(account).address\n )\n ).map((address) => viemGetAddress(address));\n\n return { addresses };\n };\n\n const formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress'] =\n ({ address }) => viemGetAddress(address);\n\n const { cleanupEventEmitter, getEventEmitter } =\n createWalletConnectSessionEventEmitter({\n formatAddress: viemGetAddress,\n getSession,\n namespaceKey,\n sessionTopic,\n signClient,\n });\n\n const destroy: NonNullable<\n WalletConnectEvmWalletProvider['destroy']\n > = async () => {\n cleanupEventEmitter();\n try {\n await signClient.disconnect({\n reason: SDK_ERRORS.USER_DISCONNECTED,\n topic: sessionTopic,\n });\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n walletProviderRegistry.unregister(key);\n } catch (err) {\n getCore(client).logger.error(\n `[${key}] destroy: remote signal failed`,\n err\n );\n }\n };\n\n return {\n chain: 'EVM',\n confirmTransaction: (args) => evmConfirmTransaction(args, client),\n destroy,\n disconnectWalletAccount,\n get events() {\n return getEventEmitter();\n },\n executeSwapTransaction: (args) => evmExecuteSwapTransaction(args, client),\n executeYieldTransaction: (args) =>\n evmExecuteYieldTransaction(args, client),\n formatWalletAddress,\n getActiveNetworkId,\n getConnectedAddresses,\n getSession,\n groupKey: formatWalletProviderGroupKey(displayName),\n key,\n metadata: {\n displayName,\n icon: getSession().peer.metadata.icons[0],\n },\n namespaceKey,\n request,\n signMessage,\n switchActiveNetwork,\n transferAmount: (args) => evmTransferAmount(args, client),\n walletProviderType,\n };\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n WalletProviderPriority,\n getWalletProviderRegistry,\n waitForProjectSettings,\n} from '@dynamic-labs-sdk/client/core';\nimport { getSignClient } from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\n/** @notInstrumented */\nexport const recoverEvmWalletConnectWalletProviders = async (\n client: DynamicClient\n): Promise<void> => {\n await waitForProjectSettings(client);\n\n const signClient = await getSignClient(client);\n\n /**\n * Recreate the wallet providers for all existing EVM sessions\n */\n const sessions = signClient.session.getAll();\n\n const currentTime = Math.floor(Date.now() / 1000);\n\n for (const session of sessions) {\n if (!('eip155' in session.namespaces)) {\n continue;\n }\n\n if (session.expiry <= currentTime) {\n continue;\n }\n\n const walletProvider = await createWalletProviderFromEIP155Session(\n {\n sessionTopic: session.topic,\n },\n client\n );\n\n getWalletProviderRegistry(client).register({\n priority: WalletProviderPriority.WALLET_SDK,\n walletProvider,\n });\n }\n};\n","import {\n type DynamicClient,\n type NetworkData,\n getNetworksData,\n} from '@dynamic-labs-sdk/client';\n\n/**\n * Returns the network configuration objects for the EVM networks configured\n * on the Dynamic client. Generic helper available to any EVM extension that\n * needs the full network metadata (RPC URLs, native currency, etc.) for the\n * configured EVM chain set — for instance, to build the `supportedNetworks`\n * map required by third-party SDKs such as MetaMask or Base Account.\n *\n * @param client - The Dynamic client whose project settings drive the result.\n * @notInstrumented\n */\nexport const getEvmNetworksData = (client: DynamicClient): NetworkData[] =>\n getNetworksData(client).filter((network) => network.chain === 'EVM');\n","import { CHAINS_INFO_MAP } from '@dynamic-labs-sdk/client/core';\n\nexport const evmApiChainName = CHAINS_INFO_MAP.EVM.apiChainName;\n\n/**\n * List of methods that may be requested from EVM wallet applications.\n *\n * Source: https://github.com/WalletConnect/walletconnect-monorepo/blob/v2.0/providers/ethereum-provider/src/EthereumProvider.ts\n */\nexport const evmMethods = [\n 'personal_sign',\n 'eth_sendTransaction',\n 'eth_accounts',\n 'eth_requestAccounts',\n 'eth_call',\n 'eth_getBalance',\n 'eth_sendRawTransaction',\n 'eth_sign',\n 'eth_signTransaction',\n 'eth_signTypedData',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v3',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v4',\n 'wallet_switchEthereumChain',\n 'wallet_addEthereumChain',\n 'wallet_getPermissions',\n 'wallet_requestPermissions',\n 'wallet_registerOnboarding',\n 'wallet_watchAsset',\n 'wallet_scanQRCode',\n 'wallet_sendCalls',\n 'wallet_getCapabilities',\n 'wallet_getCallsStatus',\n 'wallet_showCallsStatus',\n] as const;\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n assertNonEmptyArray,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WalletConnectConnectionResult } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n getSignClient,\n importWalletConnectSession,\n} from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { getEvmNetworksData } from '../../utils/getEvmNetworksData';\nimport { evmMethods } from '../consts';\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\ntype ConnectWithWalletConnectEvmParams = {\n /**\n * Whether this session's wallet accounts should be added to the dynamic's wallet accounts.\n */\n addToDynamicWalletAccounts?: boolean;\n};\n\n/** @notInstrumented */\nexport const connectWithWalletConnectEvm = async (\n { addToDynamicWalletAccounts = true }: ConnectWithWalletConnectEvmParams = {},\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n // Read through getNetworksData (via the EVM helper) rather than raw project\n // settings so client-side network transformers apply to the chains\n // advertised in the WalletConnect session.\n const evmNetworks = getEvmNetworksData(client);\n\n assertNonEmptyArray(evmNetworks, 'EVM networks not found');\n\n const walletConnectChains = evmNetworks.map(\n (network) => `eip155:${network.networkId}`\n );\n\n /**\n * A WalletConnect connection request generates a URI and a promise.\n *\n * The URI must be handed to an external wallet application that will use it\n * to establish a connection via a WalletConnect relay server. Typically, this\n * is done by scanning a QR code or deep linking to the wallet application.\n *\n * The promise will resolve when the connection is established.\n */\n const { approval, uri } = await signClient.connect({\n optionalNamespaces: {\n eip155: {\n chains: walletConnectChains,\n events: ['accountsChanged', 'chainChanged', 'disconnected'],\n methods: evmMethods as unknown as string[],\n },\n },\n });\n\n assertDefined(\n uri,\n 'Failed to establish WalletConnect session: no URI returned'\n );\n\n /**\n * Once the approval promise resolves, the WalletConnect session is established\n * between the wallet application and the dapp (this app).\n */\n const walletAccountsPromise = approval().then(async (session) => {\n assertDefined(\n session.namespaces.eip155,\n `WalletConnect session did not establish an EIP155 connection. Found instead: ${Object.keys(\n session.namespaces\n ).join(', ')}`\n );\n\n return importWalletConnectSession(\n {\n addToDynamicWalletAccounts,\n sessionTopic: session.topic,\n walletProviderBuilder: createWalletProviderFromEIP155Session,\n },\n client\n );\n });\n\n return { approval: () => walletAccountsPromise, uri };\n};\n","import { type DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getUriConnectionStarterRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { connectWithWalletConnectEvm } from '../connectWithWalletConnectEvm';\n\n/**\n * Registers the WalletConnect EVM URI pairing with the client, so higher level\n * connection APIs can mint a WalletConnect URI for EVM without depending on\n * this package.\n *\n * @example\n * ```ts\n * registerWalletConnectEvmUriConnectionStarter(client);\n * ```\n *\n * @param client - The Dynamic client instance to register the starter with.\n * @returns Nothing.\n * @see connectWithWalletConnectEvm\n * @see getUriConnectionStarterRegistry\n * @notInstrumented\n */\nexport const registerWalletConnectEvmUriConnectionStarter = (\n client: DynamicClient\n): void => {\n getUriConnectionStarterRegistry(client).register({\n chain: 'EVM',\n start: ({ addToDynamicWalletAccounts }) =>\n connectWithWalletConnectEvm({ addToDynamicWalletAccounts }, client),\n type: 'walletConnect',\n });\n};\n","import { getDefaultClient, hasExtension } from '@dynamic-labs-sdk/client';\nimport { registerExtension } from '@dynamic-labs-sdk/client/core';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { recoverEvmWalletConnectWalletProviders } from '../recoverEvmWalletConnectWalletProviders';\nimport { registerWalletConnectEvmUriConnectionStarter } from '../registerWalletConnectEvmUriConnectionStarter';\n\nexport const WALLET_CONNECT_EVM_EXTENSION_KEY = 'walletConnectEvm';\n\n/** @notInstrumented */\nexport const addWalletConnectEvmExtension = async (\n client = getDefaultClient()\n): Promise<void> => {\n if (\n hasExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client);\n registerEvmNetworkProviderBuilder(client);\n registerWalletConnectEvmUriConnectionStarter(client);\n\n await recoverEvmWalletConnectWalletProviders(client);\n};\n","import {\n assertDefined,\n assertNonEmptyArray,\n createSignInMessageStatement,\n getAppMetadata,\n getCore,\n getDefaultClient,\n getNonce,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WalletConnectConnectionResult } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n getSignClient,\n importWalletConnectAuthResponse,\n} from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { getEvmNetworksData } from '../../utils/getEvmNetworksData';\nimport { evmMethods } from '../consts';\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\n/**\n * Connects to a WalletConnect EVM wallet and verifies ownership through message signing.\n *\n * This function combines wallet connection and verification in a single step,\n * requiring the user to sign a message to prove wallet ownership before\n * the wallet account is added to their profile.\n *\n * If the wallet app does not support the WalletConnect authenticate method,\n * this prompts for connection and then verification as 2 separate steps.\n *\n * @see WalletConnect's docs on [session authentication](https://docs.reown.com/advanced/api/sign/dapp-usage#session-authenticate-with-recaps)\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns A promise that resolves to the connected and verified wallet account.\n * @notInstrumented\n */\nexport const connectAndVerifyWithWalletConnectEvm = async (\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n const core = getCore(client);\n\n const { appUniversalLink } = getAppMetadata(client);\n\n assertDefined(appUniversalLink, 'Universal link is not set');\n\n const url = new URL(appUniversalLink);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n /**\n * Customer enabled networks, with mainnet first if available. Read through\n * getNetworksData (via the EVM helper) rather than raw project settings so\n * client-side network transformers apply to the chains advertised in the\n * WalletConnect session.\n */\n const evmNetworks = getEvmNetworksData(client).sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertNonEmptyArray(evmNetworks, 'EVM networks not found');\n\n const caip2Networks = evmNetworks.map(\n (network) => `eip155:${network.networkId}`\n );\n\n /**\n * WalletConnect formats its own message for SIWE, so we need to provide the fields.\n * We later reconstruct what that message was so we can verify the signature in backend.\n */\n const nonce = await getNonce(client);\n\n /**\n * A WalletConnect connection request generates a URI and a promise.\n *\n * The URI must be handed to an external wallet application that will use it\n * to establish a connection via a WalletConnect relay server. Typically, this\n * is done by scanning a QR code or deep linking to the wallet application.\n *\n * The promise will resolve when the connection is established.\n */\n const { uri, response } = await signClient.authenticate({\n chainId: evmNetworks[0].networkId,\n chains: caip2Networks,\n domain: url.host,\n iat: new Date().toISOString(),\n methods: evmMethods as unknown as string[],\n nonce,\n requestId: core.environmentId,\n statement: createSignInMessageStatement(client),\n uri: url.toString(),\n });\n\n assertDefined(\n uri,\n 'Failed to establish WalletConnect session: no URI returned'\n );\n\n /**\n * Once the approval promise resolves, the WalletConnect session is established\n * between the wallet application and the dapp (this app).\n */\n const walletAccountsPromise = response().then((authResponse) =>\n importWalletConnectAuthResponse(\n {\n authResponse,\n chain: 'EVM',\n walletProviderBuilder: createWalletProviderFromEIP155Session,\n },\n client\n )\n );\n\n return { approval: () => walletAccountsPromise, uri };\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\n// TODO: on the v2 major release, move @dynamic-labs-sdk/wallet-connect and the\n// @walletconnect/* dependencies of this package to optional peer dependencies,\n// so apps that never connect external wallets don't install them at all.\n// The same applies to @dynamic-labs-sdk/solana.\nexport { addWalletConnectEvmExtension } from '../walletConnect/addWalletConnectEvmExtension';\nexport { connectAndVerifyWithWalletConnectEvm } from '../walletConnect/connectAndVerifyWithWalletConnectEvm';\nexport { connectWithWalletConnectEvm } from '../walletConnect/connectWithWalletConnectEvm';\nexport type { WalletConnectEvmWalletProvider } from '../walletConnect/walletConnectEvmWalletProvider.types';\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"detectEvmWalletFromProvider.d.ts","sourceRoot":"","sources":["../../../../src/windowInjected/utils/detectEvmWalletFromProvider/detectEvmWalletFromProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EACV,wBAAwB,EAEzB,MAAM,4BAA4B,CAAC;AAIpC,KAAK,iCAAiC,GAAG;IACvC,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;AAKF;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,2BAA2B,GAAI,eAEzC,iCAAiC,KAAG,wBAAwB,GAAG,IAwEjE,CAAC"}
1
+ {"version":3,"file":"detectEvmWalletFromProvider.d.ts","sourceRoot":"","sources":["../../../../src/windowInjected/utils/detectEvmWalletFromProvider/detectEvmWalletFromProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EACV,wBAAwB,EAEzB,MAAM,4BAA4B,CAAC;AAKpC,KAAK,iCAAiC,GAAG;IACvC,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;AAKF;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,2BAA2B,GAAI,eAEzC,iCAAiC,KAAG,wBAAwB,GAAG,IA4EjE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { isProviderSelectionRouter } from './isProviderSelectionRouter';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/windowInjected/utils/isProviderSelectionRouter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { EIP1193Provider } from '../../../EvmWalletProvider.types';
2
+ type IsProviderSelectionRouterParams = {
3
+ provider: EIP1193Provider;
4
+ };
5
+ /**
6
+ * True when the injected provider is a router that collects the other injected
7
+ * providers and forwards requests to whichever extension the user picks, rather
8
+ * than belonging to a single wallet. Routers mirror MetaMask's identity flags,
9
+ * so treating one as a wallet reports wallets that are not installed. Phantom
10
+ * injects such a router into `window.ethereum` when its EVM setting asks which
11
+ * wallet to use.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const provider = window.ethereum as EIP1193Provider;
16
+ *
17
+ * if (isProviderSelectionRouter({ provider })) {
18
+ * // no single wallet owns this provider
19
+ * }
20
+ * ```
21
+ *
22
+ * @param params.provider - The EIP-1193 provider to inspect.
23
+ * @returns True when the provider routes to other wallets.
24
+ * @see detectEvmWalletFromProvider
25
+ * @see getEvmInjectedProviders
26
+ * @notInstrumented
27
+ */
28
+ export declare const isProviderSelectionRouter: ({ provider, }: IsProviderSelectionRouterParams) => boolean;
29
+ export {};
30
+ //# sourceMappingURL=isProviderSelectionRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isProviderSelectionRouter.d.ts","sourceRoot":"","sources":["../../../../src/windowInjected/utils/isProviderSelectionRouter/isProviderSelectionRouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE,KAAK,+BAA+B,GAAG;IACrC,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;AAOF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,yBAAyB,GAAI,eAEvC,+BAA+B,KAAG,OAOpC,CAAC"}
@@ -1,10 +1,42 @@
1
- const require_package = require('./package-Dk-SYXOE.cjs');
1
+ const require_package = require('./package-cXTEEW7P.cjs');
2
2
  const require_evmTransferAmount = require('./evmTransferAmount-Ddvx91b0.cjs');
3
3
  require('./createPublicClientFromNetworkData-BAC8YTrK.cjs');
4
4
  const require_createWalletProviderFromEIP1193Provider = require('./createWalletProviderFromEIP1193Provider-E1WbEBET.cjs');
5
5
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
6
6
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
7
7
 
8
+ //#region src/windowInjected/utils/isProviderSelectionRouter/isProviderSelectionRouter.ts
9
+ /**
10
+ * True when the injected provider is a router that collects the other injected
11
+ * providers and forwards requests to whichever extension the user picks, rather
12
+ * than belonging to a single wallet. Routers mirror MetaMask's identity flags,
13
+ * so treating one as a wallet reports wallets that are not installed. Phantom
14
+ * injects such a router into `window.ethereum` when its EVM setting asks which
15
+ * wallet to use.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const provider = window.ethereum as EIP1193Provider;
20
+ *
21
+ * if (isProviderSelectionRouter({ provider })) {
22
+ * // no single wallet owns this provider
23
+ * }
24
+ * ```
25
+ *
26
+ * @param params.provider - The EIP-1193 provider to inspect.
27
+ * @returns True when the provider routes to other wallets.
28
+ * @see detectEvmWalletFromProvider
29
+ * @see getEvmInjectedProviders
30
+ * @notInstrumented
31
+ */
32
+ const isProviderSelectionRouter = ({ provider }) => {
33
+ const candidate = provider;
34
+ const collectsOtherProviders = typeof candidate.addProvider === "function";
35
+ const promptsForExtension = typeof candidate.selectExtension === "function";
36
+ return collectsOtherProviders && promptsForExtension;
37
+ };
38
+
39
+ //#endregion
8
40
  //#region src/windowInjected/utils/detectEvmWalletFromProvider/detectEvmWalletFromProvider.ts
9
41
  const getSpriteIcon = (name$1) => `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL}#${name$1}`;
10
42
  /**
@@ -21,6 +53,7 @@ const getSpriteIcon = (name$1) => `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONI
21
53
  * @notInstrumented
22
54
  */
23
55
  const detectEvmWalletFromProvider = ({ provider }) => {
56
+ if (isProviderSelectionRouter({ provider })) return null;
24
57
  const p = provider;
25
58
  if (p.isCoinbaseWallet) return {
26
59
  displayName: "Coinbase Wallet",
@@ -1 +1 @@
1
- {"version":3,"file":"windowInjected.cjs","names":["DYNAMIC_ICONIC_SPRITE_URL","name","createWalletProviderFromEIP1193Provider","WalletProviderPriority","packageName","packageVersion"],"sources":["../src/windowInjected/utils/detectEvmWalletFromProvider/detectEvmWalletFromProvider.ts","../src/windowInjected/utils/getEvmInjectedProviders/getEvmInjectedProviders.ts","../src/windowInjected/addEvmWindowInjectedExtension/addEvmWindowInjectedExtension.ts","../src/exports/windowInjected.ts"],"sourcesContent":["import { DYNAMIC_ICONIC_SPRITE_URL } from '@dynamic-labs-sdk/client/core';\n\nimport type { EIP1193Provider } from '../../../EvmWalletProvider.types';\nimport type {\n EvmWalletDetectionResult,\n KnownEvmWalletFlags,\n} from '../../windowInjected.types';\n\ntype ProviderWithFlags = EIP1193Provider & KnownEvmWalletFlags;\n\ntype DetectEvmWalletFromProviderParams = {\n provider: EIP1193Provider;\n};\n\nconst getSpriteIcon = (name: string): string =>\n `${DYNAMIC_ICONIC_SPRITE_URL}#${name}`;\n\n/**\n * Detects wallet identity from provider flags using hardcoded checks.\n *\n * This is essential for wallet app in-app browsers where the wallet injects\n * its provider with identifying flags (e.g., isMetaMask, isCoinbaseWallet).\n *\n * The order of checks matters - more specific flags should be checked first\n * to avoid false positives (e.g., some MetaMask forks also set isMetaMask).\n *\n * @param params.provider - The EIP-1193 provider to detect\n * @returns Detection result with displayName and icon, or null if unknown\n * @notInstrumented\n */\n \nexport const detectEvmWalletFromProvider = ({\n provider,\n}: DetectEvmWalletFromProviderParams): EvmWalletDetectionResult | null => {\n const p = provider as ProviderWithFlags;\n\n // Check more specific flags first to avoid false positives\n // Many wallets set isMetaMask for compatibility, so check their unique flags first\n\n if (p.isCoinbaseWallet) {\n return {\n displayName: 'Coinbase Wallet',\n icon: getSpriteIcon('coinbasewallet'),\n };\n }\n\n if (p.isBraveWallet) {\n return {\n displayName: 'Brave Wallet',\n icon: getSpriteIcon('brave'),\n };\n }\n\n if (p.isPhantom) {\n return {\n displayName: 'Phantom',\n icon: getSpriteIcon('phantom'),\n };\n }\n\n if (p.isRabby) {\n return {\n displayName: 'Rabby Wallet',\n icon: getSpriteIcon('rabby'),\n };\n }\n\n if (p.isTrust) {\n return {\n displayName: 'Trust Wallet',\n icon: getSpriteIcon('trust'),\n };\n }\n\n if (p.isFrame) {\n return {\n displayName: 'Frame',\n icon: getSpriteIcon('frame'),\n };\n }\n\n if (p.isOkxWallet) {\n return {\n displayName: 'OKX Wallet',\n icon: getSpriteIcon('okx'),\n };\n }\n\n if (p.isZerion) {\n return {\n displayName: 'Zerion',\n icon: getSpriteIcon('zerion'),\n };\n }\n\n // MetaMask check comes last because many wallets set isMetaMask for compatibility\n if (p.isMetaMask) {\n return {\n displayName: 'MetaMask',\n icon: getSpriteIcon('metamask'),\n };\n }\n\n // Unknown wallet - don't register\n return null;\n};\n","import { getAllProvidersFromWindow } from '@dynamic-labs-sdk/client/core';\n\nimport type { EIP1193Provider } from '../../../EvmWalletProvider.types';\n\n// eslint-disable-next-line custom-rules/ban-ethereum-eth-terms -- window.ethereum is the standard EIP-1193 injection point\nconst EVM_PROVIDER_LOCATOR = 'ethereum';\n\n/**\n * Gets all EIP-1193 providers from window.ethereum and window.ethereum.providers.\n *\n * This function collects all injected EVM providers from the window object,\n * handling both single provider and multi-provider (EIP-5749) scenarios.\n *\n * This is particularly important for wallet app in-app browsers (e.g., MetaMask\n * mobile, Trust Wallet, Coinbase Wallet) which inject their provider into\n * window.ethereum rather than announcing via EIP-6963.\n *\n * @returns Array of all detected EIP-1193 providers\n * @notInstrumented\n */\nexport const getEvmInjectedProviders = (): EIP1193Provider[] => {\n const providers = getAllProvidersFromWindow<EIP1193Provider>(\n EVM_PROVIDER_LOCATOR\n );\n\n // Filter to only include objects that look like EIP-1193 providers\n return providers.filter(isEIP1193Provider);\n};\n\n// eslint-disable-next-line custom-rules/one-function-per-file\nconst isEIP1193Provider = (provider: unknown): provider is EIP1193Provider => {\n if (typeof provider !== 'object' || provider === null) {\n return false;\n }\n\n const p = provider as Record<string, unknown>;\n\n // Must have request method - the core EIP-1193 requirement\n return typeof p.request === 'function';\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createWalletProviderFromEIP1193Provider } from '../../utils/createWalletProviderFromEIP1193Provider';\nimport { detectEvmWalletFromProvider } from '../utils/detectEvmWalletFromProvider';\nimport { getEvmInjectedProviders } from '../utils/getEvmInjectedProviders';\n\nexport const EVM_WINDOW_INJECTED_EXTENSION_KEY = 'evmWindowInjected';\n\n/**\n * Adds the EVM window injected extension to the Dynamic client.\n *\n * This extension enables integration with wallets that are injected into window.ethereum\n * but don't support EIP-6963. The primary use case is **wallet app in-app browsers**\n * (e.g., MetaMask mobile browser, Trust Wallet browser, Coinbase Wallet browser),\n * which typically inject their provider into window.ethereum rather than announcing\n * via EIP-6963.\n *\n * Also useful as a fallback for:\n * - Older browser extension wallets that predate EIP-6963\n * - Safari or certain mobile browsers with limited EIP-6963 support\n *\n * Wallet providers registered via this extension have lower priority than EIP-6963\n * providers, so if a wallet supports both, the EIP-6963 version will be used.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addEvmWindowInjectedExtension = (\n client = getDefaultClient()\n): void => {\n if (\n hasExtension({ extensionKey: EVM_WINDOW_INJECTED_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension(\n { extensionKey: EVM_WINDOW_INJECTED_EXTENSION_KEY },\n client\n );\n registerEvmNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n const providers = getEvmInjectedProviders();\n\n providers.forEach((provider) => {\n const walletInfo = detectEvmWalletFromProvider({ provider });\n\n if (!walletInfo) {\n return;\n }\n\n const walletProvider = createWalletProviderFromEIP1193Provider(\n {\n displayName: walletInfo.displayName,\n eip1193: provider,\n icon: walletInfo.icon,\n },\n client\n );\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n });\n};\n","/**\n * EVM Window Injected Extension\n *\n * Provides support for wallets that are injected into window.ethereum rather than\n * announcing via EIP-6963. This is primarily needed for **wallet app in-app\n * browsers** (e.g., MetaMask mobile browser, Trust Wallet browser, Coinbase\n * Wallet browser).\n *\n * @example\n * ```typescript\n * import { addEIP6963Extension } from '@dynamic-labs-sdk/evm/eip6963';\n * import { addEvmWindowInjectedExtension } from '@dynamic-labs-sdk/evm/window-injected';\n *\n * // Add both extensions - EIP-6963 takes priority, window injected is fallback\n * addEIP6963Extension(client);\n * addEvmWindowInjectedExtension(client);\n * ```\n */\nimport { 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 { addEvmWindowInjectedExtension } from '../windowInjected/addEvmWindowInjectedExtension';\n"],"mappings":";;;;;;;;AAcA,MAAM,iBAAiB,WACrB,GAAGA,wDAA0B,GAAGC;;;;;;;;;;;;;;AAgBlC,MAAa,+BAA+B,EAC1C,eACwE;CACxE,MAAM,IAAI;AAKV,KAAI,EAAE,iBACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,iBAAiB;EACtC;AAGH,KAAI,EAAE,cACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,UACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,UAAU;EAC/B;AAGH,KAAI,EAAE,QACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,QACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,QACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,YACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,MAAM;EAC3B;AAGH,KAAI,EAAE,SACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,SAAS;EAC9B;AAIH,KAAI,EAAE,WACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,WAAW;EAChC;AAIH,QAAO;;;;;ACnGT,MAAM,uBAAuB;;;;;;;;;;;;;;AAe7B,MAAa,gCAAmD;AAM9D,qEAJE,qBACD,CAGgB,OAAO,kBAAkB;;AAI5C,MAAM,qBAAqB,aAAmD;AAC5E,KAAI,OAAO,aAAa,YAAY,aAAa,KAC/C,QAAO;AAMT,QAAO,OAHG,SAGM,YAAY;;;;;ACzB9B,MAAa,oCAAoC;;;;;;;;;;;;;;;;;;;;AAqBjD,MAAa,iCACX,8DAA2B,KAClB;AACT,qDACe,EAAE,cAAc,mCAAmC,EAAE,OAAO,CAEzE;AAGF,sDACE,EAAE,cAAc,mCAAmC,EACnD,OACD;AACD,6DAAkC,OAAO;CAEzC,MAAM,sFAAmD,OAAO;AAGhE,CAFkB,yBAAyB,CAEjC,SAAS,aAAa;EAC9B,MAAM,aAAa,4BAA4B,EAAE,UAAU,CAAC;AAE5D,MAAI,CAAC,WACH;EAGF,MAAM,iBAAiBC,wFACrB;GACE,aAAa,WAAW;GACxB,SAAS;GACT,MAAM,WAAW;GAClB,EACD,OACD;AAED,yBAAuB,SAAS;GAC9B,UAAUC,qDAAuB;GACjC;GACD,CAAC;GACF;;;;;;;;;;;;;;;;;;;;;;;mEChDiBC,sBAAaC,wBAAe"}
1
+ {"version":3,"file":"windowInjected.cjs","names":["DYNAMIC_ICONIC_SPRITE_URL","name","createWalletProviderFromEIP1193Provider","WalletProviderPriority","packageName","packageVersion"],"sources":["../src/windowInjected/utils/isProviderSelectionRouter/isProviderSelectionRouter.ts","../src/windowInjected/utils/detectEvmWalletFromProvider/detectEvmWalletFromProvider.ts","../src/windowInjected/utils/getEvmInjectedProviders/getEvmInjectedProviders.ts","../src/windowInjected/addEvmWindowInjectedExtension/addEvmWindowInjectedExtension.ts","../src/exports/windowInjected.ts"],"sourcesContent":["import type { EIP1193Provider } from '../../../EvmWalletProvider.types';\n\ntype IsProviderSelectionRouterParams = {\n provider: EIP1193Provider;\n};\n\ntype ProviderSelectionRouter = {\n addProvider: (provider: unknown) => void;\n selectExtension: () => Promise<void>;\n};\n\n/**\n * True when the injected provider is a router that collects the other injected\n * providers and forwards requests to whichever extension the user picks, rather\n * than belonging to a single wallet. Routers mirror MetaMask's identity flags,\n * so treating one as a wallet reports wallets that are not installed. Phantom\n * injects such a router into `window.ethereum` when its EVM setting asks which\n * wallet to use.\n *\n * @example\n * ```ts\n * const provider = window.ethereum as EIP1193Provider;\n *\n * if (isProviderSelectionRouter({ provider })) {\n * // no single wallet owns this provider\n * }\n * ```\n *\n * @param params.provider - The EIP-1193 provider to inspect.\n * @returns True when the provider routes to other wallets.\n * @see detectEvmWalletFromProvider\n * @see getEvmInjectedProviders\n * @notInstrumented\n */\nexport const isProviderSelectionRouter = ({\n provider,\n}: IsProviderSelectionRouterParams): boolean => {\n const candidate = provider as Partial<ProviderSelectionRouter>;\n\n const collectsOtherProviders = typeof candidate.addProvider === 'function';\n const promptsForExtension = typeof candidate.selectExtension === 'function';\n\n return collectsOtherProviders && promptsForExtension;\n};\n","import { DYNAMIC_ICONIC_SPRITE_URL } from '@dynamic-labs-sdk/client/core';\n\nimport type { EIP1193Provider } from '../../../EvmWalletProvider.types';\nimport type {\n EvmWalletDetectionResult,\n KnownEvmWalletFlags,\n} from '../../windowInjected.types';\nimport { isProviderSelectionRouter } from '../isProviderSelectionRouter';\n\ntype ProviderWithFlags = EIP1193Provider & KnownEvmWalletFlags;\n\ntype DetectEvmWalletFromProviderParams = {\n provider: EIP1193Provider;\n};\n\nconst getSpriteIcon = (name: string): string =>\n `${DYNAMIC_ICONIC_SPRITE_URL}#${name}`;\n\n/**\n * Detects wallet identity from provider flags using hardcoded checks.\n *\n * This is essential for wallet app in-app browsers where the wallet injects\n * its provider with identifying flags (e.g., isMetaMask, isCoinbaseWallet).\n *\n * The order of checks matters - more specific flags should be checked first\n * to avoid false positives (e.g., some MetaMask forks also set isMetaMask).\n *\n * @param params.provider - The EIP-1193 provider to detect\n * @returns Detection result with displayName and icon, or null if unknown\n * @notInstrumented\n */\n \nexport const detectEvmWalletFromProvider = ({\n provider,\n}: DetectEvmWalletFromProviderParams): EvmWalletDetectionResult | null => {\n if (isProviderSelectionRouter({ provider })) {\n return null;\n }\n\n const p = provider as ProviderWithFlags;\n\n // Check more specific flags first to avoid false positives\n // Many wallets set isMetaMask for compatibility, so check their unique flags first\n\n if (p.isCoinbaseWallet) {\n return {\n displayName: 'Coinbase Wallet',\n icon: getSpriteIcon('coinbasewallet'),\n };\n }\n\n if (p.isBraveWallet) {\n return {\n displayName: 'Brave Wallet',\n icon: getSpriteIcon('brave'),\n };\n }\n\n if (p.isPhantom) {\n return {\n displayName: 'Phantom',\n icon: getSpriteIcon('phantom'),\n };\n }\n\n if (p.isRabby) {\n return {\n displayName: 'Rabby Wallet',\n icon: getSpriteIcon('rabby'),\n };\n }\n\n if (p.isTrust) {\n return {\n displayName: 'Trust Wallet',\n icon: getSpriteIcon('trust'),\n };\n }\n\n if (p.isFrame) {\n return {\n displayName: 'Frame',\n icon: getSpriteIcon('frame'),\n };\n }\n\n if (p.isOkxWallet) {\n return {\n displayName: 'OKX Wallet',\n icon: getSpriteIcon('okx'),\n };\n }\n\n if (p.isZerion) {\n return {\n displayName: 'Zerion',\n icon: getSpriteIcon('zerion'),\n };\n }\n\n // MetaMask check comes last because many wallets set isMetaMask for compatibility\n if (p.isMetaMask) {\n return {\n displayName: 'MetaMask',\n icon: getSpriteIcon('metamask'),\n };\n }\n\n // Unknown wallet - don't register\n return null;\n};\n","import { getAllProvidersFromWindow } from '@dynamic-labs-sdk/client/core';\n\nimport type { EIP1193Provider } from '../../../EvmWalletProvider.types';\n\n// eslint-disable-next-line custom-rules/ban-ethereum-eth-terms -- window.ethereum is the standard EIP-1193 injection point\nconst EVM_PROVIDER_LOCATOR = 'ethereum';\n\n/**\n * Gets all EIP-1193 providers from window.ethereum and window.ethereum.providers.\n *\n * This function collects all injected EVM providers from the window object,\n * handling both single provider and multi-provider (EIP-5749) scenarios.\n *\n * This is particularly important for wallet app in-app browsers (e.g., MetaMask\n * mobile, Trust Wallet, Coinbase Wallet) which inject their provider into\n * window.ethereum rather than announcing via EIP-6963.\n *\n * @returns Array of all detected EIP-1193 providers\n * @notInstrumented\n */\nexport const getEvmInjectedProviders = (): EIP1193Provider[] => {\n const providers = getAllProvidersFromWindow<EIP1193Provider>(\n EVM_PROVIDER_LOCATOR\n );\n\n // Filter to only include objects that look like EIP-1193 providers\n return providers.filter(isEIP1193Provider);\n};\n\n// eslint-disable-next-line custom-rules/one-function-per-file\nconst isEIP1193Provider = (provider: unknown): provider is EIP1193Provider => {\n if (typeof provider !== 'object' || provider === null) {\n return false;\n }\n\n const p = provider as Record<string, unknown>;\n\n // Must have request method - the core EIP-1193 requirement\n return typeof p.request === 'function';\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createWalletProviderFromEIP1193Provider } from '../../utils/createWalletProviderFromEIP1193Provider';\nimport { detectEvmWalletFromProvider } from '../utils/detectEvmWalletFromProvider';\nimport { getEvmInjectedProviders } from '../utils/getEvmInjectedProviders';\n\nexport const EVM_WINDOW_INJECTED_EXTENSION_KEY = 'evmWindowInjected';\n\n/**\n * Adds the EVM window injected extension to the Dynamic client.\n *\n * This extension enables integration with wallets that are injected into window.ethereum\n * but don't support EIP-6963. The primary use case is **wallet app in-app browsers**\n * (e.g., MetaMask mobile browser, Trust Wallet browser, Coinbase Wallet browser),\n * which typically inject their provider into window.ethereum rather than announcing\n * via EIP-6963.\n *\n * Also useful as a fallback for:\n * - Older browser extension wallets that predate EIP-6963\n * - Safari or certain mobile browsers with limited EIP-6963 support\n *\n * Wallet providers registered via this extension have lower priority than EIP-6963\n * providers, so if a wallet supports both, the EIP-6963 version will be used.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addEvmWindowInjectedExtension = (\n client = getDefaultClient()\n): void => {\n if (\n hasExtension({ extensionKey: EVM_WINDOW_INJECTED_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension(\n { extensionKey: EVM_WINDOW_INJECTED_EXTENSION_KEY },\n client\n );\n registerEvmNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n const providers = getEvmInjectedProviders();\n\n providers.forEach((provider) => {\n const walletInfo = detectEvmWalletFromProvider({ provider });\n\n if (!walletInfo) {\n return;\n }\n\n const walletProvider = createWalletProviderFromEIP1193Provider(\n {\n displayName: walletInfo.displayName,\n eip1193: provider,\n icon: walletInfo.icon,\n },\n client\n );\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n });\n};\n","/**\n * EVM Window Injected Extension\n *\n * Provides support for wallets that are injected into window.ethereum rather than\n * announcing via EIP-6963. This is primarily needed for **wallet app in-app\n * browsers** (e.g., MetaMask mobile browser, Trust Wallet browser, Coinbase\n * Wallet browser).\n *\n * @example\n * ```typescript\n * import { addEIP6963Extension } from '@dynamic-labs-sdk/evm/eip6963';\n * import { addEvmWindowInjectedExtension } from '@dynamic-labs-sdk/evm/window-injected';\n *\n * // Add both extensions - EIP-6963 takes priority, window injected is fallback\n * addEIP6963Extension(client);\n * addEvmWindowInjectedExtension(client);\n * ```\n */\nimport { 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 { addEvmWindowInjectedExtension } from '../windowInjected/addEvmWindowInjectedExtension';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAa,6BAA6B,EACxC,eAC8C;CAC9C,MAAM,YAAY;CAElB,MAAM,yBAAyB,OAAO,UAAU,gBAAgB;CAChE,MAAM,sBAAsB,OAAO,UAAU,oBAAoB;AAEjE,QAAO,0BAA0B;;;;;AC3BnC,MAAM,iBAAiB,WACrB,GAAGA,wDAA0B,GAAGC;;;;;;;;;;;;;;AAgBlC,MAAa,+BAA+B,EAC1C,eACwE;AACxE,KAAI,0BAA0B,EAAE,UAAU,CAAC,CACzC,QAAO;CAGT,MAAM,IAAI;AAKV,KAAI,EAAE,iBACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,iBAAiB;EACtC;AAGH,KAAI,EAAE,cACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,UACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,UAAU;EAC/B;AAGH,KAAI,EAAE,QACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,QACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,QACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,QAAQ;EAC7B;AAGH,KAAI,EAAE,YACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,MAAM;EAC3B;AAGH,KAAI,EAAE,SACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,SAAS;EAC9B;AAIH,KAAI,EAAE,WACJ,QAAO;EACL,aAAa;EACb,MAAM,cAAc,WAAW;EAChC;AAIH,QAAO;;;;;ACxGT,MAAM,uBAAuB;;;;;;;;;;;;;;AAe7B,MAAa,gCAAmD;AAM9D,qEAJE,qBACD,CAGgB,OAAO,kBAAkB;;AAI5C,MAAM,qBAAqB,aAAmD;AAC5E,KAAI,OAAO,aAAa,YAAY,aAAa,KAC/C,QAAO;AAMT,QAAO,OAHG,SAGM,YAAY;;;;;ACzB9B,MAAa,oCAAoC;;;;;;;;;;;;;;;;;;;;AAqBjD,MAAa,iCACX,8DAA2B,KAClB;AACT,qDACe,EAAE,cAAc,mCAAmC,EAAE,OAAO,CAEzE;AAGF,sDACE,EAAE,cAAc,mCAAmC,EACnD,OACD;AACD,6DAAkC,OAAO;CAEzC,MAAM,sFAAmD,OAAO;AAGhE,CAFkB,yBAAyB,CAEjC,SAAS,aAAa;EAC9B,MAAM,aAAa,4BAA4B,EAAE,UAAU,CAAC;AAE5D,MAAI,CAAC,WACH;EAGF,MAAM,iBAAiBC,wFACrB;GACE,aAAa,WAAW;GACxB,SAAS;GACT,MAAM,WAAW;GAClB,EACD,OACD;AAED,yBAAuB,SAAS;GAC9B,UAAUC,qDAAuB;GACjC;GACD,CAAC;GACF;;;;;;;;;;;;;;;;;;;;;;;mEChDiBC,sBAAaC,wBAAe"}