@coinbase/agentkit 0.10.0 → 0.10.2

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 (169) hide show
  1. package/README.md +195 -23
  2. package/dist/action-providers/across/acrossActionProvider.js +3 -3
  3. package/dist/action-providers/across/schemas.d.ts +1 -1
  4. package/dist/action-providers/baseAccount/baseAccountActionProvider.d.ts +46 -0
  5. package/dist/action-providers/baseAccount/baseAccountActionProvider.js +404 -0
  6. package/dist/action-providers/baseAccount/baseAccountActionProvider.test.d.ts +1 -0
  7. package/dist/action-providers/baseAccount/baseAccountActionProvider.test.js +325 -0
  8. package/dist/action-providers/baseAccount/index.d.ts +2 -0
  9. package/dist/action-providers/baseAccount/index.js +18 -0
  10. package/dist/action-providers/baseAccount/schemas.d.ts +43 -0
  11. package/dist/action-providers/baseAccount/schemas.js +62 -0
  12. package/dist/action-providers/baseAccount/types.d.ts +17 -0
  13. package/dist/action-providers/baseAccount/types.js +2 -0
  14. package/dist/action-providers/baseAccount/utils.d.ts +14 -0
  15. package/dist/action-providers/baseAccount/utils.js +57 -0
  16. package/dist/action-providers/cdp/cdpApiActionProvider.d.ts +3 -12
  17. package/dist/action-providers/cdp/cdpApiActionProvider.js +2 -81
  18. package/dist/action-providers/cdp/cdpApiActionProvider.test.js +0 -125
  19. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.d.ts +18 -3
  20. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.js +224 -23
  21. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.js +280 -0
  22. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.d.ts +17 -2
  23. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.js +224 -18
  24. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.js +267 -1
  25. package/dist/action-providers/cdp/schemas.d.ts +12 -12
  26. package/dist/action-providers/cdp/schemas.js +17 -5
  27. package/dist/action-providers/cdp/swapUtils.d.ts +23 -0
  28. package/dist/action-providers/cdp/swapUtils.js +106 -0
  29. package/dist/action-providers/clanker/clankerActionProvider.d.ts +43 -0
  30. package/dist/action-providers/clanker/clankerActionProvider.js +130 -0
  31. package/dist/action-providers/clanker/clankerActionProvider.test.d.ts +4 -0
  32. package/dist/action-providers/clanker/clankerActionProvider.test.js +119 -0
  33. package/dist/action-providers/clanker/index.d.ts +2 -0
  34. package/dist/action-providers/clanker/index.js +18 -0
  35. package/dist/action-providers/clanker/schemas.d.ts +56 -0
  36. package/dist/action-providers/clanker/schemas.js +47 -0
  37. package/dist/action-providers/clanker/utils.d.ts +9 -0
  38. package/dist/action-providers/clanker/utils.js +23 -0
  39. package/dist/action-providers/compound/constants.d.ts +1 -1
  40. package/dist/action-providers/compound/constants.js +2 -2
  41. package/dist/action-providers/erc20/constants.d.ts +35 -135
  42. package/dist/action-providers/erc20/constants.js +37 -189
  43. package/dist/action-providers/erc20/erc20ActionProvider.d.ts +9 -1
  44. package/dist/action-providers/erc20/erc20ActionProvider.js +87 -35
  45. package/dist/action-providers/erc20/erc20ActionProvider.test.js +115 -52
  46. package/dist/action-providers/erc20/schemas.d.ts +25 -12
  47. package/dist/action-providers/erc20/schemas.js +34 -6
  48. package/dist/action-providers/erc20/utils.d.ts +19 -0
  49. package/dist/action-providers/erc20/utils.js +54 -0
  50. package/dist/action-providers/flaunch/client_utils.d.ts +25 -0
  51. package/dist/action-providers/flaunch/client_utils.js +62 -0
  52. package/dist/action-providers/flaunch/constants.d.ts +42 -21
  53. package/dist/action-providers/flaunch/constants.js +113 -38
  54. package/dist/action-providers/flaunch/flaunchActionProvider.d.ts +4 -43
  55. package/dist/action-providers/flaunch/flaunchActionProvider.js +133 -209
  56. package/dist/action-providers/flaunch/flaunchActionProvider.test.js +113 -13
  57. package/dist/action-providers/flaunch/metadata_utils.d.ts +12 -0
  58. package/dist/action-providers/flaunch/metadata_utils.js +216 -0
  59. package/dist/action-providers/flaunch/schemas.d.ts +39 -3
  60. package/dist/action-providers/flaunch/schemas.js +62 -10
  61. package/dist/action-providers/flaunch/{utils.d.ts → swap_utils.d.ts} +17 -19
  62. package/dist/action-providers/flaunch/{utils.js → swap_utils.js} +137 -172
  63. package/dist/action-providers/index.d.ts +4 -0
  64. package/dist/action-providers/index.js +4 -0
  65. package/dist/action-providers/jupiter/schemas.d.ts +1 -1
  66. package/dist/action-providers/moonwell/schemas.d.ts +2 -2
  67. package/dist/action-providers/morpho/morphoActionProvider.js +5 -5
  68. package/dist/action-providers/morpho/schemas.d.ts +2 -2
  69. package/dist/action-providers/pyth/pythActionProvider.d.ts +2 -2
  70. package/dist/action-providers/pyth/pythActionProvider.js +83 -26
  71. package/dist/action-providers/pyth/pythActionProvider.test.js +179 -23
  72. package/dist/action-providers/pyth/schemas.d.ts +6 -0
  73. package/dist/action-providers/pyth/schemas.js +9 -1
  74. package/dist/action-providers/superfluid/constants.d.ts +814 -0
  75. package/dist/action-providers/superfluid/constants.js +2826 -0
  76. package/dist/action-providers/superfluid/graphQueries/endpoints.d.ts +2 -0
  77. package/dist/action-providers/superfluid/graphQueries/endpoints.js +5 -0
  78. package/dist/action-providers/superfluid/graphQueries/queries.d.ts +1 -0
  79. package/dist/action-providers/superfluid/graphQueries/queries.js +35 -0
  80. package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.d.ts +8 -0
  81. package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.js +24 -0
  82. package/dist/action-providers/superfluid/graphQueries/types.d.ts +27 -0
  83. package/dist/action-providers/superfluid/graphQueries/types.js +2 -0
  84. package/dist/action-providers/superfluid/index.d.ts +7 -0
  85. package/dist/action-providers/superfluid/index.js +23 -0
  86. package/dist/action-providers/superfluid/schemas.d.ts +86 -0
  87. package/dist/action-providers/superfluid/schemas.js +103 -0
  88. package/dist/action-providers/superfluid/superfluidActionProvider.d.ts +20 -0
  89. package/dist/action-providers/superfluid/superfluidActionProvider.js +36 -0
  90. package/dist/action-providers/superfluid/superfluidPoolActionProvider.d.ts +46 -0
  91. package/dist/action-providers/superfluid/superfluidPoolActionProvider.js +143 -0
  92. package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.d.ts +1 -0
  93. package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.js +92 -0
  94. package/dist/action-providers/superfluid/superfluidQueryActionProvider.d.ts +27 -0
  95. package/dist/action-providers/superfluid/superfluidQueryActionProvider.js +71 -0
  96. package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.d.ts +1 -0
  97. package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.js +57 -0
  98. package/dist/action-providers/superfluid/superfluidStreamActionProvider.d.ts +56 -0
  99. package/dist/action-providers/superfluid/superfluidStreamActionProvider.js +191 -0
  100. package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.d.ts +1 -0
  101. package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.js +80 -0
  102. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.d.ts +30 -0
  103. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.js +109 -0
  104. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.d.ts +1 -0
  105. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.js +75 -0
  106. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.d.ts +32 -0
  107. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.js +101 -0
  108. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.d.ts +1 -0
  109. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.js +85 -0
  110. package/dist/action-providers/superfluid/utils/parseLogs.d.ts +19 -0
  111. package/dist/action-providers/superfluid/utils/parseLogs.js +81 -0
  112. package/dist/action-providers/truemarkets/truemarketsActionProvider.d.ts +4 -16
  113. package/dist/action-providers/truemarkets/truemarketsActionProvider.js +20 -41
  114. package/dist/action-providers/truemarkets/truemarketsActionProvider.test.js +11 -33
  115. package/dist/action-providers/wallet/walletActionProvider.js +24 -10
  116. package/dist/action-providers/wallet/walletActionProvider.test.js +6 -2
  117. package/dist/action-providers/x402/schemas.d.ts +7 -0
  118. package/dist/action-providers/x402/schemas.js +11 -1
  119. package/dist/action-providers/x402/utils.d.ts +55 -0
  120. package/dist/action-providers/x402/utils.js +160 -0
  121. package/dist/action-providers/x402/x402ActionProvider.d.ts +9 -9
  122. package/dist/action-providers/x402/x402ActionProvider.js +158 -39
  123. package/dist/action-providers/x402/x402ActionProvider.test.js +116 -10
  124. package/dist/action-providers/zeroX/index.d.ts +1 -0
  125. package/dist/action-providers/zeroX/index.js +17 -0
  126. package/dist/action-providers/zeroX/schemas.d.ts +51 -0
  127. package/dist/action-providers/zeroX/schemas.js +82 -0
  128. package/dist/action-providers/zeroX/utils.d.ts +23 -0
  129. package/dist/action-providers/zeroX/utils.js +106 -0
  130. package/dist/action-providers/zeroX/zeroXActionProvider.d.ts +57 -0
  131. package/dist/action-providers/zeroX/zeroXActionProvider.js +407 -0
  132. package/dist/action-providers/zeroX/zeroXActionProvider.test.d.ts +1 -0
  133. package/dist/action-providers/zeroX/zeroXActionProvider.test.js +445 -0
  134. package/dist/utils.d.ts +10 -0
  135. package/dist/utils.js +43 -13
  136. package/dist/wallet-providers/cdpEvmWalletProvider.d.ts +27 -2
  137. package/dist/wallet-providers/cdpEvmWalletProvider.js +54 -36
  138. package/dist/wallet-providers/cdpEvmWalletProvider.test.js +7 -0
  139. package/dist/wallet-providers/cdpShared.d.ts +5 -0
  140. package/dist/wallet-providers/cdpSmartWalletProvider.d.ts +29 -3
  141. package/dist/wallet-providers/cdpSmartWalletProvider.js +66 -25
  142. package/dist/wallet-providers/cdpSmartWalletProvider.test.js +6 -10
  143. package/dist/wallet-providers/cdpSolanaWalletProvider.d.ts +1 -1
  144. package/dist/wallet-providers/cdpSolanaWalletProvider.js +7 -7
  145. package/dist/wallet-providers/cdpSolanaWalletProvider.test.js +15 -12
  146. package/dist/wallet-providers/evmWalletProvider.d.ts +13 -2
  147. package/dist/wallet-providers/evmWalletProvider.js +4 -0
  148. package/dist/wallet-providers/legacyCdpSmartWalletProvider.d.ts +18 -2
  149. package/dist/wallet-providers/legacyCdpSmartWalletProvider.js +23 -2
  150. package/dist/wallet-providers/legacyCdpWalletProvider.d.ts +19 -2
  151. package/dist/wallet-providers/legacyCdpWalletProvider.js +27 -2
  152. package/dist/wallet-providers/legacyCdpWalletProvider.test.js +6 -0
  153. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.d.ts +17 -2
  154. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.js +39 -3
  155. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.test.js +1 -1
  156. package/dist/wallet-providers/privyEvmWalletProvider.d.ts +2 -0
  157. package/dist/wallet-providers/privyEvmWalletProvider.js +2 -1
  158. package/dist/wallet-providers/privyEvmWalletProvider.test.js +12 -1
  159. package/dist/wallet-providers/solanaKeypairWalletProvider.d.ts +1 -1
  160. package/dist/wallet-providers/solanaKeypairWalletProvider.js +3 -4
  161. package/dist/wallet-providers/solanaKeypairWalletProvider.test.js +4 -2
  162. package/dist/wallet-providers/viemWalletProvider.d.ts +20 -3
  163. package/dist/wallet-providers/viemWalletProvider.js +33 -4
  164. package/dist/wallet-providers/viemWalletProvider.test.js +27 -6
  165. package/dist/wallet-providers/walletProvider.d.ts +1 -1
  166. package/dist/wallet-providers/zeroDevWalletProvider.d.ts +17 -2
  167. package/dist/wallet-providers/zeroDevWalletProvider.js +26 -5
  168. package/dist/wallet-providers/zeroDevWalletProvider.test.js +12 -2
  169. package/package.json +8 -4
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _CdpEvmWalletProvider_instances, _CdpEvmWalletProvider_publicClient, _CdpEvmWalletProvider_serverAccount, _CdpEvmWalletProvider_cdp, _CdpEvmWalletProvider_network, _CdpEvmWalletProvider_getCdpSdkNetwork;
13
+ var _CdpEvmWalletProvider_publicClient, _CdpEvmWalletProvider_serverAccount, _CdpEvmWalletProvider_cdp, _CdpEvmWalletProvider_network;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.CdpEvmWalletProvider = void 0;
16
16
  const cdp_sdk_1 = require("@coinbase/cdp-sdk");
@@ -28,7 +28,6 @@ class CdpEvmWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
28
28
  */
29
29
  constructor(config) {
30
30
  super();
31
- _CdpEvmWalletProvider_instances.add(this);
32
31
  _CdpEvmWalletProvider_publicClient.set(this, void 0);
33
32
  _CdpEvmWalletProvider_serverAccount.set(this, void 0);
34
33
  _CdpEvmWalletProvider_cdp.set(this, void 0);
@@ -67,9 +66,10 @@ class CdpEvmWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
67
66
  const serverAccount = await (config.address
68
67
  ? cdpClient.evm.getAccount({ address: config.address })
69
68
  : cdpClient.evm.createAccount({ idempotencyKey }));
69
+ const rpcUrl = config.rpcUrl || process.env.RPC_URL;
70
70
  const publicClient = (0, viem_1.createPublicClient)({
71
71
  chain: network_1.NETWORK_ID_TO_VIEM_CHAIN[networkId],
72
- transport: (0, viem_1.http)(),
72
+ transport: rpcUrl ? (0, viem_1.http)(rpcUrl) : (0, viem_1.http)(),
73
73
  });
74
74
  return new CdpEvmWalletProvider({
75
75
  publicClient,
@@ -89,6 +89,15 @@ class CdpEvmWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
89
89
  address: __classPrivateFieldGet(this, _CdpEvmWalletProvider_serverAccount, "f").address,
90
90
  };
91
91
  }
92
+ /**
93
+ * Signs a raw hash.
94
+ *
95
+ * @param hash - The hash to sign.
96
+ * @returns The signed hash.
97
+ */
98
+ async sign(hash) {
99
+ return __classPrivateFieldGet(this, _CdpEvmWalletProvider_serverAccount, "f").sign({ hash });
100
+ }
92
101
  /**
93
102
  * Signs a message.
94
103
  *
@@ -129,30 +138,14 @@ class CdpEvmWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
129
138
  * @returns The hash of the transaction.
130
139
  */
131
140
  async sendTransaction(transaction) {
132
- const txWithGasParams = {
133
- ...transaction,
134
- chainId: __classPrivateFieldGet(this, _CdpEvmWalletProvider_network, "f").chainId,
135
- };
136
- if (!txWithGasParams.maxFeePerGas && !txWithGasParams.gasPrice) {
137
- const feeData = await __classPrivateFieldGet(this, _CdpEvmWalletProvider_publicClient, "f").estimateFeesPerGas();
138
- txWithGasParams.maxFeePerGas = feeData.maxFeePerGas;
139
- txWithGasParams.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas;
140
- }
141
- if (!txWithGasParams.gas) {
142
- try {
143
- txWithGasParams.gas = await __classPrivateFieldGet(this, _CdpEvmWalletProvider_publicClient, "f").estimateGas({
144
- account: __classPrivateFieldGet(this, _CdpEvmWalletProvider_serverAccount, "f").address,
145
- ...txWithGasParams,
146
- });
147
- }
148
- catch (error) {
149
- console.warn("Failed to estimate gas, continuing without gas estimation", error);
150
- }
151
- }
152
141
  const result = await __classPrivateFieldGet(this, _CdpEvmWalletProvider_cdp, "f").evm.sendTransaction({
153
142
  address: __classPrivateFieldGet(this, _CdpEvmWalletProvider_serverAccount, "f").address,
154
- transaction: (0, viem_1.serializeTransaction)(txWithGasParams),
155
- network: __classPrivateFieldGet(this, _CdpEvmWalletProvider_instances, "m", _CdpEvmWalletProvider_getCdpSdkNetwork).call(this),
143
+ transaction: {
144
+ to: transaction.to,
145
+ value: transaction.value ? BigInt(transaction.value.toString()) : 0n,
146
+ data: transaction.data || "0x",
147
+ },
148
+ network: this.getCdpSdkNetwork(),
156
149
  });
157
150
  return result.transactionHash;
158
151
  }
@@ -188,6 +181,14 @@ class CdpEvmWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
188
181
  getClient() {
189
182
  return __classPrivateFieldGet(this, _CdpEvmWalletProvider_cdp, "f");
190
183
  }
184
+ /**
185
+ * Gets the Viem PublicClient used for read-only operations.
186
+ *
187
+ * @returns The Viem PublicClient instance used for read-only operations.
188
+ */
189
+ getPublicClient() {
190
+ return __classPrivateFieldGet(this, _CdpEvmWalletProvider_publicClient, "f");
191
+ }
191
192
  /**
192
193
  * Gets the balance of the wallet.
193
194
  *
@@ -219,7 +220,7 @@ class CdpEvmWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
219
220
  * Transfer the native asset of the network.
220
221
  *
221
222
  * @param to - The destination address.
222
- * @param value - The amount to transfer in Wei.
223
+ * @param value - The amount to transfer in atomic units (Wei).
223
224
  * @returns The transaction hash.
224
225
  */
225
226
  async nativeTransfer(to, value) {
@@ -229,15 +230,32 @@ class CdpEvmWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
229
230
  data: "0x",
230
231
  });
231
232
  }
233
+ /**
234
+ * Converts the internal network ID to the format expected by the CDP SDK.
235
+ *
236
+ * @returns The network ID in CDP SDK format
237
+ * @throws Error if the network is not supported
238
+ */
239
+ getCdpSdkNetwork() {
240
+ switch (__classPrivateFieldGet(this, _CdpEvmWalletProvider_network, "f").networkId) {
241
+ case "base-sepolia":
242
+ return "base-sepolia";
243
+ case "base-mainnet":
244
+ return "base";
245
+ case "ethereum-mainnet":
246
+ return "ethereum";
247
+ case "ethereum-sepolia":
248
+ return "ethereum-sepolia";
249
+ case "polygon-mainnet":
250
+ return "polygon";
251
+ case "arbitrum-mainnet":
252
+ return "arbitrum";
253
+ case "optimism-mainnet":
254
+ return "optimism";
255
+ default:
256
+ throw new Error(`Unsupported network for CDP SDK: ${__classPrivateFieldGet(this, _CdpEvmWalletProvider_network, "f").networkId}`);
257
+ }
258
+ }
232
259
  }
233
260
  exports.CdpEvmWalletProvider = CdpEvmWalletProvider;
234
- _CdpEvmWalletProvider_publicClient = new WeakMap(), _CdpEvmWalletProvider_serverAccount = new WeakMap(), _CdpEvmWalletProvider_cdp = new WeakMap(), _CdpEvmWalletProvider_network = new WeakMap(), _CdpEvmWalletProvider_instances = new WeakSet(), _CdpEvmWalletProvider_getCdpSdkNetwork = function _CdpEvmWalletProvider_getCdpSdkNetwork() {
235
- switch (__classPrivateFieldGet(this, _CdpEvmWalletProvider_network, "f").networkId) {
236
- case "base-sepolia":
237
- return "base-sepolia";
238
- case "base-mainnet":
239
- return "base";
240
- default:
241
- throw new Error(`Unsupported network: ${__classPrivateFieldGet(this, _CdpEvmWalletProvider_network, "f").networkId}`);
242
- }
243
- };
261
+ _CdpEvmWalletProvider_publicClient = new WeakMap(), _CdpEvmWalletProvider_serverAccount = new WeakMap(), _CdpEvmWalletProvider_cdp = new WeakMap(), _CdpEvmWalletProvider_network = new WeakMap();
@@ -114,6 +114,7 @@ describe("CdpEvmWalletProvider", () => {
114
114
  });
115
115
  mockServerAccount = {
116
116
  address: MOCK_ADDRESS,
117
+ sign: jest.fn().mockResolvedValue(MOCK_SIGNATURE),
117
118
  signMessage: jest.fn().mockResolvedValue(MOCK_SIGNATURE),
118
119
  signTypedData: jest.fn().mockResolvedValue(MOCK_SIGNATURE),
119
120
  };
@@ -214,6 +215,12 @@ describe("CdpEvmWalletProvider", () => {
214
215
  // signing operation tests
215
216
  // =========================================================
216
217
  describe("signing operations", () => {
218
+ it("should sign a hash", async () => {
219
+ const testHash = "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef";
220
+ const signature = await provider.sign(testHash);
221
+ expect(mockServerAccount.sign).toHaveBeenCalledWith({ hash: testHash });
222
+ expect(signature).toBe(MOCK_SIGNATURE);
223
+ });
217
224
  it("should sign messages", async () => {
218
225
  const signature = await provider.signMessage("Hello, world!");
219
226
  expect(mockServerAccount.signMessage).toHaveBeenCalledWith({ message: "Hello, world!" });
@@ -30,6 +30,11 @@ export interface CdpWalletProviderConfig extends CdpProviderConfig {
30
30
  * The idempotency key of the wallet. Only used when creating a new account.
31
31
  */
32
32
  idempotencyKey?: string;
33
+ /**
34
+ * Optional RPC URL for Viem public client HTTP transport.
35
+ * Falls back to process.env.RPC_URL when not provided.
36
+ */
37
+ rpcUrl?: string;
33
38
  }
34
39
  export interface CdpSmartWalletProviderConfig extends CdpWalletProviderConfig {
35
40
  /**
@@ -1,14 +1,19 @@
1
- import { CdpClient, EvmSmartAccount } from "@coinbase/cdp-sdk";
2
- import { Abi, Address, ContractFunctionArgs, ContractFunctionName, Hex, ReadContractParameters, ReadContractReturnType, TransactionRequest } from "viem";
1
+ import { CdpClient, EvmSmartAccount, EvmServerAccount } from "@coinbase/cdp-sdk";
2
+ import { Abi, Address, ContractFunctionArgs, ContractFunctionName, Hex, PublicClient, ReadContractParameters, ReadContractReturnType, TransactionRequest, LocalAccount } from "viem";
3
3
  import { Network } from "../network";
4
4
  import { EvmWalletProvider } from "./evmWalletProvider";
5
5
  import { WalletProviderWithClient, CdpSmartWalletProviderConfig } from "./cdpShared";
6
+ /**
7
+ * Supported network types for CDP SDK smart wallet operations
8
+ */
9
+ type CdpSmartWalletNetwork = "base" | "base-sepolia" | "ethereum" | "ethereum-sepolia" | "polygon" | "arbitrum" | "optimism";
6
10
  /**
7
11
  * A wallet provider that uses the Coinbase CDP SDK smart wallets.
8
12
  */
9
13
  export declare class CdpSmartWalletProvider extends EvmWalletProvider implements WalletProviderWithClient {
10
14
  #private;
11
15
  smartAccount: EvmSmartAccount;
16
+ ownerAccount: LocalAccount | EvmServerAccount;
12
17
  /**
13
18
  * Constructs a new CdpSmartWalletProvider.
14
19
  *
@@ -33,6 +38,13 @@ export declare class CdpSmartWalletProvider extends EvmWalletProvider implements
33
38
  address: Address;
34
39
  ownerAddress: Address;
35
40
  }>;
41
+ /**
42
+ * Signs a raw hash using the owner account.
43
+ *
44
+ * @param _hash - The hash to sign.
45
+ * @returns The signed hash.
46
+ */
47
+ sign(_hash: Hex): Promise<Hex>;
36
48
  /**
37
49
  * Signs a message using the owner account.
38
50
  *
@@ -91,6 +103,12 @@ export declare class CdpSmartWalletProvider extends EvmWalletProvider implements
91
103
  * @returns The paymaster URL if configured, undefined otherwise.
92
104
  */
93
105
  getPaymasterUrl(): string | undefined;
106
+ /**
107
+ * Gets the Viem PublicClient used for read-only operations.
108
+ *
109
+ * @returns The Viem PublicClient instance used for read-only operations.
110
+ */
111
+ getPublicClient(): PublicClient;
94
112
  /**
95
113
  * Gets the balance of the smart wallet.
96
114
  *
@@ -115,8 +133,16 @@ export declare class CdpSmartWalletProvider extends EvmWalletProvider implements
115
133
  * Transfer the native asset of the network using smart wallet.
116
134
  *
117
135
  * @param to - The destination address.
118
- * @param value - The amount to transfer in Wei.
136
+ * @param value - The amount to transfer in atomic units (Wei).
119
137
  * @returns The user operation hash.
120
138
  */
121
139
  nativeTransfer(to: Address, value: string): Promise<Hex>;
140
+ /**
141
+ * Converts the internal network ID to the format expected by the CDP SDK.
142
+ *
143
+ * @returns The network ID in CDP SDK format
144
+ * @throws Error if the network is not supported
145
+ */
146
+ getCdpSdkNetwork(): CdpSmartWalletNetwork;
122
147
  }
148
+ export {};
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _CdpSmartWalletProvider_instances, _CdpSmartWalletProvider_publicClient, _CdpSmartWalletProvider_ownerAccount, _CdpSmartWalletProvider_cdp, _CdpSmartWalletProvider_network, _CdpSmartWalletProvider_paymasterUrl, _CdpSmartWalletProvider_getCdpSdkNetwork;
13
+ var _CdpSmartWalletProvider_publicClient, _CdpSmartWalletProvider_cdp, _CdpSmartWalletProvider_network, _CdpSmartWalletProvider_paymasterUrl;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.CdpSmartWalletProvider = void 0;
16
16
  const cdp_sdk_1 = require("@coinbase/cdp-sdk");
@@ -28,14 +28,12 @@ class CdpSmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
28
28
  */
29
29
  constructor(config) {
30
30
  super();
31
- _CdpSmartWalletProvider_instances.add(this);
32
31
  _CdpSmartWalletProvider_publicClient.set(this, void 0);
33
- _CdpSmartWalletProvider_ownerAccount.set(this, void 0);
34
32
  _CdpSmartWalletProvider_cdp.set(this, void 0);
35
33
  _CdpSmartWalletProvider_network.set(this, void 0);
36
34
  _CdpSmartWalletProvider_paymasterUrl.set(this, void 0);
37
35
  this.smartAccount = config.smartAccount;
38
- __classPrivateFieldSet(this, _CdpSmartWalletProvider_ownerAccount, config.ownerAccount, "f");
36
+ this.ownerAccount = config.ownerAccount;
39
37
  __classPrivateFieldSet(this, _CdpSmartWalletProvider_cdp, config.cdp, "f");
40
38
  __classPrivateFieldSet(this, _CdpSmartWalletProvider_publicClient, config.publicClient, "f");
41
39
  __classPrivateFieldSet(this, _CdpSmartWalletProvider_network, config.network, "f");
@@ -58,10 +56,6 @@ class CdpSmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
58
56
  throw new Error("Missing required environment variables. CDP_API_KEY_ID, CDP_API_KEY_SECRET, CDP_WALLET_SECRET are required.");
59
57
  }
60
58
  const networkId = config.networkId || process.env.NETWORK_ID || "base-sepolia";
61
- // Smart wallets are currently only supported on Base networks
62
- if (!networkId.startsWith("base-")) {
63
- throw new Error(`Smart wallets are only supported on Base networks. Got: ${networkId}`);
64
- }
65
59
  const network = {
66
60
  protocolFamily: "evm",
67
61
  chainId: network_1.NETWORK_ID_TO_CHAIN_ID[networkId],
@@ -92,9 +86,10 @@ class CdpSmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
92
86
  : cdpClient.evm.createSmartAccount({
93
87
  owner: ownerAccount,
94
88
  }));
89
+ const rpcUrl = config.rpcUrl || process.env.RPC_URL;
95
90
  const publicClient = (0, viem_1.createPublicClient)({
96
91
  chain: network_1.NETWORK_ID_TO_VIEM_CHAIN[networkId],
97
- transport: (0, viem_1.http)(),
92
+ transport: rpcUrl ? (0, viem_1.http)(rpcUrl) : (0, viem_1.http)(),
98
93
  });
99
94
  return new CdpSmartWalletProvider({
100
95
  publicClient,
@@ -114,9 +109,21 @@ class CdpSmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
114
109
  return {
115
110
  name: this.smartAccount.name,
116
111
  address: this.smartAccount.address,
117
- ownerAddress: __classPrivateFieldGet(this, _CdpSmartWalletProvider_ownerAccount, "f").address,
112
+ ownerAddress: this.ownerAccount.address,
118
113
  };
119
114
  }
115
+ /**
116
+ * Signs a raw hash using the owner account.
117
+ *
118
+ * @param _hash - The hash to sign.
119
+ * @returns The signed hash.
120
+ */
121
+ async sign(_hash) {
122
+ if (!this.ownerAccount.sign) {
123
+ throw new Error("Owner account does not support raw hash signing");
124
+ }
125
+ return this.ownerAccount.sign({ hash: _hash });
126
+ }
120
127
  /**
121
128
  * Signs a message using the owner account.
122
129
  *
@@ -124,7 +131,7 @@ class CdpSmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
124
131
  * @returns The signed message.
125
132
  */
126
133
  async signMessage(_message) {
127
- throw new Error("Direct message signing not supported for smart wallets. Use sendTransaction instead.");
134
+ return this.ownerAccount.signMessage({ message: _message });
128
135
  }
129
136
  /**
130
137
  * Signs a typed data object using the owner account.
@@ -140,7 +147,7 @@ class CdpSmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
140
147
  types,
141
148
  primaryType,
142
149
  message,
143
- network: __classPrivateFieldGet(this, _CdpSmartWalletProvider_instances, "m", _CdpSmartWalletProvider_getCdpSdkNetwork).call(this),
150
+ network: this.getCdpSdkNetwork(),
144
151
  });
145
152
  }
146
153
  /**
@@ -168,7 +175,7 @@ class CdpSmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
168
175
  ];
169
176
  const userOperation = await __classPrivateFieldGet(this, _CdpSmartWalletProvider_cdp, "f").evm.sendUserOperation({
170
177
  smartAccount: this.smartAccount,
171
- network: __classPrivateFieldGet(this, _CdpSmartWalletProvider_instances, "m", _CdpSmartWalletProvider_getCdpSdkNetwork).call(this),
178
+ network: this.getCdpSdkNetwork(),
172
179
  calls,
173
180
  paymasterUrl: __classPrivateFieldGet(this, _CdpSmartWalletProvider_paymasterUrl, "f"),
174
181
  });
@@ -214,6 +221,14 @@ class CdpSmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
214
221
  getPaymasterUrl() {
215
222
  return __classPrivateFieldGet(this, _CdpSmartWalletProvider_paymasterUrl, "f");
216
223
  }
224
+ /**
225
+ * Gets the Viem PublicClient used for read-only operations.
226
+ *
227
+ * @returns The Viem PublicClient instance used for read-only operations.
228
+ */
229
+ getPublicClient() {
230
+ return __classPrivateFieldGet(this, _CdpSmartWalletProvider_publicClient, "f");
231
+ }
217
232
  /**
218
233
  * Gets the balance of the smart wallet.
219
234
  *
@@ -233,10 +248,19 @@ class CdpSmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
233
248
  // For smart wallets, we need to wait for the user operation to be confirmed
234
249
  // This is a simplified implementation - in practice you might want to poll
235
250
  // the CDP API for user operation status
236
- return __classPrivateFieldGet(this, _CdpSmartWalletProvider_cdp, "f").evm.waitForUserOperation({
251
+ const receipt = await __classPrivateFieldGet(this, _CdpSmartWalletProvider_cdp, "f").evm.waitForUserOperation({
237
252
  smartAccountAddress: this.smartAccount.address,
238
253
  userOpHash,
239
254
  });
255
+ // Append transaction logs if available
256
+ if (receipt.status === "complete") {
257
+ const receiptTx = await __classPrivateFieldGet(this, _CdpSmartWalletProvider_publicClient, "f").getTransactionReceipt({
258
+ hash: receipt.transactionHash,
259
+ });
260
+ if (receiptTx.logs)
261
+ return { ...receipt, logs: receiptTx.logs };
262
+ }
263
+ return receipt;
240
264
  }
241
265
  /**
242
266
  * Reads a contract.
@@ -251,7 +275,7 @@ class CdpSmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
251
275
  * Transfer the native asset of the network using smart wallet.
252
276
  *
253
277
  * @param to - The destination address.
254
- * @param value - The amount to transfer in Wei.
278
+ * @param value - The amount to transfer in atomic units (Wei).
255
279
  * @returns The user operation hash.
256
280
  */
257
281
  async nativeTransfer(to, value) {
@@ -261,15 +285,32 @@ class CdpSmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
261
285
  data: "0x",
262
286
  });
263
287
  }
288
+ /**
289
+ * Converts the internal network ID to the format expected by the CDP SDK.
290
+ *
291
+ * @returns The network ID in CDP SDK format
292
+ * @throws Error if the network is not supported
293
+ */
294
+ getCdpSdkNetwork() {
295
+ switch (__classPrivateFieldGet(this, _CdpSmartWalletProvider_network, "f").networkId) {
296
+ case "base-sepolia":
297
+ return "base-sepolia";
298
+ case "base-mainnet":
299
+ return "base";
300
+ case "ethereum-mainnet":
301
+ return "ethereum";
302
+ case "ethereum-sepolia":
303
+ return "ethereum-sepolia";
304
+ case "polygon-mainnet":
305
+ return "polygon";
306
+ case "arbitrum-mainnet":
307
+ return "arbitrum";
308
+ case "optimism-mainnet":
309
+ return "optimism";
310
+ default:
311
+ throw new Error(`Unsupported network for smart wallets: ${__classPrivateFieldGet(this, _CdpSmartWalletProvider_network, "f").networkId}`);
312
+ }
313
+ }
264
314
  }
265
315
  exports.CdpSmartWalletProvider = CdpSmartWalletProvider;
266
- _CdpSmartWalletProvider_publicClient = new WeakMap(), _CdpSmartWalletProvider_ownerAccount = new WeakMap(), _CdpSmartWalletProvider_cdp = new WeakMap(), _CdpSmartWalletProvider_network = new WeakMap(), _CdpSmartWalletProvider_paymasterUrl = new WeakMap(), _CdpSmartWalletProvider_instances = new WeakSet(), _CdpSmartWalletProvider_getCdpSdkNetwork = function _CdpSmartWalletProvider_getCdpSdkNetwork() {
267
- switch (__classPrivateFieldGet(this, _CdpSmartWalletProvider_network, "f").networkId) {
268
- case "base-sepolia":
269
- return "base-sepolia";
270
- case "base-mainnet":
271
- return "base";
272
- default:
273
- throw new Error(`Unsupported network for smart wallets: ${__classPrivateFieldGet(this, _CdpSmartWalletProvider_network, "f").networkId}`);
274
- }
275
- };
316
+ _CdpSmartWalletProvider_publicClient = new WeakMap(), _CdpSmartWalletProvider_cdp = new WeakMap(), _CdpSmartWalletProvider_network = new WeakMap(), _CdpSmartWalletProvider_paymasterUrl = new WeakMap();
@@ -109,6 +109,7 @@ describe("CdpSmartWalletProvider", () => {
109
109
  });
110
110
  mockOwnerAccount = {
111
111
  address: MOCK_ADDRESS,
112
+ sign: jest.fn().mockResolvedValue(MOCK_SIGNATURE),
112
113
  signMessage: jest.fn().mockResolvedValue(MOCK_SIGNATURE),
113
114
  signTypedData: jest.fn().mockResolvedValue(MOCK_SIGNATURE),
114
115
  };
@@ -141,14 +142,6 @@ describe("CdpSmartWalletProvider", () => {
141
142
  expect(provider.getAddress()).toBe(MOCK_SMART_ADDRESS);
142
143
  expect(provider.getNetwork()).toEqual(MOCK_NETWORK);
143
144
  });
144
- it("should throw error for non-Base networks", async () => {
145
- await expect(cdpSmartWalletProvider_1.CdpSmartWalletProvider.configureWithWallet({
146
- apiKeyId: "test-key-id",
147
- apiKeySecret: "test-key-secret",
148
- walletSecret: "test-wallet-secret",
149
- networkId: "ethereum-sepolia",
150
- })).rejects.toThrow("Smart wallets are only supported on Base networks");
151
- });
152
145
  it("should create smart account with name", async () => {
153
146
  await cdpSmartWalletProvider_1.CdpSmartWalletProvider.configureWithWallet({
154
147
  apiKeyId: "test-key-id",
@@ -188,8 +181,11 @@ describe("CdpSmartWalletProvider", () => {
188
181
  // signing operation tests
189
182
  // =========================================================
190
183
  describe("signing operations", () => {
191
- it("should throw error for direct message signing", async () => {
192
- await expect(provider.signMessage("Hello, world!")).rejects.toThrow("Direct message signing not supported for smart wallets. Use sendTransaction instead.");
184
+ it("should sign a hash using owner account", async () => {
185
+ const testHash = "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef";
186
+ const signature = await provider.sign(testHash);
187
+ expect(mockOwnerAccount.sign).toHaveBeenCalledWith({ hash: testHash });
188
+ expect(signature).toBe(MOCK_SIGNATURE);
193
189
  });
194
190
  it("should sign typed data using smart account", async () => {
195
191
  const typedData = {
@@ -113,7 +113,7 @@ export declare class CdpSolanaWalletProvider extends SvmWalletProvider implement
113
113
  * Transfer SOL from the wallet to another address
114
114
  *
115
115
  * @param to - The base58 encoded address to transfer the SOL to
116
- * @param value - The amount of SOL to transfer (as a decimal string, e.g. "0.0001")
116
+ * @param value - The amount to transfer in atomic units (Lamports)
117
117
  * @returns The signature
118
118
  */
119
119
  nativeTransfer(to: string, value: string): Promise<string>;
@@ -147,12 +147,13 @@ class CdpSolanaWalletProvider extends svmWalletProvider_1.SvmWalletProvider {
147
147
  async signTransaction(transaction) {
148
148
  const serializedTransaction = transaction.serialize();
149
149
  const encodedSerializedTransaction = Buffer.from(serializedTransaction).toString("base64");
150
- const signedTransaction = await __classPrivateFieldGet(this, _CdpSolanaWalletProvider_cdp, "f").solana.signTransaction({
150
+ const signedTransactionResponse = await __classPrivateFieldGet(this, _CdpSolanaWalletProvider_cdp, "f").solana.signTransaction({
151
151
  transaction: encodedSerializedTransaction,
152
152
  address: __classPrivateFieldGet(this, _CdpSolanaWalletProvider_serverAccount, "f").address,
153
153
  });
154
- transaction.addSignature(this.getPublicKey(), Buffer.from(signedTransaction.signature, "base64"));
155
- return transaction;
154
+ const signedTransactionBytes = Buffer.from(signedTransactionResponse.signedTransaction, "base64");
155
+ const signedTransaction = web3_js_1.VersionedTransaction.deserialize(signedTransactionBytes);
156
+ return signedTransaction;
156
157
  }
157
158
  /**
158
159
  * Send a transaction
@@ -219,16 +220,15 @@ class CdpSolanaWalletProvider extends svmWalletProvider_1.SvmWalletProvider {
219
220
  * Transfer SOL from the wallet to another address
220
221
  *
221
222
  * @param to - The base58 encoded address to transfer the SOL to
222
- * @param value - The amount of SOL to transfer (as a decimal string, e.g. "0.0001")
223
+ * @param value - The amount to transfer in atomic units (Lamports)
223
224
  * @returns The signature
224
225
  */
225
226
  async nativeTransfer(to, value) {
226
227
  const initialBalance = await this.getBalance();
227
- const solAmount = parseFloat(value);
228
- const lamports = BigInt(Math.floor(solAmount * web3_js_1.LAMPORTS_PER_SOL));
228
+ const lamports = BigInt(value);
229
229
  // Check if we have enough balance (including estimated fees)
230
230
  if (initialBalance < lamports + BigInt(5000)) {
231
- throw new Error(`Insufficient balance. Have ${Number(initialBalance) / web3_js_1.LAMPORTS_PER_SOL} SOL, need ${solAmount + 0.000005} SOL (including fees)`);
231
+ throw new Error(`Insufficient balance. Have ${Number(initialBalance)} lamports, need ${Number(lamports) + 5000} lamports (including fees)`);
232
232
  }
233
233
  const toPubkey = new web3_js_1.PublicKey(to);
234
234
  const instructions = [
@@ -29,13 +29,16 @@ jest.mock("@solana/web3.js", () => {
29
29
  };
30
30
  const MockPublicKey = jest.fn(() => mockPublicKey);
31
31
  MockPublicKey.prototype = mockPublicKey;
32
+ const mockVersionedTransaction = {
33
+ serialize: jest.fn(() => Buffer.from("mock-serialized-tx")),
34
+ addSignature: jest.fn(),
35
+ };
36
+ const MockVersionedTransaction = jest.fn(() => mockVersionedTransaction);
37
+ MockVersionedTransaction.deserialize = jest.fn(() => mockVersionedTransaction);
32
38
  return {
33
39
  Connection: jest.fn(() => mockConnection),
34
40
  PublicKey: MockPublicKey,
35
- VersionedTransaction: jest.fn().mockImplementation(() => ({
36
- serialize: jest.fn(() => Buffer.from("mock-serialized-tx")),
37
- addSignature: jest.fn(),
38
- })),
41
+ VersionedTransaction: MockVersionedTransaction,
39
42
  MessageV0: {
40
43
  compile: jest.fn(),
41
44
  },
@@ -69,9 +72,9 @@ jest.mock("@coinbase/cdp-sdk", () => {
69
72
  address: MOCK_ADDRESS,
70
73
  signTransaction: jest.fn().mockResolvedValue({ signature: MOCK_SIGNATURE }),
71
74
  }));
72
- const mockSignTransaction = jest
73
- .fn()
74
- .mockImplementation(async () => ({ signature: MOCK_SIGNATURE }));
75
+ const mockSignTransaction = jest.fn().mockImplementation(async () => ({
76
+ signedTransaction: Buffer.from("mock-signed-transaction").toString("base64"),
77
+ }));
75
78
  const mockSolanaClient = {
76
79
  createAccount: mockCreateAccount,
77
80
  getAccount: jest.fn(),
@@ -122,9 +125,9 @@ describe("CdpSolanaWalletProvider", () => {
122
125
  };
123
126
  // Set up the mock server account for the provider
124
127
  mockCdpClient.solana.createAccount.mockResolvedValue(mockServerAccount);
125
- mockCdpClient.solana.signTransaction = jest
126
- .fn()
127
- .mockResolvedValue({ signature: MOCK_SIGNATURE });
128
+ mockCdpClient.solana.signTransaction = jest.fn().mockResolvedValue({
129
+ signedTransaction: Buffer.from("mock-signed-transaction").toString("base64"),
130
+ });
128
131
  mockConnection.getBalance.mockResolvedValue(Number(MOCK_BALANCE));
129
132
  mockConnection.getLatestBlockhash.mockResolvedValue({
130
133
  blockhash: "test-blockhash",
@@ -285,7 +288,7 @@ describe("CdpSolanaWalletProvider", () => {
285
288
  describe("native transfer", () => {
286
289
  it("should transfer SOL", async () => {
287
290
  const toAddress = "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin";
288
- const amount = "1.0";
291
+ const amount = "1000000000"; // 1 SOL in lamports
289
292
  // Set a balance that's high enough to cover the transfer + fees
290
293
  mockConnection.getBalance.mockResolvedValueOnce(Number(2000000000n)); // 2 SOL
291
294
  const signature = await provider.nativeTransfer(toAddress, amount);
@@ -295,7 +298,7 @@ describe("CdpSolanaWalletProvider", () => {
295
298
  it("should handle insufficient balance", async () => {
296
299
  mockConnection.getBalance.mockResolvedValueOnce(Number(1000000n)); // 0.001 SOL
297
300
  const toAddress = "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin";
298
- const amount = "1.0";
301
+ const amount = "1000000000"; // 1 SOL in lamports
299
302
  await expect(provider.nativeTransfer(toAddress, amount)).rejects.toThrow("Insufficient balance");
300
303
  });
301
304
  it("should handle invalid address", async () => {
@@ -1,5 +1,5 @@
1
1
  import { WalletProvider } from "./walletProvider";
2
- import { TransactionRequest, ReadContractParameters, ReadContractReturnType, ContractFunctionName, Abi, ContractFunctionArgs, Account } from "viem";
2
+ import { TransactionRequest, ReadContractParameters, ReadContractReturnType, ContractFunctionName, Abi, ContractFunctionArgs, PublicClient, LocalAccount } from "viem";
3
3
  /**
4
4
  * EvmWalletProvider is the abstract base class for all EVM wallet providers.
5
5
  *
@@ -11,7 +11,14 @@ export declare abstract class EvmWalletProvider extends WalletProvider {
11
11
  *
12
12
  * @returns The signer.
13
13
  */
14
- toSigner(): Account;
14
+ toSigner(): LocalAccount;
15
+ /**
16
+ * Sign a raw hash.
17
+ *
18
+ * @param hash - The hash to sign.
19
+ * @returns The signed hash.
20
+ */
21
+ abstract sign(hash: `0x${string}`): Promise<`0x${string}`>;
15
22
  /**
16
23
  * Sign a message.
17
24
  *
@@ -54,4 +61,8 @@ export declare abstract class EvmWalletProvider extends WalletProvider {
54
61
  * @returns The response from the contract.
55
62
  */
56
63
  abstract readContract<const abi extends Abi | readonly unknown[], functionName extends ContractFunctionName<abi, "pure" | "view">, const args extends ContractFunctionArgs<abi, "pure" | "view", functionName>>(params: ReadContractParameters<abi, functionName, args>): Promise<ReadContractReturnType<abi, functionName, args>>;
64
+ /**
65
+ * Get the underlying Viem PublicClient for read-only blockchain operations.
66
+ */
67
+ abstract getPublicClient(): PublicClient;
57
68
  }
@@ -18,7 +18,11 @@ class EvmWalletProvider extends walletProvider_1.WalletProvider {
18
18
  */
19
19
  toSigner() {
20
20
  return (0, accounts_1.toAccount)({
21
+ type: "local",
21
22
  address: this.getAddress(),
23
+ sign: async ({ hash }) => {
24
+ return this.sign(hash);
25
+ },
22
26
  signMessage: async ({ message }) => {
23
27
  return this.signMessage(message);
24
28
  },