@dynamic-labs-sdk/evm 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/{addEIP6963Extension-C_IKf5DD.native.esm.js → addEIP6963Extension-CrpzqtkA.native.esm.js} +1 -1
  2. package/dist/{addEIP6963Extension-C_IKf5DD.native.esm.js.map → addEIP6963Extension-CrpzqtkA.native.esm.js.map} +1 -1
  3. package/dist/{addEIP6963Extension-BuQG0WpY.esm.js → addEIP6963Extension-DKSEthnO.esm.js} +3 -3
  4. package/dist/{addEIP6963Extension-BuQG0WpY.esm.js.map → addEIP6963Extension-DKSEthnO.esm.js.map} +1 -1
  5. package/dist/{addEIP6963Extension-yntoSltr.cjs → addEIP6963Extension-DlEAWAQc.cjs} +3 -3
  6. package/dist/{addEIP6963Extension-yntoSltr.cjs.map → addEIP6963Extension-DlEAWAQc.cjs.map} +1 -1
  7. package/dist/{addWaasEvmExtension-Dw4qYTpt.esm.js → addWaasEvmExtension-CTpHgaHS.esm.js} +3 -3
  8. package/dist/{addWaasEvmExtension-Dw4qYTpt.esm.js.map → addWaasEvmExtension-CTpHgaHS.esm.js.map} +1 -1
  9. package/dist/{addWaasEvmExtension-L8dUNmj8.native.esm.js → addWaasEvmExtension-CrLafMzM.native.esm.js} +3 -3
  10. package/dist/{addWaasEvmExtension-L8dUNmj8.native.esm.js.map → addWaasEvmExtension-CrLafMzM.native.esm.js.map} +1 -1
  11. package/dist/{addWaasEvmExtension-BBiZbJ2g.cjs → addWaasEvmExtension-DFPlfGII.cjs} +3 -3
  12. package/dist/{addWaasEvmExtension-BBiZbJ2g.cjs.map → addWaasEvmExtension-DFPlfGII.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 +4 -4
  16. package/dist/{createWalletClientForWalletAccount-Ck2Ka1-V.cjs → createWalletClientForWalletAccount-CWCx-D-z.cjs} +8 -2
  17. package/dist/{createWalletClientForWalletAccount-Ck2Ka1-V.cjs.map → createWalletClientForWalletAccount-CWCx-D-z.cjs.map} +1 -1
  18. package/dist/{createWalletClientForWalletAccount-DOBeAtZw.esm.js → createWalletClientForWalletAccount-CrUjxoeg.esm.js} +3 -3
  19. package/dist/{createWalletClientForWalletAccount-DOBeAtZw.esm.js.map → createWalletClientForWalletAccount-CrUjxoeg.esm.js.map} +1 -1
  20. package/dist/{createWalletClientForWalletAccount-BotF25Kn.native.esm.js → createWalletClientForWalletAccount-CuakQYYA.native.esm.js} +2 -2
  21. package/dist/{createWalletClientForWalletAccount-BotF25Kn.native.esm.js.map → createWalletClientForWalletAccount-CuakQYYA.native.esm.js.map} +1 -1
  22. package/dist/{createWalletProviderFromEIP1193Provider-Dgg6TTOe.cjs → createWalletProviderFromEIP1193Provider-8YarOb8w.cjs} +2 -2
  23. package/dist/{createWalletProviderFromEIP1193Provider-Dgg6TTOe.cjs.map → createWalletProviderFromEIP1193Provider-8YarOb8w.cjs.map} +1 -1
  24. package/dist/{createWalletProviderFromEIP1193Provider-CWWLWjod.native.esm.js → createWalletProviderFromEIP1193Provider-B8doAYSi.native.esm.js} +2 -2
  25. package/dist/{createWalletProviderFromEIP1193Provider-CWWLWjod.native.esm.js.map → createWalletProviderFromEIP1193Provider-B8doAYSi.native.esm.js.map} +1 -1
  26. package/dist/{createWalletProviderFromEIP1193Provider-zffPjj9N.esm.js → createWalletProviderFromEIP1193Provider-Ce883scu.esm.js} +2 -2
  27. package/dist/{createWalletProviderFromEIP1193Provider-zffPjj9N.esm.js.map → createWalletProviderFromEIP1193Provider-Ce883scu.esm.js.map} +1 -1
  28. package/dist/eip6963.cjs +4 -4
  29. package/dist/eip6963.esm.js +4 -4
  30. package/dist/eip6963.native.esm.js +2 -2
  31. package/dist/evmTransferAmount-BQDSXSva.native.esm.js +875 -0
  32. package/dist/evmTransferAmount-BQDSXSva.native.esm.js.map +1 -0
  33. package/dist/evmTransferAmount-DVoP6zOc.esm.js +875 -0
  34. package/dist/evmTransferAmount-DVoP6zOc.esm.js.map +1 -0
  35. package/dist/evmTransferAmount-kz2wS0l6.cjs +964 -0
  36. package/dist/evmTransferAmount-kz2wS0l6.cjs.map +1 -0
  37. package/dist/gasless/relaySponsoredTransaction/relaySponsoredTransaction.d.ts +6 -0
  38. package/dist/gasless/relaySponsoredTransaction/relaySponsoredTransaction.d.ts.map +1 -1
  39. package/dist/gasless/sendSponsoredTransaction/sendSponsoredTransaction.d.ts +6 -0
  40. package/dist/gasless/sendSponsoredTransaction/sendSponsoredTransaction.d.ts.map +1 -1
  41. package/dist/gasless/signSponsoredTransaction/signSponsoredTransaction.d.ts +11 -1
  42. package/dist/gasless/signSponsoredTransaction/signSponsoredTransaction.d.ts.map +1 -1
  43. package/dist/index.cjs +15 -531
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.esm.js +7 -523
  46. package/dist/index.esm.js.map +1 -1
  47. package/dist/index.native.esm.js +7 -523
  48. package/dist/index.native.esm.js.map +1 -1
  49. package/dist/metamask/createMetaMaskEvmWalletProvider/createMetaMaskEvmWalletProvider.d.ts.map +1 -1
  50. package/dist/metamask/utils/createMetaMaskEvmController/createMetaMaskEvmController.d.ts.map +1 -1
  51. package/dist/metamask.cjs +23 -12
  52. package/dist/metamask.cjs.map +1 -1
  53. package/dist/metamask.esm.js +25 -14
  54. package/dist/metamask.esm.js.map +1 -1
  55. package/dist/metamask.native.esm.js +26 -15
  56. package/dist/metamask.native.esm.js.map +1 -1
  57. package/dist/{package-CVxJoayo.native.esm.js → package-eelD8jPH.native.esm.js} +2 -2
  58. package/dist/package-eelD8jPH.native.esm.js.map +1 -0
  59. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  60. package/dist/utils/evmExecuteSponsoredSwapTransaction/evmExecuteSponsoredSwapTransaction.d.ts +31 -0
  61. package/dist/utils/evmExecuteSponsoredSwapTransaction/evmExecuteSponsoredSwapTransaction.d.ts.map +1 -0
  62. package/dist/utils/evmExecuteSponsoredSwapTransaction/index.d.ts +2 -0
  63. package/dist/utils/evmExecuteSponsoredSwapTransaction/index.d.ts.map +1 -0
  64. package/dist/utils/evmExecuteSwapTransaction/evmExecuteSwapTransaction.d.ts +10 -6
  65. package/dist/utils/evmExecuteSwapTransaction/evmExecuteSwapTransaction.d.ts.map +1 -1
  66. package/dist/viem.cjs +1 -1
  67. package/dist/viem.esm.js +1 -1
  68. package/dist/viem.native.esm.js +2 -2
  69. package/dist/waas.cjs +3 -3
  70. package/dist/waas.esm.js +3 -3
  71. package/dist/waas.native.esm.js +4 -4
  72. package/dist/walletConnect.cjs +2 -2
  73. package/dist/walletConnect.esm.js +2 -2
  74. package/dist/walletConnect.native.esm.js +3 -3
  75. package/dist/windowInjected.cjs +3 -3
  76. package/dist/windowInjected.esm.js +3 -3
  77. package/dist/windowInjected.native.esm.js +4 -4
  78. package/package.json +6 -6
  79. package/dist/evmTransferAmount-BY0rW4dg.native.esm.js +0 -289
  80. package/dist/evmTransferAmount-BY0rW4dg.native.esm.js.map +0 -1
  81. package/dist/evmTransferAmount-CYAXsg0Z.cjs +0 -324
  82. package/dist/evmTransferAmount-CYAXsg0Z.cjs.map +0 -1
  83. package/dist/evmTransferAmount-DZweef_q.esm.js +0 -289
  84. package/dist/evmTransferAmount-DZweef_q.esm.js.map +0 -1
  85. package/dist/package-CVxJoayo.native.esm.js.map +0 -1
@@ -0,0 +1,31 @@
1
+ import { type DynamicClient } from '@dynamic-labs-sdk/client';
2
+ import type { ExecuteSwapTransactionResult } from '@dynamic-labs-sdk/client/core';
3
+ import type { SwapSigningPayload } from '@dynamic-labs/sdk-api-core';
4
+ import type { EvmWalletAccount } from '../../EvmWalletAccount.types';
5
+ type EvmExecuteSponsoredSwapTransactionParams = {
6
+ onStepChange?: (step: 'approval' | 'transaction') => void;
7
+ signingPayload: SwapSigningPayload;
8
+ walletAccount: EvmWalletAccount;
9
+ };
10
+ /**
11
+ * Executes an EVM swap as a single gas-sponsored transaction.
12
+ *
13
+ * Unlike the user-paid path, the optional ERC-20 approval and the swap call
14
+ * are batched into one sponsored transaction (EVM gas sponsorship supports
15
+ * call batching), so there is no separate approval transaction hash.
16
+ *
17
+ * 1. If the signing payload includes an `evmApproval`, reads the current
18
+ * allowance and prepends an `approve` call only when it is insufficient
19
+ * 2. Appends the main swap call (gas fields are dropped — the relayer pays gas)
20
+ * 3. Relays the batch via `sendSponsoredTransaction` and waits for inclusion
21
+ *
22
+ * @param params.signingPayload - The signing payload containing `evmTransaction` and optional `evmApproval`.
23
+ * @param params.walletAccount - The embedded EVM wallet account whose gas is sponsored.
24
+ * @param params.onStepChange - Optional callback invoked with `'approval'` or `'transaction'` as each step begins.
25
+ * @param client - The Dynamic client instance.
26
+ * @returns The on-chain transaction hash of the sponsored swap.
27
+ * @not-instrumented
28
+ */
29
+ export declare const evmExecuteSponsoredSwapTransaction: ({ onStepChange, signingPayload, walletAccount, }: EvmExecuteSponsoredSwapTransactionParams, client: DynamicClient) => Promise<ExecuteSwapTransactionResult>;
30
+ export {};
31
+ //# sourceMappingURL=evmExecuteSponsoredSwapTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evmExecuteSponsoredSwapTransaction.d.ts","sourceRoot":"","sources":["../../../src/utils/evmExecuteSponsoredSwapTransaction/evmExecuteSponsoredSwapTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKrE,KAAK,wCAAwC,GAAG;IAC9C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,KAAK,IAAI,CAAC;IAC1D,cAAc,EAAE,kBAAkB,CAAC;IACnC,aAAa,EAAE,gBAAgB,CAAC;CACjC,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kCAAkC,qDAK1C,wCAAwC,UACnC,aAAa,KACpB,OAAO,CAAC,4BAA4B,CAwDtC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { evmExecuteSponsoredSwapTransaction } from './evmExecuteSponsoredSwapTransaction';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/evmExecuteSponsoredSwapTransaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAC"}
@@ -1,20 +1,24 @@
1
1
  import { type DynamicClient } from '@dynamic-labs-sdk/client';
2
- import type { ExecuteSwapTransactionParams, ExecuteSwapTransactionResult } from '@dynamic-labs-sdk/client/core';
2
+ import { type ExecuteSwapTransactionParams, type ExecuteSwapTransactionResult } from '@dynamic-labs-sdk/client/core';
3
3
  /**
4
4
  * Executes an EVM checkout transaction by handling optional ERC-20 approval
5
5
  * and sending the main swap transaction on-chain.
6
6
  *
7
7
  * 1. Validates that the wallet account is an EVM wallet account
8
- * 2. If the signing payload includes an `evmApproval`, checks the current
9
- * ERC-20 allowance and sends an approve transaction when insufficient
10
- * 3. Sends the main transaction using the viem wallet client
8
+ * 2. When EVM gas sponsorship is enabled and the wallet is a Dynamic embedded
9
+ * wallet (and `sponsorshipMode` is not `'off'`), routes the swap through the
10
+ * gas-sponsored path, batching any required approval with the swap call
11
+ * 3. Otherwise, if the signing payload includes an `evmApproval`, checks the
12
+ * current ERC-20 allowance and sends an approve transaction when insufficient
13
+ * 4. Sends the main transaction using the viem wallet client
11
14
  *
12
15
  * @param params.signingPayload - The chain-aware signing payload containing `evmTransaction` and optional `evmApproval`.
13
16
  * @param params.walletAccount - The wallet account used to sign and send transactions.
14
17
  * @param params.onStepChange - Optional callback invoked with `'approval'` or `'transaction'` as each step begins.
18
+ * @param params.sponsorshipMode - `'auto'` (default) sponsors when eligible; `'off'` never sponsors.
15
19
  * @param client - The Dynamic client instance.
16
- * @returns The main transaction hash and, if an approval was sent, the approval transaction hash.
20
+ * @returns The main transaction hash and, if a separate approval was sent, the approval transaction hash.
17
21
  * @not-instrumented
18
22
  */
19
- export declare const evmExecuteSwapTransaction: ({ onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams, client: DynamicClient) => Promise<ExecuteSwapTransactionResult>;
23
+ export declare const evmExecuteSwapTransaction: ({ onStepChange, signingPayload, sponsorshipMode, walletAccount, }: ExecuteSwapTransactionParams, client: DynamicClient) => Promise<ExecuteSwapTransactionResult>;
20
24
  //# sourceMappingURL=evmExecuteSwapTransaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evmExecuteSwapTransaction.d.ts","sourceRoot":"","sources":["../../../src/utils/evmExecuteSwapTransaction/evmExecuteSwapTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,+BAA+B,CAAC;AAMvC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,yBAAyB,oDACa,4BAA4B,UACrE,aAAa,KACpB,OAAO,CAAC,4BAA4B,CA2DtC,CAAC"}
1
+ {"version":3,"file":"evmExecuteSwapTransaction.d.ts","sourceRoot":"","sources":["../../../src/utils/evmExecuteSwapTransaction/evmExecuteSwapTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EAElC,MAAM,+BAA+B,CAAC;AASvC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,yBAAyB,sEAMjC,4BAA4B,UACvB,aAAa,KACpB,OAAO,CAAC,4BAA4B,CA8EtC,CAAC"}
package/dist/viem.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-Ck2Ka1-V.cjs');
1
+ const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-CWCx-D-z.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-DOBeAtZw.esm.js";
1
+ import { a as name, i as mapNetworkDataToViemChain, o as version, r as createPublicClientFromNetworkData, t as createWalletClientForWalletAccount } from "./createWalletClientForWalletAccount-CrUjxoeg.esm.js";
2
2
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
3
3
 
4
4
  //#region src/exports/viem.ts
@@ -1,5 +1,5 @@
1
- import { n as version, t as name } from "./package-CVxJoayo.native.esm.js";
2
- import { n as createPublicClientFromNetworkData, r as mapNetworkDataToViemChain, t as createWalletClientForWalletAccount } from "./createWalletClientForWalletAccount-BotF25Kn.native.esm.js";
1
+ import { n as version, t as name } from "./package-eelD8jPH.native.esm.js";
2
+ import { i as mapNetworkDataToViemChain, r as createPublicClientFromNetworkData, t as createWalletClientForWalletAccount } from "./createWalletClientForWalletAccount-CuakQYYA.native.esm.js";
3
3
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
4
4
 
5
5
  //#region src/exports/viem.ts
package/dist/waas.cjs CHANGED
@@ -1,6 +1,6 @@
1
- const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-Ck2Ka1-V.cjs');
2
- require('./evmTransferAmount-CYAXsg0Z.cjs');
3
- const require_addWaasEvmExtension = require('./addWaasEvmExtension-BBiZbJ2g.cjs');
1
+ const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-CWCx-D-z.cjs');
2
+ require('./evmTransferAmount-kz2wS0l6.cjs');
3
+ const require_addWaasEvmExtension = require('./addWaasEvmExtension-DFPlfGII.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-DOBeAtZw.esm.js";
2
- import "./evmTransferAmount-DZweef_q.esm.js";
3
- import { t as addWaasEvmExtension } from "./addWaasEvmExtension-Dw4qYTpt.esm.js";
1
+ import { a as name, o as version } from "./createWalletClientForWalletAccount-CrUjxoeg.esm.js";
2
+ import "./evmTransferAmount-DVoP6zOc.esm.js";
3
+ import { t as addWaasEvmExtension } from "./addWaasEvmExtension-CTpHgaHS.esm.js";
4
4
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
5
5
 
6
6
  //#region src/exports/waas.ts
@@ -1,7 +1,7 @@
1
- import { n as version, t as name } from "./package-CVxJoayo.native.esm.js";
2
- import "./createWalletClientForWalletAccount-BotF25Kn.native.esm.js";
3
- import "./evmTransferAmount-BY0rW4dg.native.esm.js";
4
- import { t as addWaasEvmExtension } from "./addWaasEvmExtension-L8dUNmj8.native.esm.js";
1
+ import { n as version, t as name } from "./package-eelD8jPH.native.esm.js";
2
+ import "./evmTransferAmount-BQDSXSva.native.esm.js";
3
+ import "./createWalletClientForWalletAccount-CuakQYYA.native.esm.js";
4
+ import { t as addWaasEvmExtension } from "./addWaasEvmExtension-CrLafMzM.native.esm.js";
5
5
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
6
6
 
7
7
  //#region src/exports/waas.ts
@@ -1,5 +1,5 @@
1
- const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-Ck2Ka1-V.cjs');
2
- const require_evmTransferAmount = require('./evmTransferAmount-CYAXsg0Z.cjs');
1
+ const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-CWCx-D-z.cjs');
2
+ const require_evmTransferAmount = require('./evmTransferAmount-kz2wS0l6.cjs');
3
3
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
4
4
  let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
5
5
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
@@ -1,5 +1,5 @@
1
- import { a as version, i as name } from "./createWalletClientForWalletAccount-DOBeAtZw.esm.js";
2
- import { a as registerEvmNetworkProviderBuilder, n as evmExecuteSwapTransaction, r as evmConfirmTransaction, t as evmTransferAmount } from "./evmTransferAmount-DZweef_q.esm.js";
1
+ import { a as name, o as version } from "./createWalletClientForWalletAccount-CrUjxoeg.esm.js";
2
+ import { i as evmConfirmTransaction, n as evmExecuteSwapTransaction, o as registerEvmNetworkProviderBuilder, t as evmTransferAmount } from "./evmTransferAmount-DVoP6zOc.esm.js";
3
3
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
4
4
  import { getDefaultClient, hasExtension } from "@dynamic-labs-sdk/client";
5
5
  import { CHAINS_INFO_MAP, WalletProviderPriority, assertDefined, createSignInMessageStatement, emitEvent, filterDuplicates, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getAppMetadata, getCore, getDefaultClient as getDefaultClient$1, getNonce, getWalletProviderRegistry, registerExtension, switchActiveNetworkInLastKnownRegistry, waitForProjectSettings } from "@dynamic-labs-sdk/client/core";
@@ -1,6 +1,6 @@
1
- import { n as version, t as name } from "./package-CVxJoayo.native.esm.js";
2
- import "./createWalletClientForWalletAccount-BotF25Kn.native.esm.js";
3
- import { a as registerEvmNetworkProviderBuilder, n as evmExecuteSwapTransaction, r as evmConfirmTransaction, t as evmTransferAmount } from "./evmTransferAmount-BY0rW4dg.native.esm.js";
1
+ import { n as version, t as name } from "./package-eelD8jPH.native.esm.js";
2
+ import { i as evmConfirmTransaction, n as evmExecuteSwapTransaction, o as registerEvmNetworkProviderBuilder, t as evmTransferAmount } from "./evmTransferAmount-BQDSXSva.native.esm.js";
3
+ import "./createWalletClientForWalletAccount-CuakQYYA.native.esm.js";
4
4
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
5
5
  import { getDefaultClient, hasExtension } from "@dynamic-labs-sdk/client";
6
6
  import { CHAINS_INFO_MAP, WalletProviderPriority, assertDefined, createSignInMessageStatement, emitEvent, filterDuplicates, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getAppMetadata, getCore, getDefaultClient as getDefaultClient$1, getNonce, getWalletProviderRegistry, registerExtension, switchActiveNetworkInLastKnownRegistry, waitForProjectSettings } from "@dynamic-labs-sdk/client/core";
@@ -1,6 +1,6 @@
1
- const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-Ck2Ka1-V.cjs');
2
- const require_evmTransferAmount = require('./evmTransferAmount-CYAXsg0Z.cjs');
3
- const require_createWalletProviderFromEIP1193Provider = require('./createWalletProviderFromEIP1193Provider-Dgg6TTOe.cjs');
1
+ const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-CWCx-D-z.cjs');
2
+ const require_evmTransferAmount = require('./evmTransferAmount-kz2wS0l6.cjs');
3
+ const require_createWalletProviderFromEIP1193Provider = require('./createWalletProviderFromEIP1193Provider-8YarOb8w.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-DOBeAtZw.esm.js";
2
- import { a as registerEvmNetworkProviderBuilder } from "./evmTransferAmount-DZweef_q.esm.js";
3
- import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-zffPjj9N.esm.js";
1
+ import { a as name, o as version } from "./createWalletClientForWalletAccount-CrUjxoeg.esm.js";
2
+ import { o as registerEvmNetworkProviderBuilder } from "./evmTransferAmount-DVoP6zOc.esm.js";
3
+ import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-Ce883scu.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
 
@@ -1,7 +1,7 @@
1
- import { n as version, t as name } from "./package-CVxJoayo.native.esm.js";
2
- import "./createWalletClientForWalletAccount-BotF25Kn.native.esm.js";
3
- import { a as registerEvmNetworkProviderBuilder } from "./evmTransferAmount-BY0rW4dg.native.esm.js";
4
- import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-CWWLWjod.native.esm.js";
1
+ import { n as version, t as name } from "./package-eelD8jPH.native.esm.js";
2
+ import { o as registerEvmNetworkProviderBuilder } from "./evmTransferAmount-BQDSXSva.native.esm.js";
3
+ import "./createWalletClientForWalletAccount-CuakQYYA.native.esm.js";
4
+ import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-B8doAYSi.native.esm.js";
5
5
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
6
6
  import { DYNAMIC_ICONIC_SPRITE_URL, WalletProviderPriority, getAllProvidersFromWindow, getDefaultClient, getWalletProviderRegistry, hasExtension, registerExtension } from "@dynamic-labs-sdk/client/core";
7
7
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs-sdk/evm",
3
- "version": "1.4.0",
3
+ "version": "1.6.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.esm.js",
@@ -63,16 +63,16 @@
63
63
  "@metamask/connect-evm": "1.3.0",
64
64
  "@walletconnect/types": "2.21.8",
65
65
  "@walletconnect/utils": "2.21.8",
66
- "@dynamic-labs-sdk/client": "1.4.0",
67
- "@dynamic-labs-sdk/metamask": "1.4.0",
68
- "@dynamic-labs-sdk/wallet-connect": "1.4.0",
69
- "@dynamic-labs-sdk/assert-package-version": "1.4.0"
66
+ "@dynamic-labs-sdk/assert-package-version": "1.6.0",
67
+ "@dynamic-labs-sdk/client": "1.6.0",
68
+ "@dynamic-labs-sdk/wallet-connect": "1.6.0",
69
+ "@dynamic-labs-sdk/metamask": "1.6.0"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@walletconnect/types": "2.21.8",
73
73
  "eventemitter3": "5.0.1",
74
74
  "viem": "^2.28.4",
75
- "vitest": "2.1.9"
75
+ "vitest": "4.1.6"
76
76
  },
77
77
  "peerDependencies": {
78
78
  "viem": "^2.28.4"
@@ -1,289 +0,0 @@
1
- import { n as createPublicClientFromNetworkData, t as createWalletClientForWalletAccount } from "./createWalletClientForWalletAccount-BotF25Kn.native.esm.js";
2
- import { BaseError, InvalidParamError, getActiveNetworkData } from "@dynamic-labs-sdk/client";
3
- import { assertDefined, createBaseNetworkProvider, getCore, getNetworkProviderBuilderRegistry } from "@dynamic-labs-sdk/client/core";
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-BY0rW4dg.native.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evmTransferAmount-BY0rW4dg.native.esm.js","names":["gasParams: Record<string, bigint>"],"sources":["../src/errors/RpcError.ts","../src/utils/fetchEvmBalance/fetchEvmBalance.ts","../src/utils/createEvmNetworkProvider/createEvmNetworkProvider.ts","../src/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.ts","../src/utils/isEvmWalletAccount/isEvmWalletAccount.ts","../src/utils/evmConfirmTransaction/evmConfirmTransaction.ts","../src/utils/approveErc20/approveErc20.ts","../src/utils/getErc20Allowance/getErc20Allowance.ts","../src/utils/approveErc20IfRequiredAndWaitReceipt/approveErc20IfRequiredAndWaitReceipt.ts","../src/utils/evmExecuteSwapTransaction/evmExecuteSwapTransaction.ts","../src/utils/evmTransferAmount/evmTransferAmount.ts"],"sourcesContent":["import { BaseError, type BaseErrorParameters } from '@dynamic-labs-sdk/client';\n\nexport type RpcErrorParameters = Pick<BaseErrorParameters, 'shortMessage'> &\n Partial<Omit<BaseErrorParameters, 'shortMessage'>>;\n\nexport class RpcError extends BaseError {\n constructor(args: RpcErrorParameters) {\n super({\n cause: args.cause ?? null,\n code: args.code ?? 'rpc_error',\n details: args.details,\n docsUrl: args.docsUrl ?? null,\n metaMessages: args.metaMessages,\n name: args.name ?? 'RpcError',\n shortMessage: args.shortMessage,\n });\n }\n}\n","import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\n\nimport { RpcError } from '../../errors/RpcError';\n\ntype FetchEvmBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\n/** @not-instrumented */\nexport const fetchEvmBalance = async (\n { address, networkData }: FetchEvmBalanceParams,\n client: DynamicClient\n): Promise<string | null> => {\n const rpcUrl = networkData.rpcUrls.http[0];\n const core = getCore(client);\n\n try {\n // Perform a POST request to the RPC URL with the JSON-RPC payload\n const response = await core.fetch(rpcUrl, {\n /**\n * The JSON-RPC method 'eth_getBalance' takes the address and a block tag ('latest' is the most recent)\n * See EIP-1474: https://eips.ethereum.org/EIPS/eip-1474\n * See eth_getBalance spec: https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance\n */\n body: JSON.stringify({\n id: Math.floor(Date.now() + Math.random() * 1000),\n jsonrpc: '2.0',\n method: 'eth_getBalance',\n params: [address, 'latest'],\n }),\n\n headers: {\n 'Content-Type': 'application/json',\n },\n\n method: 'POST',\n });\n\n // Check if the network response was successful\n if (!response.ok) {\n throw new RpcError({\n code: 'http_error',\n shortMessage: `HTTP error! status: ${response.status}`,\n });\n }\n\n const data = await response.json();\n\n // Check for a JSON-RPC error in the response\n if (data.error) {\n throw new RpcError({\n cause: data.error instanceof Error ? data.error : undefined,\n code: 'json_rpc_error',\n shortMessage: `RPC Error: ${data.error.message}`,\n });\n }\n\n // The result is a hexadecimal string representing the balance in Wei\n const balanceWeiHex = data.result;\n\n // Convert the hexadecimal string to a BigInt\n const balanceWei = BigInt(balanceWeiHex);\n\n // Convert the balance from Wei to Ether (1 Ether = 10^18 Wei)\n // We use a BigInt for the conversion to maintain precision with large numbers\n const oneEther = BigInt(1e18);\n\n // Perform the division and return the result as a number\n // Note: This conversion can lose precision for very small amounts, but is generally fine for display purposes.\n const balanceEther = Number(balanceWei) / Number(oneEther);\n\n return balanceEther.toString();\n } catch (error) {\n if (error instanceof Error) {\n throw new RpcError({\n cause: error,\n code: 'rpc_error',\n shortMessage: `Failed to fetch balance for address ${address}`,\n });\n }\n\n throw error;\n }\n};\n","import type { DynamicClient, NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { EvmNetworkProvider } from '../../EvmNetworkProvider';\nimport { fetchEvmBalance } from '../fetchEvmBalance';\n\n/** @not-instrumented */\nexport const createEvmNetworkProvider = (\n networkData: NetworkData,\n client: DynamicClient\n): EvmNetworkProvider => ({\n ...createBaseNetworkProvider('EVM', networkData),\n\n getBalance: async ({ address }) => ({\n balance: await fetchEvmBalance(\n {\n address,\n networkData,\n },\n client\n ),\n }),\n});\n","import { type DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createEvmNetworkProvider } from '../utils/createEvmNetworkProvider';\n\n/** @not-instrumented */\nexport const registerEvmNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n /**\n * If the Ethereum network provider builder is already registered, return.\n */\n if (networkProviderBuilderRegistry.get().get('EVM')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: (networkData) => createEvmNetworkProvider(networkData, client),\n chain: 'EVM',\n });\n};\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\n\n/**\n * Type guard function to check if a wallet account is an EVM wallet account.\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is an EVM wallet account, false otherwise.\n * @not-instrumented\n */\nexport const isEvmWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is EvmWalletAccount => walletAccount.chain === 'EVM';\n","import {\n type DynamicClient,\n InvalidParamError,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport type { ConfirmTransactionParams } from '@dynamic-labs-sdk/client/core';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\n\nimport { createPublicClientFromNetworkData } from '../../viem/createPublicClientFromNetworkData';\nimport { isEvmWalletAccount } from '../isEvmWalletAccount';\n\n/**\n * Waits for an EVM transaction to be confirmed on-chain.\n *\n * @param params.transactionHash - The transaction hash to wait for.\n * @param params.walletAccount - The EVM wallet account used to resolve the active network.\n * @param client - The Dynamic client instance.\n * @not-instrumented\n */\nexport const evmConfirmTransaction = async (\n { transactionHash, walletAccount }: ConfirmTransactionParams,\n client: DynamicClient\n): Promise<void> => {\n if (!isEvmWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not an EVM wallet account');\n }\n\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const publicClient = createPublicClientFromNetworkData({ networkData });\n\n await publicClient.waitForTransactionReceipt({\n hash: transactionHash as `0x${string}`,\n });\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { encodeFunctionData, erc20Abi } from 'viem';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\nimport { createWalletClientForWalletAccount } from '../../viem/createWalletClientForWalletAccount';\n\ntype ApproveErc20Params = {\n amount: bigint;\n spenderAddress: string;\n tokenAddress: string;\n walletAccount: EvmWalletAccount;\n};\n\n/**\n * Sends an ERC-20 `approve` transaction, granting a spender an allowance\n * to transfer tokens on behalf of the wallet account.\n *\n * Encodes the `approve(spender, amount)` call using viem's `encodeFunctionData`\n * and sends it through the wallet account's viem wallet client.\n *\n * @param params.amount - The amount to approve in the token's smallest unit.\n * @param params.spenderAddress - The address being granted the allowance.\n * @param params.tokenAddress - The ERC-20 token contract address.\n * @param params.walletAccount - The EVM wallet account sending the approval.\n * @param client - The Dynamic client instance.\n * @returns The approval transaction hash.\n * @not-instrumented\n */\nexport const approveErc20 = async (\n { amount, spenderAddress, tokenAddress, walletAccount }: ApproveErc20Params,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n const walletClient = await createWalletClientForWalletAccount(\n { walletAccount },\n client\n );\n\n const data = encodeFunctionData({\n abi: erc20Abi,\n args: [spenderAddress as `0x${string}`, amount],\n functionName: 'approve',\n });\n\n const hash = await walletClient.sendTransaction({\n data,\n to: tokenAddress as `0x${string}`,\n });\n\n return { transactionHash: hash };\n};\n","import {\n type DynamicClient,\n type NetworkData,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\nimport { erc20Abi } from 'viem';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\nimport { createPublicClientFromNetworkData } from '../../viem/createPublicClientFromNetworkData';\n\ntype GetErc20AllowanceParams = {\n networkData?: NetworkData;\n ownerAddress: string;\n spenderAddress: string;\n tokenAddress: string;\n walletAccount: EvmWalletAccount;\n};\n\n/**\n * Reads the current ERC-20 token allowance granted by an owner to a spender.\n *\n * Uses a viem public client derived from the wallet account's active network\n * to call the `allowance(owner, spender)` method on the token contract.\n *\n * @param params.tokenAddress - The ERC-20 token contract address.\n * @param params.ownerAddress - The address that granted the allowance.\n * @param params.spenderAddress - The address allowed to spend the tokens.\n * @param params.walletAccount - The EVM wallet account used to resolve the active network.\n * @param [params.networkData] - The network data to use for the public client. If not provided, the active network data will be used.\n * @param client - The Dynamic client instance.\n * @returns The current allowance as a bigint in the token's smallest unit.\n * @not-instrumented\n */\nexport const getErc20Allowance = async (\n {\n networkData,\n ownerAddress,\n spenderAddress,\n tokenAddress,\n walletAccount,\n }: GetErc20AllowanceParams,\n client: DynamicClient\n): Promise<bigint> => {\n if (!networkData) {\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n client\n );\n networkData = activeNetworkData.networkData;\n }\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const publicClient = createPublicClientFromNetworkData({ networkData });\n\n return publicClient.readContract({\n abi: erc20Abi,\n address: tokenAddress as `0x${string}`,\n args: [ownerAddress as `0x${string}`, spenderAddress as `0x${string}`],\n functionName: 'allowance',\n });\n};\n","import {\n type DynamicClient,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\nimport type { TransactionReceipt } from 'viem';\n\nimport type { EvmWalletAccount } from '../../EvmWalletAccount.types';\nimport { createPublicClientFromNetworkData } from '../../viem/createPublicClientFromNetworkData';\nimport { approveErc20 } from '../approveErc20';\nimport { getErc20Allowance } from '../getErc20Allowance';\n\ntype ApproveErc20IfRequiredAndWaitReceiptParams = {\n amount: string;\n spenderAddress: string;\n tokenAddress: string;\n walletAccount: EvmWalletAccount;\n};\n\n/**\n * Approves an ERC-20 token if the current allowance is insufficient and waits for the transaction receipt.\n *\n * @param params.amount - The amount of tokens to approve.\n * @param params.ownerAddress - The address that granted the allowance.\n * @param params.spenderAddress - The address allowed to spend the tokens.\n * @param params.tokenAddress - The ERC-20 token contract address.\n * @param params.walletAccount - The EVM wallet account used to resolve the active network.\n * @param client - The Dynamic client instance.\n * @returns The transaction receipt if an approval was sent, otherwise undefined.\n * @not-instrumented\n */\nexport const approveErc20IfRequiredAndWaitReceipt = async (\n {\n amount,\n spenderAddress,\n tokenAddress,\n walletAccount,\n }: ApproveErc20IfRequiredAndWaitReceiptParams,\n client: DynamicClient\n): Promise<{ receipt: TransactionReceipt } | undefined> => {\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const currentAllowance = await getErc20Allowance(\n {\n networkData,\n ownerAddress: walletAccount.address,\n spenderAddress,\n tokenAddress,\n walletAccount,\n },\n client\n );\n\n const approvalAmount = BigInt(amount);\n\n if (currentAllowance >= approvalAmount) {\n return undefined;\n }\n\n const result = await approveErc20(\n {\n amount: approvalAmount,\n spenderAddress,\n tokenAddress,\n walletAccount,\n },\n client\n );\n const approvalTransactionHash = result.transactionHash;\n\n const publicClient = createPublicClientFromNetworkData({ networkData });\n\n const receipt = await publicClient.waitForTransactionReceipt({\n hash: approvalTransactionHash as `0x${string}`,\n });\n\n return { receipt };\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { createWalletClientForWalletAccount } from '../../viem/createWalletClientForWalletAccount';\nimport { approveErc20IfRequiredAndWaitReceipt } from '../approveErc20IfRequiredAndWaitReceipt';\nimport { isEvmWalletAccount } from '../isEvmWalletAccount';\n\n/**\n * Executes an EVM checkout transaction by handling optional ERC-20 approval\n * and sending the main swap transaction on-chain.\n *\n * 1. Validates that the wallet account is an EVM wallet account\n * 2. If the signing payload includes an `evmApproval`, checks the current\n * ERC-20 allowance and sends an approve transaction when insufficient\n * 3. Sends the main transaction using the viem wallet client\n *\n * @param params.signingPayload - The chain-aware signing payload containing `evmTransaction` and optional `evmApproval`.\n * @param params.walletAccount - The wallet account used to sign and send transactions.\n * @param params.onStepChange - Optional callback invoked with `'approval'` or `'transaction'` as each step begins.\n * @param client - The Dynamic client instance.\n * @returns The main transaction hash and, if an approval was sent, the approval transaction hash.\n * @not-instrumented\n */\nexport const evmExecuteSwapTransaction = async (\n { onStepChange, signingPayload, walletAccount }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\n if (!isEvmWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not an EVM wallet account');\n }\n\n const { evmTransaction, evmApproval } = signingPayload;\n\n if (!evmTransaction) {\n throw new InvalidParamError(\n 'Signing payload is missing EVM transaction data'\n );\n }\n\n if (evmApproval) {\n onStepChange?.('approval');\n\n await approveErc20IfRequiredAndWaitReceipt(\n {\n amount: evmApproval.amount,\n spenderAddress: evmApproval.spenderAddress,\n tokenAddress: evmApproval.tokenAddress,\n walletAccount,\n },\n client\n );\n }\n\n onStepChange?.('transaction');\n\n const walletClient = await createWalletClientForWalletAccount(\n { walletAccount },\n client\n );\n\n // sendTransaction expects gasPrice or maxFeePerGas and maxPriorityFeePerGas\n let gasParams: Record<string, bigint> = {};\n if (evmTransaction.maxFeePerGas && evmTransaction.maxPriorityFeePerGas) {\n gasParams = {\n maxFeePerGas: BigInt(evmTransaction.maxFeePerGas),\n maxPriorityFeePerGas: BigInt(evmTransaction.maxPriorityFeePerGas),\n };\n } else {\n gasParams = {\n ...(evmTransaction.gasPrice && {\n gasPrice: BigInt(evmTransaction.gasPrice),\n }),\n };\n }\n\n const transactionHash = await walletClient.sendTransaction({\n data: evmTransaction.data as `0x${string}`,\n to: evmTransaction.to as `0x${string}`,\n value: evmTransaction.value ? BigInt(evmTransaction.value) : 0n,\n ...(evmTransaction.gasLimit && { gas: BigInt(evmTransaction.gasLimit) }),\n ...gasParams,\n ...(evmTransaction.nonce && { nonce: evmTransaction.nonce }),\n });\n\n return { transactionHash };\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\nimport type { TransferAmountParams } from '@dynamic-labs-sdk/client/core';\nimport { encodeFunctionData, erc20Abi, parseEther, parseUnits } from 'viem';\n\nimport { createPublicClientFromNetworkData } from '../../viem/createPublicClientFromNetworkData';\nimport { createWalletClientForWalletAccount } from '../../viem/createWalletClientForWalletAccount';\nimport { isEvmWalletAccount } from '../isEvmWalletAccount';\n\nconst DEFAULT_DECIMALS = 18;\n\n/** @not-instrumented */\nexport const evmTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isEvmWalletAccount(walletAccount)) {\n throw new InvalidParamError('Wallet account is not an EVM wallet account');\n }\n\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const publicClient = createPublicClientFromNetworkData({ networkData });\n const nonce = await publicClient.getTransactionCount({\n address: walletAccount.address as `0x${string}`,\n });\n\n const walletClient = await createWalletClientForWalletAccount(\n { walletAccount },\n client\n );\n\n // non-native token transfers\n if (token) {\n const decimals = token.decimals ?? DEFAULT_DECIMALS;\n\n const data = encodeFunctionData({\n abi: erc20Abi,\n args: [recipient as `0x${string}`, parseUnits(amount, decimals)],\n functionName: 'transfer',\n });\n\n const hash = await walletClient.sendTransaction({\n data,\n nonce,\n to: token.address as `0x${string}`,\n });\n\n return { transactionHash: hash };\n }\n\n // native token transfers\n const hash = await walletClient.sendTransaction({\n nonce,\n to: recipient as `0x${string}`,\n value: parseEther(amount),\n });\n\n return { transactionHash: hash };\n};\n"],"mappings":"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"}