@coinbase/agentkit 0.0.0-nightly-20250918210440 → 0.0.0-nightly-20251001210424
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.
- package/README.md +170 -39
- package/dist/action-providers/across/schemas.d.ts +1 -1
- package/dist/action-providers/baseAccount/baseAccountActionProvider.d.ts +46 -0
- package/dist/action-providers/baseAccount/baseAccountActionProvider.js +404 -0
- package/dist/action-providers/baseAccount/baseAccountActionProvider.test.d.ts +1 -0
- package/dist/action-providers/baseAccount/baseAccountActionProvider.test.js +325 -0
- package/dist/action-providers/baseAccount/index.d.ts +2 -0
- package/dist/action-providers/baseAccount/index.js +18 -0
- package/dist/action-providers/baseAccount/schemas.d.ts +43 -0
- package/dist/action-providers/baseAccount/schemas.js +62 -0
- package/dist/action-providers/baseAccount/types.d.ts +17 -0
- package/dist/action-providers/baseAccount/types.js +2 -0
- package/dist/action-providers/baseAccount/utils.d.ts +14 -0
- package/dist/action-providers/baseAccount/utils.js +57 -0
- package/dist/action-providers/cdp/cdpApiActionProvider.js +7 -30
- package/dist/action-providers/cdp/cdpApiActionProvider.test.js +2 -8
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.js +2 -1
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.js +3 -1
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.js +2 -1
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.js +3 -1
- package/dist/action-providers/cdp/faucetUtils.d.ts +38 -0
- package/dist/action-providers/cdp/faucetUtils.js +81 -0
- package/dist/action-providers/cdp/swapUtils.d.ts +0 -9
- package/dist/action-providers/cdp/swapUtils.js +0 -36
- package/dist/action-providers/clanker/schemas.d.ts +6 -6
- package/dist/action-providers/enso/constants.d.ts +4 -0
- package/dist/action-providers/enso/constants.js +10 -0
- package/dist/action-providers/enso/ensoActionProvider.d.ts +34 -0
- package/dist/action-providers/enso/ensoActionProvider.js +125 -0
- package/dist/action-providers/enso/ensoActionProvider.test.d.ts +1 -0
- package/dist/action-providers/enso/ensoActionProvider.test.js +141 -0
- package/dist/action-providers/enso/index.d.ts +1 -0
- package/dist/action-providers/enso/index.js +17 -0
- package/dist/action-providers/enso/schemas.d.ts +23 -0
- package/dist/action-providers/enso/schemas.js +22 -0
- package/dist/action-providers/erc20/erc20ActionProvider.d.ts +17 -1
- package/dist/action-providers/erc20/erc20ActionProvider.js +102 -0
- package/dist/action-providers/erc20/erc20ActionProvider.test.js +201 -0
- package/dist/action-providers/erc20/schemas.d.ts +29 -0
- package/dist/action-providers/erc20/schemas.js +34 -1
- package/dist/action-providers/flaunch/client_utils.d.ts +25 -0
- package/dist/action-providers/flaunch/client_utils.js +62 -0
- package/dist/action-providers/flaunch/constants.d.ts +41 -20
- package/dist/action-providers/flaunch/constants.js +111 -36
- package/dist/action-providers/flaunch/flaunchActionProvider.d.ts +4 -43
- package/dist/action-providers/flaunch/flaunchActionProvider.js +132 -200
- package/dist/action-providers/flaunch/flaunchActionProvider.test.js +108 -13
- package/dist/action-providers/flaunch/metadata_utils.d.ts +12 -0
- package/dist/action-providers/flaunch/metadata_utils.js +216 -0
- package/dist/action-providers/flaunch/schemas.d.ts +39 -3
- package/dist/action-providers/flaunch/schemas.js +62 -10
- package/dist/action-providers/flaunch/{utils.d.ts → swap_utils.d.ts} +17 -19
- package/dist/action-providers/flaunch/{utils.js → swap_utils.js} +137 -172
- package/dist/action-providers/index.d.ts +4 -1
- package/dist/action-providers/index.js +4 -1
- package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.js +5 -4
- package/dist/action-providers/superfluid/utils/parseLogs.d.ts +2 -1
- package/dist/action-providers/superfluid/utils/parseLogs.js +6 -3
- package/dist/action-providers/wallet/walletActionProvider.js +3 -0
- package/dist/action-providers/x402/utils.d.ts +4 -4
- package/dist/action-providers/x402/utils.js +42 -5
- package/dist/action-providers/x402/x402ActionProvider.d.ts +6 -6
- package/dist/action-providers/x402/x402ActionProvider.js +23 -8
- package/dist/action-providers/x402/x402ActionProvider.test.js +50 -6
- package/dist/action-providers/yelay/constants.d.ts +64 -0
- package/dist/action-providers/yelay/constants.js +137 -0
- package/dist/action-providers/yelay/index.d.ts +2 -0
- package/dist/action-providers/yelay/index.js +18 -0
- package/dist/action-providers/yelay/schemas.d.ts +47 -0
- package/dist/action-providers/yelay/schemas.js +59 -0
- package/dist/action-providers/yelay/types.d.ts +24 -0
- package/dist/action-providers/yelay/types.js +2 -0
- package/dist/action-providers/yelay/yelayActionProvider.d.ts +70 -0
- package/dist/action-providers/yelay/yelayActionProvider.js +329 -0
- package/dist/action-providers/yelay/yelayActionProvider.test.d.ts +1 -0
- package/dist/action-providers/yelay/yelayActionProvider.test.js +302 -0
- package/dist/utils.d.ts +10 -0
- package/dist/utils.js +43 -13
- package/dist/wallet-providers/cdpEvmWalletProvider.js +5 -21
- package/dist/wallet-providers/cdpSmartWalletProvider.js +10 -5
- package/dist/wallet-providers/cdpSmartWalletProvider.test.js +0 -8
- package/dist/wallet-providers/cdpSolanaWalletProvider.d.ts +14 -0
- package/dist/wallet-providers/cdpSolanaWalletProvider.js +39 -3
- package/dist/wallet-providers/cdpSolanaWalletProvider.test.js +16 -0
- package/dist/wallet-providers/privySvmWalletProvider.d.ts +14 -0
- package/dist/wallet-providers/privySvmWalletProvider.js +17 -0
- package/dist/wallet-providers/privySvmWalletProvider.test.js +10 -0
- package/dist/wallet-providers/solanaKeypairWalletProvider.d.ts +14 -0
- package/dist/wallet-providers/solanaKeypairWalletProvider.js +17 -0
- package/dist/wallet-providers/svmWalletProvider.d.ts +34 -0
- package/dist/wallet-providers/svmWalletProvider.js +43 -0
- package/dist/wallet-providers/svmWalletProvider.test.js +10 -0
- package/dist/wallet-providers/viemWalletProvider.d.ts +1 -1
- package/dist/wallet-providers/viemWalletProvider.js +5 -1
- package/dist/wallet-providers/viemWalletProvider.test.js +12 -1
- package/package.json +4 -1
|
@@ -1,174 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getSwapAmountsFromReceipt = exports.getSwapAmountsFromLog = exports.memecoinToEthWithPermit2 = exports.ethToMemecoin = exports.getAmountWithSlippage =
|
|
3
|
+
exports.getSwapAmountsFromReceipt = exports.getSwapAmountsFromLog = exports.memecoinToEthWithPermit2 = exports.ethToMemecoin = exports.getAmountWithSlippage = void 0;
|
|
4
|
+
exports.buyFlaunchCoin = buyFlaunchCoin;
|
|
4
5
|
const viem_1 = require("viem");
|
|
5
6
|
const constants_1 = require("./constants");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
*
|
|
9
|
-
* @param params - Configuration and base64 image data
|
|
10
|
-
* @param params.pinataConfig - Pinata configuration including JWT
|
|
11
|
-
* @param params.base64Image - Base64 encoded image data
|
|
12
|
-
* @param params.name - Optional name for the uploaded file
|
|
13
|
-
* @param params.metadata - Optional metadata key-value pairs
|
|
14
|
-
* @returns Upload response with CID and other details
|
|
15
|
-
*/
|
|
16
|
-
const uploadImageToIPFS = async (params) => {
|
|
17
|
-
try {
|
|
18
|
-
const formData = new FormData();
|
|
19
|
-
// Convert base64 to Blob and then to File
|
|
20
|
-
// Remove data URL prefix if present (e.g., "data:image/jpeg;base64,")
|
|
21
|
-
const base64Data = params.base64Image.split(",")[1] || params.base64Image;
|
|
22
|
-
const byteCharacters = atob(base64Data);
|
|
23
|
-
const byteArrays = [];
|
|
24
|
-
for (let offset = 0; offset < byteCharacters.length; offset += 1024) {
|
|
25
|
-
const slice = byteCharacters.slice(offset, offset + 1024);
|
|
26
|
-
const byteNumbers = new Array(slice.length);
|
|
27
|
-
for (let i = 0; i < slice.length; i++) {
|
|
28
|
-
byteNumbers[i] = slice.charCodeAt(i);
|
|
29
|
-
}
|
|
30
|
-
const byteArray = new Uint8Array(byteNumbers);
|
|
31
|
-
byteArrays.push(byteArray);
|
|
32
|
-
}
|
|
33
|
-
// Detect mime type from base64 string
|
|
34
|
-
let mimeType = "image/png"; // default
|
|
35
|
-
if (params.base64Image.startsWith("data:")) {
|
|
36
|
-
mimeType = params.base64Image.split(";")[0].split(":")[1];
|
|
37
|
-
}
|
|
38
|
-
const blob = new Blob(byteArrays, { type: mimeType });
|
|
39
|
-
const fileName = params.name || `image.${mimeType.split("/")[1]}`;
|
|
40
|
-
const file = new File([blob], fileName, { type: mimeType });
|
|
41
|
-
formData.append("file", file);
|
|
42
|
-
const pinataMetadata = {
|
|
43
|
-
name: params.name || null,
|
|
44
|
-
keyvalues: params.metadata || {},
|
|
45
|
-
};
|
|
46
|
-
formData.append("pinataMetadata", JSON.stringify(pinataMetadata));
|
|
47
|
-
const pinataOptions = {
|
|
48
|
-
cidVersion: 1,
|
|
49
|
-
};
|
|
50
|
-
formData.append("pinataOptions", JSON.stringify(pinataOptions));
|
|
51
|
-
const response = await fetch("https://api.pinata.cloud/pinning/pinFileToIPFS", {
|
|
52
|
-
method: "POST",
|
|
53
|
-
headers: {
|
|
54
|
-
Authorization: `Bearer ${params.pinataConfig.jwt}`,
|
|
55
|
-
},
|
|
56
|
-
body: formData,
|
|
57
|
-
});
|
|
58
|
-
if (!response.ok) {
|
|
59
|
-
const error = await response.json();
|
|
60
|
-
throw new Error(`Failed to upload image to IPFS: ${error.message || response.statusText}`);
|
|
61
|
-
}
|
|
62
|
-
const data = await response.json();
|
|
63
|
-
return {
|
|
64
|
-
IpfsHash: data.IpfsHash,
|
|
65
|
-
PinSize: data.PinSize,
|
|
66
|
-
Timestamp: data.Timestamp,
|
|
67
|
-
isDuplicate: data.isDuplicate || false,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
if (error instanceof Error) {
|
|
72
|
-
throw new Error(`Failed to upload image to IPFS: ${error.message}`);
|
|
73
|
-
}
|
|
74
|
-
throw error;
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
/**
|
|
78
|
-
* Uploads JSON data to IPFS using Pinata
|
|
79
|
-
*
|
|
80
|
-
* @param params - Configuration and JSON data
|
|
81
|
-
* @param params.pinataConfig - Pinata configuration including JWT
|
|
82
|
-
* @param params.json - JSON data to upload
|
|
83
|
-
* @param params.name - Optional name for the uploaded file
|
|
84
|
-
* @param params.metadata - Optional metadata key-value pairs
|
|
85
|
-
* @returns Upload response with CID and other details
|
|
86
|
-
*/
|
|
87
|
-
const uploadJsonToIPFS = async (params) => {
|
|
88
|
-
try {
|
|
89
|
-
const requestBody = {
|
|
90
|
-
pinataOptions: {
|
|
91
|
-
cidVersion: 1,
|
|
92
|
-
},
|
|
93
|
-
pinataMetadata: {
|
|
94
|
-
name: params.name || null,
|
|
95
|
-
keyvalues: params.metadata || {},
|
|
96
|
-
},
|
|
97
|
-
pinataContent: params.json,
|
|
98
|
-
};
|
|
99
|
-
const response = await fetch("https://api.pinata.cloud/pinning/pinJSONToIPFS", {
|
|
100
|
-
method: "POST",
|
|
101
|
-
headers: {
|
|
102
|
-
Authorization: `Bearer ${params.pinataConfig.jwt}`,
|
|
103
|
-
"Content-Type": "application/json",
|
|
104
|
-
},
|
|
105
|
-
body: JSON.stringify(requestBody),
|
|
106
|
-
});
|
|
107
|
-
if (!response.ok) {
|
|
108
|
-
const error = await response.json();
|
|
109
|
-
throw new Error(`Failed to upload JSON to IPFS: ${error.message || response.statusText}`);
|
|
110
|
-
}
|
|
111
|
-
const data = await response.json();
|
|
112
|
-
return {
|
|
113
|
-
IpfsHash: data.IpfsHash,
|
|
114
|
-
PinSize: data.PinSize,
|
|
115
|
-
Timestamp: data.Timestamp,
|
|
116
|
-
isDuplicate: data.isDuplicate || false,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
if (error instanceof Error) {
|
|
121
|
-
throw new Error(`Failed to upload JSON to IPFS: ${error.message}`);
|
|
122
|
-
}
|
|
123
|
-
throw error;
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
const generateTokenUriBase64Image = async (name, params) => {
|
|
127
|
-
// 1. upload image to IPFS
|
|
128
|
-
const imageRes = await uploadImageToIPFS({
|
|
129
|
-
pinataConfig: params.pinataConfig,
|
|
130
|
-
base64Image: params.metadata.base64Image,
|
|
131
|
-
});
|
|
132
|
-
// 2. upload metadata to IPFS
|
|
133
|
-
const coinMetadata = {
|
|
134
|
-
name,
|
|
135
|
-
description: params.metadata.description,
|
|
136
|
-
image: `ipfs://${imageRes.IpfsHash}`,
|
|
137
|
-
external_link: params.metadata.websiteUrl || "",
|
|
138
|
-
collaborators: [],
|
|
139
|
-
discordUrl: params.metadata.discordUrl || "",
|
|
140
|
-
twitterUrl: params.metadata.twitterUrl || "",
|
|
141
|
-
telegramUrl: params.metadata.telegramUrl || "",
|
|
142
|
-
};
|
|
143
|
-
const metadataRes = await uploadJsonToIPFS({
|
|
144
|
-
pinataConfig: params.pinataConfig,
|
|
145
|
-
json: coinMetadata,
|
|
146
|
-
});
|
|
147
|
-
return `ipfs://${metadataRes.IpfsHash}`;
|
|
148
|
-
};
|
|
149
|
-
const generateTokenUri = async (name, params) => {
|
|
150
|
-
// 1. get base64Image from imageUrl
|
|
151
|
-
const response = await fetch(params.metadata.imageUrl);
|
|
152
|
-
if (!response.ok) {
|
|
153
|
-
throw new Error(`Failed to fetch image: ${response.statusText}`);
|
|
154
|
-
}
|
|
155
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
156
|
-
const base64Image = Buffer.from(arrayBuffer).toString("base64");
|
|
157
|
-
// 2. generate token uri
|
|
158
|
-
const tokenUri = await generateTokenUriBase64Image(name, {
|
|
159
|
-
pinataConfig: params.pinataConfig,
|
|
160
|
-
metadata: {
|
|
161
|
-
base64Image,
|
|
162
|
-
description: params.metadata.description,
|
|
163
|
-
websiteUrl: params.metadata.websiteUrl,
|
|
164
|
-
discordUrl: params.metadata.discordUrl,
|
|
165
|
-
twitterUrl: params.metadata.twitterUrl,
|
|
166
|
-
telegramUrl: params.metadata.telegramUrl,
|
|
167
|
-
},
|
|
168
|
-
});
|
|
169
|
-
return tokenUri;
|
|
170
|
-
};
|
|
171
|
-
exports.generateTokenUri = generateTokenUri;
|
|
7
|
+
const network_1 = require("../../network");
|
|
8
|
+
const viem_2 = require("viem");
|
|
172
9
|
const getAmountWithSlippage = (amount, slippage, swapType) => {
|
|
173
10
|
if (amount == null) {
|
|
174
11
|
return 0n;
|
|
@@ -184,7 +21,7 @@ const ETH = viem_1.zeroAddress;
|
|
|
184
21
|
const ethToMemecoin = (params) => {
|
|
185
22
|
const flETH = constants_1.FLETHAddress[params.chainId];
|
|
186
23
|
const flETHHooks = constants_1.FLETHHooksAddress[params.chainId];
|
|
187
|
-
const flaunchHooks = constants_1.
|
|
24
|
+
const flaunchHooks = constants_1.FlaunchPositionManagerV1_1Address[params.chainId];
|
|
188
25
|
// Determine actions based on swapType
|
|
189
26
|
const v4Actions = ("0x" +
|
|
190
27
|
(params.swapType === "EXACT_IN" ? constants_1.V4Actions.SWAP_EXACT_IN : constants_1.V4Actions.SWAP_EXACT_OUT) +
|
|
@@ -314,11 +151,11 @@ const ethToMemecoin = (params) => {
|
|
|
314
151
|
};
|
|
315
152
|
exports.ethToMemecoin = ethToMemecoin;
|
|
316
153
|
// @notice Before calling the UniversalRouter the user must have:
|
|
317
|
-
//
|
|
154
|
+
// Given the Permit2 contract allowance to spend the memecoin
|
|
318
155
|
const memecoinToEthWithPermit2 = (params) => {
|
|
319
156
|
const flETH = constants_1.FLETHAddress[params.chainId];
|
|
320
157
|
const flETHHooks = constants_1.FLETHHooksAddress[params.chainId];
|
|
321
|
-
const flaunchHooks = constants_1.
|
|
158
|
+
const flaunchHooks = constants_1.FlaunchPositionManagerV1_1Address[params.chainId];
|
|
322
159
|
const v4Actions = ("0x" +
|
|
323
160
|
constants_1.V4Actions.SWAP_EXACT_IN +
|
|
324
161
|
constants_1.V4Actions.SETTLE_ALL +
|
|
@@ -483,11 +320,11 @@ const getSwapAmountsFromReceipt = ({ receipt, coinAddress, chainId, }) => {
|
|
|
483
320
|
const filteredPoolSwapEvent = receipt.logs
|
|
484
321
|
.map(log => {
|
|
485
322
|
try {
|
|
486
|
-
if (log.address.toLowerCase() !== constants_1.
|
|
323
|
+
if (log.address.toLowerCase() !== constants_1.FlaunchPositionManagerV1_1Address[chainId].toLowerCase()) {
|
|
487
324
|
return null;
|
|
488
325
|
}
|
|
489
326
|
const event = (0, viem_1.decodeEventLog)({
|
|
490
|
-
abi: constants_1.
|
|
327
|
+
abi: constants_1.POSITION_MANAGERV1_1_ABI,
|
|
491
328
|
data: log.data,
|
|
492
329
|
topics: log.topics,
|
|
493
330
|
});
|
|
@@ -505,3 +342,131 @@ const getSwapAmountsFromReceipt = ({ receipt, coinAddress, chainId, }) => {
|
|
|
505
342
|
});
|
|
506
343
|
};
|
|
507
344
|
exports.getSwapAmountsFromReceipt = getSwapAmountsFromReceipt;
|
|
345
|
+
/**
|
|
346
|
+
* Buys a flaunch coin using ETH input.
|
|
347
|
+
*
|
|
348
|
+
* @param walletProvider - The wallet provider instance for blockchain interactions
|
|
349
|
+
* @param coinAddress - The address of the coin to buy
|
|
350
|
+
* @param swapType - The type of swap to perform
|
|
351
|
+
* @param swapParams - The parameters for the swap
|
|
352
|
+
* @param swapParams.amountIn - The amount of ETH to spend (for EXACT_IN)
|
|
353
|
+
* @param swapParams.amountOut - The amount of coins to buy (for EXACT_OUT)
|
|
354
|
+
* @param slippagePercent - The slippage percentage
|
|
355
|
+
* @returns A promise that resolves to a string describing the transaction result
|
|
356
|
+
*/
|
|
357
|
+
async function buyFlaunchCoin(walletProvider, coinAddress, swapType, swapParams, slippagePercent) {
|
|
358
|
+
const network = walletProvider.getNetwork();
|
|
359
|
+
const chainId = network.chainId;
|
|
360
|
+
const networkId = network.networkId;
|
|
361
|
+
if (!chainId || !networkId) {
|
|
362
|
+
throw new Error("Chain ID is not set.");
|
|
363
|
+
}
|
|
364
|
+
try {
|
|
365
|
+
let amountIn;
|
|
366
|
+
let amountOutMin;
|
|
367
|
+
let amountOut;
|
|
368
|
+
let amountInMax;
|
|
369
|
+
if (swapType === "EXACT_IN") {
|
|
370
|
+
amountIn = (0, viem_1.parseEther)(swapParams.amountIn);
|
|
371
|
+
const quoteResult = await walletProvider.getPublicClient().simulateContract({
|
|
372
|
+
address: constants_1.QuoterAddress[chainId],
|
|
373
|
+
abi: constants_1.QUOTER_ABI,
|
|
374
|
+
functionName: "quoteExactInput",
|
|
375
|
+
args: [
|
|
376
|
+
{
|
|
377
|
+
exactAmount: amountIn,
|
|
378
|
+
exactCurrency: viem_1.zeroAddress, // ETH
|
|
379
|
+
path: [
|
|
380
|
+
{
|
|
381
|
+
fee: 0,
|
|
382
|
+
tickSpacing: 60,
|
|
383
|
+
hookData: "0x",
|
|
384
|
+
hooks: constants_1.FLETHHooksAddress[chainId],
|
|
385
|
+
intermediateCurrency: constants_1.FLETHAddress[chainId],
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
fee: 0,
|
|
389
|
+
tickSpacing: 60,
|
|
390
|
+
hooks: constants_1.FlaunchPositionManagerV1_1Address[chainId],
|
|
391
|
+
hookData: "0x",
|
|
392
|
+
intermediateCurrency: coinAddress,
|
|
393
|
+
},
|
|
394
|
+
],
|
|
395
|
+
},
|
|
396
|
+
],
|
|
397
|
+
});
|
|
398
|
+
amountOutMin = (0, exports.getAmountWithSlippage)(quoteResult.result[0], // amountOut
|
|
399
|
+
(slippagePercent / 100).toFixed(18).toString(), swapType);
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
// EXACT_OUT
|
|
403
|
+
amountOut = (0, viem_1.parseEther)(swapParams.amountOut);
|
|
404
|
+
const quoteResult = await walletProvider.getPublicClient().simulateContract({
|
|
405
|
+
address: constants_1.QuoterAddress[chainId],
|
|
406
|
+
abi: constants_1.QUOTER_ABI,
|
|
407
|
+
functionName: "quoteExactOutput",
|
|
408
|
+
args: [
|
|
409
|
+
{
|
|
410
|
+
path: [
|
|
411
|
+
{
|
|
412
|
+
intermediateCurrency: viem_1.zeroAddress,
|
|
413
|
+
fee: 0,
|
|
414
|
+
tickSpacing: 60,
|
|
415
|
+
hookData: "0x",
|
|
416
|
+
hooks: constants_1.FLETHHooksAddress[chainId],
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
intermediateCurrency: constants_1.FLETHAddress[chainId],
|
|
420
|
+
fee: 0,
|
|
421
|
+
tickSpacing: 60,
|
|
422
|
+
hooks: constants_1.FlaunchPositionManagerV1_1Address[chainId],
|
|
423
|
+
hookData: "0x",
|
|
424
|
+
},
|
|
425
|
+
],
|
|
426
|
+
exactCurrency: coinAddress,
|
|
427
|
+
exactAmount: amountOut,
|
|
428
|
+
},
|
|
429
|
+
],
|
|
430
|
+
});
|
|
431
|
+
amountInMax = (0, exports.getAmountWithSlippage)(quoteResult.result[0], // amountIn
|
|
432
|
+
(slippagePercent / 100).toFixed(18).toString(), swapType);
|
|
433
|
+
}
|
|
434
|
+
const { commands, inputs } = (0, exports.ethToMemecoin)({
|
|
435
|
+
sender: walletProvider.getAddress(),
|
|
436
|
+
memecoin: coinAddress,
|
|
437
|
+
chainId: Number(chainId),
|
|
438
|
+
referrer: viem_1.zeroAddress,
|
|
439
|
+
swapType,
|
|
440
|
+
amountIn,
|
|
441
|
+
amountOutMin,
|
|
442
|
+
amountOut,
|
|
443
|
+
amountInMax,
|
|
444
|
+
});
|
|
445
|
+
const data = (0, viem_1.encodeFunctionData)({
|
|
446
|
+
abi: constants_1.UNIVERSAL_ROUTER_ABI,
|
|
447
|
+
functionName: "execute",
|
|
448
|
+
args: [commands, inputs],
|
|
449
|
+
});
|
|
450
|
+
const hash = await walletProvider.sendTransaction({
|
|
451
|
+
to: constants_1.UniversalRouterAddress[chainId],
|
|
452
|
+
data,
|
|
453
|
+
value: swapType === "EXACT_IN" ? amountIn : amountInMax,
|
|
454
|
+
});
|
|
455
|
+
const receipt = await walletProvider.waitForTransactionReceipt(hash);
|
|
456
|
+
const swapAmounts = (0, exports.getSwapAmountsFromReceipt)({
|
|
457
|
+
receipt,
|
|
458
|
+
coinAddress: coinAddress,
|
|
459
|
+
chainId: Number(chainId),
|
|
460
|
+
});
|
|
461
|
+
const coinSymbol = await walletProvider.readContract({
|
|
462
|
+
address: coinAddress,
|
|
463
|
+
abi: constants_1.ERC20_ABI,
|
|
464
|
+
functionName: "symbol",
|
|
465
|
+
});
|
|
466
|
+
return `Bought ${(0, viem_2.formatEther)(swapAmounts.coinsBought)} $${coinSymbol} for ${(0, viem_2.formatEther)(swapAmounts.ethSold)} ETH\n
|
|
467
|
+
Tx hash: [${hash}](${network_1.NETWORK_ID_TO_VIEM_CHAIN[networkId].blockExplorers?.default.url}/tx/${hash})`;
|
|
468
|
+
}
|
|
469
|
+
catch (error) {
|
|
470
|
+
return `Error buying coin: ${error}`;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
@@ -3,11 +3,14 @@ export * from "./actionProvider";
|
|
|
3
3
|
export * from "./customActionProvider";
|
|
4
4
|
export * from "./across";
|
|
5
5
|
export * from "./alchemy";
|
|
6
|
+
export * from "./baseAccount";
|
|
6
7
|
export * from "./basename";
|
|
7
8
|
export * from "./cdp-legacy";
|
|
8
9
|
export * from "./cdp";
|
|
10
|
+
export * from "./clanker";
|
|
9
11
|
export * from "./compound";
|
|
10
12
|
export * from "./defillama";
|
|
13
|
+
export * from "./enso";
|
|
11
14
|
export * from "./erc20";
|
|
12
15
|
export * from "./erc721";
|
|
13
16
|
export * from "./farcaster";
|
|
@@ -29,8 +32,8 @@ export * from "./flaunch";
|
|
|
29
32
|
export * from "./onramp";
|
|
30
33
|
export * from "./vaultsfyi";
|
|
31
34
|
export * from "./x402";
|
|
35
|
+
export * from "./yelay";
|
|
32
36
|
export * from "./zerion";
|
|
33
37
|
export * from "./zerodev";
|
|
34
38
|
export * from "./zeroX";
|
|
35
39
|
export * from "./zora";
|
|
36
|
-
export * from "./clanker";
|
|
@@ -19,11 +19,14 @@ __exportStar(require("./actionProvider"), exports);
|
|
|
19
19
|
__exportStar(require("./customActionProvider"), exports);
|
|
20
20
|
__exportStar(require("./across"), exports);
|
|
21
21
|
__exportStar(require("./alchemy"), exports);
|
|
22
|
+
__exportStar(require("./baseAccount"), exports);
|
|
22
23
|
__exportStar(require("./basename"), exports);
|
|
23
24
|
__exportStar(require("./cdp-legacy"), exports);
|
|
24
25
|
__exportStar(require("./cdp"), exports);
|
|
26
|
+
__exportStar(require("./clanker"), exports);
|
|
25
27
|
__exportStar(require("./compound"), exports);
|
|
26
28
|
__exportStar(require("./defillama"), exports);
|
|
29
|
+
__exportStar(require("./enso"), exports);
|
|
27
30
|
__exportStar(require("./erc20"), exports);
|
|
28
31
|
__exportStar(require("./erc721"), exports);
|
|
29
32
|
__exportStar(require("./farcaster"), exports);
|
|
@@ -45,8 +48,8 @@ __exportStar(require("./flaunch"), exports);
|
|
|
45
48
|
__exportStar(require("./onramp"), exports);
|
|
46
49
|
__exportStar(require("./vaultsfyi"), exports);
|
|
47
50
|
__exportStar(require("./x402"), exports);
|
|
51
|
+
__exportStar(require("./yelay"), exports);
|
|
48
52
|
__exportStar(require("./zerion"), exports);
|
|
49
53
|
__exportStar(require("./zerodev"), exports);
|
|
50
54
|
__exportStar(require("./zeroX"), exports);
|
|
51
55
|
__exportStar(require("./zora"), exports);
|
|
52
|
-
__exportStar(require("./clanker"), exports);
|
|
@@ -74,14 +74,15 @@ class SuperfluidSuperTokenCreatorActionProvider extends actionProvider_1.ActionP
|
|
|
74
74
|
`${symbol}x`,
|
|
75
75
|
],
|
|
76
76
|
});
|
|
77
|
+
const superTokenFactoryAddress = walletProvider.getNetwork().networkId === "base-sepolia"
|
|
78
|
+
? constants_1.SuperTokenFactoryAddress_Base_Sepolia
|
|
79
|
+
: constants_1.SuperTokenFactoryAddress;
|
|
77
80
|
const createSuperTokenHash = await walletProvider.sendTransaction({
|
|
78
|
-
to:
|
|
79
|
-
? constants_1.SuperTokenFactoryAddress_Base_Sepolia
|
|
80
|
-
: constants_1.SuperTokenFactoryAddress,
|
|
81
|
+
to: superTokenFactoryAddress,
|
|
81
82
|
data: createSuperTokenData,
|
|
82
83
|
});
|
|
83
84
|
const receipt = await walletProvider.waitForTransactionReceipt(createSuperTokenHash);
|
|
84
|
-
const superTokenAddress = (0, parseLogs_1.extractCreatedSuperTokenAddressAbi)(receipt);
|
|
85
|
+
const superTokenAddress = (0, parseLogs_1.extractCreatedSuperTokenAddressAbi)(receipt, superTokenFactoryAddress);
|
|
85
86
|
return `Created super token for ${args.erc20TokenAddress}. Super token address at ${superTokenAddress} Transaction hash: ${createSuperTokenHash}`;
|
|
86
87
|
}
|
|
87
88
|
catch (error) {
|
|
@@ -12,7 +12,8 @@ type TxReceipt = {
|
|
|
12
12
|
* Extracts the super token address using the contract abi
|
|
13
13
|
*
|
|
14
14
|
* @param receipt - the transaction receipt from creating the super token
|
|
15
|
+
* @param factoryAddress - the address of the factory that created the super token
|
|
15
16
|
* @returns - The contract address of the created Super Token
|
|
16
17
|
*/
|
|
17
|
-
export declare function extractCreatedSuperTokenAddressAbi(receipt: TxReceipt): `0x${string}`;
|
|
18
|
+
export declare function extractCreatedSuperTokenAddressAbi(receipt: TxReceipt, factoryAddress: `0x${string}`): `0x${string}`;
|
|
18
19
|
export {};
|
|
@@ -46,12 +46,15 @@ function pickTokenLike(args) {
|
|
|
46
46
|
* Extracts the super token address using the contract abi
|
|
47
47
|
*
|
|
48
48
|
* @param receipt - the transaction receipt from creating the super token
|
|
49
|
+
* @param factoryAddress - the address of the factory that created the super token
|
|
49
50
|
* @returns - The contract address of the created Super Token
|
|
50
51
|
*/
|
|
51
|
-
function extractCreatedSuperTokenAddressAbi(receipt) {
|
|
52
|
-
const factory =
|
|
52
|
+
function extractCreatedSuperTokenAddressAbi(receipt, factoryAddress) {
|
|
53
|
+
const factory = factoryAddress.toLowerCase();
|
|
53
54
|
if (!factory)
|
|
54
|
-
throw new Error("Missing
|
|
55
|
+
throw new Error("Missing factory address");
|
|
56
|
+
console.log("factory", factory);
|
|
57
|
+
console.log("receipt.logs", receipt.logs);
|
|
55
58
|
for (const log of receipt.logs) {
|
|
56
59
|
if (log.address.toLowerCase() !== factory)
|
|
57
60
|
continue;
|
|
@@ -69,6 +69,9 @@ class WalletActionProvider extends actionProvider_1.ActionProvider {
|
|
|
69
69
|
"Wallet Details:",
|
|
70
70
|
`- Provider: ${name}`,
|
|
71
71
|
`- Address: ${address}`,
|
|
72
|
+
...(walletProvider instanceof wallet_providers_1.CdpSmartWalletProvider
|
|
73
|
+
? [`- Owner Address: ${walletProvider.ownerAccount.address}`]
|
|
74
|
+
: []),
|
|
72
75
|
"- Network:",
|
|
73
76
|
` * Protocol Family: ${network.protocolFamily}`,
|
|
74
77
|
` * Network ID: ${network.networkId || "N/A"}`,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Network } from "../../network";
|
|
2
2
|
import { AxiosError } from "axios";
|
|
3
|
-
import {
|
|
3
|
+
import { WalletProvider } from "../../wallet-providers";
|
|
4
4
|
/**
|
|
5
5
|
* Supported network types for x402 protocol
|
|
6
6
|
*/
|
|
@@ -35,7 +35,7 @@ export declare function formatPaymentOption(option: {
|
|
|
35
35
|
asset: string;
|
|
36
36
|
maxAmountRequired: string;
|
|
37
37
|
network: string;
|
|
38
|
-
}, walletProvider:
|
|
38
|
+
}, walletProvider: WalletProvider): Promise<string>;
|
|
39
39
|
/**
|
|
40
40
|
* Checks if an asset is USDC on any supported network.
|
|
41
41
|
*
|
|
@@ -43,7 +43,7 @@ export declare function formatPaymentOption(option: {
|
|
|
43
43
|
* @param walletProvider - The wallet provider for network context
|
|
44
44
|
* @returns True if the asset is USDC, false otherwise
|
|
45
45
|
*/
|
|
46
|
-
export declare function isUsdcAsset(asset: string, walletProvider:
|
|
46
|
+
export declare function isUsdcAsset(asset: string, walletProvider: WalletProvider): boolean;
|
|
47
47
|
/**
|
|
48
48
|
* Converts whole units to atomic units for a given asset.
|
|
49
49
|
*
|
|
@@ -52,4 +52,4 @@ export declare function isUsdcAsset(asset: string, walletProvider: EvmWalletProv
|
|
|
52
52
|
* @param walletProvider - The wallet provider for token details lookup
|
|
53
53
|
* @returns The amount in atomic units as a string, or null if conversion fails
|
|
54
54
|
*/
|
|
55
|
-
export declare function convertWholeUnitsToAtomic(wholeUnits: number, asset: string, walletProvider:
|
|
55
|
+
export declare function convertWholeUnitsToAtomic(wholeUnits: number, asset: string, walletProvider: WalletProvider): Promise<string | null>;
|
|
@@ -8,6 +8,14 @@ exports.convertWholeUnitsToAtomic = convertWholeUnitsToAtomic;
|
|
|
8
8
|
const utils_1 = require("../erc20/utils");
|
|
9
9
|
const constants_1 = require("../erc20/constants");
|
|
10
10
|
const viem_1 = require("viem");
|
|
11
|
+
const wallet_providers_1 = require("../../wallet-providers");
|
|
12
|
+
/**
|
|
13
|
+
* USDC token addresses for Solana networks
|
|
14
|
+
*/
|
|
15
|
+
const SOLANA_USDC_ADDRESSES = {
|
|
16
|
+
"solana-devnet": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
|
|
17
|
+
"solana-mainnet": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
|
18
|
+
};
|
|
11
19
|
/**
|
|
12
20
|
* Converts the internal network ID to the format expected by the x402 protocol.
|
|
13
21
|
*
|
|
@@ -75,7 +83,8 @@ async function formatPaymentOption(option, walletProvider) {
|
|
|
75
83
|
// Check if this is an EVM network and we can use ERC20 helpers
|
|
76
84
|
const walletNetwork = walletProvider.getNetwork();
|
|
77
85
|
const isEvmNetwork = walletNetwork.protocolFamily === "evm";
|
|
78
|
-
|
|
86
|
+
const isSvmNetwork = walletNetwork.protocolFamily === "svm";
|
|
87
|
+
if (isEvmNetwork && walletProvider instanceof wallet_providers_1.EvmWalletProvider) {
|
|
79
88
|
const networkId = walletNetwork.networkId;
|
|
80
89
|
const tokenSymbols = constants_1.TOKEN_ADDRESSES_BY_SYMBOLS[networkId];
|
|
81
90
|
if (tokenSymbols) {
|
|
@@ -99,7 +108,17 @@ async function formatPaymentOption(option, walletProvider) {
|
|
|
99
108
|
// If we can't get token details, fall back to raw format
|
|
100
109
|
}
|
|
101
110
|
}
|
|
102
|
-
|
|
111
|
+
if (isSvmNetwork && walletProvider instanceof wallet_providers_1.SvmWalletProvider) {
|
|
112
|
+
// Check if the asset is USDC on Solana networks
|
|
113
|
+
const networkId = walletNetwork.networkId;
|
|
114
|
+
const usdcAddress = SOLANA_USDC_ADDRESSES[networkId];
|
|
115
|
+
if (usdcAddress && asset === usdcAddress) {
|
|
116
|
+
// USDC has 6 decimals on Solana
|
|
117
|
+
const formattedAmount = (0, viem_1.formatUnits)(BigInt(maxAmountRequired), 6);
|
|
118
|
+
return `${formattedAmount} USDC on ${network} network`;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Fallback to original format for non-EVM/SVM networks or when token details can't be fetched
|
|
103
122
|
return `${asset} ${maxAmountRequired} on ${network} network`;
|
|
104
123
|
}
|
|
105
124
|
/**
|
|
@@ -112,13 +131,21 @@ async function formatPaymentOption(option, walletProvider) {
|
|
|
112
131
|
function isUsdcAsset(asset, walletProvider) {
|
|
113
132
|
const walletNetwork = walletProvider.getNetwork();
|
|
114
133
|
const isEvmNetwork = walletNetwork.protocolFamily === "evm";
|
|
115
|
-
|
|
134
|
+
const isSvmNetwork = walletNetwork.protocolFamily === "svm";
|
|
135
|
+
if (isEvmNetwork && walletProvider instanceof wallet_providers_1.EvmWalletProvider) {
|
|
116
136
|
const networkId = walletNetwork.networkId;
|
|
117
137
|
const tokenSymbols = constants_1.TOKEN_ADDRESSES_BY_SYMBOLS[networkId];
|
|
118
138
|
if (tokenSymbols && tokenSymbols.USDC) {
|
|
119
139
|
return asset.toLowerCase() === tokenSymbols.USDC.toLowerCase();
|
|
120
140
|
}
|
|
121
141
|
}
|
|
142
|
+
if (isSvmNetwork && walletProvider instanceof wallet_providers_1.SvmWalletProvider) {
|
|
143
|
+
const networkId = walletNetwork.networkId;
|
|
144
|
+
const usdcAddress = SOLANA_USDC_ADDRESSES[networkId];
|
|
145
|
+
if (usdcAddress) {
|
|
146
|
+
return asset === usdcAddress;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
122
149
|
return false;
|
|
123
150
|
}
|
|
124
151
|
/**
|
|
@@ -133,7 +160,8 @@ async function convertWholeUnitsToAtomic(wholeUnits, asset, walletProvider) {
|
|
|
133
160
|
// Check if this is an EVM network and we can use ERC20 helpers
|
|
134
161
|
const walletNetwork = walletProvider.getNetwork();
|
|
135
162
|
const isEvmNetwork = walletNetwork.protocolFamily === "evm";
|
|
136
|
-
|
|
163
|
+
const isSvmNetwork = walletNetwork.protocolFamily === "svm";
|
|
164
|
+
if (isEvmNetwork && walletProvider instanceof wallet_providers_1.EvmWalletProvider) {
|
|
137
165
|
const networkId = walletNetwork.networkId;
|
|
138
166
|
const tokenSymbols = constants_1.TOKEN_ADDRESSES_BY_SYMBOLS[networkId];
|
|
139
167
|
if (tokenSymbols) {
|
|
@@ -155,6 +183,15 @@ async function convertWholeUnitsToAtomic(wholeUnits, asset, walletProvider) {
|
|
|
155
183
|
// If we can't get token details, fall back to assuming 18 decimals
|
|
156
184
|
}
|
|
157
185
|
}
|
|
158
|
-
|
|
186
|
+
if (isSvmNetwork && walletProvider instanceof wallet_providers_1.SvmWalletProvider) {
|
|
187
|
+
// Check if the asset is USDC on Solana networks
|
|
188
|
+
const networkId = walletNetwork.networkId;
|
|
189
|
+
const usdcAddress = SOLANA_USDC_ADDRESSES[networkId];
|
|
190
|
+
if (usdcAddress && asset === usdcAddress) {
|
|
191
|
+
// USDC has 6 decimals on Solana
|
|
192
|
+
return (0, viem_1.parseUnits)(wholeUnits.toString(), 6).toString();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Fallback to 18 decimals for unknown tokens or non-EVM/SVM networks
|
|
159
196
|
return (0, viem_1.parseUnits)(wholeUnits.toString(), 18).toString();
|
|
160
197
|
}
|
|
@@ -2,11 +2,11 @@ import { z } from "zod";
|
|
|
2
2
|
import { ActionProvider } from "../actionProvider";
|
|
3
3
|
import { Network } from "../../network";
|
|
4
4
|
import { HttpRequestSchema, RetryWithX402Schema, DirectX402RequestSchema, ListX402ServicesSchema } from "./schemas";
|
|
5
|
-
import {
|
|
5
|
+
import { WalletProvider } from "../../wallet-providers";
|
|
6
6
|
/**
|
|
7
7
|
* X402ActionProvider provides actions for making HTTP requests, with optional x402 payment handling.
|
|
8
8
|
*/
|
|
9
|
-
export declare class X402ActionProvider extends ActionProvider<
|
|
9
|
+
export declare class X402ActionProvider extends ActionProvider<WalletProvider> {
|
|
10
10
|
/**
|
|
11
11
|
* Creates a new instance of X402ActionProvider.
|
|
12
12
|
* Initializes the provider with x402 capabilities.
|
|
@@ -19,7 +19,7 @@ export declare class X402ActionProvider extends ActionProvider<EvmWalletProvider
|
|
|
19
19
|
* @param args - Optional filters: maxUsdcPrice
|
|
20
20
|
* @returns JSON string with the list of services (filtered by network and description)
|
|
21
21
|
*/
|
|
22
|
-
discoverX402Services(walletProvider:
|
|
22
|
+
discoverX402Services(walletProvider: WalletProvider, args: z.infer<typeof ListX402ServicesSchema>): Promise<string>;
|
|
23
23
|
/**
|
|
24
24
|
* Makes a basic HTTP request to an API endpoint.
|
|
25
25
|
*
|
|
@@ -27,7 +27,7 @@ export declare class X402ActionProvider extends ActionProvider<EvmWalletProvider
|
|
|
27
27
|
* @param args - The request parameters including URL, method, headers, and body
|
|
28
28
|
* @returns A JSON string containing the response or error details
|
|
29
29
|
*/
|
|
30
|
-
makeHttpRequest(walletProvider:
|
|
30
|
+
makeHttpRequest(walletProvider: WalletProvider, args: z.infer<typeof HttpRequestSchema>): Promise<string>;
|
|
31
31
|
/**
|
|
32
32
|
* Retries a request with x402 payment after receiving a 402 response.
|
|
33
33
|
*
|
|
@@ -35,7 +35,7 @@ export declare class X402ActionProvider extends ActionProvider<EvmWalletProvider
|
|
|
35
35
|
* @param args - The request parameters including URL, method, headers, body, and payment option
|
|
36
36
|
* @returns A JSON string containing the response with payment details or error information
|
|
37
37
|
*/
|
|
38
|
-
retryWithX402(walletProvider:
|
|
38
|
+
retryWithX402(walletProvider: WalletProvider, args: z.infer<typeof RetryWithX402Schema>): Promise<string>;
|
|
39
39
|
/**
|
|
40
40
|
* Makes an HTTP request with automatic x402 payment handling.
|
|
41
41
|
*
|
|
@@ -43,7 +43,7 @@ export declare class X402ActionProvider extends ActionProvider<EvmWalletProvider
|
|
|
43
43
|
* @param args - The request parameters including URL, method, headers, and body
|
|
44
44
|
* @returns A JSON string containing the response with optional payment details or error information
|
|
45
45
|
*/
|
|
46
|
-
makeHttpRequestWithX402(walletProvider:
|
|
46
|
+
makeHttpRequestWithX402(walletProvider: WalletProvider, args: z.infer<typeof DirectX402RequestSchema>): Promise<string>;
|
|
47
47
|
/**
|
|
48
48
|
* Checks if the action provider supports the given network.
|
|
49
49
|
*
|