@dynamic-labs-sdk/evm 0.26.5 → 0.26.9

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 (70) hide show
  1. package/dist/{addEIP6963Extension-BaI2C41i.esm.js → addEIP6963Extension-C6V9wugj.esm.js} +7 -4
  2. package/dist/addEIP6963Extension-C6V9wugj.esm.js.map +1 -0
  3. package/dist/addEIP6963Extension-J6SledVr.native.esm.js +27 -0
  4. package/dist/addEIP6963Extension-J6SledVr.native.esm.js.map +1 -0
  5. package/dist/{addEIP6963Extension-Cv4Gj1SR.cjs → addEIP6963Extension-xmttAYsJ.cjs} +7 -4
  6. package/dist/addEIP6963Extension-xmttAYsJ.cjs.map +1 -0
  7. package/dist/addWaasEvmExtension-BV00iC4G.native.esm.js +199 -0
  8. package/dist/addWaasEvmExtension-BV00iC4G.native.esm.js.map +1 -0
  9. package/dist/{addWaasEvmExtension-bLZn0Qoj.esm.js → addWaasEvmExtension-BuriM1RR.esm.js} +3 -3
  10. package/dist/{addWaasEvmExtension-bLZn0Qoj.esm.js.map → addWaasEvmExtension-BuriM1RR.esm.js.map} +1 -1
  11. package/dist/{addWaasEvmExtension-BPVt4XeG.cjs → addWaasEvmExtension-DO_xrGNd.cjs} +3 -3
  12. package/dist/{addWaasEvmExtension-BPVt4XeG.cjs.map → addWaasEvmExtension-DO_xrGNd.cjs.map} +1 -1
  13. package/dist/baseAccount.cjs +3 -3
  14. package/dist/baseAccount.esm.js +3 -3
  15. package/dist/baseAccount.native.esm.js +142 -0
  16. package/dist/baseAccount.native.esm.js.map +1 -0
  17. package/dist/{createWalletClientForWalletAccount-C2ZSMduy.cjs → createWalletClientForWalletAccount-BRCTx54Y.cjs} +2 -2
  18. package/dist/{createWalletClientForWalletAccount-C2ZSMduy.cjs.map → createWalletClientForWalletAccount-BRCTx54Y.cjs.map} +1 -1
  19. package/dist/{createWalletClientForWalletAccount-0t5wDx-e.esm.js → createWalletClientForWalletAccount-DNRmkFGz.esm.js} +2 -2
  20. package/dist/{createWalletClientForWalletAccount-0t5wDx-e.esm.js.map → createWalletClientForWalletAccount-DNRmkFGz.esm.js.map} +1 -1
  21. package/dist/createWalletClientForWalletAccount-V4CfRjd4.native.esm.js +100 -0
  22. package/dist/createWalletClientForWalletAccount-V4CfRjd4.native.esm.js.map +1 -0
  23. package/dist/{createWalletProviderFromEIP1193Provider-Cf-urMAC.cjs → createWalletProviderFromEIP1193Provider-BtdyeO_q.cjs} +2 -2
  24. package/dist/{createWalletProviderFromEIP1193Provider-Cf-urMAC.cjs.map → createWalletProviderFromEIP1193Provider-BtdyeO_q.cjs.map} +1 -1
  25. package/dist/{createWalletProviderFromEIP1193Provider-C5TuwVHq.esm.js → createWalletProviderFromEIP1193Provider-CYa7ifj6.esm.js} +2 -2
  26. package/dist/{createWalletProviderFromEIP1193Provider-C5TuwVHq.esm.js.map → createWalletProviderFromEIP1193Provider-CYa7ifj6.esm.js.map} +1 -1
  27. package/dist/createWalletProviderFromEIP1193Provider-RVjz6Jte.native.esm.js +179 -0
  28. package/dist/createWalletProviderFromEIP1193Provider-RVjz6Jte.native.esm.js.map +1 -0
  29. package/dist/eip6963/addEIP6963Extension/addEIP6963Extension.constants.d.ts +2 -0
  30. package/dist/eip6963/addEIP6963Extension/addEIP6963Extension.constants.d.ts.map +1 -0
  31. package/dist/eip6963/addEIP6963Extension/addEIP6963Extension.d.ts +3 -3
  32. package/dist/eip6963/addEIP6963Extension/addEIP6963Extension.d.ts.map +1 -1
  33. package/dist/eip6963/addEIP6963Extension/addEIP6963Extension.types.d.ts +12 -0
  34. package/dist/eip6963/addEIP6963Extension/addEIP6963Extension.types.d.ts.map +1 -0
  35. package/dist/eip6963.cjs +4 -4
  36. package/dist/eip6963.esm.js +4 -4
  37. package/dist/eip6963.native.esm.js +10 -0
  38. package/dist/eip6963.native.esm.js.map +1 -0
  39. package/dist/{evmTransferAmount-CeNqafVB.cjs → evmTransferAmount-2oHtkHtg.cjs} +2 -2
  40. package/dist/{evmTransferAmount-CeNqafVB.cjs.map → evmTransferAmount-2oHtkHtg.cjs.map} +1 -1
  41. package/dist/evmTransferAmount-B__79nVn.native.esm.js +289 -0
  42. package/dist/evmTransferAmount-B__79nVn.native.esm.js.map +1 -0
  43. package/dist/{evmTransferAmount-CGPHTi1G.esm.js → evmTransferAmount-DHhD0MEF.esm.js} +2 -2
  44. package/dist/{evmTransferAmount-CGPHTi1G.esm.js.map → evmTransferAmount-DHhD0MEF.esm.js.map} +1 -1
  45. package/dist/index.cjs +5 -5
  46. package/dist/index.esm.js +5 -5
  47. package/dist/index.native.esm.js +167 -0
  48. package/dist/index.native.esm.js.map +1 -0
  49. package/dist/package-C1ZYfyHb.native.esm.js +7 -0
  50. package/dist/package-C1ZYfyHb.native.esm.js.map +1 -0
  51. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  52. package/dist/viem.cjs +1 -1
  53. package/dist/viem.esm.js +1 -1
  54. package/dist/viem.native.esm.js +10 -0
  55. package/dist/viem.native.esm.js.map +1 -0
  56. package/dist/waas.cjs +3 -3
  57. package/dist/waas.esm.js +3 -3
  58. package/dist/waas.native.esm.js +12 -0
  59. package/dist/waas.native.esm.js.map +1 -0
  60. package/dist/walletConnect.cjs +2 -2
  61. package/dist/walletConnect.esm.js +2 -2
  62. package/dist/walletConnect.native.esm.js +330 -0
  63. package/dist/walletConnect.native.esm.js.map +1 -0
  64. package/dist/windowInjected.cjs +3 -3
  65. package/dist/windowInjected.esm.js +3 -3
  66. package/dist/windowInjected.native.esm.js +154 -0
  67. package/dist/windowInjected.native.esm.js.map +1 -0
  68. package/package.json +11 -5
  69. package/dist/addEIP6963Extension-BaI2C41i.esm.js.map +0 -1
  70. package/dist/addEIP6963Extension-Cv4Gj1SR.cjs.map +0 -1
package/dist/viem.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-C2ZSMduy.cjs');
1
+ const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-BRCTx54Y.cjs');
2
2
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
3
3
 
4
4
  //#region src/exports/viem.ts
package/dist/viem.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as version, i as name, n as createPublicClientFromNetworkData, r as mapNetworkDataToViemChain, t as createWalletClientForWalletAccount } from "./createWalletClientForWalletAccount-0t5wDx-e.esm.js";
1
+ import { a as version, i as name, n as createPublicClientFromNetworkData, r as mapNetworkDataToViemChain, t as createWalletClientForWalletAccount } from "./createWalletClientForWalletAccount-DNRmkFGz.esm.js";
2
2
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
3
3
 
4
4
  //#region src/exports/viem.ts
@@ -0,0 +1,10 @@
1
+ import { n as version, t as name } from "./package-C1ZYfyHb.native.esm.js";
2
+ import { n as createPublicClientFromNetworkData, r as mapNetworkDataToViemChain, t as createWalletClientForWalletAccount } from "./createWalletClientForWalletAccount-V4CfRjd4.native.esm.js";
3
+ import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
4
+
5
+ //#region src/exports/viem.ts
6
+ assertPackageVersion(name, version);
7
+
8
+ //#endregion
9
+ export { createPublicClientFromNetworkData, createWalletClientForWalletAccount, mapNetworkDataToViemChain };
10
+ //# sourceMappingURL=viem.native.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viem.native.esm.js","names":["packageName","packageVersion"],"sources":["../src/exports/viem.ts"],"sourcesContent":["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 { createPublicClientFromNetworkData } from '../viem/createPublicClientFromNetworkData';\nexport { createWalletClientForWalletAccount } from '../viem/createWalletClientForWalletAccount';\nexport { mapNetworkDataToViemChain } from '../viem/utils/mapNetworkDataToViemChain';\n"],"mappings":";;;;;AAMA,qBAAqBA,MAAaC,QAAe"}
package/dist/waas.cjs CHANGED
@@ -1,6 +1,6 @@
1
- const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-C2ZSMduy.cjs');
2
- require('./evmTransferAmount-CeNqafVB.cjs');
3
- const require_addWaasEvmExtension = require('./addWaasEvmExtension-BPVt4XeG.cjs');
1
+ const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-BRCTx54Y.cjs');
2
+ require('./evmTransferAmount-2oHtkHtg.cjs');
3
+ const require_addWaasEvmExtension = require('./addWaasEvmExtension-DO_xrGNd.cjs');
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 { a as version, i as name } from "./createWalletClientForWalletAccount-0t5wDx-e.esm.js";
2
- import "./evmTransferAmount-CGPHTi1G.esm.js";
3
- import { t as addWaasEvmExtension } from "./addWaasEvmExtension-bLZn0Qoj.esm.js";
1
+ import { a as version, i as name } from "./createWalletClientForWalletAccount-DNRmkFGz.esm.js";
2
+ import "./evmTransferAmount-DHhD0MEF.esm.js";
3
+ import { t as addWaasEvmExtension } from "./addWaasEvmExtension-BuriM1RR.esm.js";
4
4
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
5
5
 
6
6
  //#region src/exports/waas.ts
@@ -0,0 +1,12 @@
1
+ import { n as version, t as name } from "./package-C1ZYfyHb.native.esm.js";
2
+ import "./evmTransferAmount-B__79nVn.native.esm.js";
3
+ import "./createWalletClientForWalletAccount-V4CfRjd4.native.esm.js";
4
+ import { t as addWaasEvmExtension } from "./addWaasEvmExtension-BV00iC4G.native.esm.js";
5
+ import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
6
+
7
+ //#region src/exports/waas.ts
8
+ assertPackageVersion(name, version);
9
+
10
+ //#endregion
11
+ export { addWaasEvmExtension };
12
+ //# sourceMappingURL=waas.native.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waas.native.esm.js","names":["packageName","packageVersion"],"sources":["../src/exports/waas.ts"],"sourcesContent":["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 { addWaasEvmExtension } from '../waas/addWaasEvmExtension';\n"],"mappings":";;;;;;;AAMA,qBAAqBA,MAAaC,QAAe"}
@@ -1,5 +1,5 @@
1
- const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-C2ZSMduy.cjs');
2
- const require_evmTransferAmount = require('./evmTransferAmount-CeNqafVB.cjs');
1
+ const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-BRCTx54Y.cjs');
2
+ const require_evmTransferAmount = require('./evmTransferAmount-2oHtkHtg.cjs');
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");
@@ -1,5 +1,5 @@
1
- import { a as version, i as name } from "./createWalletClientForWalletAccount-0t5wDx-e.esm.js";
2
- import { a as registerEvmNetworkProviderBuilder, n as evmExecuteSwapTransaction, r as evmConfirmTransaction, t as evmTransferAmount } from "./evmTransferAmount-CGPHTi1G.esm.js";
1
+ import { a as version, i as name } from "./createWalletClientForWalletAccount-DNRmkFGz.esm.js";
2
+ import { a as registerEvmNetworkProviderBuilder, n as evmExecuteSwapTransaction, r as evmConfirmTransaction, t as evmTransferAmount } from "./evmTransferAmount-DHhD0MEF.esm.js";
3
3
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
4
4
  import { CHAINS_INFO_MAP, WalletProviderPriority, assertDefined, createSignInMessageStatement, emitEvent, filterDuplicates, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getCore, getDefaultClient, getNonce, 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";
@@ -0,0 +1,330 @@
1
+ import { n as version, t as name } from "./package-C1ZYfyHb.native.esm.js";
2
+ import { a as registerEvmNetworkProviderBuilder, n as evmExecuteSwapTransaction, r as evmConfirmTransaction, t as evmTransferAmount } from "./evmTransferAmount-B__79nVn.native.esm.js";
3
+ import "./createWalletClientForWalletAccount-V4CfRjd4.native.esm.js";
4
+ import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
5
+ import { CHAINS_INFO_MAP, WalletProviderPriority, assertDefined, createSignInMessageStatement, emitEvent, filterDuplicates, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getCore, getDefaultClient, getNonce, getWalletProviderRegistry, registerExtension, switchActiveNetworkInLastKnownRegistry, waitForProjectSettings } from "@dynamic-labs-sdk/client/core";
6
+ import { getDefaultClient as getDefaultClient$1, hasExtension as hasExtension$1 } from "@dynamic-labs-sdk/client";
7
+ import { WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
8
+ import { getAddress } from "viem";
9
+ import { createWalletConnectSessionEventEmitter, getSignClient, importWalletConnectAuthResponse, importWalletConnectSession, splitCaip10Token } from "@dynamic-labs-sdk/wallet-connect/core";
10
+ import { SessionClosedUnexpectedlyError } from "@dynamic-labs-sdk/wallet-connect";
11
+ import { SDK_ERRORS } from "@walletconnect/utils";
12
+
13
+ //#region src/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.ts
14
+ /**
15
+ * The list of ethereum request methods that require user action.
16
+ * We will raise a user action requested event for these methods.
17
+ */
18
+ const methodsThatRequireUserAction = [
19
+ "personal_sign",
20
+ "eth_sendTransaction",
21
+ "eth_signTypedData_v4"
22
+ ];
23
+ /** @not-instrumented */
24
+ const createWalletProviderFromEIP155Session = async ({ sessionTopic }, client) => {
25
+ const signClient = await getSignClient(client);
26
+ const getSession = () => {
27
+ const session = signClient.session.get(sessionTopic);
28
+ if (!session) {
29
+ disconnect();
30
+ throw new SessionClosedUnexpectedlyError({
31
+ sessionTopic,
32
+ walletDisplayName: displayName
33
+ });
34
+ }
35
+ return session;
36
+ };
37
+ const displayName = getSession().peer.metadata.name;
38
+ const namespaceKey = "eip155";
39
+ const walletProviderType = WalletProviderEnum.WalletConnect;
40
+ const key = formatWalletProviderKey({
41
+ chain: "EVM",
42
+ displayName,
43
+ suffix: sessionTopic,
44
+ walletProviderType
45
+ });
46
+ const getActiveNetworkId = async () => {
47
+ getSession();
48
+ return await getActiveNetworkIdFromLastKnownRegistry({
49
+ client,
50
+ walletProviderKey: key
51
+ });
52
+ };
53
+ const switchActiveNetwork = async ({ networkId }) => {
54
+ getSession();
55
+ await switchActiveNetworkInLastKnownRegistry({
56
+ client,
57
+ networkId,
58
+ walletProviderKey: key
59
+ });
60
+ };
61
+ const request = async (args) => {
62
+ const { networkId } = await getActiveNetworkId();
63
+ const session = getSession();
64
+ if (methodsThatRequireUserAction.includes(args.method)) emitEvent({
65
+ args: {
66
+ walletMetadata: session.peer.metadata,
67
+ walletProviderKey: key
68
+ },
69
+ event: "walletConnectUserActionRequested"
70
+ }, client);
71
+ return signClient.request({
72
+ chainId: `${namespaceKey}:${networkId}`,
73
+ request: args,
74
+ topic: sessionTopic
75
+ });
76
+ };
77
+ const disconnect = async () => {
78
+ await signClient.disconnect({
79
+ reason: SDK_ERRORS.USER_DISCONNECTED,
80
+ topic: sessionTopic
81
+ });
82
+ getWalletProviderRegistry(client).unregister(key);
83
+ };
84
+ /**
85
+ * We actually clear up the entire WC session and its wallet provider
86
+ */
87
+ const disconnectWalletAccount = async () => disconnect();
88
+ const signMessage = async ({ message, walletAccount }) => {
89
+ const params = [message];
90
+ if (walletAccount) params.push(walletAccount.address);
91
+ return { signature: await request({
92
+ method: "personal_sign",
93
+ params
94
+ }) };
95
+ };
96
+ const getConnectedAddresses = async () => {
97
+ return { addresses: filterDuplicates(getSession().namespaces[namespaceKey].accounts.map((account) => splitCaip10Token(account).address)).map((address) => getAddress(address)) };
98
+ };
99
+ const formatWalletAddress = ({ address }) => getAddress(address);
100
+ const { cleanupEventEmitter, getEventEmitter } = createWalletConnectSessionEventEmitter({
101
+ formatAddress: getAddress,
102
+ getSession,
103
+ namespaceKey,
104
+ sessionTopic,
105
+ signClient
106
+ });
107
+ const terminate = async () => cleanupEventEmitter();
108
+ return {
109
+ chain: "EVM",
110
+ confirmTransaction: (args) => evmConfirmTransaction(args, client),
111
+ disconnect,
112
+ disconnectWalletAccount,
113
+ get events() {
114
+ return getEventEmitter();
115
+ },
116
+ executeSwapTransaction: (args) => evmExecuteSwapTransaction(args, client),
117
+ formatWalletAddress,
118
+ getActiveNetworkId,
119
+ getConnectedAddresses,
120
+ getSession,
121
+ groupKey: formatWalletProviderGroupKey(displayName),
122
+ key,
123
+ metadata: {
124
+ displayName,
125
+ icon: getSession().peer.metadata.icons[0]
126
+ },
127
+ namespaceKey,
128
+ request,
129
+ signMessage,
130
+ switchActiveNetwork,
131
+ terminate,
132
+ transferAmount: (args) => evmTransferAmount(args, client),
133
+ walletProviderType
134
+ };
135
+ };
136
+
137
+ //#endregion
138
+ //#region src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts
139
+ /** @not-instrumented */
140
+ const recoverEvmWalletConnectWalletProviders = async (client) => {
141
+ await waitForProjectSettings(client);
142
+ /**
143
+ * Recreate the wallet providers for all existing EVM sessions
144
+ */
145
+ const sessions = (await getSignClient(client)).session.getAll();
146
+ const currentTime = Math.floor(Date.now() / 1e3);
147
+ for (const session of sessions) {
148
+ if (!("eip155" in session.namespaces)) continue;
149
+ if (session.expiry <= currentTime) continue;
150
+ const walletProvider = await createWalletProviderFromEIP155Session({ sessionTopic: session.topic }, client);
151
+ getWalletProviderRegistry(client).register({
152
+ priority: WalletProviderPriority.WALLET_SDK,
153
+ walletProvider
154
+ });
155
+ }
156
+ };
157
+
158
+ //#endregion
159
+ //#region src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.ts
160
+ const WALLET_CONNECT_EVM_EXTENSION_KEY = "walletConnectEvm";
161
+ /** @not-instrumented */
162
+ const addWalletConnectEvmExtension = async (client = getDefaultClient$1()) => {
163
+ if (hasExtension$1({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client)) return;
164
+ registerExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client);
165
+ registerEvmNetworkProviderBuilder(client);
166
+ await recoverEvmWalletConnectWalletProviders(client);
167
+ };
168
+
169
+ //#endregion
170
+ //#region src/walletConnect/consts.ts
171
+ const evmApiChainName = CHAINS_INFO_MAP.EVM.apiChainName;
172
+ /**
173
+ * List of methods that may be requested from EVM wallet applications.
174
+ *
175
+ * Source: https://github.com/WalletConnect/walletconnect-monorepo/blob/v2.0/providers/ethereum-provider/src/EthereumProvider.ts
176
+ */
177
+ const evmMethods = [
178
+ "personal_sign",
179
+ "eth_sendTransaction",
180
+ "eth_accounts",
181
+ "eth_requestAccounts",
182
+ "eth_call",
183
+ "eth_getBalance",
184
+ "eth_sendRawTransaction",
185
+ "eth_sign",
186
+ "eth_signTransaction",
187
+ "eth_signTypedData",
188
+ "eth_signTypedData_v3",
189
+ "eth_signTypedData_v4",
190
+ "wallet_switchEthereumChain",
191
+ "wallet_addEthereumChain",
192
+ "wallet_getPermissions",
193
+ "wallet_requestPermissions",
194
+ "wallet_registerOnboarding",
195
+ "wallet_watchAsset",
196
+ "wallet_scanQRCode",
197
+ "wallet_sendCalls",
198
+ "wallet_getCapabilities",
199
+ "wallet_getCallsStatus",
200
+ "wallet_showCallsStatus"
201
+ ];
202
+
203
+ //#endregion
204
+ //#region src/walletConnect/connectAndVerifyWithWalletConnectEvm/connectAndVerifyWithWalletConnectEvm.ts
205
+ /**
206
+ * Connects to a WalletConnect EVM wallet and verifies ownership through message signing.
207
+ *
208
+ * This function combines wallet connection and verification in a single step,
209
+ * requiring the user to sign a message to prove wallet ownership before
210
+ * the wallet account is added to their profile.
211
+ *
212
+ * If the wallet app does not support the WalletConnect authenticate method,
213
+ * this prompts for connection and then verification as 2 separate steps.
214
+ *
215
+ * @see WalletConnect's docs on [session authentication](https://docs.reown.com/advanced/api/sign/dapp-usage#session-authenticate-with-recaps)
216
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
217
+ * @returns A promise that resolves to the connected and verified wallet account.
218
+ * @not-instrumented
219
+ */
220
+ const connectAndVerifyWithWalletConnectEvm = async (client = getDefaultClient()) => {
221
+ const signClient = await getSignClient(client);
222
+ const core = getCore(client);
223
+ const universalLink = core.metadata?.universalLink;
224
+ assertDefined(universalLink, "Universal link is not set");
225
+ const url = new URL(universalLink);
226
+ assertDefined(client.projectSettings, "Project settings unavailable");
227
+ /**
228
+ * Customer enabled networks, with mainnet first if available.
229
+ */
230
+ const evmNetworks = client.projectSettings.networks?.find((network) => network.chainName === evmApiChainName)?.networks?.sort((a, b) => {
231
+ if (a.networkId === "1") return -1;
232
+ if (b.networkId === "1") return 1;
233
+ return 0;
234
+ });
235
+ assertDefined(evmNetworks, "EVM networks not found");
236
+ const caip2Networks = evmNetworks.map((network) => `eip155:${network.networkId}`);
237
+ /**
238
+ * WalletConnect formats its own message for SIWE, so we need to provide the fields.
239
+ * We later reconstruct what that message was so we can verify the signature in backend.
240
+ */
241
+ const nonce = await getNonce(client);
242
+ /**
243
+ * A WalletConnect connection request generates a URI and a promise.
244
+ *
245
+ * The URI must be handed to an external wallet application that will use it
246
+ * to establish a connection via a WalletConnect relay server. Typically, this
247
+ * is done by scanning a QR code or deep linking to the wallet application.
248
+ *
249
+ * The promise will resolve when the connection is established.
250
+ */
251
+ const { uri, response } = await signClient.authenticate({
252
+ chainId: evmNetworks[0].networkId,
253
+ chains: caip2Networks,
254
+ domain: url.host,
255
+ iat: (/* @__PURE__ */ new Date()).toISOString(),
256
+ methods: evmMethods,
257
+ nonce,
258
+ requestId: core.environmentId,
259
+ statement: createSignInMessageStatement(client),
260
+ uri: url.toString()
261
+ });
262
+ assertDefined(uri, "Failed to establish WalletConnect session: no URI returned");
263
+ /**
264
+ * Once the approval promise resolves, the WalletConnect session is established
265
+ * between the wallet application and the dapp (this app).
266
+ */
267
+ const walletAccountsPromise = response().then((authResponse) => importWalletConnectAuthResponse({
268
+ authResponse,
269
+ chain: "EVM",
270
+ walletProviderBuilder: createWalletProviderFromEIP155Session
271
+ }, client));
272
+ return {
273
+ approval: () => walletAccountsPromise,
274
+ uri
275
+ };
276
+ };
277
+
278
+ //#endregion
279
+ //#region src/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.ts
280
+ /** @not-instrumented */
281
+ const connectWithWalletConnectEvm = async ({ addToDynamicWalletAccounts = true } = {}, client = getDefaultClient$1()) => {
282
+ const signClient = await getSignClient(client);
283
+ assertDefined(client.projectSettings, "Project settings unavailable");
284
+ const evmNetworks = client.projectSettings.networks?.find((network) => network.chainName === evmApiChainName)?.networks;
285
+ assertDefined(evmNetworks, "EVM networks not found");
286
+ const walletConnectChains = evmNetworks.map((network) => `eip155:${network.networkId}`);
287
+ /**
288
+ * A WalletConnect connection request generates a URI and a promise.
289
+ *
290
+ * The URI must be handed to an external wallet application that will use it
291
+ * to establish a connection via a WalletConnect relay server. Typically, this
292
+ * is done by scanning a QR code or deep linking to the wallet application.
293
+ *
294
+ * The promise will resolve when the connection is established.
295
+ */
296
+ const { approval, uri } = await signClient.connect({ optionalNamespaces: { eip155: {
297
+ chains: walletConnectChains,
298
+ events: [
299
+ "accountsChanged",
300
+ "chainChanged",
301
+ "disconnected"
302
+ ],
303
+ methods: evmMethods
304
+ } } });
305
+ assertDefined(uri, "Failed to establish WalletConnect session: no URI returned");
306
+ /**
307
+ * Once the approval promise resolves, the WalletConnect session is established
308
+ * between the wallet application and the dapp (this app).
309
+ */
310
+ const walletAccountsPromise = approval().then(async (session) => {
311
+ assertDefined(session.namespaces.eip155, `WalletConnect session did not establish an EIP155 connection. Found instead: ${Object.keys(session.namespaces).join(", ")}`);
312
+ return importWalletConnectSession({
313
+ addToDynamicWalletAccounts,
314
+ sessionTopic: session.topic,
315
+ walletProviderBuilder: createWalletProviderFromEIP155Session
316
+ }, client);
317
+ });
318
+ return {
319
+ approval: () => walletAccountsPromise,
320
+ uri
321
+ };
322
+ };
323
+
324
+ //#endregion
325
+ //#region src/exports/walletConnect.ts
326
+ assertPackageVersion(name, version);
327
+
328
+ //#endregion
329
+ export { addWalletConnectEvmExtension, connectAndVerifyWithWalletConnectEvm, connectWithWalletConnectEvm };
330
+ //# sourceMappingURL=walletConnect.native.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletConnect.native.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 { evmConfirmTransaction } from '../../utils/evmConfirmTransaction';\nimport { evmExecuteSwapTransaction } from '../../utils/evmExecuteSwapTransaction';\nimport { evmTransferAmount } from '../../utils/evmTransferAmount';\nimport type { evmMethods } from '../consts';\nimport type { WalletConnectEvmWalletProvider } from '../walletConnectEvmWalletProvider.types';\n\ntype CreateWalletProviderFromEIP155SessionParams = {\n sessionTopic: string;\n};\n\n/**\n * The list of ethereum request methods that require user action.\n * We will raise a user action requested event for these methods.\n */\nconst methodsThatRequireUserAction: string[] = [\n 'personal_sign',\n 'eth_sendTransaction',\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n 'eth_signTypedData_v4',\n] satisfies (typeof evmMethods)[number][];\n\n/** @not-instrumented */\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 confirmTransaction: (args) => evmConfirmTransaction(args, client),\n disconnect,\n disconnectWalletAccount,\n get events() {\n return getEventEmitter();\n },\n executeSwapTransaction: (args) => evmExecuteSwapTransaction(args, client),\n formatWalletAddress,\n getActiveNetworkId,\n getConnectedAddresses,\n getSession,\n groupKey: formatWalletProviderGroupKey(displayName),\n key,\n metadata: {\n displayName,\n icon: getSession().peer.metadata.icons[0],\n },\n namespaceKey,\n request,\n signMessage,\n switchActiveNetwork,\n terminate,\n transferAmount: (args) => evmTransferAmount(args, client),\n walletProviderType,\n };\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n WalletProviderPriority,\n getWalletProviderRegistry,\n waitForProjectSettings,\n} from '@dynamic-labs-sdk/client/core';\nimport { getSignClient } from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\n/** @not-instrumented */\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\n/** @not-instrumented */\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 createSignInMessageStatement,\n getCore,\n getDefaultClient,\n getNonce,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WalletConnectConnectionResult } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n getSignClient,\n importWalletConnectAuthResponse,\n} from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { 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 * @not-instrumented\n */\nexport const connectAndVerifyWithWalletConnectEvm = async (\n client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n const signClient = await getSignClient(client);\n const core = getCore(client);\n\n const 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 getNonce(client);\n\n /**\n * A WalletConnect connection request generates a URI and a promise.\n *\n * The URI must be handed to an external wallet application that will use it\n * to establish a connection via a WalletConnect relay server. Typically, this\n * is done by scanning a QR code or deep linking to the wallet application.\n *\n * The promise will resolve when the connection is established.\n */\n const { uri, response } = await signClient.authenticate({\n chainId: evmNetworks[0].networkId,\n chains: caip2Networks,\n domain: url.host,\n iat: new Date().toISOString(),\n methods: evmMethods as unknown as string[],\n nonce,\n requestId: core.environmentId,\n statement: createSignInMessageStatement(client),\n uri: url.toString(),\n });\n\n assertDefined(\n uri,\n 'Failed to establish WalletConnect session: no URI returned'\n );\n\n /**\n * Once the approval promise resolves, the WalletConnect session is established\n * between the wallet application and the dapp (this app).\n */\n const walletAccountsPromise = response().then((authResponse) =>\n importWalletConnectAuthResponse(\n {\n authResponse,\n chain: 'EVM',\n walletProviderBuilder: createWalletProviderFromEIP155Session,\n },\n client\n )\n );\n\n return { approval: () => walletAccountsPromise, uri };\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { 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\n/** @not-instrumented */\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,6 +1,6 @@
1
- const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-C2ZSMduy.cjs');
2
- const require_evmTransferAmount = require('./evmTransferAmount-CeNqafVB.cjs');
3
- const require_createWalletProviderFromEIP1193Provider = require('./createWalletProviderFromEIP1193Provider-Cf-urMAC.cjs');
1
+ const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-BRCTx54Y.cjs');
2
+ const require_evmTransferAmount = require('./evmTransferAmount-2oHtkHtg.cjs');
3
+ const require_createWalletProviderFromEIP1193Provider = require('./createWalletProviderFromEIP1193Provider-BtdyeO_q.cjs');
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");
6
6
 
@@ -1,6 +1,6 @@
1
- import { a as version, i as name } from "./createWalletClientForWalletAccount-0t5wDx-e.esm.js";
2
- import { a as registerEvmNetworkProviderBuilder } from "./evmTransferAmount-CGPHTi1G.esm.js";
3
- import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-C5TuwVHq.esm.js";
1
+ import { a as version, i as name } from "./createWalletClientForWalletAccount-DNRmkFGz.esm.js";
2
+ import { a as registerEvmNetworkProviderBuilder } from "./evmTransferAmount-DHhD0MEF.esm.js";
3
+ import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-CYa7ifj6.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";
6
6
 
@@ -0,0 +1,154 @@
1
+ import { n as version, t as name } from "./package-C1ZYfyHb.native.esm.js";
2
+ import { a as registerEvmNetworkProviderBuilder } from "./evmTransferAmount-B__79nVn.native.esm.js";
3
+ import "./createWalletClientForWalletAccount-V4CfRjd4.native.esm.js";
4
+ import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-RVjz6Jte.native.esm.js";
5
+ import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
6
+ import { DYNAMIC_ICONIC_SPRITE_URL, WalletProviderPriority, getAllProvidersFromWindow, getDefaultClient, getWalletProviderRegistry, hasExtension, registerExtension } from "@dynamic-labs-sdk/client/core";
7
+
8
+ //#region src/windowInjected/utils/detectEvmWalletFromProvider/detectEvmWalletFromProvider.ts
9
+ const getSpriteIcon = (name$1) => `${DYNAMIC_ICONIC_SPRITE_URL}#${name$1}`;
10
+ /**
11
+ * Detects wallet identity from provider flags using hardcoded checks.
12
+ *
13
+ * This is essential for wallet app in-app browsers where the wallet injects
14
+ * its provider with identifying flags (e.g., isMetaMask, isCoinbaseWallet).
15
+ *
16
+ * The order of checks matters - more specific flags should be checked first
17
+ * to avoid false positives (e.g., some MetaMask forks also set isMetaMask).
18
+ *
19
+ * @param params.provider - The EIP-1193 provider to detect
20
+ * @returns Detection result with displayName and icon, or null if unknown
21
+ * @not-instrumented
22
+ */
23
+ const detectEvmWalletFromProvider = ({ provider }) => {
24
+ const p = provider;
25
+ if (p.isCoinbaseWallet) return {
26
+ displayName: "Coinbase Wallet",
27
+ icon: getSpriteIcon("coinbasewallet")
28
+ };
29
+ if (p.isBraveWallet) return {
30
+ displayName: "Brave Wallet",
31
+ icon: getSpriteIcon("brave")
32
+ };
33
+ if (p.isPhantom) return {
34
+ displayName: "Phantom",
35
+ icon: getSpriteIcon("phantom")
36
+ };
37
+ if (p.isRabby) return {
38
+ displayName: "Rabby Wallet",
39
+ icon: getSpriteIcon("rabby")
40
+ };
41
+ if (p.isTrust) return {
42
+ displayName: "Trust Wallet",
43
+ icon: getSpriteIcon("trust")
44
+ };
45
+ if (p.isFrame) return {
46
+ displayName: "Frame",
47
+ icon: getSpriteIcon("frame")
48
+ };
49
+ if (p.isOkxWallet) return {
50
+ displayName: "OKX Wallet",
51
+ icon: getSpriteIcon("okx")
52
+ };
53
+ if (p.isZerion) return {
54
+ displayName: "Zerion",
55
+ icon: getSpriteIcon("zerion")
56
+ };
57
+ if (p.isMetaMask) return {
58
+ displayName: "MetaMask",
59
+ icon: getSpriteIcon("metamask")
60
+ };
61
+ return null;
62
+ };
63
+
64
+ //#endregion
65
+ //#region src/windowInjected/utils/getEvmInjectedProviders/getEvmInjectedProviders.ts
66
+ const EVM_PROVIDER_LOCATOR = "ethereum";
67
+ /**
68
+ * Gets all EIP-1193 providers from window.ethereum and window.ethereum.providers.
69
+ *
70
+ * This function collects all injected EVM providers from the window object,
71
+ * handling both single provider and multi-provider (EIP-5749) scenarios.
72
+ *
73
+ * This is particularly important for wallet app in-app browsers (e.g., MetaMask
74
+ * mobile, Trust Wallet, Coinbase Wallet) which inject their provider into
75
+ * window.ethereum rather than announcing via EIP-6963.
76
+ *
77
+ * @returns Array of all detected EIP-1193 providers
78
+ * @not-instrumented
79
+ */
80
+ const getEvmInjectedProviders = () => {
81
+ return getAllProvidersFromWindow(EVM_PROVIDER_LOCATOR).filter(isEIP1193Provider);
82
+ };
83
+ const isEIP1193Provider = (provider) => {
84
+ if (typeof provider !== "object" || provider === null) return false;
85
+ return typeof provider.request === "function";
86
+ };
87
+
88
+ //#endregion
89
+ //#region src/windowInjected/addEvmWindowInjectedExtension/addEvmWindowInjectedExtension.ts
90
+ const EVM_WINDOW_INJECTED_EXTENSION_KEY = "evmWindowInjected";
91
+ /**
92
+ * Adds the EVM window injected extension to the Dynamic client.
93
+ *
94
+ * This extension enables integration with wallets that are injected into window.ethereum
95
+ * but don't support EIP-6963. The primary use case is **wallet app in-app browsers**
96
+ * (e.g., MetaMask mobile browser, Trust Wallet browser, Coinbase Wallet browser),
97
+ * which typically inject their provider into window.ethereum rather than announcing
98
+ * via EIP-6963.
99
+ *
100
+ * Also useful as a fallback for:
101
+ * - Older browser extension wallets that predate EIP-6963
102
+ * - Safari or certain mobile browsers with limited EIP-6963 support
103
+ *
104
+ * Wallet providers registered via this extension have lower priority than EIP-6963
105
+ * providers, so if a wallet supports both, the EIP-6963 version will be used.
106
+ *
107
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
108
+ * @not-instrumented
109
+ */
110
+ const addEvmWindowInjectedExtension = (client = getDefaultClient()) => {
111
+ if (hasExtension({ extensionKey: EVM_WINDOW_INJECTED_EXTENSION_KEY }, client)) return;
112
+ registerExtension({ extensionKey: EVM_WINDOW_INJECTED_EXTENSION_KEY }, client);
113
+ registerEvmNetworkProviderBuilder(client);
114
+ const walletProviderRegistry = getWalletProviderRegistry(client);
115
+ getEvmInjectedProviders().forEach((provider) => {
116
+ const walletInfo = detectEvmWalletFromProvider({ provider });
117
+ if (!walletInfo) return;
118
+ const walletProvider = createWalletProviderFromEIP1193Provider({
119
+ displayName: walletInfo.displayName,
120
+ eip1193: provider,
121
+ icon: walletInfo.icon
122
+ }, client);
123
+ walletProviderRegistry.register({
124
+ priority: WalletProviderPriority.WINDOW_INJECT,
125
+ walletProvider
126
+ });
127
+ });
128
+ };
129
+
130
+ //#endregion
131
+ //#region src/exports/windowInjected.ts
132
+ /**
133
+ * EVM Window Injected Extension
134
+ *
135
+ * Provides support for wallets that are injected into window.ethereum rather than
136
+ * announcing via EIP-6963. This is primarily needed for **wallet app in-app
137
+ * browsers** (e.g., MetaMask mobile browser, Trust Wallet browser, Coinbase
138
+ * Wallet browser).
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * import { addEIP6963Extension } from '@dynamic-labs-sdk/evm/eip6963';
143
+ * import { addEvmWindowInjectedExtension } from '@dynamic-labs-sdk/evm/window-injected';
144
+ *
145
+ * // Add both extensions - EIP-6963 takes priority, window injected is fallback
146
+ * addEIP6963Extension(client);
147
+ * addEvmWindowInjectedExtension(client);
148
+ * ```
149
+ */
150
+ assertPackageVersion(name, version);
151
+
152
+ //#endregion
153
+ export { addEvmWindowInjectedExtension };
154
+ //# sourceMappingURL=windowInjected.native.esm.js.map