@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.
- package/README.md +195 -23
- package/dist/action-providers/across/acrossActionProvider.js +3 -3
- 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.d.ts +3 -12
- package/dist/action-providers/cdp/cdpApiActionProvider.js +2 -81
- package/dist/action-providers/cdp/cdpApiActionProvider.test.js +0 -125
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.d.ts +18 -3
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.js +224 -23
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.js +280 -0
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.d.ts +17 -2
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.js +224 -18
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.js +267 -1
- package/dist/action-providers/cdp/schemas.d.ts +12 -12
- package/dist/action-providers/cdp/schemas.js +17 -5
- package/dist/action-providers/cdp/swapUtils.d.ts +23 -0
- package/dist/action-providers/cdp/swapUtils.js +106 -0
- package/dist/action-providers/clanker/clankerActionProvider.d.ts +43 -0
- package/dist/action-providers/clanker/clankerActionProvider.js +130 -0
- package/dist/action-providers/clanker/clankerActionProvider.test.d.ts +4 -0
- package/dist/action-providers/clanker/clankerActionProvider.test.js +119 -0
- package/dist/action-providers/clanker/index.d.ts +2 -0
- package/dist/action-providers/clanker/index.js +18 -0
- package/dist/action-providers/clanker/schemas.d.ts +56 -0
- package/dist/action-providers/clanker/schemas.js +47 -0
- package/dist/action-providers/clanker/utils.d.ts +9 -0
- package/dist/action-providers/clanker/utils.js +23 -0
- package/dist/action-providers/compound/constants.d.ts +1 -1
- package/dist/action-providers/compound/constants.js +2 -2
- package/dist/action-providers/erc20/constants.d.ts +35 -135
- package/dist/action-providers/erc20/constants.js +37 -189
- package/dist/action-providers/erc20/erc20ActionProvider.d.ts +9 -1
- package/dist/action-providers/erc20/erc20ActionProvider.js +87 -35
- package/dist/action-providers/erc20/erc20ActionProvider.test.js +115 -52
- package/dist/action-providers/erc20/schemas.d.ts +25 -12
- package/dist/action-providers/erc20/schemas.js +34 -6
- package/dist/action-providers/erc20/utils.d.ts +19 -0
- package/dist/action-providers/erc20/utils.js +54 -0
- 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 +42 -21
- package/dist/action-providers/flaunch/constants.js +113 -38
- package/dist/action-providers/flaunch/flaunchActionProvider.d.ts +4 -43
- package/dist/action-providers/flaunch/flaunchActionProvider.js +133 -209
- package/dist/action-providers/flaunch/flaunchActionProvider.test.js +113 -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 -0
- package/dist/action-providers/index.js +4 -0
- package/dist/action-providers/jupiter/schemas.d.ts +1 -1
- package/dist/action-providers/moonwell/schemas.d.ts +2 -2
- package/dist/action-providers/morpho/morphoActionProvider.js +5 -5
- package/dist/action-providers/morpho/schemas.d.ts +2 -2
- package/dist/action-providers/pyth/pythActionProvider.d.ts +2 -2
- package/dist/action-providers/pyth/pythActionProvider.js +83 -26
- package/dist/action-providers/pyth/pythActionProvider.test.js +179 -23
- package/dist/action-providers/pyth/schemas.d.ts +6 -0
- package/dist/action-providers/pyth/schemas.js +9 -1
- package/dist/action-providers/superfluid/constants.d.ts +814 -0
- package/dist/action-providers/superfluid/constants.js +2826 -0
- package/dist/action-providers/superfluid/graphQueries/endpoints.d.ts +2 -0
- package/dist/action-providers/superfluid/graphQueries/endpoints.js +5 -0
- package/dist/action-providers/superfluid/graphQueries/queries.d.ts +1 -0
- package/dist/action-providers/superfluid/graphQueries/queries.js +35 -0
- package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.d.ts +8 -0
- package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.js +24 -0
- package/dist/action-providers/superfluid/graphQueries/types.d.ts +27 -0
- package/dist/action-providers/superfluid/graphQueries/types.js +2 -0
- package/dist/action-providers/superfluid/index.d.ts +7 -0
- package/dist/action-providers/superfluid/index.js +23 -0
- package/dist/action-providers/superfluid/schemas.d.ts +86 -0
- package/dist/action-providers/superfluid/schemas.js +103 -0
- package/dist/action-providers/superfluid/superfluidActionProvider.d.ts +20 -0
- package/dist/action-providers/superfluid/superfluidActionProvider.js +36 -0
- package/dist/action-providers/superfluid/superfluidPoolActionProvider.d.ts +46 -0
- package/dist/action-providers/superfluid/superfluidPoolActionProvider.js +143 -0
- package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.d.ts +1 -0
- package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.js +92 -0
- package/dist/action-providers/superfluid/superfluidQueryActionProvider.d.ts +27 -0
- package/dist/action-providers/superfluid/superfluidQueryActionProvider.js +71 -0
- package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.d.ts +1 -0
- package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.js +57 -0
- package/dist/action-providers/superfluid/superfluidStreamActionProvider.d.ts +56 -0
- package/dist/action-providers/superfluid/superfluidStreamActionProvider.js +191 -0
- package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.d.ts +1 -0
- package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.js +80 -0
- package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.d.ts +30 -0
- package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.js +109 -0
- package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.d.ts +1 -0
- package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.js +75 -0
- package/dist/action-providers/superfluid/superfluidWrapperActionProvider.d.ts +32 -0
- package/dist/action-providers/superfluid/superfluidWrapperActionProvider.js +101 -0
- package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.d.ts +1 -0
- package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.js +85 -0
- package/dist/action-providers/superfluid/utils/parseLogs.d.ts +19 -0
- package/dist/action-providers/superfluid/utils/parseLogs.js +81 -0
- package/dist/action-providers/truemarkets/truemarketsActionProvider.d.ts +4 -16
- package/dist/action-providers/truemarkets/truemarketsActionProvider.js +20 -41
- package/dist/action-providers/truemarkets/truemarketsActionProvider.test.js +11 -33
- package/dist/action-providers/wallet/walletActionProvider.js +24 -10
- package/dist/action-providers/wallet/walletActionProvider.test.js +6 -2
- package/dist/action-providers/x402/schemas.d.ts +7 -0
- package/dist/action-providers/x402/schemas.js +11 -1
- package/dist/action-providers/x402/utils.d.ts +55 -0
- package/dist/action-providers/x402/utils.js +160 -0
- package/dist/action-providers/x402/x402ActionProvider.d.ts +9 -9
- package/dist/action-providers/x402/x402ActionProvider.js +158 -39
- package/dist/action-providers/x402/x402ActionProvider.test.js +116 -10
- package/dist/action-providers/zeroX/index.d.ts +1 -0
- package/dist/action-providers/zeroX/index.js +17 -0
- package/dist/action-providers/zeroX/schemas.d.ts +51 -0
- package/dist/action-providers/zeroX/schemas.js +82 -0
- package/dist/action-providers/zeroX/utils.d.ts +23 -0
- package/dist/action-providers/zeroX/utils.js +106 -0
- package/dist/action-providers/zeroX/zeroXActionProvider.d.ts +57 -0
- package/dist/action-providers/zeroX/zeroXActionProvider.js +407 -0
- package/dist/action-providers/zeroX/zeroXActionProvider.test.d.ts +1 -0
- package/dist/action-providers/zeroX/zeroXActionProvider.test.js +445 -0
- package/dist/utils.d.ts +10 -0
- package/dist/utils.js +43 -13
- package/dist/wallet-providers/cdpEvmWalletProvider.d.ts +27 -2
- package/dist/wallet-providers/cdpEvmWalletProvider.js +54 -36
- package/dist/wallet-providers/cdpEvmWalletProvider.test.js +7 -0
- package/dist/wallet-providers/cdpShared.d.ts +5 -0
- package/dist/wallet-providers/cdpSmartWalletProvider.d.ts +29 -3
- package/dist/wallet-providers/cdpSmartWalletProvider.js +66 -25
- package/dist/wallet-providers/cdpSmartWalletProvider.test.js +6 -10
- package/dist/wallet-providers/cdpSolanaWalletProvider.d.ts +1 -1
- package/dist/wallet-providers/cdpSolanaWalletProvider.js +7 -7
- package/dist/wallet-providers/cdpSolanaWalletProvider.test.js +15 -12
- package/dist/wallet-providers/evmWalletProvider.d.ts +13 -2
- package/dist/wallet-providers/evmWalletProvider.js +4 -0
- package/dist/wallet-providers/legacyCdpSmartWalletProvider.d.ts +18 -2
- package/dist/wallet-providers/legacyCdpSmartWalletProvider.js +23 -2
- package/dist/wallet-providers/legacyCdpWalletProvider.d.ts +19 -2
- package/dist/wallet-providers/legacyCdpWalletProvider.js +27 -2
- package/dist/wallet-providers/legacyCdpWalletProvider.test.js +6 -0
- package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.d.ts +17 -2
- package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.js +39 -3
- package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.test.js +1 -1
- package/dist/wallet-providers/privyEvmWalletProvider.d.ts +2 -0
- package/dist/wallet-providers/privyEvmWalletProvider.js +2 -1
- package/dist/wallet-providers/privyEvmWalletProvider.test.js +12 -1
- package/dist/wallet-providers/solanaKeypairWalletProvider.d.ts +1 -1
- package/dist/wallet-providers/solanaKeypairWalletProvider.js +3 -4
- package/dist/wallet-providers/solanaKeypairWalletProvider.test.js +4 -2
- package/dist/wallet-providers/viemWalletProvider.d.ts +20 -3
- package/dist/wallet-providers/viemWalletProvider.js +33 -4
- package/dist/wallet-providers/viemWalletProvider.test.js +27 -6
- package/dist/wallet-providers/walletProvider.d.ts +1 -1
- package/dist/wallet-providers/zeroDevWalletProvider.d.ts +17 -2
- package/dist/wallet-providers/zeroDevWalletProvider.js +26 -5
- package/dist/wallet-providers/zeroDevWalletProvider.test.js +12 -2
- package/package.json +8 -4
|
@@ -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,6 +3,7 @@ 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";
|
|
@@ -18,6 +19,7 @@ export * from "./moonwell";
|
|
|
18
19
|
export * from "./morpho";
|
|
19
20
|
export * from "./opensea";
|
|
20
21
|
export * from "./spl";
|
|
22
|
+
export * from "./superfluid";
|
|
21
23
|
export * from "./truemarkets";
|
|
22
24
|
export * from "./twitter";
|
|
23
25
|
export * from "./wallet";
|
|
@@ -30,4 +32,6 @@ export * from "./vaultsfyi";
|
|
|
30
32
|
export * from "./x402";
|
|
31
33
|
export * from "./zerion";
|
|
32
34
|
export * from "./zerodev";
|
|
35
|
+
export * from "./zeroX";
|
|
33
36
|
export * from "./zora";
|
|
37
|
+
export * from "./clanker";
|
|
@@ -19,6 +19,7 @@ __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);
|
|
@@ -34,6 +35,7 @@ __exportStar(require("./moonwell"), exports);
|
|
|
34
35
|
__exportStar(require("./morpho"), exports);
|
|
35
36
|
__exportStar(require("./opensea"), exports);
|
|
36
37
|
__exportStar(require("./spl"), exports);
|
|
38
|
+
__exportStar(require("./superfluid"), exports);
|
|
37
39
|
__exportStar(require("./truemarkets"), exports);
|
|
38
40
|
__exportStar(require("./twitter"), exports);
|
|
39
41
|
__exportStar(require("./wallet"), exports);
|
|
@@ -46,4 +48,6 @@ __exportStar(require("./vaultsfyi"), exports);
|
|
|
46
48
|
__exportStar(require("./x402"), exports);
|
|
47
49
|
__exportStar(require("./zerion"), exports);
|
|
48
50
|
__exportStar(require("./zerodev"), exports);
|
|
51
|
+
__exportStar(require("./zeroX"), exports);
|
|
49
52
|
__exportStar(require("./zora"), exports);
|
|
53
|
+
__exportStar(require("./clanker"), exports);
|
|
@@ -9,9 +9,9 @@ export declare const SwapTokenSchema: z.ZodObject<{
|
|
|
9
9
|
slippageBps: z.ZodDefault<z.ZodNumber>;
|
|
10
10
|
}, "strip", z.ZodTypeAny, {
|
|
11
11
|
amount: number;
|
|
12
|
+
slippageBps: number;
|
|
12
13
|
inputMint: string;
|
|
13
14
|
outputMint: string;
|
|
14
|
-
slippageBps: number;
|
|
15
15
|
}, {
|
|
16
16
|
amount: number;
|
|
17
17
|
inputMint: string;
|
|
@@ -7,12 +7,12 @@ export declare const MintSchema: z.ZodObject<{
|
|
|
7
7
|
tokenAddress: z.ZodString;
|
|
8
8
|
mTokenAddress: z.ZodString;
|
|
9
9
|
}, "strip", z.ZodTypeAny, {
|
|
10
|
-
assets: string;
|
|
11
10
|
tokenAddress: string;
|
|
11
|
+
assets: string;
|
|
12
12
|
mTokenAddress: string;
|
|
13
13
|
}, {
|
|
14
|
-
assets: string;
|
|
15
14
|
tokenAddress: string;
|
|
15
|
+
assets: string;
|
|
16
16
|
mTokenAddress: string;
|
|
17
17
|
}>;
|
|
18
18
|
/**
|
|
@@ -13,12 +13,12 @@ exports.morphoActionProvider = exports.MorphoActionProvider = exports.SUPPORTED_
|
|
|
13
13
|
const zod_1 = require("zod");
|
|
14
14
|
const decimal_js_1 = require("decimal.js");
|
|
15
15
|
const viem_1 = require("viem");
|
|
16
|
-
const
|
|
16
|
+
const viem_2 = require("viem");
|
|
17
17
|
const actionProvider_1 = require("../actionProvider");
|
|
18
18
|
const wallet_providers_1 = require("../../wallet-providers");
|
|
19
19
|
const actionDecorator_1 = require("../actionDecorator");
|
|
20
20
|
const utils_1 = require("../../utils");
|
|
21
|
-
const
|
|
21
|
+
const constants_1 = require("./constants");
|
|
22
22
|
const schemas_1 = require("./schemas");
|
|
23
23
|
exports.SUPPORTED_NETWORKS = ["base-mainnet", "base-sepolia"];
|
|
24
24
|
/**
|
|
@@ -53,7 +53,7 @@ class MorphoActionProvider extends actionProvider_1.ActionProvider {
|
|
|
53
53
|
try {
|
|
54
54
|
const decimals = await wallet.readContract({
|
|
55
55
|
address: args.tokenAddress,
|
|
56
|
-
abi:
|
|
56
|
+
abi: viem_2.erc20Abi,
|
|
57
57
|
functionName: "decimals",
|
|
58
58
|
args: [],
|
|
59
59
|
});
|
|
@@ -63,7 +63,7 @@ class MorphoActionProvider extends actionProvider_1.ActionProvider {
|
|
|
63
63
|
return `Error approving Morpho Vault as spender: ${approvalResult}`;
|
|
64
64
|
}
|
|
65
65
|
const data = (0, viem_1.encodeFunctionData)({
|
|
66
|
-
abi:
|
|
66
|
+
abi: constants_1.METAMORPHO_ABI,
|
|
67
67
|
functionName: "deposit",
|
|
68
68
|
args: [atomicAssets, args.receiver],
|
|
69
69
|
});
|
|
@@ -91,7 +91,7 @@ class MorphoActionProvider extends actionProvider_1.ActionProvider {
|
|
|
91
91
|
}
|
|
92
92
|
try {
|
|
93
93
|
const data = (0, viem_1.encodeFunctionData)({
|
|
94
|
-
abi:
|
|
94
|
+
abi: constants_1.METAMORPHO_ABI,
|
|
95
95
|
functionName: "withdraw",
|
|
96
96
|
args: [BigInt(args.assets), args.receiver, args.receiver],
|
|
97
97
|
});
|
|
@@ -8,14 +8,14 @@ export declare const DepositSchema: z.ZodObject<{
|
|
|
8
8
|
tokenAddress: z.ZodString;
|
|
9
9
|
vaultAddress: z.ZodString;
|
|
10
10
|
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
tokenAddress: string;
|
|
11
12
|
receiver: string;
|
|
12
13
|
assets: string;
|
|
13
|
-
tokenAddress: string;
|
|
14
14
|
vaultAddress: string;
|
|
15
15
|
}, {
|
|
16
|
+
tokenAddress: string;
|
|
16
17
|
receiver: string;
|
|
17
18
|
assets: string;
|
|
18
|
-
tokenAddress: string;
|
|
19
19
|
vaultAddress: string;
|
|
20
20
|
}>;
|
|
21
21
|
/**
|
|
@@ -13,14 +13,14 @@ export declare class PythActionProvider extends ActionProvider {
|
|
|
13
13
|
* Fetch the price feed ID for a given token symbol from Pyth.
|
|
14
14
|
*
|
|
15
15
|
* @param args - The arguments for the action.
|
|
16
|
-
* @returns The price feed ID as
|
|
16
|
+
* @returns The price feed ID as stringified JSON.
|
|
17
17
|
*/
|
|
18
18
|
fetchPriceFeed(args: z.infer<typeof PythFetchPriceFeedIDSchema>): Promise<string>;
|
|
19
19
|
/**
|
|
20
20
|
* Fetches the price from Pyth given a Pyth price feed ID.
|
|
21
21
|
*
|
|
22
22
|
* @param args - The arguments for the action.
|
|
23
|
-
* @returns The price as
|
|
23
|
+
* @returns The price as stringified JSON.
|
|
24
24
|
*/
|
|
25
25
|
fetchPrice(args: z.infer<typeof PythFetchPriceSchema>): Promise<string>;
|
|
26
26
|
/**
|
|
@@ -34,63 +34,120 @@ class PythActionProvider extends actionProvider_1.ActionProvider {
|
|
|
34
34
|
* Fetch the price feed ID for a given token symbol from Pyth.
|
|
35
35
|
*
|
|
36
36
|
* @param args - The arguments for the action.
|
|
37
|
-
* @returns The price feed ID as
|
|
37
|
+
* @returns The price feed ID as stringified JSON.
|
|
38
38
|
*/
|
|
39
39
|
async fetchPriceFeed(args) {
|
|
40
|
-
const url = `https://hermes.pyth.network/v2/price_feeds?query=${args.tokenSymbol}&asset_type
|
|
40
|
+
const url = `https://hermes.pyth.network/v2/price_feeds?query=${args.tokenSymbol}&asset_type=${args.assetType}`;
|
|
41
41
|
const response = await fetch(url);
|
|
42
42
|
if (!response.ok) {
|
|
43
|
-
|
|
43
|
+
return JSON.stringify({
|
|
44
|
+
success: false,
|
|
45
|
+
error: `HTTP error! status: ${response.status}`,
|
|
46
|
+
});
|
|
44
47
|
}
|
|
45
48
|
const data = await response.json();
|
|
46
49
|
if (data.length === 0) {
|
|
47
|
-
|
|
50
|
+
return JSON.stringify({
|
|
51
|
+
success: false,
|
|
52
|
+
error: `No price feed found for ${args.tokenSymbol}`,
|
|
53
|
+
});
|
|
48
54
|
}
|
|
49
55
|
const filteredData = data.filter(
|
|
50
56
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
51
|
-
(item) => item.attributes.base.toLowerCase() === args.tokenSymbol.toLowerCase()
|
|
57
|
+
(item) => item.attributes.base.toLowerCase() === args.tokenSymbol.toLowerCase() &&
|
|
58
|
+
item.attributes.quote_currency.toLowerCase() === args.quoteCurrency.toLowerCase());
|
|
52
59
|
if (filteredData.length === 0) {
|
|
53
|
-
|
|
60
|
+
return JSON.stringify({
|
|
61
|
+
success: false,
|
|
62
|
+
error: `No price feed found for ${args.tokenSymbol}/${args.quoteCurrency}`,
|
|
63
|
+
});
|
|
54
64
|
}
|
|
55
|
-
|
|
65
|
+
// For equities, select the regular feed over special market hours feeds
|
|
66
|
+
let selectedFeed = filteredData[0];
|
|
67
|
+
if (args.assetType === "equity") {
|
|
68
|
+
// Look for regular market feed (no PRE, POST, ON, EXT suffixes)
|
|
69
|
+
const regularMarketFeed = filteredData.find(
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
71
|
+
(item) => !item.attributes.symbol.includes(".PRE") &&
|
|
72
|
+
!item.attributes.symbol.includes(".POST") &&
|
|
73
|
+
!item.attributes.symbol.includes(".ON") &&
|
|
74
|
+
!item.attributes.symbol.includes(".EXT"));
|
|
75
|
+
if (regularMarketFeed) {
|
|
76
|
+
selectedFeed = regularMarketFeed;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return JSON.stringify({
|
|
80
|
+
success: true,
|
|
81
|
+
priceFeedID: selectedFeed.id,
|
|
82
|
+
tokenSymbol: args.tokenSymbol,
|
|
83
|
+
quoteCurrency: args.quoteCurrency,
|
|
84
|
+
feedType: selectedFeed.attributes.display_symbol,
|
|
85
|
+
});
|
|
56
86
|
}
|
|
57
87
|
/**
|
|
58
88
|
* Fetches the price from Pyth given a Pyth price feed ID.
|
|
59
89
|
*
|
|
60
90
|
* @param args - The arguments for the action.
|
|
61
|
-
* @returns The price as
|
|
91
|
+
* @returns The price as stringified JSON.
|
|
62
92
|
*/
|
|
63
93
|
async fetchPrice(args) {
|
|
64
94
|
const url = `https://hermes.pyth.network/v2/updates/price/latest?ids[]=${args.priceFeedID}`;
|
|
65
95
|
const response = await fetch(url);
|
|
66
96
|
if (!response.ok) {
|
|
67
|
-
|
|
97
|
+
return JSON.stringify({
|
|
98
|
+
success: false,
|
|
99
|
+
error: `HTTP error! status: ${response.status}`,
|
|
100
|
+
});
|
|
68
101
|
}
|
|
69
102
|
const data = await response.json();
|
|
70
103
|
const parsedData = data.parsed;
|
|
71
104
|
if (parsedData.length === 0) {
|
|
72
|
-
|
|
105
|
+
return JSON.stringify({
|
|
106
|
+
success: false,
|
|
107
|
+
error: `No price data found for ${args.priceFeedID}`,
|
|
108
|
+
});
|
|
73
109
|
}
|
|
110
|
+
// Helper function to format price
|
|
111
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
112
|
+
const formatPrice = (priceInfo) => {
|
|
113
|
+
const price = BigInt(priceInfo.price);
|
|
114
|
+
const exponent = priceInfo.expo;
|
|
115
|
+
if (exponent < 0) {
|
|
116
|
+
const adjustedPrice = price * BigInt(100);
|
|
117
|
+
const divisor = BigInt(10) ** BigInt(-exponent);
|
|
118
|
+
const scaledPrice = adjustedPrice / BigInt(divisor);
|
|
119
|
+
const priceStr = scaledPrice.toString();
|
|
120
|
+
const formattedPrice = `${priceStr.slice(0, -2)}.${priceStr.slice(-2)}`;
|
|
121
|
+
return formattedPrice.startsWith(".") ? `0${formattedPrice}` : formattedPrice;
|
|
122
|
+
}
|
|
123
|
+
const scaledPrice = price / BigInt(10) ** BigInt(exponent);
|
|
124
|
+
return scaledPrice.toString();
|
|
125
|
+
};
|
|
74
126
|
const priceInfo = parsedData[0].price;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const scaledPrice = adjustedPrice / BigInt(divisor);
|
|
81
|
-
const priceStr = scaledPrice.toString();
|
|
82
|
-
const formattedPrice = `${priceStr.slice(0, -2)}.${priceStr.slice(-2)}`;
|
|
83
|
-
return formattedPrice.startsWith(".") ? `0${formattedPrice}` : formattedPrice;
|
|
84
|
-
}
|
|
85
|
-
const scaledPrice = price / BigInt(10) ** BigInt(exponent);
|
|
86
|
-
return scaledPrice.toString();
|
|
127
|
+
return JSON.stringify({
|
|
128
|
+
success: true,
|
|
129
|
+
priceFeedID: args.priceFeedID,
|
|
130
|
+
price: formatPrice(priceInfo),
|
|
131
|
+
});
|
|
87
132
|
}
|
|
88
133
|
}
|
|
89
134
|
exports.PythActionProvider = PythActionProvider;
|
|
90
135
|
__decorate([
|
|
91
136
|
(0, actionDecorator_1.CreateAction)({
|
|
92
137
|
name: "fetch_price_feed",
|
|
93
|
-
description:
|
|
138
|
+
description: `Fetch the price feed ID for a given token symbol from Pyth.
|
|
139
|
+
|
|
140
|
+
Inputs:
|
|
141
|
+
- tokenSymbol: The asset ticker/symbol to fetch the price feed ID for (e.g. BTC, ETH, COIN, XAU, EUR, etc.)
|
|
142
|
+
- quoteCurrency: The quote currency to filter by (defaults to USD)
|
|
143
|
+
- assetType: The asset type to search for (crypto, equity, fx, metal) - defaults to crypto
|
|
144
|
+
|
|
145
|
+
Examples:
|
|
146
|
+
- Crypto: BTC, ETH, SOL
|
|
147
|
+
- Equities: COIN, AAPL, TSLA
|
|
148
|
+
- FX: EUR, GBP, JPY
|
|
149
|
+
- Metals: XAU (Gold), XAG (Silver), XPT (Platinum), XPD (Palladium)
|
|
150
|
+
`,
|
|
94
151
|
schema: schemas_1.PythFetchPriceFeedIDSchema,
|
|
95
152
|
}),
|
|
96
153
|
__metadata("design:type", Function),
|
|
@@ -100,16 +157,16 @@ __decorate([
|
|
|
100
157
|
__decorate([
|
|
101
158
|
(0, actionDecorator_1.CreateAction)({
|
|
102
159
|
name: "fetch_price",
|
|
103
|
-
description: `Fetch the price of a
|
|
160
|
+
description: `Fetch the price of a price feed from Pyth.
|
|
104
161
|
|
|
105
162
|
Inputs:
|
|
106
|
-
-
|
|
163
|
+
- priceFeedID: Price feed ID (string)
|
|
107
164
|
|
|
108
165
|
Important notes:
|
|
109
166
|
- Do not assume that a random ID is a Pyth price feed ID. If you are confused, ask a clarifying question.
|
|
110
167
|
- This action only fetches price inputs from Pyth price feeds. No other source.
|
|
111
168
|
- If you are asked to fetch the price from Pyth for a ticker symbol such as BTC, you must first use the pyth_fetch_price_feed_id
|
|
112
|
-
action to retrieve the price feed ID before invoking the
|
|
169
|
+
action to retrieve the price feed ID before invoking the pyth_fetch_price action
|
|
113
170
|
`,
|
|
114
171
|
schema: schemas_1.PythFetchPriceSchema,
|
|
115
172
|
}),
|