@coinbase/cdp-sdk 1.14.0 → 1.16.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 (98) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +113 -20
  3. package/_cjs/accounts/evm/toEvmServerAccount.js +13 -7
  4. package/_cjs/accounts/evm/toEvmServerAccount.js.map +1 -1
  5. package/_cjs/accounts/evm/toEvmSmartAccount.js +18 -0
  6. package/_cjs/accounts/evm/toEvmSmartAccount.js.map +1 -1
  7. package/_cjs/actions/evm/signAndWrapTypedDataForSmartAccount.js +186 -0
  8. package/_cjs/actions/evm/signAndWrapTypedDataForSmartAccount.js.map +1 -0
  9. package/_cjs/actions/evm/swap/createSwapQuote.js +26 -8
  10. package/_cjs/actions/evm/swap/createSwapQuote.js.map +1 -1
  11. package/_cjs/actions/evm/swap/getSwapPrice.js +3 -2
  12. package/_cjs/actions/evm/swap/getSwapPrice.js.map +1 -1
  13. package/_cjs/actions/evm/swap/sendSwapOperation.js +153 -0
  14. package/_cjs/actions/evm/swap/sendSwapOperation.js.map +1 -0
  15. package/_cjs/actions/evm/swap/sendSwapTransaction.js +16 -2
  16. package/_cjs/actions/evm/swap/sendSwapTransaction.js.map +1 -1
  17. package/_cjs/client/evm/evm.js +56 -6
  18. package/_cjs/client/evm/evm.js.map +1 -1
  19. package/_cjs/client/solana/solana.js +43 -0
  20. package/_cjs/client/solana/solana.js.map +1 -1
  21. package/_cjs/utils/export.js +84 -0
  22. package/_cjs/utils/export.js.map +1 -0
  23. package/_cjs/utils/uuidV4.js +26 -0
  24. package/_cjs/utils/uuidV4.js.map +1 -0
  25. package/_cjs/version.js +1 -1
  26. package/_esm/accounts/evm/toEvmServerAccount.js +14 -8
  27. package/_esm/accounts/evm/toEvmServerAccount.js.map +1 -1
  28. package/_esm/accounts/evm/toEvmSmartAccount.js +18 -0
  29. package/_esm/accounts/evm/toEvmSmartAccount.js.map +1 -1
  30. package/_esm/actions/evm/signAndWrapTypedDataForSmartAccount.js +181 -0
  31. package/_esm/actions/evm/signAndWrapTypedDataForSmartAccount.js.map +1 -0
  32. package/_esm/actions/evm/swap/createSwapQuote.js +26 -8
  33. package/_esm/actions/evm/swap/createSwapQuote.js.map +1 -1
  34. package/_esm/actions/evm/swap/getSwapPrice.js +3 -2
  35. package/_esm/actions/evm/swap/getSwapPrice.js.map +1 -1
  36. package/_esm/actions/evm/swap/sendSwapOperation.js +150 -0
  37. package/_esm/actions/evm/swap/sendSwapOperation.js.map +1 -0
  38. package/_esm/actions/evm/swap/sendSwapTransaction.js +16 -2
  39. package/_esm/actions/evm/swap/sendSwapTransaction.js.map +1 -1
  40. package/_esm/client/evm/evm.js +58 -8
  41. package/_esm/client/evm/evm.js.map +1 -1
  42. package/_esm/client/solana/solana.js +43 -0
  43. package/_esm/client/solana/solana.js.map +1 -1
  44. package/_esm/utils/export.js +75 -0
  45. package/_esm/utils/export.js.map +1 -0
  46. package/_esm/utils/uuidV4.js +23 -0
  47. package/_esm/utils/uuidV4.js.map +1 -0
  48. package/_esm/version.js +1 -1
  49. package/_types/accounts/evm/toEvmServerAccount.d.ts.map +1 -1
  50. package/_types/accounts/evm/toEvmSmartAccount.d.ts.map +1 -1
  51. package/_types/accounts/evm/types.d.ts +4 -4
  52. package/_types/accounts/evm/types.d.ts.map +1 -1
  53. package/_types/actions/evm/signAndWrapTypedDataForSmartAccount.d.ts +133 -0
  54. package/_types/actions/evm/signAndWrapTypedDataForSmartAccount.d.ts.map +1 -0
  55. package/_types/actions/evm/swap/createSwapQuote.d.ts.map +1 -1
  56. package/_types/actions/evm/swap/getSwapPrice.d.ts +2 -1
  57. package/_types/actions/evm/swap/getSwapPrice.d.ts.map +1 -1
  58. package/_types/actions/evm/swap/sendSwapOperation.d.ts +64 -0
  59. package/_types/actions/evm/swap/sendSwapOperation.d.ts.map +1 -0
  60. package/_types/actions/evm/swap/sendSwapTransaction.d.ts.map +1 -1
  61. package/_types/actions/evm/swap/types.d.ts +131 -5
  62. package/_types/actions/evm/swap/types.d.ts.map +1 -1
  63. package/_types/actions/evm/types.d.ts +112 -21
  64. package/_types/actions/evm/types.d.ts.map +1 -1
  65. package/_types/client/cdp.d.ts +1 -2
  66. package/_types/client/cdp.d.ts.map +1 -1
  67. package/_types/client/evm/evm.d.ts +29 -3
  68. package/_types/client/evm/evm.d.ts.map +1 -1
  69. package/_types/client/evm/evm.types.d.ts +45 -7
  70. package/_types/client/evm/evm.types.d.ts.map +1 -1
  71. package/_types/client/solana/solana.d.ts +26 -1
  72. package/_types/client/solana/solana.d.ts.map +1 -1
  73. package/_types/client/solana/solana.types.d.ts +12 -0
  74. package/_types/client/solana/solana.types.d.ts.map +1 -1
  75. package/_types/utils/export.d.ts +30 -0
  76. package/_types/utils/export.d.ts.map +1 -0
  77. package/_types/utils/uuidV4.d.ts +10 -0
  78. package/_types/utils/uuidV4.d.ts.map +1 -0
  79. package/_types/version.d.ts +1 -1
  80. package/accounts/evm/toEvmServerAccount.ts +33 -15
  81. package/accounts/evm/toEvmSmartAccount.ts +25 -0
  82. package/accounts/evm/types.ts +14 -6
  83. package/actions/evm/signAndWrapTypedDataForSmartAccount.ts +246 -0
  84. package/actions/evm/swap/createSwapQuote.ts +42 -17
  85. package/actions/evm/swap/getSwapPrice.ts +15 -11
  86. package/actions/evm/swap/sendSwapOperation.ts +182 -0
  87. package/actions/evm/swap/sendSwapTransaction.ts +18 -2
  88. package/actions/evm/swap/types.ts +154 -5
  89. package/actions/evm/types.ts +123 -21
  90. package/client/cdp.ts +1 -1
  91. package/client/evm/evm.ts +101 -33
  92. package/client/evm/evm.types.ts +48 -6
  93. package/client/solana/solana.ts +61 -0
  94. package/client/solana/solana.types.ts +15 -2
  95. package/package.json +1 -1
  96. package/utils/export.ts +89 -0
  97. package/utils/uuidV4.ts +23 -0
  98. package/version.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # CDP SDK Changelog
2
2
 
3
+ ## 1.16.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#165](https://github.com/coinbase/cdp-sdk/pull/165) [`b39c739`](https://github.com/coinbase/cdp-sdk/commit/b39c739979e92f97f7dd232e2932442bd0251436) Thanks [@derek-cb](https://github.com/derek-cb)! - Added swap support for EVM Smart Accounts.
8
+
9
+ - [#165](https://github.com/coinbase/cdp-sdk/pull/165) [`b39c739`](https://github.com/coinbase/cdp-sdk/commit/b39c739979e92f97f7dd232e2932442bd0251436) Thanks [@derek-cb](https://github.com/derek-cb)! - Added idempotency support for getSwapPrice and createSwapQuote
10
+
11
+ ### Patch Changes
12
+
13
+ - [#165](https://github.com/coinbase/cdp-sdk/pull/165) [`b39c739`](https://github.com/coinbase/cdp-sdk/commit/b39c739979e92f97f7dd232e2932442bd0251436) Thanks [@derek-cb](https://github.com/derek-cb)! - Fix usage of optional idempotency keys for one-line swap approach.
14
+
15
+ - [#211](https://github.com/coinbase/cdp-sdk/pull/211) [`3a497cf`](https://github.com/coinbase/cdp-sdk/commit/3a497cfee26cd5f143940cb067fa5d438e79c590) Thanks [@0xRAG](https://github.com/0xRAG)! - Updated types for signTypedData to fix TypeError when wrapping CDP Account in viem's toAccount helper
16
+
17
+ ## 1.15.0
18
+
19
+ ### Minor Changes
20
+
21
+ - [#189](https://github.com/coinbase/cdp-sdk/pull/189) [`8f829cd`](https://github.com/coinbase/cdp-sdk/commit/8f829cd4f340968dcb5d8721d83c2b7fc487c176) Thanks [@sddioulde](https://github.com/sddioulde)! - Added evm and solana account export by address or name
22
+
3
23
  ## 1.14.0
4
24
 
5
25
  ### Minor Changes
package/README.md CHANGED
@@ -114,6 +114,7 @@ const cdp = new CdpClient({
114
114
  ```typescript
115
115
  const account = await cdp.evm.createAccount();
116
116
  ```
117
+
117
118
  #### Import an EVM account as follows:
118
119
 
119
120
  ```typescript
@@ -129,6 +130,36 @@ const account = await cdp.evm.importAccount({
129
130
  const account = await cdp.solana.createAccount();
130
131
  ```
131
132
 
133
+ ### Exporting EVM or Solana accounts
134
+
135
+ #### Export an EVM account as follows:
136
+
137
+ ```typescript
138
+ // by name
139
+ const privateKey = await cdp.evm.exportAccount({
140
+ name: "MyAccount",
141
+ });
142
+
143
+ // by address
144
+ const privateKey = await cdp.evm.exportAccount({
145
+ address: "0x123",
146
+ });
147
+ ```
148
+
149
+ #### Export a Solana account as follows:
150
+
151
+ ```typescript
152
+ // by name
153
+ const privateKey = await cdp.solana.exportAccount({
154
+ name: "MyAccount",
155
+ });
156
+
157
+ // by address
158
+ const privateKey = await cdp.solana.exportAccount({
159
+ address: "Abc",
160
+ });
161
+ ```
162
+
132
163
  #### Get or Create an EVM account as follows:
133
164
 
134
165
  ```typescript
@@ -362,7 +393,7 @@ const userOperation = await cdp.sendUserOperation({
362
393
 
363
394
  ### EVM Swaps
364
395
 
365
- You can use the CDP SDK to swap tokens on EVM networks.
396
+ You can use the CDP SDK to swap tokens on EVM networks using both regular accounts (EOAs) and smart accounts.
366
397
 
367
398
  The SDK provides three approaches for performing token swaps:
368
399
 
@@ -370,6 +401,7 @@ The SDK provides three approaches for performing token swaps:
370
401
 
371
402
  The simplest approach for performing swaps. Creates and executes the swap in a single line of code:
372
403
 
404
+ **Regular Account (EOA):**
373
405
  ```typescript
374
406
  // Retrieve an existing EVM account with funds already in it
375
407
  const account = await cdp.evm.getOrCreateAccount({ name: "MyExistingFundedAccount" });
@@ -386,6 +418,29 @@ const { transactionHash } = await account.swap({
386
418
  console.log(`Swap executed: ${transactionHash}`);
387
419
  ```
388
420
 
421
+ **Smart Account:**
422
+ ```typescript
423
+ // Create or retrieve a smart account with funds already in it
424
+ const owner = await cdp.evm.getOrCreateAccount({ name: "MyOwnerAccount" });
425
+ const smartAccount = await cdp.evm.getOrCreateSmartAccount({ name: "MyExistingFundedSmartAccount", owner });
426
+
427
+ // Execute a swap directly on a smart account in one line
428
+ const { userOpHash } = await smartAccount.swap({
429
+ network: "base",
430
+ toToken: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC on Base
431
+ fromToken: "0x4200000000000000000000000000000000000006", // WETH on Base
432
+ fromAmount: BigInt("1000000000000000000"), // 1 WETH in wei
433
+ slippageBps: 100, // 1% slippage tolerance
434
+ // Optional: paymasterUrl: "https://paymaster.example.com" // For gas sponsorship
435
+ });
436
+
437
+ console.log(`Smart account swap executed: ${userOpHash}`);
438
+
439
+ // Wait for the user operation to complete
440
+ const receipt = await smartAccount.waitForUserOperation({ userOpHash });
441
+ console.log(`Status: ${receipt.status}`);
442
+ ```
443
+
389
444
  #### 2. Get pricing information
390
445
 
391
446
  Use `getSwapPrice` for quick price estimates and display purposes. This is ideal for showing exchange rates without committing to a swap:
@@ -409,10 +464,11 @@ if (swapPrice.liquidityAvailable) {
409
464
 
410
465
  #### 3. Create and execute separately
411
466
 
412
- Use `createSwapQuote` when you need full control over the swap process. This returns complete transaction data for execution:
467
+ Use `account.quoteSwap()` / `smartAccount.quoteSwap()` when you need full control over the swap process. This returns complete transaction data for execution:
413
468
 
414
- **Important:** `createSwapQuote` signals a soft commitment to swap and may reserve funds on-chain. It is rate-limited more strictly than `getSwapPrice` to prevent abuse.
469
+ **Important:** `quoteSwap()` signals a soft commitment to swap and may reserve funds on-chain. It is rate-limited more strictly than `getSwapPrice` to prevent abuse.
415
470
 
471
+ **Regular Account (EOA):**
416
472
  ```typescript
417
473
  // Retrieve an existing EVM account with funds already in it
418
474
  const account = await cdp.evm.getOrCreateAccount({ name: "MyExistingFundedAccount" });
@@ -432,21 +488,51 @@ if (!swapQuote.liquidityAvailable) {
432
488
  return;
433
489
  }
434
490
 
435
- // Step 3: Execute using the quote (two options)
436
- // Option 3A: Use the execute method on the quote
437
- const { transactionHash } = await swapQuote.execute({});
491
+ // Step 3: Execute using the quote
492
+ const { transactionHash } = await swapQuote.execute();
493
+ ```
438
494
 
439
- // Option 3B: Pass the quote to account.swap()
440
- const { transactionHash } = await account.swap({
441
- swapQuote: swapQuote
495
+ **Smart Account:**
496
+ ```typescript
497
+ // Create or retrieve a smart account with funds already in it
498
+ const owner = await cdp.evm.getOrCreateAccount({ name: "MyOwnerAccount" });
499
+ const smartAccount = await cdp.evm.getOrCreateSmartAccount({ name: "MyExistingFundedSmartAccount", owner });
500
+
501
+ // Step 1: Create a swap quote with full transaction details for smart account
502
+ const swapQuote = await smartAccount.quoteSwap({
503
+ network: "base",
504
+ toToken: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
505
+ fromToken: "0x4200000000000000000000000000000000000006", // WETH
506
+ fromAmount: BigInt("1000000000000000000"), // 1 WETH in wei
507
+ slippageBps: 100, // 1% slippage tolerance
442
508
  });
509
+
510
+ // Step 2: Check if liquidity is available, and/or perform other analysis on the swap quote
511
+ if (!swapQuote.liquidityAvailable) {
512
+ console.error("Insufficient liquidity for swap");
513
+ return;
514
+ }
515
+
516
+ // Step 3: Execute using the quote
517
+ const { userOpHash } = await swapQuote.execute();
518
+
519
+ // Wait for the user operation to complete
520
+ const receipt = await smartAccount.waitForUserOperation({ userOpHash });
521
+ console.log(`Status: ${receipt.status}`);
443
522
  ```
444
523
 
445
524
  #### When to use each approach:
446
525
 
447
- - **All-in-one (`account.swap()`)**: Best for most use cases. Simple, handles everything automatically.
526
+ - **All-in-one (`account.swap()` / `smartAccount.swap()`)**: Best for most use cases. Simple, handles everything automatically.
448
527
  - **Price only (`getSwapPrice`)**: For displaying exchange rates, building price calculators, or checking liquidity without executing. Suitable when frequent price updates are needed - although the data may be slightly less precise.
449
- - **Create then execute (`createSwapQuote`)**: When you need to inspect swap details, implement custom logic, or handle complex scenarios before execution. Note: May reserve funds on-chain and is more strictly rate-limited.
528
+ - **Create then execute (`account.quoteSwap()` / `smartAccount.quoteSwap()`)**: When you need to inspect swap details, implement custom logic, or handle complex scenarios before execution. Note: May reserve funds on-chain and is more strictly rate-limited.
529
+
530
+ #### Key differences between Regular Accounts (EOAs) and Smart Accounts:
531
+
532
+ - **Regular accounts (EOAs)** return `transactionHash` and execute immediately on-chain
533
+ - **Smart accounts** return `userOpHash` and execute via user operations with optional gas sponsorship through paymasters
534
+ - **Smart accounts** require an owner account for signing operations
535
+ - **Smart accounts** support batch operations and advanced account abstraction features
450
536
 
451
537
  All approaches handle Permit2 signatures automatically for ERC20 token swaps. Make sure tokens have proper allowances set for the Permit2 contract before swapping.
452
538
 
@@ -454,18 +540,25 @@ All approaches handle Permit2 signatures automatically for ERC20 token swaps. Ma
454
540
 
455
541
  To help you get started with token swaps in your application, we provide the following fully-working examples demonstrating different scenarios:
456
542
 
457
- **Core swap patterns:**
458
- - [Get a swap price estimate](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/getSwapPrice.ts) - Price estimation without commitment
459
- - [Create a concrete swap quote for execution](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/createSwapQuote.ts) - Direct API usage with explicit taker
460
- - [Execute a swap transaction using CDP Wallets (RECOMMENDED)](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/account.swap.ts) - All-in-one swap execution
461
-
462
- **Account-based swap examples:**
543
+ **Regular account (EOA) swap examples:**
544
+ - [Execute a swap transaction using account (RECOMMENDED)](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/account.swap.ts) - All-in-one regular account swap execution
463
545
  - [Quote swap using account convenience method](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/account.quoteSwap.ts) - Account convenience method for creating quotes
464
546
  - [Two-step quote and execute process](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/account.quoteSwapAndExecute.ts) - Detailed two-step approach with analysis
465
547
 
466
- **External wallet integration:**
467
- - [Execute a swap transaction using an external account (Viem)](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/viem.swap.ts) - Full swap execution with viem wallets
468
- - [Create swap quotes using Viem wallets](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/viem.quoteSwap.ts) - Quote creation with external wallets
548
+ **Smart account swap examples:**
549
+ - [Execute a swap transaction using smart account (RECOMMENDED)](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/smartAccount.swap.ts) - All-in-one smart account swap execution with user operations and optional paymaster support
550
+ - [Quote swap using smart account convenience method](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/smartAccount.quoteSwap.ts) - Smart account convenience method for creating quotes
551
+ - [Two-step quote and execute process](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/smartAccount.quoteSwapAndExecute.ts) - Detailed two-step approach with analysis
552
+
553
+ **BYO wallet (viem) regular account (EOA) swap examples:**
554
+ - [Execute a swap transaction using viem account](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/viem.account.swap.ts) - All-in-one swap execution with viem wallets
555
+ - [Two-step quote and execute process using viem account](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/viem.account.quoteSwapAndExecute.ts) - Detailed two-step approach with viem wallets
556
+
557
+ **BYO wallet (viem + account abstraction) smart account swap examples:**
558
+ - [Execute a swap transaction using viem smart account](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/viem.smartAccount.swap.ts) - All-in-one smart account swap with custom bundler/paymaster setup
559
+ - [Two-step quote and execute process using viem smart account](https://github.com/coinbase/cdp-sdk/blob/main/examples/typescript/evm/viem.smartAccount.quoteSwapAndExecute.ts) - Advanced account abstraction integration
560
+
561
+ **Note:** The viem smart account examples require additional dependencies (`permissionless` package) and external service setup (bundler, optional paymaster). For simpler smart account usage, consider CDP's built-in smart account features instead.
469
562
 
470
563
  ### Transferring tokens
471
564
 
@@ -42,13 +42,19 @@ function toEvmServerAccount(apiClient, options) {
42
42
  });
43
43
  return result.signedTransaction;
44
44
  },
45
- async signTypedData(message) {
46
- if (!message.types.EIP712Domain) {
47
- message.types.EIP712Domain = (0, viem_1.getTypesForEIP712Domain)({
48
- domain: message.domain,
49
- });
50
- }
51
- const result = await apiClient.signEvmTypedData(options.account.address, message);
45
+ async signTypedData(parameters) {
46
+ const { domain = {}, message, primaryType } = parameters;
47
+ const types = {
48
+ EIP712Domain: (0, viem_1.getTypesForEIP712Domain)({ domain }),
49
+ ...parameters.types,
50
+ };
51
+ const openApiMessage = {
52
+ domain: domain,
53
+ types,
54
+ primaryType,
55
+ message,
56
+ };
57
+ const result = await apiClient.signEvmTypedData(options.account.address, openApiMessage);
52
58
  return result.signature;
53
59
  },
54
60
  async transfer(transferArgs) {
@@ -1 +1 @@
1
- {"version":3,"file":"toEvmServerAccount.js","sourceRoot":"","sources":["../../../accounts/evm/toEvmServerAccount.ts"],"names":[],"mappings":";;AA0DA,gDAiGC;AA3JD,+BAAmG;AAEnG,4DAAmE;AAEnE,sEAAkF;AAElF,0GAI+D;AAC/D,iFAIgD;AAChD,yEAI4C;AAC5C,6EAAuE;AACvE,kFAA4E;AAC5E,0FAAoF;AACpF,sGAAgG;AAChG,wEAAkE;AAwBlE;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAChC,SAA+B,EAC/B,OAAkC;IAElC,MAAM,OAAO,GAAqB;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAkB;QAC3C,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE;YAC3B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE;gBACrE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;aAC5B,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,SAAgB,CAAC;QACjC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,UAA0B;YACnC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE;gBAClE,IAAI,EAAE,UAAU,CAAC,IAAI;aACtB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,SAAgB,CAAC;QACjC,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,WAAoC;YACxD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE;gBACzE,WAAW,EAAE,IAAA,2BAAoB,EAAC,WAAW,CAAC;aAC/C,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,iBAAwB,CAAC;QACzC,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,OAAsB;YACxC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAA,8BAAuB,EAAC;oBACnD,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClF,OAAO,MAAM,CAAC,SAAgB,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,YAAY;YACzB,OAAO,IAAA,sBAAQ,EAAC,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,oDAAuB,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,iBAAiB,CACrB,OAAkD;YAElD,OAAO,IAAA,wCAAiB,EAAC,SAAS,EAAE;gBAClC,GAAG,OAAO;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,aAAa,CACjB,OAA8C;YAE9C,OAAO,IAAA,gCAAa,EAAC,SAAS,EAAE;gBAC9B,GAAG,OAAO;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,OAAgD;YACpE,OAAO,IAAA,oCAAe,EAAC,SAAS,EAAE;gBAChC,GAAG,OAAO;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,OAA0C;YACxD,OAAO,IAAA,wBAAS,EAAC,SAAS,EAAE;gBAC1B,GAAG,OAAO;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAqC;YAC9C,OAAO,IAAA,cAAI,EAAC,SAAS,EAAE;gBACrB,GAAG,OAAO;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,2BAA2B,CAC/B,OAAoC;YAEpC,OAAO,IAAA,4DAA2B,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,OAAyB;YACvC,OAAO,IAAA,oCAAe,EAAC,SAAS,EAAE;gBAChC,GAAG,OAAO;gBACV,KAAK,EAAE,IAAI,CAAC,OAAO;aACpB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAoB;YAC7B,OAAO,IAAA,4CAAmB,EAAC,SAAS,EAAE;gBACpC,GAAG,OAAO;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,wCAAwC;aAC9D,CAAC,CAAC;QACL,CAAC;QACD,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;QAC1B,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;KACnC,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"toEvmServerAccount.js","sourceRoot":"","sources":["../../../accounts/evm/toEvmServerAccount.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ const getUserOperation_js_1 = require("../../actions/evm/getUserOperation.js");
8
8
  const listTokenBalances_js_1 = require("../../actions/evm/listTokenBalances.js");
9
9
  const requestFaucet_js_1 = require("../../actions/evm/requestFaucet.js");
10
10
  const sendUserOperation_js_1 = require("../../actions/evm/sendUserOperation.js");
11
+ const createSwapQuote_js_1 = require("../../actions/evm/swap/createSwapQuote.js");
12
+ const sendSwapOperation_js_1 = require("../../actions/evm/swap/sendSwapOperation.js");
11
13
  const smartAccountTransferStrategy_js_1 = require("../../actions/evm/transfer/smartAccountTransferStrategy.js");
12
14
  const transfer_js_1 = require("../../actions/evm/transfer/transfer.js");
13
15
  const waitForUserOperation_js_1 = require("../../actions/evm/waitForUserOperation.js");
@@ -75,6 +77,22 @@ function toEvmSmartAccount(apiClient, options) {
75
77
  async waitForFundOperationReceipt(options) {
76
78
  return (0, waitForFundOperationReceipt_js_1.waitForFundOperationReceipt)(apiClient, options);
77
79
  },
80
+ async quoteSwap(options) {
81
+ return (0, createSwapQuote_js_1.createSwapQuote)(apiClient, {
82
+ ...options,
83
+ taker: this.address, // Always use smart account's address as taker
84
+ signerAddress: this.owners[0].address, // Always use owner's address as signer
85
+ smartAccount: account, // Pass smart account for execute method support
86
+ });
87
+ },
88
+ async swap(options) {
89
+ return (0, sendSwapOperation_js_1.sendSwapOperation)(apiClient, {
90
+ ...options,
91
+ smartAccount: account,
92
+ taker: this.address, // Always use smart account's address as taker
93
+ signerAddress: this.owners[0].address, // Always use owner's address as signer
94
+ });
95
+ },
78
96
  name: options.smartAccount.name,
79
97
  type: "evm-smart",
80
98
  };
@@ -1 +1 @@
1
- {"version":3,"file":"toEvmSmartAccount.js","sourceRoot":"","sources":["../../../accounts/evm/toEvmSmartAccount.ts"],"names":[],"mappings":";;AA+DA,8CAwEC;AAvID,4DAAmE;AAEnE,sEAAkF;AAElF,0GAI+D;AAC/D,+EAAyE;AACzE,iFAIgD;AAChD,yEAI4C;AAC5C,iFAIgD;AAChD,gHAA0G;AAC1G,wEAAkE;AAClE,uFAImD;AAoBnD;;;;;;;;;;;GAWG;AACH,SAAgB,iBAAiB,CAC/B,SAA+B,EAC/B,OAAiC;IAEjC,MAAM,OAAO,GAAoB;QAC/B,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,OAAkB;QAChD,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,YAAY;YACzB,OAAO,IAAA,sBAAQ,EAAC,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,8DAA4B,CAAC,CAAC;QAClF,CAAC;QACD,KAAK,CAAC,iBAAiB,CACrB,OAAkD;YAElD,OAAO,IAAA,wCAAiB,EAAC,SAAS,EAAE;gBAClC,GAAG,OAAO;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,iBAAiB,CACrB,OAAkE;YAElE,OAAO,IAAA,wCAAiB,EAAC,SAAS,EAAE;gBAClC,GAAG,OAAO;gBACV,YAAY,EAAE,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,oBAAoB,CACxB,OAAiE;YAEjE,OAAO,IAAA,8CAAoB,EAAC,SAAS,EAAE;gBACrC,GAAG,OAAO;gBACV,mBAAmB,EAAE,OAAO,CAAC,OAAO;aACrC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,gBAAgB,CACpB,OAAsD;YAEtD,OAAO,IAAA,sCAAgB,EAAC,SAAS,EAAE;gBACjC,GAAG,OAAO;gBACV,YAAY,EAAE,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,aAAa,CACjB,OAA8C;YAE9C,OAAO,IAAA,gCAAa,EAAC,SAAS,EAAE;gBAC9B,GAAG,OAAO;gBACV,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,OAA0C;YACxD,OAAO,IAAA,wBAAS,EAAC,SAAS,EAAE;gBAC1B,GAAG,OAAO;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAqC;YAC9C,OAAO,IAAA,cAAI,EAAC,SAAS,EAAE;gBACrB,GAAG,OAAO;gBACV,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,2BAA2B,CAC/B,OAAoC;YAEpC,OAAO,IAAA,4DAA2B,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI;QAC/B,IAAI,EAAE,WAAW;KAClB,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"toEvmSmartAccount.js","sourceRoot":"","sources":["../../../accounts/evm/toEvmSmartAccount.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signAndWrapTypedDataForSmartAccount = signAndWrapTypedDataForSmartAccount;
4
+ exports.createReplaySafeTypedData = createReplaySafeTypedData;
5
+ exports.createSmartAccountSignatureWrapper = createSmartAccountSignatureWrapper;
6
+ const viem_1 = require("viem");
7
+ /**
8
+ * Signs and wraps an EIP-712 message for a smart account using the required Coinbase Smart Wallet signature format.
9
+ *
10
+ * **Important: Coinbase Smart Wallet Contract Requirements**
11
+ *
12
+ * Due to the Coinbase Smart Wallet contract implementation (ERC-1271), CDP Smart Wallets have
13
+ * specific requirements for EIP-712 message signing:
14
+ *
15
+ * 1. **Replay-Safe Hashing**: All typed messages must be wrapped in a replay-safe hash that
16
+ * includes the chain ID and smart account address. This prevents the same signature from
17
+ * being valid across different chains or accounts.
18
+ *
19
+ * 2. **Signature Wrapping**: The resulting signature must be wrapped in a `SignatureWrapper`
20
+ * struct that identifies which owner signed and contains the signature data in the format
21
+ * expected by the smart contract's `isValidSignature()` method.
22
+ *
23
+ * This function handles both requirements automatically, making it safe and convenient for
24
+ * developers to sign EIP-712 messages with CDP Smart Wallets.
25
+ *
26
+ * @param {CdpOpenApiClientType} client - The CDP API client
27
+ * @param {SignAndWrapTypedDataForSmartAccountOptions} options - Parameters for signing and wrapping the EIP-712 message.
28
+ * @returns A promise that resolves to the signature that can be used with smart contracts.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const result = await signAndWrapTypedDataForSmartAccount(client, {
33
+ * smartAccount: smartAccount,
34
+ * chainId: 1n,
35
+ * typedData: {
36
+ * domain: {
37
+ * name: "Permit2",
38
+ * chainId: 1,
39
+ * verifyingContract: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
40
+ * },
41
+ * types: {
42
+ * EIP712Domain: [
43
+ * { name: "name", type: "string" },
44
+ * { name: "chainId", type: "uint256" },
45
+ * { name: "verifyingContract", type: "address" },
46
+ * ],
47
+ * PermitTransferFrom: [
48
+ * { name: "permitted", type: "TokenPermissions" },
49
+ * { name: "spender", type: "address" },
50
+ * { name: "nonce", type: "uint256" },
51
+ * { name: "deadline", type: "uint256" },
52
+ * ],
53
+ * TokenPermissions: [
54
+ * { name: "token", type: "address" },
55
+ * { name: "amount", type: "uint256" },
56
+ * ],
57
+ * },
58
+ * primaryType: "PermitTransferFrom",
59
+ * message: {
60
+ * permitted: {
61
+ * token: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
62
+ * amount: "1000000",
63
+ * },
64
+ * spender: "0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf",
65
+ * nonce: "0",
66
+ * deadline: "1717123200",
67
+ * },
68
+ * },
69
+ * });
70
+ *
71
+ * // Use result.signature for smart contract calls
72
+ * console.log(`Signature: ${result.signature}`);
73
+ * ```
74
+ */
75
+ async function signAndWrapTypedDataForSmartAccount(client, options) {
76
+ const { smartAccount, chainId, typedData, ownerIndex = 0n } = options;
77
+ // Create the replay-safe typed data
78
+ const replaySafeTypedData = createReplaySafeTypedData({
79
+ typedData,
80
+ chainId,
81
+ smartAccountAddress: smartAccount.address,
82
+ });
83
+ // Sign the replay-safe typed data with the smart account owner
84
+ const owner = smartAccount.owners[Number(ownerIndex)];
85
+ const signature = await client.signEvmTypedData(owner.address, replaySafeTypedData, options.idempotencyKey);
86
+ // Wrap the signature in the format expected by the smart contract
87
+ const wrappedSignature = createSmartAccountSignatureWrapper({
88
+ signatureHex: signature.signature,
89
+ ownerIndex,
90
+ });
91
+ return {
92
+ signature: wrappedSignature,
93
+ };
94
+ }
95
+ /**
96
+ * Creates a replay-safe EIP-712 typed data structure by wrapping the original typed data with
97
+ * chain ID and smart account address.
98
+ *
99
+ * **Coinbase Smart Wallet Requirement**: Due to the Coinbase Smart Wallet contract's ERC-1271
100
+ * implementation, all EIP-712 messages must be wrapped in a replay-safe hash before signing.
101
+ * This prevents signature replay attacks across different chains or smart account addresses.
102
+ *
103
+ * The smart contract's `isValidSignature()` method expects signatures to be validated against
104
+ * this replay-safe hash, not the original message hash.
105
+ *
106
+ * @param params - The replay-safe hash parameters
107
+ * @param params.typedData - The original EIP-712 typed data to make replay-safe
108
+ * @param params.chainId - The chain ID for replay protection
109
+ * @param params.smartAccountAddress - The smart account address for additional context
110
+ * @returns The EIP-712 typed data structure for the replay-safe hash
111
+ */
112
+ function createReplaySafeTypedData({ typedData, chainId, smartAccountAddress, }) {
113
+ // First hash the original typed data
114
+ const originalHash = (0, viem_1.hashTypedData)(typedData);
115
+ // Create and return the replay-safe typed data structure
116
+ return {
117
+ domain: {
118
+ name: "Coinbase Smart Wallet",
119
+ version: "1",
120
+ chainId: Number(chainId),
121
+ verifyingContract: smartAccountAddress,
122
+ },
123
+ types: {
124
+ EIP712Domain: [
125
+ { name: "name", type: "string" },
126
+ { name: "version", type: "string" },
127
+ { name: "chainId", type: "uint256" },
128
+ { name: "verifyingContract", type: "address" },
129
+ ],
130
+ CoinbaseSmartWalletMessage: [{ name: "hash", type: "bytes32" }],
131
+ },
132
+ primaryType: "CoinbaseSmartWalletMessage",
133
+ message: {
134
+ hash: originalHash,
135
+ },
136
+ };
137
+ }
138
+ /**
139
+ * Builds a signature wrapper for Coinbase Smart Wallets by decomposing a hex signature
140
+ * into r, s, v components and encoding them in the format expected by the smart contract.
141
+ *
142
+ * All signatures on Coinbase Smart Wallets must be wrapped in this format to identify
143
+ * which owner signed and provide the signature data.
144
+ *
145
+ * @param params - The signature parameters
146
+ * @param params.signatureHex - The hex signature to wrap (65 bytes: r + s + v)
147
+ * @param params.ownerIndex - The index of the owner that signed (from MultiOwnable.ownerAtIndex)
148
+ * @returns The encoded signature wrapper in the format expected by the smart contract
149
+ */
150
+ function createSmartAccountSignatureWrapper({ signatureHex, ownerIndex, }) {
151
+ // Decompose 65-byte hex signature into r (32 bytes), s (32 bytes), v (1 byte)
152
+ const r = (0, viem_1.sliceHex)(signatureHex, 0, 32);
153
+ const s = (0, viem_1.sliceHex)(signatureHex, 32, 64);
154
+ const v = Number(`0x${signatureHex.slice(130, 132)}`); // 130 = 2 + 64 + 64
155
+ const signatureData = (0, viem_1.encodePacked)(["bytes32", "bytes32", "uint8"], [r, s, v]);
156
+ return (0, viem_1.encodeAbiParameters)([SignatureWrapperStruct], [
157
+ {
158
+ ownerIndex: Number(ownerIndex),
159
+ signatureData,
160
+ },
161
+ ]);
162
+ }
163
+ /**
164
+ * The ABI structure for the SignatureWrapper struct expected by Coinbase Smart Wallets.
165
+ * This matches the struct defined in the smart contract:
166
+ *
167
+ * struct SignatureWrapper {
168
+ * uint256 ownerIndex;
169
+ * bytes signatureData;
170
+ * }
171
+ */
172
+ const SignatureWrapperStruct = {
173
+ components: [
174
+ {
175
+ name: "ownerIndex",
176
+ type: "uint8",
177
+ },
178
+ {
179
+ name: "signatureData",
180
+ type: "bytes",
181
+ },
182
+ ],
183
+ name: "SignatureWrapper",
184
+ type: "tuple",
185
+ };
186
+ //# sourceMappingURL=signAndWrapTypedDataForSmartAccount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signAndWrapTypedDataForSmartAccount.js","sourceRoot":"","sources":["../../../actions/evm/signAndWrapTypedDataForSmartAccount.ts"],"names":[],"mappings":";;AAqGA,kFA8BC;AAmBD,8DAkCC;AAcD,gFAuBC;AA7ND,+BAAkF;AAiClF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACI,KAAK,UAAU,mCAAmC,CACvD,MAA4B,EAC5B,OAAmD;IAEnD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAEtE,oCAAoC;IACpC,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;QACpD,SAAS;QACT,OAAO;QACP,mBAAmB,EAAE,YAAY,CAAC,OAAc;KACjD,CAAC,CAAC;IAEH,+DAA+D;IAC/D,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC7C,KAAK,CAAC,OAAO,EACb,mBAAmB,EACnB,OAAO,CAAC,cAAc,CACvB,CAAC;IAEF,kEAAkE;IAClE,MAAM,gBAAgB,GAAG,kCAAkC,CAAC;QAC1D,YAAY,EAAE,SAAS,CAAC,SAAgB;QACxC,UAAU;KACX,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE,gBAAuB;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,yBAAyB,CAAC,EACxC,SAAS,EACT,OAAO,EACP,mBAAmB,GAKpB;IACC,qCAAqC;IACrC,MAAM,YAAY,GAAG,IAAA,oBAAa,EAAC,SAAS,CAAC,CAAC;IAE9C,yDAAyD;IACzD,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,GAAG;YACZ,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;YACxB,iBAAiB,EAAE,mBAAmB;SACvC;QACD,KAAK,EAAE;YACL,YAAY,EAAE;gBACZ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAChC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACnC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;gBACpC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE;aAC/C;YACD,0BAA0B,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;SAChE;QACD,WAAW,EAAE,4BAAqC;QAClD,OAAO,EAAE;YACP,IAAI,EAAE,YAAY;SACnB;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,kCAAkC,CAAC,EACjD,YAAY,EACZ,UAAU,GAIX;IACC,8EAA8E;IAC9E,MAAM,CAAC,GAAG,IAAA,eAAQ,EAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,IAAA,eAAQ,EAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;IAE3E,MAAM,aAAa,GAAG,IAAA,mBAAY,EAAC,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/E,OAAO,IAAA,0BAAmB,EACxB,CAAC,sBAAsB,CAAC,EACxB;QACE;YACE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;YAC9B,aAAa;SACd;KACF,CACK,CAAC;AACX,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,sBAAsB,GAAG;IAC7B,UAAU,EAAE;QACV;YACE,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,OAAO;SACd;QACD;YACE,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,OAAO;SACd;KACF;IACD,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,OAAO;CACL,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createSwapQuote = createSwapQuote;
4
+ const sendSwapOperation_js_1 = require("./sendSwapOperation.js");
4
5
  const sendSwapTransaction_js_1 = require("./sendSwapTransaction.js");
5
6
  /**
6
7
  * Creates a quote for a swap between two tokens on an EVM network.
@@ -38,7 +39,7 @@ async function createSwapQuote(client, options) {
38
39
  signerAddress: options.signerAddress,
39
40
  gasPrice: options.gasPrice?.toString(),
40
41
  slippageBps: options.slippageBps,
41
- });
42
+ }, options.idempotencyKey);
42
43
  // Check if liquidity is unavailable
43
44
  if (!response.liquidityAvailable) {
44
45
  // Return the SwapUnavailableResult
@@ -112,13 +113,30 @@ async function createSwapQuote(client, options) {
112
113
  : undefined,
113
114
  // Add the execute method
114
115
  execute: async (executeOptions = {}) => {
115
- const { transactionHash } = await (0, sendSwapTransaction_js_1.sendSwapTransaction)(client, {
116
- address: options.signerAddress || taker, // Use signerAddress for smart accounts, taker for EOAs
117
- network: result.network,
118
- swapQuote: result,
119
- idempotencyKey: executeOptions.idempotencyKey,
120
- });
121
- return { transactionHash };
116
+ if (options.smartAccount) {
117
+ // Smart account execution - use sendSwapOperation
118
+ const userOpResult = await (0, sendSwapOperation_js_1.sendSwapOperation)(client, {
119
+ smartAccount: options.smartAccount,
120
+ network: result.network,
121
+ swapQuote: result,
122
+ idempotencyKey: executeOptions.idempotencyKey,
123
+ });
124
+ return {
125
+ userOpHash: userOpResult.userOpHash,
126
+ smartAccountAddress: userOpResult.smartAccountAddress,
127
+ status: userOpResult.status,
128
+ };
129
+ }
130
+ else {
131
+ // EOA execution - use sendSwapTransaction
132
+ const { transactionHash } = await (0, sendSwapTransaction_js_1.sendSwapTransaction)(client, {
133
+ address: taker,
134
+ network: result.network,
135
+ swapQuote: result,
136
+ idempotencyKey: executeOptions.idempotencyKey,
137
+ });
138
+ return { transactionHash };
139
+ }
122
140
  },
123
141
  };
124
142
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"createSwapQuote.js","sourceRoot":"","sources":["../../../../actions/evm/swap/createSwapQuote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSwapQuote.js","sourceRoot":"","sources":["../../../../actions/evm/swap/createSwapQuote.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,8 @@ exports.getSwapPrice = getSwapPrice;
16
16
  * toToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
17
17
  * fromToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH
18
18
  * fromAmount: BigInt("1000000000000000000"), // 1 WETH in wei
19
- * taker: "0x1234567890123456789012345678901234567890"
19
+ * taker: "0x1234567890123456789012345678901234567890",
20
+ * idempotencyKey: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" // Optional: for request deduplication
20
21
  * });
21
22
  * ```
22
23
  */
@@ -31,7 +32,7 @@ async function getSwapPrice(client, options) {
31
32
  signerAddress: options.signerAddress,
32
33
  gasPrice: options.gasPrice?.toString(),
33
34
  slippageBps: options.slippageBps,
34
- });
35
+ }, options.idempotencyKey);
35
36
  // Check if liquidity is unavailable
36
37
  if (!response.liquidityAvailable) {
37
38
  // Return the SwapUnavailableResult
@@ -1 +1 @@
1
- {"version":3,"file":"getSwapPrice.js","sourceRoot":"","sources":["../../../../actions/evm/swap/getSwapPrice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getSwapPrice.js","sourceRoot":"","sources":["../../../../actions/evm/swap/getSwapPrice.ts"],"names":[],"mappings":";;AA4BA,oCAsEC;AA1FD;;;;;;;;;;;;;;;;;;;GAmBG;AACI,KAAK,UAAU,YAAY,CAChC,MAA4B,EAC5B,OAA4B;IAE5B,8EAA8E;IAC9E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAC3C;QACE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE;QACzC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE;QACtC,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,EACD,OAAO,CAAC,cAAc,CACvB,CAAC;IAEF,oCAAoC;IACpC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QACjC,mCAAmC;QACnC,OAAO;YACL,kBAAkB,EAAE,KAAK;SAC1B,CAAC;IACJ,CAAC;IAED,oFAAoF;IACpF,MAAM,aAAa,GAAG,QAAgC,CAAC;IACvD,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC;QAC9C,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;QACxC,OAAO,EAAE,aAAa,CAAC,OAAkB;QACzC,IAAI,EAAE;YACJ,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM;gBAC/B,CAAC,CAAC;oBACE,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;oBAChD,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAgB;iBAClD;gBACH,CAAC,CAAC,SAAS;YACb,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW;gBACzC,CAAC,CAAC;oBACE,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBACrD,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,KAAgB;iBACvD;gBACH,CAAC,CAAC,SAAS;SACd;QACD,MAAM,EAAE;YACN,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,SAAS;gBACvC,CAAC,CAAC;oBACE,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC;oBACzE,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,OAAkB;iBAC3D;gBACH,CAAC,CAAC,SAAS;YACb,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO;gBACnC,CAAC,CAAC;oBACE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,KAAgB;oBACpD,cAAc,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;oBACnE,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;iBACtE;gBACH,CAAC,CAAC,SAAS;YACb,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAAC,oBAAoB;SAChE;QACD,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC;QAC9C,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC;QAC5C,SAAS,EAAE,aAAa,CAAC,SAAoB;QAC7C,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9D,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9E,CAAC;AACJ,CAAC"}