@dynamic-labs-sdk/evm 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/{addEIP6963Extension-B9r9lgc0.cjs.js → addEIP6963Extension-DmmAGx88.cjs.js} +2 -2
  2. package/dist/{addEIP6963Extension-B9r9lgc0.cjs.js.map → addEIP6963Extension-DmmAGx88.cjs.js.map} +1 -1
  3. package/dist/{addEIP6963Extension-D7Sjfh-Q.esm.js → addEIP6963Extension-Fgvl12k3.esm.js} +2 -2
  4. package/dist/{addEIP6963Extension-D7Sjfh-Q.esm.js.map → addEIP6963Extension-Fgvl12k3.esm.js.map} +1 -1
  5. package/dist/{addWaasEvmExtension-Da1oL1Uq.cjs.js → addWaasEvmExtension-BK9KK6r2.cjs.js} +2 -2
  6. package/dist/{addWaasEvmExtension-Da1oL1Uq.cjs.js.map → addWaasEvmExtension-BK9KK6r2.cjs.js.map} +1 -1
  7. package/dist/{addWaasEvmExtension-C4J963oh.esm.js → addWaasEvmExtension-CL5LSmDe.esm.js} +2 -2
  8. package/dist/{addWaasEvmExtension-C4J963oh.esm.js.map → addWaasEvmExtension-CL5LSmDe.esm.js.map} +1 -1
  9. package/dist/eip6963.cjs.js +3 -3
  10. package/dist/eip6963.esm.js +3 -3
  11. package/dist/index.cjs.js +4 -4
  12. package/dist/index.esm.js +4 -4
  13. package/dist/{package-DQwdpE--.cjs.js → package-4YO4_z3W.cjs.js} +2 -2
  14. package/dist/package-4YO4_z3W.cjs.js.map +1 -0
  15. package/dist/{package-5YyeyST6.esm.js → package-bIBsANCH.esm.js} +2 -2
  16. package/dist/package-bIBsANCH.esm.js.map +1 -0
  17. package/dist/{registerEvmNetworkProviderBuilder-DDwm5_Df.cjs.js → registerEvmNetworkProviderBuilder-CQfGsiEJ.cjs.js} +4 -3
  18. package/dist/registerEvmNetworkProviderBuilder-CQfGsiEJ.cjs.js.map +1 -0
  19. package/dist/{registerEvmNetworkProviderBuilder-CkGuzJNe.esm.js → registerEvmNetworkProviderBuilder-Cn6YtnaH.esm.js} +4 -3
  20. package/dist/registerEvmNetworkProviderBuilder-Cn6YtnaH.esm.js.map +1 -0
  21. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  22. package/dist/utils/fetchEvmBalance/fetchEvmBalance.d.ts +3 -3
  23. package/dist/utils/fetchEvmBalance/fetchEvmBalance.d.ts.map +1 -1
  24. package/dist/viem.cjs.js +1 -1
  25. package/dist/viem.esm.js +1 -1
  26. package/dist/waas.cjs.js +3 -3
  27. package/dist/waas.esm.js +3 -3
  28. package/dist/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.d.ts.map +1 -1
  29. package/dist/walletConnect.cjs.js +4 -2
  30. package/dist/walletConnect.cjs.js.map +1 -1
  31. package/dist/walletConnect.esm.js +4 -2
  32. package/dist/walletConnect.esm.js.map +1 -1
  33. package/dist/windowInjected.cjs.js +2 -2
  34. package/dist/windowInjected.esm.js +2 -2
  35. package/package.json +5 -5
  36. package/dist/package-5YyeyST6.esm.js.map +0 -1
  37. package/dist/package-DQwdpE--.cjs.js.map +0 -1
  38. package/dist/registerEvmNetworkProviderBuilder-CkGuzJNe.esm.js.map +0 -1
  39. package/dist/registerEvmNetworkProviderBuilder-DDwm5_Df.cjs.js.map +0 -1
@@ -1,8 +1,8 @@
1
- import type { DynamicClient } from '@dynamic-labs-sdk/client';
1
+ import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';
2
2
  type FetchEvmBalanceParams = {
3
3
  address: string;
4
- rpcUrl: string;
4
+ networkData: NetworkData;
5
5
  };
6
- export declare const fetchEvmBalance: ({ address, rpcUrl }: FetchEvmBalanceParams, client: DynamicClient) => Promise<string | null>;
6
+ export declare const fetchEvmBalance: ({ address, networkData }: FetchEvmBalanceParams, client: DynamicClient) => Promise<string | null>;
7
7
  export {};
8
8
  //# sourceMappingURL=fetchEvmBalance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetchEvmBalance.d.ts","sourceRoot":"","sources":["../../../src/utils/fetchEvmBalance/fetchEvmBalance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAK9D,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,eAAe,wBACL,qBAAqB,UAClC,aAAa,KACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAsEvB,CAAC"}
1
+ {"version":3,"file":"fetchEvmBalance.d.ts","sourceRoot":"","sources":["../../../src/utils/fetchEvmBalance/fetchEvmBalance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAK3E,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,eAAe,6BACA,qBAAqB,UACvC,aAAa,KACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAuEvB,CAAC"}
package/dist/viem.cjs.js CHANGED
@@ -1,4 +1,4 @@
1
- const require_package = require('./package-DQwdpE--.cjs.js');
1
+ const require_package = require('./package-4YO4_z3W.cjs.js');
2
2
  const require_mapNetworkDataToViemChain = require('./mapNetworkDataToViemChain-DFVApcmV.cjs.js');
3
3
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
4
4
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
package/dist/viem.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as version, t as name } from "./package-5YyeyST6.esm.js";
1
+ import { n as version, t as name } from "./package-bIBsANCH.esm.js";
2
2
  import { t as mapNetworkDataToViemChain } from "./mapNetworkDataToViemChain-BeqJB1Af.esm.js";
3
3
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
4
4
  import { assertDefined, getDefaultClient, getWalletProviderFromWalletAccount } from "@dynamic-labs-sdk/client/core";
package/dist/waas.cjs.js CHANGED
@@ -1,6 +1,6 @@
1
- const require_package = require('./package-DQwdpE--.cjs.js');
2
- require('./registerEvmNetworkProviderBuilder-DDwm5_Df.cjs.js');
3
- const require_addWaasEvmExtension = require('./addWaasEvmExtension-Da1oL1Uq.cjs.js');
1
+ const require_package = require('./package-4YO4_z3W.cjs.js');
2
+ require('./registerEvmNetworkProviderBuilder-CQfGsiEJ.cjs.js');
3
+ const require_addWaasEvmExtension = require('./addWaasEvmExtension-BK9KK6r2.cjs.js');
4
4
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
5
5
 
6
6
  //#region src/exports/waas.ts
package/dist/waas.esm.js CHANGED
@@ -1,6 +1,6 @@
1
- import { n as version, t as name } from "./package-5YyeyST6.esm.js";
2
- import "./registerEvmNetworkProviderBuilder-CkGuzJNe.esm.js";
3
- import { t as addWaasEvmExtension } from "./addWaasEvmExtension-C4J963oh.esm.js";
1
+ import { n as version, t as name } from "./package-bIBsANCH.esm.js";
2
+ import "./registerEvmNetworkProviderBuilder-Cn6YtnaH.esm.js";
3
+ import { t as addWaasEvmExtension } from "./addWaasEvmExtension-CL5LSmDe.esm.js";
4
4
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
5
5
 
6
6
  //#region src/exports/waas.ts
@@ -1 +1 @@
1
- {"version":3,"file":"recoverEvmWalletConnectWalletProviders.d.ts","sourceRoot":"","sources":["../../../src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAU9D,eAAO,MAAM,sCAAsC,WACzC,aAAa,kBA4BtB,CAAC"}
1
+ {"version":3,"file":"recoverEvmWalletConnectWalletProviders.d.ts","sourceRoot":"","sources":["../../../src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAU9D,eAAO,MAAM,sCAAsC,WACzC,aAAa,kBAkCtB,CAAC"}
@@ -1,5 +1,5 @@
1
- const require_package = require('./package-DQwdpE--.cjs.js');
2
- const require_registerEvmNetworkProviderBuilder = require('./registerEvmNetworkProviderBuilder-DDwm5_Df.cjs.js');
1
+ const require_package = require('./package-4YO4_z3W.cjs.js');
2
+ const require_registerEvmNetworkProviderBuilder = require('./registerEvmNetworkProviderBuilder-CQfGsiEJ.cjs.js');
3
3
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
4
4
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
5
5
  let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
@@ -137,8 +137,10 @@ const recoverEvmWalletConnectWalletProviders = async (client) => {
137
137
  * Recreate the wallet providers for all existing EVM sessions
138
138
  */
139
139
  const sessions = (await (0, _dynamic_labs_sdk_wallet_connect_core.getSignClient)(client)).session.getAll();
140
+ const currentTime = Math.floor(Date.now() / 1e3);
140
141
  for (const session of sessions) {
141
142
  if (!("eip155" in session.namespaces)) continue;
143
+ if (session.expiry <= currentTime) continue;
142
144
  const walletProvider = await createWalletProviderFromEIP155Session({ sessionTopic: session.topic }, client);
143
145
  (0, _dynamic_labs_sdk_client_core.getWalletProviderRegistry)(client).register({
144
146
  priority: _dynamic_labs_sdk_client_core.WalletProviderPriority.WALLET_SDK,
@@ -1 +1 @@
1
- {"version":3,"file":"walletConnect.cjs.js","names":["methodsThatRequireUserAction: string[]","SessionClosedUnexpectedlyError","WalletProviderEnum","getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId']","switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork']","request: WalletConnectEvmWalletProvider['request']","disconnect: NonNullable<\n WalletConnectEvmWalletProvider['disconnect']\n >","SDK_ERRORS","disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount']","signMessage: WalletConnectEvmWalletProvider['signMessage']","getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses']","formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress']","viemGetAddress","terminate: WalletConnectEvmWalletProvider['terminate']","WalletProviderPriority","CHAINS_INFO_MAP","packageName","packageVersion"],"sources":["../src/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.ts","../src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts","../src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.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 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 { 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\nexport const createWalletProviderFromEIP155Session = async (\n { sessionTopic }: CreateWalletProviderFromEIP155SessionParams,\n client: DynamicClient\n): Promise<WalletConnectEvmWalletProvider> => {\n const signClient = await getSignClient(client);\n\n const getSession = () => {\n const session = signClient.session.get(sessionTopic);\n\n if (!session) {\n void disconnect();\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 (args) => {\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 return signClient.request({\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\n const disconnect: NonNullable<\n WalletConnectEvmWalletProvider['disconnect']\n > = async () => {\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 };\n\n /**\n * We actually clear up the entire WC session and its wallet provider\n */\n const disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount'] =\n async () => disconnect();\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 terminate: WalletConnectEvmWalletProvider['terminate'] = async () =>\n cleanupEventEmitter();\n\n return {\n chain: 'EVM',\n disconnect,\n disconnectWalletAccount,\n get events() {\n return getEventEmitter();\n },\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 terminate,\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\nexport const recoverEvmWalletConnectWalletProviders = async (\n client: DynamicClient\n) => {\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 for (const session of sessions) {\n if (!('eip155' in session.namespaces)) {\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\nexport const addWalletConnectEvmExtension = async (\n client = getDefaultClient()\n) => {\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 { 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 createApiClient,\n createSignInMessageStatement,\n getCore,\n getDefaultClient,\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 { evmApiChainName, 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 */\nexport const connectAndVerifyWithWalletConnectEvm = async (\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n const core = getCore(client);\n const apiClient = createApiClient({}, client);\n\n const universalLink = core.metadata?.universalLink;\n\n assertDefined(universalLink, 'Universal link is not set');\n\n const url = new URL(universalLink);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n /**\n * Customer enabled networks, with mainnet first if available.\n */\n const evmNetworks = client.projectSettings.networks\n ?.find((network) => network.chainName === evmApiChainName)\n ?.networks?.sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertDefined(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 apiClient.getNonce({\n environmentId: core.environmentId,\n });\n\n assertDefined(nonce, 'Failed to get nonce');\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 { assertDefined } 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 { evmApiChainName, 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\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 const evmNetworks = client.projectSettings.networks?.find(\n (network) => network.chainName === evmApiChainName\n )?.networks;\n\n assertDefined(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\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.cjs.js","names":["methodsThatRequireUserAction: string[]","SessionClosedUnexpectedlyError","WalletProviderEnum","getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId']","switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork']","request: WalletConnectEvmWalletProvider['request']","disconnect: NonNullable<\n WalletConnectEvmWalletProvider['disconnect']\n >","SDK_ERRORS","disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount']","signMessage: WalletConnectEvmWalletProvider['signMessage']","getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses']","formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress']","viemGetAddress","terminate: WalletConnectEvmWalletProvider['terminate']","WalletProviderPriority","CHAINS_INFO_MAP","packageName","packageVersion"],"sources":["../src/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.ts","../src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts","../src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.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 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 { 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\nexport const createWalletProviderFromEIP155Session = async (\n { sessionTopic }: CreateWalletProviderFromEIP155SessionParams,\n client: DynamicClient\n): Promise<WalletConnectEvmWalletProvider> => {\n const signClient = await getSignClient(client);\n\n const getSession = () => {\n const session = signClient.session.get(sessionTopic);\n\n if (!session) {\n void disconnect();\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 (args) => {\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 return signClient.request({\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\n const disconnect: NonNullable<\n WalletConnectEvmWalletProvider['disconnect']\n > = async () => {\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 };\n\n /**\n * We actually clear up the entire WC session and its wallet provider\n */\n const disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount'] =\n async () => disconnect();\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 terminate: WalletConnectEvmWalletProvider['terminate'] = async () =>\n cleanupEventEmitter();\n\n return {\n chain: 'EVM',\n disconnect,\n disconnectWalletAccount,\n get events() {\n return getEventEmitter();\n },\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 terminate,\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\nexport const recoverEvmWalletConnectWalletProviders = async (\n client: DynamicClient\n) => {\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\nexport const addWalletConnectEvmExtension = async (\n client = getDefaultClient()\n) => {\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 { 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 createApiClient,\n createSignInMessageStatement,\n getCore,\n getDefaultClient,\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 { evmApiChainName, 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 */\nexport const connectAndVerifyWithWalletConnectEvm = async (\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n const core = getCore(client);\n const apiClient = createApiClient({}, client);\n\n const universalLink = core.metadata?.universalLink;\n\n assertDefined(universalLink, 'Universal link is not set');\n\n const url = new URL(universalLink);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n /**\n * Customer enabled networks, with mainnet first if available.\n */\n const evmNetworks = client.projectSettings.networks\n ?.find((network) => network.chainName === evmApiChainName)\n ?.networks?.sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertDefined(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 apiClient.getNonce({\n environmentId: core.environmentId,\n });\n\n assertDefined(nonce, 'Failed to get nonce');\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 { assertDefined } 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 { evmApiChainName, 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\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 const evmNetworks = client.projectSettings.networks?.find(\n (network) => network.chainName === evmApiChainName\n )?.networks;\n\n assertDefined(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\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,5 +1,5 @@
1
- import { n as version, t as name } from "./package-5YyeyST6.esm.js";
2
- import { t as registerEvmNetworkProviderBuilder } from "./registerEvmNetworkProviderBuilder-CkGuzJNe.esm.js";
1
+ import { n as version, t as name } from "./package-bIBsANCH.esm.js";
2
+ import { t as registerEvmNetworkProviderBuilder } from "./registerEvmNetworkProviderBuilder-Cn6YtnaH.esm.js";
3
3
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
4
4
  import { CHAINS_INFO_MAP, WalletProviderPriority, assertDefined, createApiClient, createSignInMessageStatement, emitEvent, filterDuplicates, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getCore, getDefaultClient, getWalletProviderRegistry, registerExtension, switchActiveNetworkInLastKnownRegistry, waitForProjectSettings } from "@dynamic-labs-sdk/client/core";
5
5
  import { getDefaultClient as getDefaultClient$1, hasExtension as hasExtension$1 } from "@dynamic-labs-sdk/client";
@@ -137,8 +137,10 @@ const recoverEvmWalletConnectWalletProviders = async (client) => {
137
137
  * Recreate the wallet providers for all existing EVM sessions
138
138
  */
139
139
  const sessions = (await getSignClient(client)).session.getAll();
140
+ const currentTime = Math.floor(Date.now() / 1e3);
140
141
  for (const session of sessions) {
141
142
  if (!("eip155" in session.namespaces)) continue;
143
+ if (session.expiry <= currentTime) continue;
142
144
  const walletProvider = await createWalletProviderFromEIP155Session({ sessionTopic: session.topic }, client);
143
145
  getWalletProviderRegistry(client).register({
144
146
  priority: WalletProviderPriority.WALLET_SDK,
@@ -1 +1 @@
1
- {"version":3,"file":"walletConnect.esm.js","names":["methodsThatRequireUserAction: string[]","getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId']","switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork']","request: WalletConnectEvmWalletProvider['request']","disconnect: NonNullable<\n WalletConnectEvmWalletProvider['disconnect']\n >","disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount']","signMessage: WalletConnectEvmWalletProvider['signMessage']","getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses']","viemGetAddress","formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress']","terminate: WalletConnectEvmWalletProvider['terminate']","getDefaultClient","hasExtension","getDefaultClient","packageName","packageVersion"],"sources":["../src/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.ts","../src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts","../src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.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 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 { 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\nexport const createWalletProviderFromEIP155Session = async (\n { sessionTopic }: CreateWalletProviderFromEIP155SessionParams,\n client: DynamicClient\n): Promise<WalletConnectEvmWalletProvider> => {\n const signClient = await getSignClient(client);\n\n const getSession = () => {\n const session = signClient.session.get(sessionTopic);\n\n if (!session) {\n void disconnect();\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 (args) => {\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 return signClient.request({\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\n const disconnect: NonNullable<\n WalletConnectEvmWalletProvider['disconnect']\n > = async () => {\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 };\n\n /**\n * We actually clear up the entire WC session and its wallet provider\n */\n const disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount'] =\n async () => disconnect();\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 terminate: WalletConnectEvmWalletProvider['terminate'] = async () =>\n cleanupEventEmitter();\n\n return {\n chain: 'EVM',\n disconnect,\n disconnectWalletAccount,\n get events() {\n return getEventEmitter();\n },\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 terminate,\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\nexport const recoverEvmWalletConnectWalletProviders = async (\n client: DynamicClient\n) => {\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 for (const session of sessions) {\n if (!('eip155' in session.namespaces)) {\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\nexport const addWalletConnectEvmExtension = async (\n client = getDefaultClient()\n) => {\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 { 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 createApiClient,\n createSignInMessageStatement,\n getCore,\n getDefaultClient,\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 { evmApiChainName, 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 */\nexport const connectAndVerifyWithWalletConnectEvm = async (\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n const core = getCore(client);\n const apiClient = createApiClient({}, client);\n\n const universalLink = core.metadata?.universalLink;\n\n assertDefined(universalLink, 'Universal link is not set');\n\n const url = new URL(universalLink);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n /**\n * Customer enabled networks, with mainnet first if available.\n */\n const evmNetworks = client.projectSettings.networks\n ?.find((network) => network.chainName === evmApiChainName)\n ?.networks?.sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertDefined(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 apiClient.getNonce({\n environmentId: core.environmentId,\n });\n\n assertDefined(nonce, 'Failed to get nonce');\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 { assertDefined } 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 { evmApiChainName, 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\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 const evmNetworks = client.projectSettings.networks?.find(\n (network) => network.chainName === evmApiChainName\n )?.networks;\n\n assertDefined(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\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.esm.js","names":["methodsThatRequireUserAction: string[]","getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId']","switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork']","request: WalletConnectEvmWalletProvider['request']","disconnect: NonNullable<\n WalletConnectEvmWalletProvider['disconnect']\n >","disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount']","signMessage: WalletConnectEvmWalletProvider['signMessage']","getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses']","viemGetAddress","formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress']","terminate: WalletConnectEvmWalletProvider['terminate']","getDefaultClient","hasExtension","getDefaultClient","packageName","packageVersion"],"sources":["../src/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.ts","../src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts","../src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.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 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 { 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\nexport const createWalletProviderFromEIP155Session = async (\n { sessionTopic }: CreateWalletProviderFromEIP155SessionParams,\n client: DynamicClient\n): Promise<WalletConnectEvmWalletProvider> => {\n const signClient = await getSignClient(client);\n\n const getSession = () => {\n const session = signClient.session.get(sessionTopic);\n\n if (!session) {\n void disconnect();\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 (args) => {\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 return signClient.request({\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\n const disconnect: NonNullable<\n WalletConnectEvmWalletProvider['disconnect']\n > = async () => {\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 };\n\n /**\n * We actually clear up the entire WC session and its wallet provider\n */\n const disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount'] =\n async () => disconnect();\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 terminate: WalletConnectEvmWalletProvider['terminate'] = async () =>\n cleanupEventEmitter();\n\n return {\n chain: 'EVM',\n disconnect,\n disconnectWalletAccount,\n get events() {\n return getEventEmitter();\n },\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 terminate,\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\nexport const recoverEvmWalletConnectWalletProviders = async (\n client: DynamicClient\n) => {\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\nexport const addWalletConnectEvmExtension = async (\n client = getDefaultClient()\n) => {\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 { 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 createApiClient,\n createSignInMessageStatement,\n getCore,\n getDefaultClient,\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 { evmApiChainName, 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 */\nexport const connectAndVerifyWithWalletConnectEvm = async (\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n const core = getCore(client);\n const apiClient = createApiClient({}, client);\n\n const universalLink = core.metadata?.universalLink;\n\n assertDefined(universalLink, 'Universal link is not set');\n\n const url = new URL(universalLink);\n\n assertDefined(client.projectSettings, 'Project settings unavailable');\n\n /**\n * Customer enabled networks, with mainnet first if available.\n */\n const evmNetworks = client.projectSettings.networks\n ?.find((network) => network.chainName === evmApiChainName)\n ?.networks?.sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertDefined(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 apiClient.getNonce({\n environmentId: core.environmentId,\n });\n\n assertDefined(nonce, 'Failed to get nonce');\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 { assertDefined } 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 { evmApiChainName, 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\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 const evmNetworks = client.projectSettings.networks?.find(\n (network) => network.chainName === evmApiChainName\n )?.networks;\n\n assertDefined(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\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,5 +1,5 @@
1
- const require_package = require('./package-DQwdpE--.cjs.js');
2
- const require_registerEvmNetworkProviderBuilder = require('./registerEvmNetworkProviderBuilder-DDwm5_Df.cjs.js');
1
+ const require_package = require('./package-4YO4_z3W.cjs.js');
2
+ const require_registerEvmNetworkProviderBuilder = require('./registerEvmNetworkProviderBuilder-CQfGsiEJ.cjs.js');
3
3
  const require_createWalletProviderFromEIP1193Provider = require('./createWalletProviderFromEIP1193Provider-BjFdQbKT.cjs.js');
4
4
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
5
5
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
@@ -1,5 +1,5 @@
1
- import { n as version, t as name } from "./package-5YyeyST6.esm.js";
2
- import { t as registerEvmNetworkProviderBuilder } from "./registerEvmNetworkProviderBuilder-CkGuzJNe.esm.js";
1
+ import { n as version, t as name } from "./package-bIBsANCH.esm.js";
2
+ import { t as registerEvmNetworkProviderBuilder } from "./registerEvmNetworkProviderBuilder-Cn6YtnaH.esm.js";
3
3
  import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-BlpJn4oS.esm.js";
4
4
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
5
5
  import { DYNAMIC_ICONIC_SPRITE_URL, WalletProviderPriority, getAllProvidersFromWindow, getDefaultClient, getWalletProviderRegistry, hasExtension, registerExtension } from "@dynamic-labs-sdk/client/core";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs-sdk/evm",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.esm.js",
@@ -42,12 +42,12 @@
42
42
  }
43
43
  },
44
44
  "dependencies": {
45
- "@dynamic-labs/sdk-api-core": "0.0.864",
45
+ "@dynamic-labs/sdk-api-core": "0.0.871",
46
46
  "@walletconnect/types": "2.21.8",
47
47
  "@walletconnect/utils": "2.21.8",
48
- "@dynamic-labs-sdk/assert-package-version": "0.8.0",
49
- "@dynamic-labs-sdk/client": "0.8.0",
50
- "@dynamic-labs-sdk/wallet-connect": "0.8.0"
48
+ "@dynamic-labs-sdk/assert-package-version": "0.10.0",
49
+ "@dynamic-labs-sdk/wallet-connect": "0.10.0",
50
+ "@dynamic-labs-sdk/client": "0.10.0"
51
51
  },
52
52
  "devDependencies": {
53
53
  "eventemitter3": "5.0.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-5YyeyST6.esm.js","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-DQwdpE--.cjs.js","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"registerEvmNetworkProviderBuilder-CkGuzJNe.esm.js","names":[],"sources":["../src/errors/RpcError.ts","../src/utils/fetchEvmBalance/fetchEvmBalance.ts","../src/utils/createEvmNetworkProvider/createEvmNetworkProvider.ts","../src/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.ts"],"sourcesContent":["import { BaseError, type BaseErrorParameters } from '@dynamic-labs-sdk/client';\n\nexport type RpcErrorParameters = Pick<BaseErrorParameters, 'shortMessage'> &\n Partial<Omit<BaseErrorParameters, 'shortMessage'>>;\n\nexport class RpcError extends BaseError {\n constructor(args: RpcErrorParameters) {\n super({\n cause: args.cause ?? null,\n code: args.code ?? 'rpc_error',\n details: args.details,\n docsUrl: args.docsUrl ?? null,\n metaMessages: args.metaMessages,\n name: args.name ?? 'RpcError',\n shortMessage: args.shortMessage,\n });\n }\n}\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\n\nimport { RpcError } from '../../errors/RpcError';\n\ntype FetchEvmBalanceParams = {\n address: string;\n rpcUrl: string;\n};\n\nexport const fetchEvmBalance = async (\n { address, rpcUrl }: FetchEvmBalanceParams,\n client: DynamicClient\n): Promise<string | null> => {\n const core = getCore(client);\n\n try {\n // Perform a POST request to the RPC URL with the JSON-RPC payload\n const response = await core.fetch(rpcUrl, {\n /**\n * The JSON-RPC method 'eth_getBalance' takes the address and a block tag ('latest' is the most recent)\n * See EIP-1474: https://eips.ethereum.org/EIPS/eip-1474\n * See eth_getBalance spec: https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance\n */\n body: JSON.stringify({\n id: Math.floor(Date.now() + Math.random() * 1000),\n jsonrpc: '2.0',\n method: 'eth_getBalance',\n params: [address, 'latest'],\n }),\n\n headers: {\n 'Content-Type': 'application/json',\n },\n\n method: 'POST',\n });\n\n // Check if the network response was successful\n if (!response.ok) {\n throw new RpcError({\n code: 'http_error',\n shortMessage: `HTTP error! status: ${response.status}`,\n });\n }\n\n const data = await response.json();\n\n // Check for a JSON-RPC error in the response\n if (data.error) {\n throw new RpcError({\n cause: data.error instanceof Error ? data.error : undefined,\n code: 'json_rpc_error',\n shortMessage: `RPC Error: ${data.error.message}`,\n });\n }\n\n // The result is a hexadecimal string representing the balance in Wei\n const balanceWeiHex = data.result;\n\n // Convert the hexadecimal string to a BigInt\n const balanceWei = BigInt(balanceWeiHex);\n\n // Convert the balance from Wei to Ether (1 Ether = 10^18 Wei)\n // We use a BigInt for the conversion to maintain precision with large numbers\n const oneEther = BigInt(1e18);\n\n // Perform the division and return the result as a number\n // Note: This conversion can lose precision for very small amounts, but is generally fine for display purposes.\n const balanceEther = Number(balanceWei) / Number(oneEther);\n\n return balanceEther.toString();\n } catch (error) {\n if (error instanceof Error) {\n throw new RpcError({\n cause: error,\n code: 'rpc_error',\n shortMessage: `Failed to fetch balance for address ${address}`,\n });\n }\n\n throw error;\n }\n};\n","import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { EvmNetworkProvider } from '../../EvmNetworkProvider';\nimport { fetchEvmBalance } from '../fetchEvmBalance';\n\nexport const createEvmNetworkProvider = (\n networkData: NetworkData,\n client: DynamicClient\n): EvmNetworkProvider => ({\n ...createBaseNetworkProvider('EVM', networkData),\n\n getBalance: async ({ address }) => ({\n balance: await fetchEvmBalance(\n {\n address,\n rpcUrl: networkData.rpcUrls.http[0],\n },\n client\n ),\n }),\n});\n","import { type DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createEvmNetworkProvider } from '../utils/createEvmNetworkProvider';\n\nexport const registerEvmNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n /**\n * If the Ethereum network provider builder is already registered, return.\n */\n if (networkProviderBuilderRegistry.get().get('EVM')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: (networkData) => createEvmNetworkProvider(networkData, client),\n chain: 'EVM',\n });\n};\n"],"mappings":";;;;AAKA,IAAa,WAAb,cAA8B,UAAU;CACtC,YAAY,MAA0B;AACpC,QAAM;GACJ,OAAO,KAAK,SAAS;GACrB,MAAM,KAAK,QAAQ;GACnB,SAAS,KAAK;GACd,SAAS,KAAK,WAAW;GACzB,cAAc,KAAK;GACnB,MAAM,KAAK,QAAQ;GACnB,cAAc,KAAK;GACpB,CAAC;;;;;;ACLN,MAAa,kBAAkB,OAC7B,EAAE,SAAS,UACX,WAC2B;CAC3B,MAAM,OAAO,QAAQ,OAAO;AAE5B,KAAI;EAEF,MAAM,WAAW,MAAM,KAAK,MAAM,QAAQ;GAMxC,MAAM,KAAK,UAAU;IACnB,IAAI,KAAK,MAAM,KAAK,KAAK,GAAG,KAAK,QAAQ,GAAG,IAAK;IACjD,SAAS;IACT,QAAQ;IACR,QAAQ,CAAC,SAAS,SAAS;IAC5B,CAAC;GAEF,SAAS,EACP,gBAAgB,oBACjB;GAED,QAAQ;GACT,CAAC;AAGF,MAAI,CAAC,SAAS,GACZ,OAAM,IAAI,SAAS;GACjB,MAAM;GACN,cAAc,uBAAuB,SAAS;GAC/C,CAAC;EAGJ,MAAM,OAAO,MAAM,SAAS,MAAM;AAGlC,MAAI,KAAK,MACP,OAAM,IAAI,SAAS;GACjB,OAAO,KAAK,iBAAiB,QAAQ,KAAK,QAAQ;GAClD,MAAM;GACN,cAAc,cAAc,KAAK,MAAM;GACxC,CAAC;EAIJ,MAAM,gBAAgB,KAAK;EAG3B,MAAM,aAAa,OAAO,cAAc;EAIxC,MAAM,WAAW,OAAO,kBAAK;AAM7B,UAFqB,OAAO,WAAW,GAAG,OAAO,SAAS,EAEtC,UAAU;UACvB,OAAO;AACd,MAAI,iBAAiB,MACnB,OAAM,IAAI,SAAS;GACjB,OAAO;GACP,MAAM;GACN,cAAc,uCAAuC;GACtD,CAAC;AAGJ,QAAM;;;;;;AC3EV,MAAa,4BACX,aACA,YACwB;CACxB,GAAG,0BAA0B,OAAO,YAAY;CAEhD,YAAY,OAAO,EAAE,eAAe,EAClC,SAAS,MAAM,gBACb;EACE;EACA,QAAQ,YAAY,QAAQ,KAAK;EAClC,EACD,OACD,EACF;CACF;;;;AChBD,MAAa,qCACX,WACS;CACT,MAAM,iCACJ,kCAAkC,OAAO;;;;AAK3C,KAAI,+BAA+B,KAAK,CAAC,IAAI,MAAM,CACjD;AAGF,gCAA+B,SAAS;EACtC,UAAU,gBAAgB,yBAAyB,aAAa,OAAO;EACvE,OAAO;EACR,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"registerEvmNetworkProviderBuilder-DDwm5_Df.cjs.js","names":["BaseError"],"sources":["../src/errors/RpcError.ts","../src/utils/fetchEvmBalance/fetchEvmBalance.ts","../src/utils/createEvmNetworkProvider/createEvmNetworkProvider.ts","../src/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.ts"],"sourcesContent":["import { BaseError, type BaseErrorParameters } from '@dynamic-labs-sdk/client';\n\nexport type RpcErrorParameters = Pick<BaseErrorParameters, 'shortMessage'> &\n Partial<Omit<BaseErrorParameters, 'shortMessage'>>;\n\nexport class RpcError extends BaseError {\n constructor(args: RpcErrorParameters) {\n super({\n cause: args.cause ?? null,\n code: args.code ?? 'rpc_error',\n details: args.details,\n docsUrl: args.docsUrl ?? null,\n metaMessages: args.metaMessages,\n name: args.name ?? 'RpcError',\n shortMessage: args.shortMessage,\n });\n }\n}\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\n\nimport { RpcError } from '../../errors/RpcError';\n\ntype FetchEvmBalanceParams = {\n address: string;\n rpcUrl: string;\n};\n\nexport const fetchEvmBalance = async (\n { address, rpcUrl }: FetchEvmBalanceParams,\n client: DynamicClient\n): Promise<string | null> => {\n const core = getCore(client);\n\n try {\n // Perform a POST request to the RPC URL with the JSON-RPC payload\n const response = await core.fetch(rpcUrl, {\n /**\n * The JSON-RPC method 'eth_getBalance' takes the address and a block tag ('latest' is the most recent)\n * See EIP-1474: https://eips.ethereum.org/EIPS/eip-1474\n * See eth_getBalance spec: https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance\n */\n body: JSON.stringify({\n id: Math.floor(Date.now() + Math.random() * 1000),\n jsonrpc: '2.0',\n method: 'eth_getBalance',\n params: [address, 'latest'],\n }),\n\n headers: {\n 'Content-Type': 'application/json',\n },\n\n method: 'POST',\n });\n\n // Check if the network response was successful\n if (!response.ok) {\n throw new RpcError({\n code: 'http_error',\n shortMessage: `HTTP error! status: ${response.status}`,\n });\n }\n\n const data = await response.json();\n\n // Check for a JSON-RPC error in the response\n if (data.error) {\n throw new RpcError({\n cause: data.error instanceof Error ? data.error : undefined,\n code: 'json_rpc_error',\n shortMessage: `RPC Error: ${data.error.message}`,\n });\n }\n\n // The result is a hexadecimal string representing the balance in Wei\n const balanceWeiHex = data.result;\n\n // Convert the hexadecimal string to a BigInt\n const balanceWei = BigInt(balanceWeiHex);\n\n // Convert the balance from Wei to Ether (1 Ether = 10^18 Wei)\n // We use a BigInt for the conversion to maintain precision with large numbers\n const oneEther = BigInt(1e18);\n\n // Perform the division and return the result as a number\n // Note: This conversion can lose precision for very small amounts, but is generally fine for display purposes.\n const balanceEther = Number(balanceWei) / Number(oneEther);\n\n return balanceEther.toString();\n } catch (error) {\n if (error instanceof Error) {\n throw new RpcError({\n cause: error,\n code: 'rpc_error',\n shortMessage: `Failed to fetch balance for address ${address}`,\n });\n }\n\n throw error;\n }\n};\n","import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { EvmNetworkProvider } from '../../EvmNetworkProvider';\nimport { fetchEvmBalance } from '../fetchEvmBalance';\n\nexport const createEvmNetworkProvider = (\n networkData: NetworkData,\n client: DynamicClient\n): EvmNetworkProvider => ({\n ...createBaseNetworkProvider('EVM', networkData),\n\n getBalance: async ({ address }) => ({\n balance: await fetchEvmBalance(\n {\n address,\n rpcUrl: networkData.rpcUrls.http[0],\n },\n client\n ),\n }),\n});\n","import { type DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createEvmNetworkProvider } from '../utils/createEvmNetworkProvider';\n\nexport const registerEvmNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n /**\n * If the Ethereum network provider builder is already registered, return.\n */\n if (networkProviderBuilderRegistry.get().get('EVM')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: (networkData) => createEvmNetworkProvider(networkData, client),\n chain: 'EVM',\n });\n};\n"],"mappings":";;;;AAKA,IAAa,WAAb,cAA8BA,mCAAU;CACtC,YAAY,MAA0B;AACpC,QAAM;GACJ,OAAO,KAAK,SAAS;GACrB,MAAM,KAAK,QAAQ;GACnB,SAAS,KAAK;GACd,SAAS,KAAK,WAAW;GACzB,cAAc,KAAK;GACnB,MAAM,KAAK,QAAQ;GACnB,cAAc,KAAK;GACpB,CAAC;;;;;;ACLN,MAAa,kBAAkB,OAC7B,EAAE,SAAS,UACX,WAC2B;CAC3B,MAAM,kDAAe,OAAO;AAE5B,KAAI;EAEF,MAAM,WAAW,MAAM,KAAK,MAAM,QAAQ;GAMxC,MAAM,KAAK,UAAU;IACnB,IAAI,KAAK,MAAM,KAAK,KAAK,GAAG,KAAK,QAAQ,GAAG,IAAK;IACjD,SAAS;IACT,QAAQ;IACR,QAAQ,CAAC,SAAS,SAAS;IAC5B,CAAC;GAEF,SAAS,EACP,gBAAgB,oBACjB;GAED,QAAQ;GACT,CAAC;AAGF,MAAI,CAAC,SAAS,GACZ,OAAM,IAAI,SAAS;GACjB,MAAM;GACN,cAAc,uBAAuB,SAAS;GAC/C,CAAC;EAGJ,MAAM,OAAO,MAAM,SAAS,MAAM;AAGlC,MAAI,KAAK,MACP,OAAM,IAAI,SAAS;GACjB,OAAO,KAAK,iBAAiB,QAAQ,KAAK,QAAQ;GAClD,MAAM;GACN,cAAc,cAAc,KAAK,MAAM;GACxC,CAAC;EAIJ,MAAM,gBAAgB,KAAK;EAG3B,MAAM,aAAa,OAAO,cAAc;EAIxC,MAAM,WAAW,OAAO,kBAAK;AAM7B,UAFqB,OAAO,WAAW,GAAG,OAAO,SAAS,EAEtC,UAAU;UACvB,OAAO;AACd,MAAI,iBAAiB,MACnB,OAAM,IAAI,SAAS;GACjB,OAAO;GACP,MAAM;GACN,cAAc,uCAAuC;GACtD,CAAC;AAGJ,QAAM;;;;;;AC3EV,MAAa,4BACX,aACA,YACwB;CACxB,gEAA6B,OAAO,YAAY;CAEhD,YAAY,OAAO,EAAE,eAAe,EAClC,SAAS,MAAM,gBACb;EACE;EACA,QAAQ,YAAY,QAAQ,KAAK;EAClC,EACD,OACD,EACF;CACF;;;;AChBD,MAAa,qCACX,WACS;CACT,MAAM,sGAC8B,OAAO;;;;AAK3C,KAAI,+BAA+B,KAAK,CAAC,IAAI,MAAM,CACjD;AAGF,gCAA+B,SAAS;EACtC,UAAU,gBAAgB,yBAAyB,aAAa,OAAO;EACvE,OAAO;EACR,CAAC"}