@coinbase/agentkit 0.0.0-nightly-20250808210408 → 0.0.0-nightly-20250815210416

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 (39) hide show
  1. package/README.md +26 -0
  2. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.d.ts +43 -0
  3. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.js +151 -0
  4. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.d.ts +1 -0
  5. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.js +242 -0
  6. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.d.ts +42 -0
  7. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.js +132 -0
  8. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.d.ts +1 -0
  9. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.js +199 -0
  10. package/dist/action-providers/cdp/index.d.ts +3 -0
  11. package/dist/action-providers/cdp/index.js +3 -0
  12. package/dist/action-providers/cdp/schemas.d.ts +29 -0
  13. package/dist/action-providers/cdp/schemas.js +32 -1
  14. package/dist/action-providers/cdp/spendPermissionUtils.d.ts +24 -0
  15. package/dist/action-providers/cdp/spendPermissionUtils.js +66 -0
  16. package/dist/action-providers/flaunch/flaunchActionProvider.js +3 -11
  17. package/dist/action-providers/flaunch/flaunchActionProvider.test.js +5 -0
  18. package/dist/action-providers/truemarkets/truemarketsActionProvider.d.ts +4 -16
  19. package/dist/action-providers/truemarkets/truemarketsActionProvider.js +10 -31
  20. package/dist/action-providers/truemarkets/truemarketsActionProvider.test.js +11 -33
  21. package/dist/wallet-providers/cdpEvmWalletProvider.d.ts +7 -1
  22. package/dist/wallet-providers/cdpEvmWalletProvider.js +10 -1
  23. package/dist/wallet-providers/cdpShared.d.ts +5 -0
  24. package/dist/wallet-providers/cdpSmartWalletProvider.d.ts +9 -2
  25. package/dist/wallet-providers/cdpSmartWalletProvider.js +20 -12
  26. package/dist/wallet-providers/evmWalletProvider.d.ts +5 -1
  27. package/dist/wallet-providers/legacyCdpSmartWalletProvider.d.ts +8 -1
  28. package/dist/wallet-providers/legacyCdpSmartWalletProvider.js +11 -1
  29. package/dist/wallet-providers/legacyCdpWalletProvider.d.ts +11 -1
  30. package/dist/wallet-providers/legacyCdpWalletProvider.js +10 -1
  31. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.d.ts +9 -1
  32. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.js +10 -1
  33. package/dist/wallet-providers/privyEvmWalletProvider.d.ts +2 -0
  34. package/dist/wallet-providers/privyEvmWalletProvider.js +2 -1
  35. package/dist/wallet-providers/viemWalletProvider.d.ts +7 -1
  36. package/dist/wallet-providers/viemWalletProvider.js +8 -0
  37. package/dist/wallet-providers/zeroDevWalletProvider.d.ts +9 -1
  38. package/dist/wallet-providers/zeroDevWalletProvider.js +10 -1
  39. package/package.json +2 -2
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const cdpSmartWalletActionProvider_1 = require("./cdpSmartWalletActionProvider");
37
+ const schemas_1 = require("./schemas");
38
+ const spendPermissionUtils = __importStar(require("./spendPermissionUtils"));
39
+ // Mock the CDP SDK and utility functions
40
+ jest.mock("@coinbase/cdp-sdk");
41
+ jest.mock("./spendPermissionUtils");
42
+ describe("CDP Smart Wallet Action Provider", () => {
43
+ let actionProvider;
44
+ let mockWalletProvider;
45
+ let mockCdpClient;
46
+ let mockSmartAccount;
47
+ beforeEach(() => {
48
+ jest.clearAllMocks();
49
+ mockSmartAccount = {
50
+ useSpendPermission: jest.fn(),
51
+ address: "0x1234567890123456789012345678901234567890",
52
+ };
53
+ mockCdpClient = {
54
+ evm: {
55
+ listSpendPermissions: jest.fn(),
56
+ },
57
+ };
58
+ mockWalletProvider = {
59
+ getNetwork: jest.fn(),
60
+ getAddress: jest.fn(),
61
+ getClient: jest.fn(),
62
+ smartAccount: mockSmartAccount,
63
+ };
64
+ actionProvider = new cdpSmartWalletActionProvider_1.CdpSmartWalletActionProvider();
65
+ });
66
+ describe("listSpendPermissions", () => {
67
+ const mockArgs = {
68
+ smartAccountAddress: "0xabcd1234567890123456789012345678901234567890",
69
+ };
70
+ beforeEach(() => {
71
+ mockWalletProvider.getNetwork.mockReturnValue({
72
+ protocolFamily: "evm",
73
+ networkId: "base-sepolia",
74
+ });
75
+ mockWalletProvider.getAddress.mockReturnValue("0x1234567890123456789012345678901234567890");
76
+ mockWalletProvider.getClient.mockReturnValue(mockCdpClient);
77
+ });
78
+ it("should successfully list spend permissions for EVM networks", async () => {
79
+ const expectedResult = "Found 1 spend permission(s):\n1. Token: ETH, Allowance: 1000, Period: 3600 seconds, Start: 123456, End: 234567";
80
+ spendPermissionUtils.listSpendPermissionsForSpender.mockResolvedValue(expectedResult);
81
+ const result = await actionProvider.listSpendPermissions(mockWalletProvider, mockArgs);
82
+ expect(spendPermissionUtils.listSpendPermissionsForSpender).toHaveBeenCalledWith(mockCdpClient, mockArgs.smartAccountAddress, "0x1234567890123456789012345678901234567890");
83
+ expect(result).toBe(expectedResult);
84
+ });
85
+ it("should return error message for non-EVM networks", async () => {
86
+ mockWalletProvider.getNetwork.mockReturnValue({
87
+ protocolFamily: "svm",
88
+ networkId: "solana-devnet",
89
+ });
90
+ const result = await actionProvider.listSpendPermissions(mockWalletProvider, mockArgs);
91
+ expect(result).toBe("Spend permissions are currently only supported on EVM networks.");
92
+ expect(spendPermissionUtils.listSpendPermissionsForSpender).not.toHaveBeenCalled();
93
+ });
94
+ it("should validate input schema", () => {
95
+ const validInput = { smartAccountAddress: "0xabcd1234567890123456789012345678901234567890" };
96
+ const invalidInput = { invalidField: "invalid" };
97
+ expect(() => schemas_1.ListSpendPermissionsSchema.parse(validInput)).not.toThrow();
98
+ expect(() => schemas_1.ListSpendPermissionsSchema.parse(invalidInput)).toThrow();
99
+ });
100
+ });
101
+ describe("useSpendPermission", () => {
102
+ const mockArgs = {
103
+ smartAccountAddress: "0xabcd1234567890123456789012345678901234567890",
104
+ value: "1000",
105
+ };
106
+ beforeEach(() => {
107
+ mockWalletProvider.getNetwork.mockReturnValue({
108
+ protocolFamily: "evm",
109
+ networkId: "base-sepolia",
110
+ });
111
+ mockWalletProvider.getAddress.mockReturnValue("0x1234567890123456789012345678901234567890");
112
+ mockWalletProvider.getClient.mockReturnValue(mockCdpClient);
113
+ });
114
+ it("should successfully use spend permission for EVM networks", async () => {
115
+ const mockPermission = {
116
+ spender: "0x1234567890123456789012345678901234567890",
117
+ token: "ETH",
118
+ allowance: "1000",
119
+ period: 3600,
120
+ start: 123456,
121
+ end: 234567,
122
+ };
123
+ const mockSpendResult = {
124
+ status: "completed",
125
+ transactionHash: "0xabcd1234",
126
+ };
127
+ spendPermissionUtils.findLatestSpendPermission.mockResolvedValue(mockPermission);
128
+ mockSmartAccount.useSpendPermission.mockResolvedValue(mockSpendResult);
129
+ const result = await actionProvider.useSpendPermission(mockWalletProvider, mockArgs);
130
+ expect(spendPermissionUtils.findLatestSpendPermission).toHaveBeenCalledWith(mockCdpClient, mockArgs.smartAccountAddress, "0x1234567890123456789012345678901234567890");
131
+ expect(mockSmartAccount.useSpendPermission).toHaveBeenCalledWith({
132
+ spendPermission: mockPermission,
133
+ value: BigInt(1000),
134
+ network: "base-sepolia",
135
+ });
136
+ expect(result).toBe("Successfully spent 1000 tokens using spend permission. Status: completed");
137
+ });
138
+ it("should handle base-mainnet network conversion", async () => {
139
+ mockWalletProvider.getNetwork.mockReturnValue({
140
+ protocolFamily: "evm",
141
+ networkId: "base-mainnet",
142
+ });
143
+ const mockPermission = { spender: "0x1234", token: "ETH" };
144
+ const mockSpendResult = { status: "completed" };
145
+ spendPermissionUtils.findLatestSpendPermission.mockResolvedValue(mockPermission);
146
+ mockSmartAccount.useSpendPermission.mockResolvedValue(mockSpendResult);
147
+ await actionProvider.useSpendPermission(mockWalletProvider, mockArgs);
148
+ expect(mockSmartAccount.useSpendPermission).toHaveBeenCalledWith({
149
+ spendPermission: mockPermission,
150
+ value: BigInt(1000),
151
+ network: "base",
152
+ });
153
+ });
154
+ it("should throw error for unsupported networks", async () => {
155
+ mockWalletProvider.getNetwork.mockReturnValue({
156
+ protocolFamily: "evm",
157
+ networkId: "ethereum-mainnet",
158
+ });
159
+ await expect(actionProvider.useSpendPermission(mockWalletProvider, mockArgs)).rejects.toThrow("Unsupported network for smart wallets: ethereum-mainnet");
160
+ });
161
+ it("should return error message for non-EVM networks", async () => {
162
+ mockWalletProvider.getNetwork.mockReturnValue({
163
+ protocolFamily: "svm",
164
+ networkId: "solana-devnet",
165
+ });
166
+ await expect(actionProvider.useSpendPermission(mockWalletProvider, mockArgs)).rejects.toThrow("Unsupported network for smart wallets: solana-devnet");
167
+ });
168
+ it("should handle spend permission not found error", async () => {
169
+ spendPermissionUtils.findLatestSpendPermission.mockRejectedValue(new Error("No spend permissions found"));
170
+ await expect(actionProvider.useSpendPermission(mockWalletProvider, mockArgs)).rejects.toThrow("Failed to use spend permission: Error: No spend permissions found");
171
+ });
172
+ it("should handle smart account use permission failure", async () => {
173
+ const mockPermission = { spender: "0x1234", token: "ETH" };
174
+ spendPermissionUtils.findLatestSpendPermission.mockResolvedValue(mockPermission);
175
+ mockSmartAccount.useSpendPermission.mockRejectedValue(new Error("Transaction failed"));
176
+ await expect(actionProvider.useSpendPermission(mockWalletProvider, mockArgs)).rejects.toThrow("Failed to use spend permission: Error: Transaction failed");
177
+ });
178
+ it("should validate input schema", () => {
179
+ const validInput = {
180
+ smartAccountAddress: "0xabcd1234567890123456789012345678901234567890",
181
+ value: "1000",
182
+ };
183
+ const invalidInput = {
184
+ wrongField: "0xabcd1234567890123456789012345678901234567890",
185
+ // Missing required fields
186
+ };
187
+ expect(() => schemas_1.UseSpendPermissionSchema.parse(validInput)).not.toThrow();
188
+ expect(() => schemas_1.UseSpendPermissionSchema.parse(invalidInput)).toThrow();
189
+ });
190
+ });
191
+ describe("supportsNetwork", () => {
192
+ it("should return true for any network", () => {
193
+ const evmNetwork = { protocolFamily: "evm", networkId: "base-sepolia" };
194
+ const svmNetwork = { protocolFamily: "svm", networkId: "solana-devnet" };
195
+ expect(actionProvider.supportsNetwork(evmNetwork)).toBe(true);
196
+ expect(actionProvider.supportsNetwork(svmNetwork)).toBe(true);
197
+ });
198
+ });
199
+ });
@@ -1,2 +1,5 @@
1
1
  export * from "./schemas";
2
2
  export * from "./cdpApiActionProvider";
3
+ export * from "./cdpSmartWalletActionProvider";
4
+ export * from "./cdpEvmWalletActionProvider";
5
+ export * from "./spendPermissionUtils";
@@ -16,3 +16,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./schemas"), exports);
18
18
  __exportStar(require("./cdpApiActionProvider"), exports);
19
+ __exportStar(require("./cdpSmartWalletActionProvider"), exports);
20
+ __exportStar(require("./cdpEvmWalletActionProvider"), exports);
21
+ __exportStar(require("./spendPermissionUtils"), exports);
@@ -28,3 +28,32 @@ export declare const SwapSchema: z.ZodObject<{
28
28
  toAssetId: string;
29
29
  network?: string | undefined;
30
30
  }>;
31
+ /**
32
+ * Input schema for listing spend permissions action.
33
+ */
34
+ export declare const ListSpendPermissionsSchema: z.ZodObject<{
35
+ smartAccountAddress: z.ZodString;
36
+ network: z.ZodOptional<z.ZodString>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ smartAccountAddress: string;
39
+ network?: string | undefined;
40
+ }, {
41
+ smartAccountAddress: string;
42
+ network?: string | undefined;
43
+ }>;
44
+ /**
45
+ * Input schema for using a spend permission action.
46
+ */
47
+ export declare const UseSpendPermissionSchema: z.ZodObject<{
48
+ smartAccountAddress: z.ZodString;
49
+ value: z.ZodString;
50
+ network: z.ZodOptional<z.ZodString>;
51
+ }, "strip", z.ZodTypeAny, {
52
+ value: string;
53
+ smartAccountAddress: string;
54
+ network?: string | undefined;
55
+ }, {
56
+ value: string;
57
+ smartAccountAddress: string;
58
+ network?: string | undefined;
59
+ }>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SwapSchema = exports.RequestFaucetFundsV2Schema = void 0;
3
+ exports.UseSpendPermissionSchema = exports.ListSpendPermissionsSchema = exports.SwapSchema = exports.RequestFaucetFundsV2Schema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  /**
6
6
  * Input schema for request faucet funds action.
@@ -26,3 +26,34 @@ exports.SwapSchema = zod_1.z
26
26
  })
27
27
  .strip()
28
28
  .describe("Instructions for swapping tokens");
29
+ /**
30
+ * Input schema for listing spend permissions action.
31
+ */
32
+ exports.ListSpendPermissionsSchema = zod_1.z
33
+ .object({
34
+ smartAccountAddress: zod_1.z
35
+ .string()
36
+ .describe("The smart account address that has granted spend permissions"),
37
+ network: zod_1.z
38
+ .string()
39
+ .optional()
40
+ .describe("The network to list permissions on (defaults to wallet's network)"),
41
+ })
42
+ .strip()
43
+ .describe("Instructions for listing spend permissions for a smart account");
44
+ /**
45
+ * Input schema for using a spend permission action.
46
+ */
47
+ exports.UseSpendPermissionSchema = zod_1.z
48
+ .object({
49
+ smartAccountAddress: zod_1.z
50
+ .string()
51
+ .describe("The smart account address that has granted the spend permission"),
52
+ value: zod_1.z.string().describe("The amount to spend (in the token's units)"),
53
+ network: zod_1.z
54
+ .string()
55
+ .optional()
56
+ .describe("The network to perform the spend on (defaults to wallet's network)"),
57
+ })
58
+ .strip()
59
+ .describe("Instructions for using a spend permission");
@@ -0,0 +1,24 @@
1
+ import { CdpClient, type SpendPermission } from "@coinbase/cdp-sdk";
2
+ import type { Address } from "viem";
3
+ /**
4
+ * Shared utility functions for spend permission operations.
5
+ */
6
+ /**
7
+ * Lists and formats spend permissions for a given smart account and spender.
8
+ *
9
+ * @param cdpClient - The CDP client to use for API calls
10
+ * @param smartAccountAddress - The smart account address to check permissions for
11
+ * @param spenderAddress - The spender address to filter permissions by
12
+ * @returns A formatted string containing the spend permissions or an error message
13
+ */
14
+ export declare function listSpendPermissionsForSpender(cdpClient: CdpClient, smartAccountAddress: Address, spenderAddress: Address): Promise<string>;
15
+ /**
16
+ * Finds and retrieves the latest valid spend permission for a given spender from a smart account.
17
+ *
18
+ * @param cdpClient - The CDP client to use for API calls
19
+ * @param smartAccountAddress - The smart account address to check permissions for
20
+ * @param spenderAddress - The spender address to find permissions for
21
+ * @returns The latest spend permission or throws an error if none found
22
+ * @throws Error if no permissions found or permission is invalid
23
+ */
24
+ export declare function findLatestSpendPermission(cdpClient: CdpClient, smartAccountAddress: Address, spenderAddress: Address): Promise<SpendPermission>;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listSpendPermissionsForSpender = listSpendPermissionsForSpender;
4
+ exports.findLatestSpendPermission = findLatestSpendPermission;
5
+ /**
6
+ * Shared utility functions for spend permission operations.
7
+ */
8
+ /**
9
+ * Lists and formats spend permissions for a given smart account and spender.
10
+ *
11
+ * @param cdpClient - The CDP client to use for API calls
12
+ * @param smartAccountAddress - The smart account address to check permissions for
13
+ * @param spenderAddress - The spender address to filter permissions by
14
+ * @returns A formatted string containing the spend permissions or an error message
15
+ */
16
+ async function listSpendPermissionsForSpender(cdpClient, smartAccountAddress, spenderAddress) {
17
+ try {
18
+ // List all spend permissions for the smart account
19
+ const allPermissions = await cdpClient.evm.listSpendPermissions({
20
+ address: smartAccountAddress,
21
+ });
22
+ // Filter permissions where current wallet is the spender
23
+ const relevantPermissions = allPermissions.spendPermissions.filter(p => p.permission?.spender.toLowerCase() === spenderAddress.toLowerCase());
24
+ if (relevantPermissions.length === 0) {
25
+ return `No spend permissions found for spender ${spenderAddress} on smart account ${smartAccountAddress}`;
26
+ }
27
+ // Format the permissions for display
28
+ const formattedPermissions = relevantPermissions
29
+ .map((p, index) => {
30
+ const perm = p.permission;
31
+ if (!perm)
32
+ return `${index + 1}. Invalid permission`;
33
+ return `${index + 1}. Token: ${perm.token}, Allowance: ${perm.allowance}, Period: ${perm.period} seconds, Start: ${perm.start}, End: ${perm.end}`;
34
+ })
35
+ .join("\n");
36
+ return `Found ${relevantPermissions.length} spend permission(s):\n${formattedPermissions}`;
37
+ }
38
+ catch (error) {
39
+ return `Failed to list spend permissions: ${error}`;
40
+ }
41
+ }
42
+ /**
43
+ * Finds and retrieves the latest valid spend permission for a given spender from a smart account.
44
+ *
45
+ * @param cdpClient - The CDP client to use for API calls
46
+ * @param smartAccountAddress - The smart account address to check permissions for
47
+ * @param spenderAddress - The spender address to find permissions for
48
+ * @returns The latest spend permission or throws an error if none found
49
+ * @throws Error if no permissions found or permission is invalid
50
+ */
51
+ async function findLatestSpendPermission(cdpClient, smartAccountAddress, spenderAddress) {
52
+ const allPermissions = await cdpClient.evm.listSpendPermissions({
53
+ address: smartAccountAddress,
54
+ });
55
+ // Filter permissions where current wallet is the spender
56
+ const relevantPermissions = allPermissions.spendPermissions.filter(p => p.permission?.spender.toLowerCase() === spenderAddress.toLowerCase());
57
+ if (relevantPermissions.length === 0) {
58
+ throw new Error(`No spend permissions found for spender ${spenderAddress} on smart account ${smartAccountAddress}`);
59
+ }
60
+ // Use the latest permission (last in the array)
61
+ const latestPermissionWrapper = relevantPermissions.at(-1);
62
+ if (!latestPermissionWrapper?.permission) {
63
+ throw new Error("Invalid spend permission found");
64
+ }
65
+ return latestPermissionWrapper.permission;
66
+ }
@@ -209,11 +209,7 @@ class FlaunchActionProvider extends actionProvider_1.ActionProvider {
209
209
  signature = await walletProvider.signTypedData(typedData);
210
210
  permitSingle = message;
211
211
  }
212
- const viemPublicClient = (0, viem_1.createPublicClient)({
213
- chain: network_1.NETWORK_ID_TO_VIEM_CHAIN[networkId],
214
- transport: (0, viem_1.http)(),
215
- });
216
- const quoteResult = await viemPublicClient.simulateContract({
212
+ const quoteResult = await walletProvider.getPublicClient().simulateContract({
217
213
  address: constants_1.QuoterAddress[chainId],
218
214
  abi: constants_1.QUOTER_ABI,
219
215
  functionName: "quoteExactInput",
@@ -308,17 +304,13 @@ class FlaunchActionProvider extends actionProvider_1.ActionProvider {
308
304
  throw new Error("Chain ID is not set.");
309
305
  }
310
306
  try {
311
- const viemPublicClient = (0, viem_1.createPublicClient)({
312
- chain: network_1.NETWORK_ID_TO_VIEM_CHAIN[networkId],
313
- transport: (0, viem_1.http)(),
314
- });
315
307
  let amountIn;
316
308
  let amountOutMin;
317
309
  let amountOut;
318
310
  let amountInMax;
319
311
  if (swapType === "EXACT_IN") {
320
312
  amountIn = (0, viem_1.parseEther)(swapParams.amountIn);
321
- const quoteResult = await viemPublicClient.simulateContract({
313
+ const quoteResult = await walletProvider.getPublicClient().simulateContract({
322
314
  address: constants_1.QuoterAddress[chainId],
323
315
  abi: constants_1.QUOTER_ABI,
324
316
  functionName: "quoteExactInput",
@@ -351,7 +343,7 @@ class FlaunchActionProvider extends actionProvider_1.ActionProvider {
351
343
  else {
352
344
  // EXACT_OUT
353
345
  amountOut = (0, viem_1.parseEther)(swapParams.amountOut);
354
- const quoteResult = await viemPublicClient.simulateContract({
346
+ const quoteResult = await walletProvider.getPublicClient().simulateContract({
355
347
  address: constants_1.QuoterAddress[chainId],
356
348
  abi: constants_1.QUOTER_ABI,
357
349
  functionName: "quoteExactOutput",
@@ -116,6 +116,11 @@ describe("FlaunchActionProvider", () => {
116
116
  return undefined;
117
117
  }),
118
118
  signTypedData: jest.fn().mockResolvedValue("0xsignature"),
119
+ getPublicClient: jest.fn().mockReturnValue({
120
+ simulateContract: jest.fn().mockResolvedValue({
121
+ result: [BigInt(1000000000000000000)],
122
+ }),
123
+ }),
119
124
  };
120
125
  });
121
126
  describe("network support", () => {
@@ -4,25 +4,13 @@ import { Network } from "../../network";
4
4
  import { GetTruthMarketsSchema, GetTruthMarketDetailsSchema } from "./schemas";
5
5
  import { EvmWalletProvider } from "../../wallet-providers";
6
6
  /**
7
- * Configuration options for the TrueMarketsActionProvider.
8
- */
9
- export interface TrueMarketsActionProviderConfig {
10
- /**
11
- * RPC URL for creating the Viem public client
12
- */
13
- RPC_URL?: string;
14
- }
15
- /**
16
- * TrueMarketsActionProvider provides actions to interact with TrueMarkets contracts.
7
+ * Action provider for TrueMarkets interactions.
17
8
  */
18
9
  export declare class TrueMarketsActionProvider extends ActionProvider<EvmWalletProvider> {
19
- #private;
20
10
  /**
21
- * Constructor for the TrueMarketsActionProvider.
22
- *
23
- * @param config - The configuration options for the TrueMarketsActionProvider.
11
+ * Creates a new TrueMarkets action provider.
24
12
  */
25
- constructor(config?: TrueMarketsActionProviderConfig);
13
+ constructor();
26
14
  /**
27
15
  * Gets active markets from the TruthMarketManager contract.
28
16
  *
@@ -48,4 +36,4 @@ export declare class TrueMarketsActionProvider extends ActionProvider<EvmWalletP
48
36
  */
49
37
  supportsNetwork: (network: Network) => boolean;
50
38
  }
51
- export declare const truemarketsActionProvider: (config?: TrueMarketsActionProviderConfig) => TrueMarketsActionProvider;
39
+ export declare const truemarketsActionProvider: () => TrueMarketsActionProvider;
@@ -8,18 +8,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
12
- if (kind === "m") throw new TypeError("Private method is not writable");
13
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
14
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
- };
17
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
18
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
19
- 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");
20
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
21
- };
22
- var _TrueMarketsActionProvider_publicClient;
23
11
  Object.defineProperty(exports, "__esModule", { value: true });
24
12
  exports.truemarketsActionProvider = exports.TrueMarketsActionProvider = void 0;
25
13
  const zod_1 = require("zod");
@@ -30,19 +18,15 @@ const constants_1 = require("./constants");
30
18
  const constants_2 = require("../erc20/constants");
31
19
  const wallet_providers_1 = require("../../wallet-providers");
32
20
  const viem_1 = require("viem");
33
- const chains_1 = require("viem/chains");
34
21
  /**
35
- * TrueMarketsActionProvider provides actions to interact with TrueMarkets contracts.
22
+ * Action provider for TrueMarkets interactions.
36
23
  */
37
24
  class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
38
25
  /**
39
- * Constructor for the TrueMarketsActionProvider.
40
- *
41
- * @param config - The configuration options for the TrueMarketsActionProvider.
26
+ * Creates a new TrueMarkets action provider.
42
27
  */
43
- constructor(config) {
28
+ constructor() {
44
29
  super("truemarkets", []);
45
- _TrueMarketsActionProvider_publicClient.set(this, void 0);
46
30
  /**
47
31
  * Checks if the TrueMarkets action provider supports the given network.
48
32
  * Currently only supports Base mainnet.
@@ -51,10 +35,6 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
51
35
  * @returns True if the TrueMarkets action provider supports the network, false otherwise.
52
36
  */
53
37
  this.supportsNetwork = (network) => network.networkId === "base-mainnet";
54
- __classPrivateFieldSet(this, _TrueMarketsActionProvider_publicClient, (0, viem_1.createPublicClient)({
55
- chain: chains_1.base,
56
- transport: config?.RPC_URL ? (0, viem_1.http)(config.RPC_URL) : (0, viem_1.http)(),
57
- }), "f");
58
38
  }
59
39
  /**
60
40
  * Gets active markets from the TruthMarketManager contract.
@@ -105,7 +85,7 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
105
85
  functionName: "getActiveMarketAddress",
106
86
  args: [BigInt(index)],
107
87
  }));
108
- const marketAddresses = await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").multicall({
88
+ const marketAddresses = await walletProvider.getPublicClient().multicall({
109
89
  contracts: addressCalls,
110
90
  });
111
91
  // Filter out errors and extract results
@@ -124,7 +104,7 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
124
104
  abi: constants_1.TruthMarketABI,
125
105
  functionName: "marketQuestion",
126
106
  }));
127
- const marketQuestionsResult = await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").multicall({
107
+ const marketQuestionsResult = await walletProvider.getPublicClient().multicall({
128
108
  contracts: questionCalls,
129
109
  });
130
110
  // Create market objects mapping indices to addresses and questions
@@ -175,7 +155,7 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
175
155
  });
176
156
  }
177
157
  try {
178
- marketAddress = (await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").readContract({
158
+ marketAddress = (await walletProvider.getPublicClient().readContract({
179
159
  address: constants_1.TruthMarketManager_ADDRESS,
180
160
  abi: constants_1.TruthMarketManagerABI,
181
161
  functionName: "getActiveMarketAddress",
@@ -227,7 +207,7 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
227
207
  functionName: "winningPosition",
228
208
  },
229
209
  ];
230
- const basicInfoResults = await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").multicall({
210
+ const basicInfoResults = await walletProvider.getPublicClient().multicall({
231
211
  contracts: basicInfoCalls,
232
212
  });
233
213
  // Extract results, handling potential errors
@@ -279,7 +259,7 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
279
259
  functionName: "slot0",
280
260
  },
281
261
  ];
282
- const poolInfoResults = await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").multicall({
262
+ const poolInfoResults = await walletProvider.getPublicClient().multicall({
283
263
  contracts: poolInfoCalls,
284
264
  });
285
265
  if (poolInfoResults.some(result => result.status === "failure")) {
@@ -331,7 +311,7 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
331
311
  args: [noPool],
332
312
  },
333
313
  ];
334
- const balanceResults = await __classPrivateFieldGet(this, _TrueMarketsActionProvider_publicClient, "f").multicall({
314
+ const balanceResults = await walletProvider.getPublicClient().multicall({
335
315
  contracts: balanceCalls,
336
316
  });
337
317
  if (balanceResults.some(result => result.status === "failure")) {
@@ -430,7 +410,6 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
430
410
  }
431
411
  }
432
412
  exports.TrueMarketsActionProvider = TrueMarketsActionProvider;
433
- _TrueMarketsActionProvider_publicClient = new WeakMap();
434
413
  __decorate([
435
414
  (0, actionDecorator_1.CreateAction)({
436
415
  name: "get_prediction_markets",
@@ -465,5 +444,5 @@ __decorate([
465
444
  __metadata("design:paramtypes", [wallet_providers_1.EvmWalletProvider, void 0]),
466
445
  __metadata("design:returntype", Promise)
467
446
  ], TrueMarketsActionProvider.prototype, "getPredictionMarketDetails", null);
468
- const truemarketsActionProvider = (config) => new TrueMarketsActionProvider(config);
447
+ const truemarketsActionProvider = () => new TrueMarketsActionProvider();
469
448
  exports.truemarketsActionProvider = truemarketsActionProvider;