@dynamic-labs-sdk/evm 0.26.5 → 0.26.7

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-D87VJZkC.esm.js} +7 -4
  2. package/dist/addEIP6963Extension-D87VJZkC.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-ltl4AoMZ.cjs} +7 -4
  6. package/dist/addEIP6963Extension-ltl4AoMZ.cjs.map +1 -0
  7. package/dist/{addWaasEvmExtension-bLZn0Qoj.esm.js → addWaasEvmExtension-B22FwR23.esm.js} +3 -3
  8. package/dist/{addWaasEvmExtension-bLZn0Qoj.esm.js.map → addWaasEvmExtension-B22FwR23.esm.js.map} +1 -1
  9. package/dist/addWaasEvmExtension-BV00iC4G.native.esm.js +199 -0
  10. package/dist/addWaasEvmExtension-BV00iC4G.native.esm.js.map +1 -0
  11. package/dist/{addWaasEvmExtension-BPVt4XeG.cjs → addWaasEvmExtension-CYNMrWQ4.cjs} +3 -3
  12. package/dist/{addWaasEvmExtension-BPVt4XeG.cjs.map → addWaasEvmExtension-CYNMrWQ4.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-CBDDVIYV.cjs} +2 -2
  18. package/dist/{createWalletClientForWalletAccount-C2ZSMduy.cjs.map → createWalletClientForWalletAccount-CBDDVIYV.cjs.map} +1 -1
  19. package/dist/{createWalletClientForWalletAccount-0t5wDx-e.esm.js → createWalletClientForWalletAccount-CC2j8qwa.esm.js} +2 -2
  20. package/dist/{createWalletClientForWalletAccount-0t5wDx-e.esm.js.map → createWalletClientForWalletAccount-CC2j8qwa.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-C5TuwVHq.esm.js → createWalletProviderFromEIP1193Provider-CfTnRCB0.esm.js} +2 -2
  24. package/dist/{createWalletProviderFromEIP1193Provider-C5TuwVHq.esm.js.map → createWalletProviderFromEIP1193Provider-CfTnRCB0.esm.js.map} +1 -1
  25. package/dist/{createWalletProviderFromEIP1193Provider-Cf-urMAC.cjs → createWalletProviderFromEIP1193Provider-D9gxu6Ay.cjs} +2 -2
  26. package/dist/{createWalletProviderFromEIP1193Provider-Cf-urMAC.cjs.map → createWalletProviderFromEIP1193Provider-D9gxu6Ay.cjs.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-B__79nVn.native.esm.js +289 -0
  40. package/dist/evmTransferAmount-B__79nVn.native.esm.js.map +1 -0
  41. package/dist/{evmTransferAmount-CeNqafVB.cjs → evmTransferAmount-D5IgMelW.cjs} +2 -2
  42. package/dist/{evmTransferAmount-CeNqafVB.cjs.map → evmTransferAmount-D5IgMelW.cjs.map} +1 -1
  43. package/dist/{evmTransferAmount-CGPHTi1G.esm.js → evmTransferAmount-jBe-KpYe.esm.js} +2 -2
  44. package/dist/{evmTransferAmount-CGPHTi1G.esm.js.map → evmTransferAmount-jBe-KpYe.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-CAxC7ycE.native.esm.js +7 -0
  50. package/dist/package-CAxC7ycE.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
@@ -0,0 +1,179 @@
1
+ import { n as evmExecuteSwapTransaction, r as evmConfirmTransaction, t as evmTransferAmount } from "./evmTransferAmount-B__79nVn.native.esm.js";
2
+ import { createWalletProviderEventEmitter, formatWalletProviderGroupKey, formatWalletProviderKey } from "@dynamic-labs-sdk/client/core";
3
+ import { NetworkNotAddedError, NetworkSwitchingUnavailableError, UnrecognizedNetworkError, UserRejectedError, getNetworksData } from "@dynamic-labs-sdk/client";
4
+ import { WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
5
+ import { getAddress, isHex, toHex } from "viem";
6
+
7
+ //#region src/utils/createWalletProviderFromEIP1193Provider/addNetwork/addNetwork.ts
8
+ /**
9
+ * Allows requesting that the eip1193 provider adds a network to its list of available networks.
10
+ * @not-instrumented
11
+ */
12
+ const addNetwork = async ({ eip1193, networkData }) => {
13
+ const chainId = toHex(parseInt(networkData.networkId));
14
+ const payload = {
15
+ blockExplorerUrls: networkData.blockExplorerUrls,
16
+ chainId,
17
+ chainName: networkData.displayName,
18
+ iconUrls: [networkData.iconUrl],
19
+ nativeCurrency: networkData.nativeCurrency,
20
+ rpcUrls: networkData.rpcUrls.http
21
+ };
22
+ await eip1193.request({
23
+ method: "wallet_addEthereumChain",
24
+ params: [payload]
25
+ });
26
+ };
27
+
28
+ //#endregion
29
+ //#region src/utils/createWalletProviderFromEIP1193Provider/getActiveNetworkId/getActiveNetworkId.ts
30
+ /** @not-instrumented */
31
+ const getActiveNetworkId = async ({ eip1193 }) => {
32
+ const chainIdHex = await eip1193.request({
33
+ method: "eth_chainId",
34
+ params: []
35
+ });
36
+ return { networkId: `${parseInt(chainIdHex, 16)}` };
37
+ };
38
+
39
+ //#endregion
40
+ //#region src/utils/createWalletProviderFromEIP1193Provider/isUnrecognizedChainError/isUnrecognizedChainError.ts
41
+ const isRecord = (value) => typeof value === "object" && value !== null;
42
+ /** @not-instrumented */
43
+ const isUnrecognizedChainError = (error) => {
44
+ const isCode4902 = "code" in error && error.code === 4902;
45
+ const hasUnrecognizedChainMessage = "message" in error && typeof error.message === "string" && error.message.toLowerCase().includes("unrecognized chain");
46
+ const isOriginalErrorCode4902 = "data" in error && isRecord(error.data) && "originalError" in error.data && isRecord(error.data.originalError) && "code" in error.data.originalError && error.data.originalError.code === 4902;
47
+ return isCode4902 || hasUnrecognizedChainMessage || isOriginalErrorCode4902;
48
+ };
49
+
50
+ //#endregion
51
+ //#region src/utils/createWalletProviderFromEIP1193Provider/switchActiveNetwork/switchActiveNetwork.ts
52
+ /** @not-instrumented */
53
+ const switchActiveNetwork = async ({ networkId, client, eip1193, walletProviderKey }) => {
54
+ const chainId = toHex(parseInt(networkId));
55
+ try {
56
+ await eip1193.request({
57
+ method: "wallet_switchEthereumChain",
58
+ params: [{ chainId }]
59
+ });
60
+ } catch (error) {
61
+ const userRejectedError = new UserRejectedError({ action: "switch wallet active network" });
62
+ if (typeof error === "string" && error.includes("rejected")) throw userRejectedError;
63
+ if (typeof error !== "object" || error === null) throw error;
64
+ if ("details" in error && Array.isArray(error.details) && error.details.includes("\"wallet_switchEthereumChain\" not implemented")) throw new NetworkSwitchingUnavailableError({
65
+ originalError: error,
66
+ walletProviderKey
67
+ });
68
+ if (isUnrecognizedChainError(error)) {
69
+ const networkData = getNetworksData(client).find((networkData$1) => networkData$1.networkId === networkId && networkData$1.chain === "EVM");
70
+ if (!networkData) throw new UnrecognizedNetworkError({
71
+ networkId,
72
+ originalError: error,
73
+ walletProviderKey
74
+ });
75
+ throw new NetworkNotAddedError({
76
+ networkData,
77
+ networkId,
78
+ originalError: error,
79
+ walletProviderKey
80
+ });
81
+ } else if ("message" in error && typeof error.message === "string" && error.message.includes("rejected")) throw userRejectedError;
82
+ else throw error;
83
+ }
84
+ };
85
+
86
+ //#endregion
87
+ //#region src/utils/createWalletProviderFromEIP1193Provider/createWalletProviderFromEIP1193Provider.ts
88
+ /** @not-instrumented */
89
+ const createWalletProviderFromEIP1193Provider = ({ eip1193, icon, displayName, walletProviderType = WalletProviderEnum.BrowserExtension }, client) => {
90
+ const chain = "EVM";
91
+ const key = formatWalletProviderKey({
92
+ chain,
93
+ displayName,
94
+ walletProviderType
95
+ });
96
+ const addNetworkWrapped = async ({ networkData }) => addNetwork({
97
+ eip1193,
98
+ networkData
99
+ });
100
+ const connect = async () => {
101
+ return { addresses: (await eip1193.request({
102
+ method: "eth_requestAccounts",
103
+ params: []
104
+ })).map((address) => getAddress(address)).map((address) => ({ address })) };
105
+ };
106
+ const disconnect = async () => {
107
+ await eip1193.request({
108
+ method: "wallet_revokePermissions",
109
+ params: [{ eth_accounts: {} }]
110
+ });
111
+ };
112
+ const getConnectedAddresses = async () => {
113
+ return { addresses: (await eip1193.request({
114
+ method: "eth_accounts",
115
+ params: []
116
+ })).map((address) => getAddress(address)) };
117
+ };
118
+ const signMessage = async ({ message, walletAccount }) => {
119
+ const params = [message];
120
+ if (walletAccount) params.push(walletAccount.address);
121
+ return { signature: await eip1193.request({
122
+ method: "personal_sign",
123
+ params
124
+ }) };
125
+ };
126
+ const { getEventEmitter, cleanupEventEmitter } = createWalletProviderEventEmitter({
127
+ removeEventListeners: () => {
128
+ eip1193.removeAllListeners();
129
+ },
130
+ setupEventListeners: ({ handleAccountsChanged, handleDisconnected, handleNetworkChanged }) => {
131
+ eip1193.on("accountsChanged", (addresses) => {
132
+ handleAccountsChanged({ addresses });
133
+ });
134
+ eip1193.on("disconnected", () => {
135
+ handleDisconnected();
136
+ });
137
+ eip1193.on("chainChanged", (chain$1) => {
138
+ handleNetworkChanged({ networkId: isHex(chain$1) ? parseInt(chain$1, 16).toString() : chain$1.toString() });
139
+ });
140
+ }
141
+ });
142
+ const terminate = async () => {
143
+ cleanupEventEmitter();
144
+ };
145
+ return {
146
+ addNetwork: addNetworkWrapped,
147
+ chain,
148
+ confirmTransaction: (args) => evmConfirmTransaction(args, client),
149
+ connect,
150
+ disconnect,
151
+ get events() {
152
+ return getEventEmitter();
153
+ },
154
+ executeSwapTransaction: (args) => evmExecuteSwapTransaction(args, client),
155
+ getActiveNetworkId: () => getActiveNetworkId({ eip1193 }),
156
+ getConnectedAddresses,
157
+ groupKey: formatWalletProviderGroupKey(displayName),
158
+ key,
159
+ metadata: {
160
+ displayName,
161
+ icon
162
+ },
163
+ request: eip1193.request.bind(eip1193),
164
+ signMessage,
165
+ switchActiveNetwork: ({ networkId }) => switchActiveNetwork({
166
+ client,
167
+ eip1193,
168
+ networkId,
169
+ walletProviderKey: key
170
+ }),
171
+ terminate,
172
+ transferAmount: (args) => evmTransferAmount(args, client),
173
+ walletProviderType
174
+ };
175
+ };
176
+
177
+ //#endregion
178
+ export { createWalletProviderFromEIP1193Provider as t };
179
+ //# sourceMappingURL=createWalletProviderFromEIP1193Provider-RVjz6Jte.native.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWalletProviderFromEIP1193Provider-RVjz6Jte.native.esm.js","names":["addNetwork: AddNetwork","payload: RequestAddChainPayload","getActiveNetworkId: GetActiveNetworkId","switchActiveNetwork: switchActiveNetwork","networkData","chain: Chain","addNetworkWrapped: EvmWalletProvider['addNetwork']","connect: EvmWalletProvider['connect']","viemGetAddress","disconnect: EvmWalletProvider['disconnect']","getConnectedAddresses: EvmWalletProvider['getConnectedAddresses']","signMessage: EvmWalletProvider['signMessage']","chain","terminate: EvmWalletProvider['terminate']"],"sources":["../src/utils/createWalletProviderFromEIP1193Provider/addNetwork/addNetwork.ts","../src/utils/createWalletProviderFromEIP1193Provider/getActiveNetworkId/getActiveNetworkId.ts","../src/utils/createWalletProviderFromEIP1193Provider/isUnrecognizedChainError/isUnrecognizedChainError.ts","../src/utils/createWalletProviderFromEIP1193Provider/switchActiveNetwork/switchActiveNetwork.ts","../src/utils/createWalletProviderFromEIP1193Provider/createWalletProviderFromEIP1193Provider.ts"],"sourcesContent":["import type { ExtendParameters } from '@dynamic-labs-sdk/client/core';\nimport { toHex } from 'viem';\n\nimport type {\n EIP1193Provider,\n EvmWalletProvider,\n} from '../../../EvmWalletProvider.types';\n\n// source: https://docs.metamask.io/wallet/reference/json-rpc-methods/wallet_addethereumchain/\ntype RequestAddChainPayload = {\n /**\n * An array of one or more URLs pointing to block explorer sites for the chain.\n */\n blockExplorerUrls?: string[];\n /**\n * The chain ID as a 0x-prefixed hexadecimal string, per the eth_chainId method.\n * MetaMask compares this chain ID value with the eth_chainId return value.\n * If these values aren't identical, MetaMask rejects the request.\n */\n chainId: string;\n /**\n * A human-readable name for the chain.\n */\n chainName: string;\n /**\n * An array of one or more URLs pointing to icons that can be used to visually identify the chain.\n */\n iconUrls?: string[];\n /**\n * An object containing information about the native currency of the chain.\n */\n nativeCurrency: {\n /**\n * A non-negative integer representing the number of decimals the native currency uses.\n */\n decimals: number;\n /**\n * A human-readable name of the native currency.\n */\n name: string;\n /**\n * A human-readable symbol of the native currency.\n */\n symbol: string;\n };\n /**\n * An array of one or more URLs pointing to RPC endpoints that can be used to communicate with the chain.\n * At least one item is required.\n */\n rpcUrls: string[];\n};\n\ntype AddNetwork = ExtendParameters<\n EvmWalletProvider['addNetwork'],\n {\n eip1193: EIP1193Provider;\n }\n>;\n\n/**\n * Allows requesting that the eip1193 provider adds a network to its list of available networks.\n * @not-instrumented\n */\nexport const addNetwork: AddNetwork = async ({ eip1193, networkData }) => {\n const chainId = toHex(parseInt(networkData.networkId));\n\n const payload: RequestAddChainPayload = {\n blockExplorerUrls: networkData.blockExplorerUrls,\n chainId,\n chainName: networkData.displayName,\n iconUrls: [networkData.iconUrl],\n nativeCurrency: networkData.nativeCurrency,\n rpcUrls: networkData.rpcUrls.http,\n };\n\n await eip1193.request({\n method: 'wallet_addEthereumChain',\n params: [payload],\n });\n};\n","import type {\n EIP1193Provider,\n EvmWalletProvider,\n} from '../../../EvmWalletProvider.types';\n\ntype GetActiveNetworkId = (args: {\n eip1193: EIP1193Provider;\n}) => ReturnType<EvmWalletProvider['getActiveNetworkId']>;\n\n/** @not-instrumented */\nexport const getActiveNetworkId: GetActiveNetworkId = async ({ eip1193 }) => {\n const chainIdHex = (await eip1193.request({\n method: 'eth_chainId',\n params: [],\n })) as string;\n\n return { networkId: `${parseInt(chainIdHex, 16)}` };\n};\n","// Sources:\n// https://docs.metamask.io/wallet/reference/json-rpc-methods/wallet_switchethereumchain/\n// https://docs.metamask.io/guide/rpc-api.html#usage-with-wallet-switchethereumchain\n\nconst isRecord = (value: unknown) =>\n typeof value === 'object' && value !== null;\n\n/** @not-instrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isUnrecognizedChainError = (error: object) => {\n const isCode4902 = 'code' in error && error.code === 4902;\n\n const hasUnrecognizedChainMessage =\n 'message' in error &&\n typeof error.message === 'string' &&\n error.message.toLowerCase().includes('unrecognized chain');\n\n const isOriginalErrorCode4902 =\n 'data' in error &&\n isRecord(error.data) &&\n 'originalError' in error.data &&\n isRecord(error.data.originalError) &&\n 'code' in error.data.originalError &&\n error.data.originalError.code === 4902;\n\n return isCode4902 || hasUnrecognizedChainMessage || isOriginalErrorCode4902;\n};\n","import {\n type DynamicClient,\n NetworkNotAddedError,\n NetworkSwitchingUnavailableError,\n UnrecognizedNetworkError,\n UserRejectedError,\n getNetworksData,\n} from '@dynamic-labs-sdk/client';\nimport type { ExtendParameters } from '@dynamic-labs-sdk/client/core';\nimport { toHex } from 'viem';\n\nimport type {\n EIP1193Provider,\n EvmWalletProvider,\n} from '../../../EvmWalletProvider.types';\nimport { isUnrecognizedChainError } from '../isUnrecognizedChainError';\n\ntype switchActiveNetwork = ExtendParameters<\n EvmWalletProvider['switchActiveNetwork'],\n {\n client: DynamicClient;\n eip1193: EIP1193Provider;\n walletProviderKey: string;\n }\n>;\n\n/** @not-instrumented */\nexport const switchActiveNetwork: switchActiveNetwork = async ({\n networkId,\n client,\n eip1193,\n walletProviderKey,\n}) => {\n const chainId = toHex(parseInt(networkId));\n\n try {\n await eip1193.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId }],\n });\n } catch (error) {\n // We declare this error here to DRY it from being created in 2 different points below\n const userRejectedError = new UserRejectedError({\n action: 'switch wallet active network',\n });\n\n if (typeof error === 'string' && error.includes('rejected')) {\n throw userRejectedError;\n }\n\n if (typeof error !== 'object' || error === null) {\n throw error;\n }\n\n if (\n 'details' in error &&\n Array.isArray(error.details) &&\n error.details.includes(\n // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n '\"wallet_switchEthereumChain\" not implemented'\n )\n ) {\n throw new NetworkSwitchingUnavailableError({\n originalError: error,\n walletProviderKey,\n });\n }\n\n // Bear in mind: the unrecognized chain error also contains 'rejected' in message,\n // so it needs to be checked for before the rejection error itself.\n if (isUnrecognizedChainError(error)) {\n const networkData = getNetworksData(client).find(\n (networkData) =>\n networkData.networkId === networkId && networkData.chain === 'EVM'\n );\n\n if (!networkData) {\n throw new UnrecognizedNetworkError({\n networkId,\n originalError: error,\n walletProviderKey,\n });\n }\n\n throw new NetworkNotAddedError({\n networkData,\n networkId,\n originalError: error,\n walletProviderKey,\n });\n } else if (\n 'message' in error &&\n typeof error.message === 'string' &&\n error.message.includes('rejected')\n ) {\n throw userRejectedError;\n } else {\n throw error;\n }\n }\n};\n","/* eslint-disable custom-rules/require-client-param */\nimport type { Chain, DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { isHex, getAddress as viemGetAddress } from 'viem';\n\nimport type {\n EIP1193Provider,\n EvmWalletProvider,\n} from '../../EvmWalletProvider.types';\nimport { evmConfirmTransaction } from '../evmConfirmTransaction';\nimport { evmExecuteSwapTransaction } from '../evmExecuteSwapTransaction';\nimport { evmTransferAmount } from '../evmTransferAmount';\nimport { addNetwork } from './addNetwork';\nimport { getActiveNetworkId } from './getActiveNetworkId/getActiveNetworkId';\nimport { switchActiveNetwork } from './switchActiveNetwork';\n\ntype CreateWalletProviderFromEIP1193ProviderParams = {\n displayName: string;\n eip1193: EIP1193Provider;\n icon: string;\n walletProviderType?: WalletProviderEnum;\n};\n\n/** @not-instrumented */\nexport const createWalletProviderFromEIP1193Provider = (\n {\n eip1193,\n icon,\n displayName,\n walletProviderType = WalletProviderEnum.BrowserExtension,\n }: CreateWalletProviderFromEIP1193ProviderParams,\n client: DynamicClient\n): EvmWalletProvider => {\n const chain: Chain = 'EVM';\n\n const key = formatWalletProviderKey({\n chain,\n displayName,\n walletProviderType,\n });\n\n const addNetworkWrapped: EvmWalletProvider['addNetwork'] = async ({\n networkData,\n }) => addNetwork({ eip1193, networkData });\n\n const connect: EvmWalletProvider['connect'] = async () => {\n const addresses = (await eip1193.request({\n method: 'eth_requestAccounts',\n params: [],\n })) as string[];\n\n const formattedAddresses = addresses.map((address) =>\n viemGetAddress(address)\n );\n\n return {\n addresses: formattedAddresses.map((address) => ({\n address,\n })),\n };\n };\n\n const disconnect: EvmWalletProvider['disconnect'] = async () => {\n await eip1193.request({\n method: 'wallet_revokePermissions',\n params: [\n {\n eth_accounts: {},\n },\n ],\n });\n };\n\n const getConnectedAddresses: EvmWalletProvider['getConnectedAddresses'] =\n async () => {\n const addresses = (await eip1193.request({\n method: 'eth_accounts',\n params: [],\n })) as string[];\n\n const formattedAddresses = addresses.map((address) =>\n viemGetAddress(address)\n );\n\n return {\n addresses: formattedAddresses,\n };\n };\n\n const signMessage: EvmWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n const params = [message];\n\n if (walletAccount) {\n params.push(walletAccount.address);\n }\n\n const signedMessage = await eip1193.request({\n method: 'personal_sign',\n params,\n });\n\n return {\n signature: signedMessage as string,\n };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter({\n removeEventListeners: () => {\n eip1193.removeAllListeners();\n },\n\n setupEventListeners: ({\n handleAccountsChanged,\n handleDisconnected,\n handleNetworkChanged,\n }) => {\n eip1193.on('accountsChanged', (addresses) => {\n handleAccountsChanged({ addresses });\n });\n\n eip1193.on('disconnected', () => {\n handleDisconnected();\n });\n\n eip1193.on('chainChanged', (chain) => {\n const networkId = isHex(chain)\n ? parseInt(chain, 16).toString()\n : chain.toString();\n\n handleNetworkChanged({ networkId });\n });\n },\n });\n\n const terminate: EvmWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n return {\n addNetwork: addNetworkWrapped,\n chain,\n confirmTransaction: (args) => evmConfirmTransaction(args, client),\n connect,\n disconnect,\n get events() {\n return getEventEmitter();\n },\n executeSwapTransaction: (args) => evmExecuteSwapTransaction(args, client),\n getActiveNetworkId: () => getActiveNetworkId({ eip1193 }),\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(displayName),\n key,\n metadata: { displayName, icon },\n request: eip1193.request.bind(eip1193),\n signMessage,\n switchActiveNetwork: ({ networkId }) =>\n switchActiveNetwork({\n client,\n eip1193,\n networkId,\n walletProviderKey: key,\n }),\n terminate,\n transferAmount: (args) => evmTransferAmount(args, client),\n walletProviderType,\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const EIP6963_EXTENSION_KEY = "eip6963";
2
+ //# sourceMappingURL=addEIP6963Extension.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addEIP6963Extension.constants.d.ts","sourceRoot":"","sources":["../../../src/eip6963/addEIP6963Extension/addEIP6963Extension.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,YAAY,CAAC"}
@@ -1,4 +1,4 @@
1
- export declare const EIP6963_EXTENSION_KEY = "eip6963";
1
+ import type { AddEIP6963Extension } from './addEIP6963Extension.types';
2
2
  /**
3
3
  * Adds the EIP-6963 extension to the Dynamic client.
4
4
  *
@@ -7,7 +7,7 @@ export declare const EIP6963_EXTENSION_KEY = "eip6963";
7
7
  *
8
8
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
9
9
  * @returns A function that can be used to remove EIP-6963 global event listeners that were added.
10
- * @not-instrumented
10
+ * @not-instrumented
11
11
  */
12
- export declare const addEIP6963Extension: (client?: import("@dynamic-labs-sdk/client").DynamicClient) => VoidFunction;
12
+ export declare const addEIP6963Extension: AddEIP6963Extension;
13
13
  //# sourceMappingURL=addEIP6963Extension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"addEIP6963Extension.d.ts","sourceRoot":"","sources":["../../../src/eip6963/addEIP6963Extension/addEIP6963Extension.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,6EA2B/B,CAAC"}
1
+ {"version":3,"file":"addEIP6963Extension.d.ts","sourceRoot":"","sources":["../../../src/eip6963/addEIP6963Extension/addEIP6963Extension.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,EAAE,mBA6BjC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { DynamicClient } from '@dynamic-labs-sdk/client';
2
+ /**
3
+ * Registers the EIP-6963 extension on a `DynamicClient`.
4
+ *
5
+ * On web, attaches a `window` listener that discovers injected wallet
6
+ * providers. EIP-6963 is not supported on React Native (it relies on
7
+ * browser `window` events that do not exist there), so the React Native
8
+ * implementation is a no-op. Both variants return a cleanup function so
9
+ * callers can unregister symmetrically.
10
+ */
11
+ export type AddEIP6963Extension = (client?: DynamicClient) => () => void;
12
+ //# sourceMappingURL=addEIP6963Extension.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addEIP6963Extension.types.d.ts","sourceRoot":"","sources":["../../../src/eip6963/addEIP6963Extension/addEIP6963Extension.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,KAAK,MAAM,IAAI,CAAC"}
package/dist/eip6963.cjs CHANGED
@@ -1,7 +1,7 @@
1
- const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-C2ZSMduy.cjs');
2
- require('./evmTransferAmount-CeNqafVB.cjs');
3
- require('./createWalletProviderFromEIP1193Provider-Cf-urMAC.cjs');
4
- const require_addEIP6963Extension = require('./addEIP6963Extension-Cv4Gj1SR.cjs');
1
+ const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-CBDDVIYV.cjs');
2
+ require('./evmTransferAmount-D5IgMelW.cjs');
3
+ require('./createWalletProviderFromEIP1193Provider-D9gxu6Ay.cjs');
4
+ const require_addEIP6963Extension = require('./addEIP6963Extension-ltl4AoMZ.cjs');
5
5
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
6
6
 
7
7
  //#region src/exports/eip6963.ts
@@ -1,7 +1,7 @@
1
- import { a as version, i as name } from "./createWalletClientForWalletAccount-0t5wDx-e.esm.js";
2
- import "./evmTransferAmount-CGPHTi1G.esm.js";
3
- import "./createWalletProviderFromEIP1193Provider-C5TuwVHq.esm.js";
4
- import { t as addEIP6963Extension } from "./addEIP6963Extension-BaI2C41i.esm.js";
1
+ import { a as version, i as name } from "./createWalletClientForWalletAccount-CC2j8qwa.esm.js";
2
+ import "./evmTransferAmount-jBe-KpYe.esm.js";
3
+ import "./createWalletProviderFromEIP1193Provider-CfTnRCB0.esm.js";
4
+ import { t as addEIP6963Extension } from "./addEIP6963Extension-D87VJZkC.esm.js";
5
5
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
6
6
 
7
7
  //#region src/exports/eip6963.ts
@@ -0,0 +1,10 @@
1
+ import { n as version, t as name } from "./package-CAxC7ycE.native.esm.js";
2
+ import { t as addEIP6963Extension } from "./addEIP6963Extension-J6SledVr.native.esm.js";
3
+ import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
4
+
5
+ //#region src/exports/eip6963.ts
6
+ assertPackageVersion(name, version);
7
+
8
+ //#endregion
9
+ export { addEIP6963Extension };
10
+ //# sourceMappingURL=eip6963.native.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eip6963.native.esm.js","names":["packageName","packageVersion"],"sources":["../src/exports/eip6963.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 { addEIP6963Extension } from '../eip6963/addEIP6963Extension';\n"],"mappings":";;;;;AAMA,qBAAqBA,MAAaC,QAAe"}
@@ -0,0 +1,289 @@
1
+ import { n as createPublicClientFromNetworkData, t as createWalletClientForWalletAccount } from "./createWalletClientForWalletAccount-V4CfRjd4.native.esm.js";
2
+ import { assertDefined, createBaseNetworkProvider, getCore, getNetworkProviderBuilderRegistry } from "@dynamic-labs-sdk/client/core";
3
+ import { BaseError, InvalidParamError, getActiveNetworkData } from "@dynamic-labs-sdk/client";
4
+ import { encodeFunctionData, erc20Abi, parseEther, parseUnits } from "viem";
5
+
6
+ //#region src/errors/RpcError.ts
7
+ var RpcError = class extends BaseError {
8
+ constructor(args) {
9
+ super({
10
+ cause: args.cause ?? null,
11
+ code: args.code ?? "rpc_error",
12
+ details: args.details,
13
+ docsUrl: args.docsUrl ?? null,
14
+ metaMessages: args.metaMessages,
15
+ name: args.name ?? "RpcError",
16
+ shortMessage: args.shortMessage
17
+ });
18
+ }
19
+ };
20
+
21
+ //#endregion
22
+ //#region src/utils/fetchEvmBalance/fetchEvmBalance.ts
23
+ /** @not-instrumented */
24
+ const fetchEvmBalance = async ({ address, networkData }, client) => {
25
+ const rpcUrl = networkData.rpcUrls.http[0];
26
+ const core = getCore(client);
27
+ try {
28
+ const response = await core.fetch(rpcUrl, {
29
+ body: JSON.stringify({
30
+ id: Math.floor(Date.now() + Math.random() * 1e3),
31
+ jsonrpc: "2.0",
32
+ method: "eth_getBalance",
33
+ params: [address, "latest"]
34
+ }),
35
+ headers: { "Content-Type": "application/json" },
36
+ method: "POST"
37
+ });
38
+ if (!response.ok) throw new RpcError({
39
+ code: "http_error",
40
+ shortMessage: `HTTP error! status: ${response.status}`
41
+ });
42
+ const data = await response.json();
43
+ if (data.error) throw new RpcError({
44
+ cause: data.error instanceof Error ? data.error : void 0,
45
+ code: "json_rpc_error",
46
+ shortMessage: `RPC Error: ${data.error.message}`
47
+ });
48
+ const balanceWeiHex = data.result;
49
+ const balanceWei = BigInt(balanceWeiHex);
50
+ const oneEther = BigInt(0xde0b6b3a7640000);
51
+ return (Number(balanceWei) / Number(oneEther)).toString();
52
+ } catch (error) {
53
+ if (error instanceof Error) throw new RpcError({
54
+ cause: error,
55
+ code: "rpc_error",
56
+ shortMessage: `Failed to fetch balance for address ${address}`
57
+ });
58
+ throw error;
59
+ }
60
+ };
61
+
62
+ //#endregion
63
+ //#region src/utils/createEvmNetworkProvider/createEvmNetworkProvider.ts
64
+ /** @not-instrumented */
65
+ const createEvmNetworkProvider = (networkData, client) => ({
66
+ ...createBaseNetworkProvider("EVM", networkData),
67
+ getBalance: async ({ address }) => ({ balance: await fetchEvmBalance({
68
+ address,
69
+ networkData
70
+ }, client) })
71
+ });
72
+
73
+ //#endregion
74
+ //#region src/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.ts
75
+ /** @not-instrumented */
76
+ const registerEvmNetworkProviderBuilder = (client) => {
77
+ const networkProviderBuilderRegistry = getNetworkProviderBuilderRegistry(client);
78
+ /**
79
+ * If the Ethereum network provider builder is already registered, return.
80
+ */
81
+ if (networkProviderBuilderRegistry.get().get("EVM")) return;
82
+ networkProviderBuilderRegistry.register({
83
+ builder: (networkData) => createEvmNetworkProvider(networkData, client),
84
+ chain: "EVM"
85
+ });
86
+ };
87
+
88
+ //#endregion
89
+ //#region src/utils/isEvmWalletAccount/isEvmWalletAccount.ts
90
+ /**
91
+ * Type guard function to check if a wallet account is an EVM wallet account.
92
+ *
93
+ * @param walletAccount - The wallet account to check.
94
+ * @returns True if the wallet account is an EVM wallet account, false otherwise.
95
+ * @not-instrumented
96
+ */
97
+ const isEvmWalletAccount = (walletAccount) => walletAccount.chain === "EVM";
98
+
99
+ //#endregion
100
+ //#region src/utils/evmConfirmTransaction/evmConfirmTransaction.ts
101
+ /**
102
+ * Waits for an EVM transaction to be confirmed on-chain.
103
+ *
104
+ * @param params.transactionHash - The transaction hash to wait for.
105
+ * @param params.walletAccount - The EVM wallet account used to resolve the active network.
106
+ * @param client - The Dynamic client instance.
107
+ * @not-instrumented
108
+ */
109
+ const evmConfirmTransaction = async ({ transactionHash, walletAccount }, client) => {
110
+ if (!isEvmWalletAccount(walletAccount)) throw new InvalidParamError("Wallet account is not an EVM wallet account");
111
+ const { networkData } = await getActiveNetworkData({ walletAccount }, client);
112
+ assertDefined(networkData, `No network data found for wallet account ${walletAccount.address}`);
113
+ await createPublicClientFromNetworkData({ networkData }).waitForTransactionReceipt({ hash: transactionHash });
114
+ };
115
+
116
+ //#endregion
117
+ //#region src/utils/approveErc20/approveErc20.ts
118
+ /**
119
+ * Sends an ERC-20 `approve` transaction, granting a spender an allowance
120
+ * to transfer tokens on behalf of the wallet account.
121
+ *
122
+ * Encodes the `approve(spender, amount)` call using viem's `encodeFunctionData`
123
+ * and sends it through the wallet account's viem wallet client.
124
+ *
125
+ * @param params.amount - The amount to approve in the token's smallest unit.
126
+ * @param params.spenderAddress - The address being granted the allowance.
127
+ * @param params.tokenAddress - The ERC-20 token contract address.
128
+ * @param params.walletAccount - The EVM wallet account sending the approval.
129
+ * @param client - The Dynamic client instance.
130
+ * @returns The approval transaction hash.
131
+ * @not-instrumented
132
+ */
133
+ const approveErc20 = async ({ amount, spenderAddress, tokenAddress, walletAccount }, client) => {
134
+ const walletClient = await createWalletClientForWalletAccount({ walletAccount }, client);
135
+ const data = encodeFunctionData({
136
+ abi: erc20Abi,
137
+ args: [spenderAddress, amount],
138
+ functionName: "approve"
139
+ });
140
+ return { transactionHash: await walletClient.sendTransaction({
141
+ data,
142
+ to: tokenAddress
143
+ }) };
144
+ };
145
+
146
+ //#endregion
147
+ //#region src/utils/getErc20Allowance/getErc20Allowance.ts
148
+ /**
149
+ * Reads the current ERC-20 token allowance granted by an owner to a spender.
150
+ *
151
+ * Uses a viem public client derived from the wallet account's active network
152
+ * to call the `allowance(owner, spender)` method on the token contract.
153
+ *
154
+ * @param params.tokenAddress - The ERC-20 token contract address.
155
+ * @param params.ownerAddress - The address that granted the allowance.
156
+ * @param params.spenderAddress - The address allowed to spend the tokens.
157
+ * @param params.walletAccount - The EVM wallet account used to resolve the active network.
158
+ * @param [params.networkData] - The network data to use for the public client. If not provided, the active network data will be used.
159
+ * @param client - The Dynamic client instance.
160
+ * @returns The current allowance as a bigint in the token's smallest unit.
161
+ * @not-instrumented
162
+ */
163
+ const getErc20Allowance = async ({ networkData, ownerAddress, spenderAddress, tokenAddress, walletAccount }, client) => {
164
+ if (!networkData) networkData = (await getActiveNetworkData({ walletAccount }, client)).networkData;
165
+ assertDefined(networkData, `No network data found for wallet account ${walletAccount.address}`);
166
+ return createPublicClientFromNetworkData({ networkData }).readContract({
167
+ abi: erc20Abi,
168
+ address: tokenAddress,
169
+ args: [ownerAddress, spenderAddress],
170
+ functionName: "allowance"
171
+ });
172
+ };
173
+
174
+ //#endregion
175
+ //#region src/utils/approveErc20IfRequiredAndWaitReceipt/approveErc20IfRequiredAndWaitReceipt.ts
176
+ /**
177
+ * Approves an ERC-20 token if the current allowance is insufficient and waits for the transaction receipt.
178
+ *
179
+ * @param params.amount - The amount of tokens to approve.
180
+ * @param params.ownerAddress - The address that granted the allowance.
181
+ * @param params.spenderAddress - The address allowed to spend the tokens.
182
+ * @param params.tokenAddress - The ERC-20 token contract address.
183
+ * @param params.walletAccount - The EVM wallet account used to resolve the active network.
184
+ * @param client - The Dynamic client instance.
185
+ * @returns The transaction receipt if an approval was sent, otherwise undefined.
186
+ * @not-instrumented
187
+ */
188
+ const approveErc20IfRequiredAndWaitReceipt = async ({ amount, spenderAddress, tokenAddress, walletAccount }, client) => {
189
+ const { networkData } = await getActiveNetworkData({ walletAccount }, client);
190
+ assertDefined(networkData, `No network data found for wallet account ${walletAccount.address}`);
191
+ const currentAllowance = await getErc20Allowance({
192
+ networkData,
193
+ ownerAddress: walletAccount.address,
194
+ spenderAddress,
195
+ tokenAddress,
196
+ walletAccount
197
+ }, client);
198
+ const approvalAmount = BigInt(amount);
199
+ if (currentAllowance >= approvalAmount) return;
200
+ const approvalTransactionHash = (await approveErc20({
201
+ amount: approvalAmount,
202
+ spenderAddress,
203
+ tokenAddress,
204
+ walletAccount
205
+ }, client)).transactionHash;
206
+ return { receipt: await createPublicClientFromNetworkData({ networkData }).waitForTransactionReceipt({ hash: approvalTransactionHash }) };
207
+ };
208
+
209
+ //#endregion
210
+ //#region src/utils/evmExecuteSwapTransaction/evmExecuteSwapTransaction.ts
211
+ /**
212
+ * Executes an EVM checkout transaction by handling optional ERC-20 approval
213
+ * and sending the main swap transaction on-chain.
214
+ *
215
+ * 1. Validates that the wallet account is an EVM wallet account
216
+ * 2. If the signing payload includes an `evmApproval`, checks the current
217
+ * ERC-20 allowance and sends an approve transaction when insufficient
218
+ * 3. Sends the main transaction using the viem wallet client
219
+ *
220
+ * @param params.signingPayload - The chain-aware signing payload containing `evmTransaction` and optional `evmApproval`.
221
+ * @param params.walletAccount - The wallet account used to sign and send transactions.
222
+ * @param params.onStepChange - Optional callback invoked with `'approval'` or `'transaction'` as each step begins.
223
+ * @param client - The Dynamic client instance.
224
+ * @returns The main transaction hash and, if an approval was sent, the approval transaction hash.
225
+ * @not-instrumented
226
+ */
227
+ const evmExecuteSwapTransaction = async ({ onStepChange, signingPayload, walletAccount }, client) => {
228
+ if (!isEvmWalletAccount(walletAccount)) throw new InvalidParamError("Wallet account is not an EVM wallet account");
229
+ const { evmTransaction, evmApproval } = signingPayload;
230
+ if (!evmTransaction) throw new InvalidParamError("Signing payload is missing EVM transaction data");
231
+ if (evmApproval) {
232
+ onStepChange?.("approval");
233
+ await approveErc20IfRequiredAndWaitReceipt({
234
+ amount: evmApproval.amount,
235
+ spenderAddress: evmApproval.spenderAddress,
236
+ tokenAddress: evmApproval.tokenAddress,
237
+ walletAccount
238
+ }, client);
239
+ }
240
+ onStepChange?.("transaction");
241
+ const walletClient = await createWalletClientForWalletAccount({ walletAccount }, client);
242
+ let gasParams = {};
243
+ if (evmTransaction.maxFeePerGas && evmTransaction.maxPriorityFeePerGas) gasParams = {
244
+ maxFeePerGas: BigInt(evmTransaction.maxFeePerGas),
245
+ maxPriorityFeePerGas: BigInt(evmTransaction.maxPriorityFeePerGas)
246
+ };
247
+ else gasParams = { ...evmTransaction.gasPrice && { gasPrice: BigInt(evmTransaction.gasPrice) } };
248
+ return { transactionHash: await walletClient.sendTransaction({
249
+ data: evmTransaction.data,
250
+ to: evmTransaction.to,
251
+ value: evmTransaction.value ? BigInt(evmTransaction.value) : 0n,
252
+ ...evmTransaction.gasLimit && { gas: BigInt(evmTransaction.gasLimit) },
253
+ ...gasParams,
254
+ ...evmTransaction.nonce && { nonce: evmTransaction.nonce }
255
+ }) };
256
+ };
257
+
258
+ //#endregion
259
+ //#region src/utils/evmTransferAmount/evmTransferAmount.ts
260
+ const DEFAULT_DECIMALS = 18;
261
+ /** @not-instrumented */
262
+ const evmTransferAmount = async ({ amount, recipient, token, walletAccount }, client) => {
263
+ if (!isEvmWalletAccount(walletAccount)) throw new InvalidParamError("Wallet account is not an EVM wallet account");
264
+ const { networkData } = await getActiveNetworkData({ walletAccount }, client);
265
+ assertDefined(networkData, `No network data found for wallet account ${walletAccount.address}`);
266
+ const nonce = await createPublicClientFromNetworkData({ networkData }).getTransactionCount({ address: walletAccount.address });
267
+ const walletClient = await createWalletClientForWalletAccount({ walletAccount }, client);
268
+ if (token) {
269
+ const data = encodeFunctionData({
270
+ abi: erc20Abi,
271
+ args: [recipient, parseUnits(amount, token.decimals ?? DEFAULT_DECIMALS)],
272
+ functionName: "transfer"
273
+ });
274
+ return { transactionHash: await walletClient.sendTransaction({
275
+ data,
276
+ nonce,
277
+ to: token.address
278
+ }) };
279
+ }
280
+ return { transactionHash: await walletClient.sendTransaction({
281
+ nonce,
282
+ to: recipient,
283
+ value: parseEther(amount)
284
+ }) };
285
+ };
286
+
287
+ //#endregion
288
+ export { registerEvmNetworkProviderBuilder as a, isEvmWalletAccount as i, evmExecuteSwapTransaction as n, RpcError as o, evmConfirmTransaction as r, evmTransferAmount as t };
289
+ //# sourceMappingURL=evmTransferAmount-B__79nVn.native.esm.js.map