four-flap-meme-sdk 1.5.55 → 1.5.56
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/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/sol/constants.d.ts +150 -0
- package/dist/sol/constants.js +188 -0
- package/dist/sol/dex/blockrazor/client.d.ts +51 -0
- package/dist/sol/dex/blockrazor/client.js +96 -0
- package/dist/sol/dex/blockrazor/constants.d.ts +34 -0
- package/dist/sol/dex/blockrazor/constants.js +55 -0
- package/dist/sol/dex/blockrazor/geyser.d.ts +128 -0
- package/dist/sol/dex/blockrazor/geyser.js +530 -0
- package/dist/sol/dex/blockrazor/index.d.ts +18 -0
- package/dist/sol/dex/blockrazor/index.js +23 -0
- package/dist/sol/dex/blockrazor/send.d.ts +135 -0
- package/dist/sol/dex/blockrazor/send.js +254 -0
- package/dist/sol/dex/blockrazor/types.d.ts +191 -0
- package/dist/sol/dex/blockrazor/types.js +5 -0
- package/dist/sol/dex/index.d.ts +10 -0
- package/dist/sol/dex/index.js +16 -0
- package/dist/sol/dex/jup/client.d.ts +33 -0
- package/dist/sol/dex/jup/client.js +110 -0
- package/dist/sol/dex/jup/index.d.ts +16 -0
- package/dist/sol/dex/jup/index.js +148 -0
- package/dist/sol/dex/jup/legacy.d.ts +623 -0
- package/dist/sol/dex/jup/legacy.js +416 -0
- package/dist/sol/dex/jup/lend.d.ts +640 -0
- package/dist/sol/dex/jup/lend.js +603 -0
- package/dist/sol/dex/jup/portfolio.d.ts +362 -0
- package/dist/sol/dex/jup/portfolio.js +367 -0
- package/dist/sol/dex/jup/price.d.ts +173 -0
- package/dist/sol/dex/jup/price.js +220 -0
- package/dist/sol/dex/jup/recurring.d.ts +437 -0
- package/dist/sol/dex/jup/recurring.js +320 -0
- package/dist/sol/dex/jup/send.d.ts +282 -0
- package/dist/sol/dex/jup/send.js +295 -0
- package/dist/sol/dex/jup/studio.d.ts +457 -0
- package/dist/sol/dex/jup/studio.js +488 -0
- package/dist/sol/dex/jup/tokens.d.ts +767 -0
- package/dist/sol/dex/jup/tokens.js +697 -0
- package/dist/sol/dex/jup/trigger.d.ts +511 -0
- package/dist/sol/dex/jup/trigger.js +397 -0
- package/dist/sol/dex/jup/types.d.ts +433 -0
- package/dist/sol/dex/jup/types.js +5 -0
- package/dist/sol/dex/jup/ultra.d.ts +646 -0
- package/dist/sol/dex/jup/ultra.js +853 -0
- package/dist/sol/dex/meteora/client.d.ts +76 -0
- package/dist/sol/dex/meteora/client.js +219 -0
- package/dist/sol/dex/meteora/damm-v1-bundle.d.ts +61 -0
- package/dist/sol/dex/meteora/damm-v1-bundle.js +112 -0
- package/dist/sol/dex/meteora/damm-v1.d.ts +118 -0
- package/dist/sol/dex/meteora/damm-v1.js +315 -0
- package/dist/sol/dex/meteora/damm-v2-bundle.d.ts +82 -0
- package/dist/sol/dex/meteora/damm-v2-bundle.js +242 -0
- package/dist/sol/dex/meteora/damm-v2.d.ts +172 -0
- package/dist/sol/dex/meteora/damm-v2.js +632 -0
- package/dist/sol/dex/meteora/dbc-bundle.d.ts +123 -0
- package/dist/sol/dex/meteora/dbc-bundle.js +304 -0
- package/dist/sol/dex/meteora/dbc.d.ts +192 -0
- package/dist/sol/dex/meteora/dbc.js +619 -0
- package/dist/sol/dex/meteora/dlmm-bundle.d.ts +39 -0
- package/dist/sol/dex/meteora/dlmm-bundle.js +189 -0
- package/dist/sol/dex/meteora/dlmm.d.ts +157 -0
- package/dist/sol/dex/meteora/dlmm.js +671 -0
- package/dist/sol/dex/meteora/index.d.ts +25 -0
- package/dist/sol/dex/meteora/index.js +65 -0
- package/dist/sol/dex/meteora/types.d.ts +787 -0
- package/dist/sol/dex/meteora/types.js +110 -0
- package/dist/sol/dex/orca/index.d.ts +10 -0
- package/dist/sol/dex/orca/index.js +16 -0
- package/dist/sol/dex/orca/orca-bundle.d.ts +41 -0
- package/dist/sol/dex/orca/orca-bundle.js +173 -0
- package/dist/sol/dex/orca/orca.d.ts +65 -0
- package/dist/sol/dex/orca/orca.js +474 -0
- package/dist/sol/dex/orca/types.d.ts +263 -0
- package/dist/sol/dex/orca/types.js +38 -0
- package/dist/sol/dex/orca/wavebreak-bundle.d.ts +34 -0
- package/dist/sol/dex/orca/wavebreak-bundle.js +198 -0
- package/dist/sol/dex/orca/wavebreak-types.d.ts +227 -0
- package/dist/sol/dex/orca/wavebreak-types.js +23 -0
- package/dist/sol/dex/orca/wavebreak.d.ts +78 -0
- package/dist/sol/dex/orca/wavebreak.js +497 -0
- package/dist/sol/dex/pump/index.d.ts +9 -0
- package/dist/sol/dex/pump/index.js +14 -0
- package/dist/sol/dex/pump/pump-bundle.d.ts +92 -0
- package/dist/sol/dex/pump/pump-bundle.js +383 -0
- package/dist/sol/dex/pump/pump-swap-bundle.d.ts +103 -0
- package/dist/sol/dex/pump/pump-swap-bundle.js +380 -0
- package/dist/sol/dex/pump/pump-swap.d.ts +46 -0
- package/dist/sol/dex/pump/pump-swap.js +199 -0
- package/dist/sol/dex/pump/pump.d.ts +35 -0
- package/dist/sol/dex/pump/pump.js +352 -0
- package/dist/sol/dex/pump/types.d.ts +215 -0
- package/dist/sol/dex/pump/types.js +5 -0
- package/dist/sol/dex/raydium/index.d.ts +8 -0
- package/dist/sol/dex/raydium/index.js +12 -0
- package/dist/sol/dex/raydium/launchlab.d.ts +68 -0
- package/dist/sol/dex/raydium/launchlab.js +210 -0
- package/dist/sol/dex/raydium/raydium-bundle.d.ts +64 -0
- package/dist/sol/dex/raydium/raydium-bundle.js +324 -0
- package/dist/sol/dex/raydium/raydium.d.ts +40 -0
- package/dist/sol/dex/raydium/raydium.js +366 -0
- package/dist/sol/dex/raydium/types.d.ts +240 -0
- package/dist/sol/dex/raydium/types.js +5 -0
- package/dist/sol/index.d.ts +11 -0
- package/dist/sol/index.js +18 -0
- package/dist/sol/jito/bundle.d.ts +90 -0
- package/dist/sol/jito/bundle.js +263 -0
- package/dist/sol/jito/index.d.ts +7 -0
- package/dist/sol/jito/index.js +7 -0
- package/dist/sol/jito/tip.d.ts +51 -0
- package/dist/sol/jito/tip.js +83 -0
- package/dist/sol/jito/types.d.ts +100 -0
- package/dist/sol/jito/types.js +5 -0
- package/dist/sol/nozomi/client.d.ts +63 -0
- package/dist/sol/nozomi/client.js +222 -0
- package/dist/sol/nozomi/index.d.ts +8 -0
- package/dist/sol/nozomi/index.js +8 -0
- package/dist/sol/nozomi/tip.d.ts +50 -0
- package/dist/sol/nozomi/tip.js +80 -0
- package/dist/sol/nozomi/types.d.ts +96 -0
- package/dist/sol/nozomi/types.js +5 -0
- package/dist/sol/token/create-complete.d.ts +115 -0
- package/dist/sol/token/create-complete.js +235 -0
- package/dist/sol/token/create-token.d.ts +57 -0
- package/dist/sol/token/create-token.js +230 -0
- package/dist/sol/token/index.d.ts +9 -0
- package/dist/sol/token/index.js +14 -0
- package/dist/sol/token/metadata-upload.d.ts +86 -0
- package/dist/sol/token/metadata-upload.js +173 -0
- package/dist/sol/token/metadata.d.ts +92 -0
- package/dist/sol/token/metadata.js +274 -0
- package/dist/sol/token/types.d.ts +153 -0
- package/dist/sol/token/types.js +5 -0
- package/dist/sol/types.d.ts +176 -0
- package/dist/sol/types.js +7 -0
- package/dist/sol/utils/balance.d.ts +160 -0
- package/dist/sol/utils/balance.js +638 -0
- package/dist/sol/utils/connection.d.ts +78 -0
- package/dist/sol/utils/connection.js +168 -0
- package/dist/sol/utils/index.d.ts +9 -0
- package/dist/sol/utils/index.js +9 -0
- package/dist/sol/utils/lp-inspect.d.ts +75 -0
- package/dist/sol/utils/lp-inspect.js +235 -0
- package/dist/sol/utils/transfer.d.ts +196 -0
- package/dist/sol/utils/transfer.js +307 -0
- package/dist/sol/utils/wallet.d.ts +107 -0
- package/dist/sol/utils/wallet.js +210 -0
- package/package.json +44 -5
- package/README.zh-CN.pdf +0 -0
- package/dist/flap/portal-bundle-merkle/encryption.d.ts +0 -16
- package/dist/flap/portal-bundle-merkle/encryption.js +0 -146
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jupiter Price API V3
|
|
3
|
+
* @module sol/dex/jup/price
|
|
4
|
+
*
|
|
5
|
+
* Price API 提供代币价格查询
|
|
6
|
+
* 支持批量查询,返回 USD 价格和 24h 变化
|
|
7
|
+
*/
|
|
8
|
+
import { jupGet } from './client.js';
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Price API - 价格查询
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* 获取代币价格 (V3)
|
|
14
|
+
*
|
|
15
|
+
* 批量查询代币的 USD 价格。
|
|
16
|
+
*
|
|
17
|
+
* @param ids 代币 Mint 地址数组
|
|
18
|
+
* @param config Jupiter 配置
|
|
19
|
+
* @returns 价格响应
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { Sol } from 'four-flap-meme-sdk'
|
|
24
|
+
*
|
|
25
|
+
* Sol.setJupiterConfig({ apiKey: 'your-api-key' })
|
|
26
|
+
*
|
|
27
|
+
* // 批量获取价格
|
|
28
|
+
* const prices = await Sol.getTokenPricesV3([
|
|
29
|
+
* 'So11111111111111111111111111111111111111112', // SOL
|
|
30
|
+
* 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC
|
|
31
|
+
* 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', // USDT
|
|
32
|
+
* ])
|
|
33
|
+
*
|
|
34
|
+
* Object.entries(prices).forEach(([mint, info]) => {
|
|
35
|
+
* console.log(`${mint}:`)
|
|
36
|
+
* console.log(` 价格: $${info.usdPrice}`)
|
|
37
|
+
* console.log(` 24h变化: ${info.priceChange24h ?? 0}%`)
|
|
38
|
+
* })
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export async function getTokenPricesV3(ids, config) {
|
|
42
|
+
if (ids.length === 0) {
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
return jupGet('/price/v3', { ids: ids.join(',') }, config);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 获取单个代币价格 (V3)
|
|
49
|
+
*
|
|
50
|
+
* @param mint 代币 Mint 地址
|
|
51
|
+
* @param config Jupiter 配置
|
|
52
|
+
* @returns 价格信息或 null
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const solPrice = await Sol.getSingleTokenPriceV3(
|
|
57
|
+
* 'So11111111111111111111111111111111111111112'
|
|
58
|
+
* )
|
|
59
|
+
*
|
|
60
|
+
* if (solPrice) {
|
|
61
|
+
* console.log(`SOL: $${solPrice.usdPrice}`)
|
|
62
|
+
* console.log(`24h: ${solPrice.priceChange24h}%`)
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export async function getSingleTokenPriceV3(mint, config) {
|
|
67
|
+
const prices = await getTokenPricesV3([mint], config);
|
|
68
|
+
return prices[mint] ?? null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 获取 USD 价格 (V3)
|
|
72
|
+
*
|
|
73
|
+
* @param mint 代币 Mint 地址
|
|
74
|
+
* @param config Jupiter 配置
|
|
75
|
+
* @returns USD 价格或 null
|
|
76
|
+
*/
|
|
77
|
+
export async function getUsdPrice(mint, config) {
|
|
78
|
+
const info = await getSingleTokenPriceV3(mint, config);
|
|
79
|
+
return info?.usdPrice ?? null;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 批量获取 USD 价格 (V3)
|
|
83
|
+
*
|
|
84
|
+
* @param mints 代币 Mint 地址数组
|
|
85
|
+
* @param config Jupiter 配置
|
|
86
|
+
* @returns Mint -> 价格 映射
|
|
87
|
+
*/
|
|
88
|
+
export async function batchGetUsdPrices(mints, config) {
|
|
89
|
+
const prices = await getTokenPricesV3(mints, config);
|
|
90
|
+
const priceMap = new Map();
|
|
91
|
+
mints.forEach(mint => {
|
|
92
|
+
priceMap.set(mint, prices[mint]?.usdPrice ?? null);
|
|
93
|
+
});
|
|
94
|
+
return priceMap;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 获取 24h 价格变化 (V3)
|
|
98
|
+
*
|
|
99
|
+
* @param mint 代币 Mint 地址
|
|
100
|
+
* @param config Jupiter 配置
|
|
101
|
+
* @returns 24h 价格变化百分比或 null
|
|
102
|
+
*/
|
|
103
|
+
export async function get24hPriceChange(mint, config) {
|
|
104
|
+
const info = await getSingleTokenPriceV3(mint, config);
|
|
105
|
+
return info?.priceChange24h ?? null;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 计算代币价值 (V3)
|
|
109
|
+
*
|
|
110
|
+
* @param mint 代币 Mint 地址
|
|
111
|
+
* @param amount 代币数量 (最小单位)
|
|
112
|
+
* @param config Jupiter 配置
|
|
113
|
+
* @returns USD 价值或 null
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* // 计算 1 SOL 的 USD 价值
|
|
118
|
+
* const value = await Sol.calculateTokenValue(
|
|
119
|
+
* 'So11111111111111111111111111111111111111112',
|
|
120
|
+
* 1_000_000_000, // 1 SOL = 10^9 lamports
|
|
121
|
+
* )
|
|
122
|
+
* console.log(`1 SOL = $${value}`)
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
export async function calculateTokenValue(mint, amount, config) {
|
|
126
|
+
const info = await getSingleTokenPriceV3(mint, config);
|
|
127
|
+
if (!info)
|
|
128
|
+
return null;
|
|
129
|
+
const amountNum = typeof amount === 'bigint' ? Number(amount) : amount;
|
|
130
|
+
const adjustedAmount = amountNum / Math.pow(10, info.decimals);
|
|
131
|
+
return adjustedAmount * info.usdPrice;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* 批量计算代币价值 (V3)
|
|
135
|
+
*
|
|
136
|
+
* @param holdings 持仓数组 [{mint, amount}]
|
|
137
|
+
* @param config Jupiter 配置
|
|
138
|
+
* @returns 总 USD 价值和明细
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```typescript
|
|
142
|
+
* const result = await Sol.calculatePortfolioValue([
|
|
143
|
+
* { mint: 'So11111111111111111111111111111111111111112', amount: 1_000_000_000 },
|
|
144
|
+
* { mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', amount: 100_000_000 },
|
|
145
|
+
* ])
|
|
146
|
+
*
|
|
147
|
+
* console.log(`总价值: $${result.totalValue}`)
|
|
148
|
+
* result.details.forEach(d => {
|
|
149
|
+
* console.log(` ${d.mint}: $${d.value}`)
|
|
150
|
+
* })
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
export async function calculatePortfolioValue(holdings, config) {
|
|
154
|
+
if (holdings.length === 0) {
|
|
155
|
+
return { totalValue: 0, details: [] };
|
|
156
|
+
}
|
|
157
|
+
const mints = holdings.map(h => h.mint);
|
|
158
|
+
const prices = await getTokenPricesV3(mints, config);
|
|
159
|
+
let totalValue = 0;
|
|
160
|
+
const details = holdings.map(holding => {
|
|
161
|
+
const amountNum = typeof holding.amount === 'bigint'
|
|
162
|
+
? Number(holding.amount)
|
|
163
|
+
: holding.amount;
|
|
164
|
+
const info = prices[holding.mint];
|
|
165
|
+
if (!info) {
|
|
166
|
+
return {
|
|
167
|
+
mint: holding.mint,
|
|
168
|
+
amount: amountNum,
|
|
169
|
+
price: null,
|
|
170
|
+
value: null,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
const adjustedAmount = amountNum / Math.pow(10, info.decimals);
|
|
174
|
+
const value = adjustedAmount * info.usdPrice;
|
|
175
|
+
totalValue += value;
|
|
176
|
+
return {
|
|
177
|
+
mint: holding.mint,
|
|
178
|
+
amount: adjustedAmount,
|
|
179
|
+
price: info.usdPrice,
|
|
180
|
+
value,
|
|
181
|
+
};
|
|
182
|
+
});
|
|
183
|
+
return { totalValue, details };
|
|
184
|
+
}
|
|
185
|
+
// ============================================================================
|
|
186
|
+
// 常用代币地址
|
|
187
|
+
// ============================================================================
|
|
188
|
+
/** 常用代币 Mint 地址 */
|
|
189
|
+
export const COMMON_TOKENS = {
|
|
190
|
+
/** SOL (Wrapped) */
|
|
191
|
+
SOL: 'So11111111111111111111111111111111111111112',
|
|
192
|
+
/** USDC */
|
|
193
|
+
USDC: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
|
194
|
+
/** USDT */
|
|
195
|
+
USDT: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
|
|
196
|
+
/** JUP */
|
|
197
|
+
JUP: 'JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN',
|
|
198
|
+
/** BONK */
|
|
199
|
+
BONK: 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263',
|
|
200
|
+
/** RAY */
|
|
201
|
+
RAY: '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R',
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* 获取 SOL 价格 (V3)
|
|
205
|
+
*/
|
|
206
|
+
export async function getSolPrice(config) {
|
|
207
|
+
return getUsdPrice(COMMON_TOKENS.SOL, config);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* 获取 USDC 价格 (V3)
|
|
211
|
+
*/
|
|
212
|
+
export async function getUsdcPrice(config) {
|
|
213
|
+
return getUsdPrice(COMMON_TOKENS.USDC, config);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* 获取常用代币价格 (V3)
|
|
217
|
+
*/
|
|
218
|
+
export async function getCommonTokenPrices(config) {
|
|
219
|
+
return getTokenPricesV3(Object.values(COMMON_TOKENS), config);
|
|
220
|
+
}
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jupiter Recurring API (定投/定期订单)
|
|
3
|
+
* @module sol/dex/jup/recurring
|
|
4
|
+
*
|
|
5
|
+
* Recurring API 提供定投/DCA (Dollar Cost Averaging) 功能
|
|
6
|
+
* 用户可以创建定期自动执行的订单
|
|
7
|
+
*/
|
|
8
|
+
import type { JupiterConfig } from './types.js';
|
|
9
|
+
/** 时间模式参数 */
|
|
10
|
+
export interface RecurringTimeParams {
|
|
11
|
+
/** 每次投入数量 (最小单位) */
|
|
12
|
+
inAmount: number;
|
|
13
|
+
/** 间隔时间 (秒) */
|
|
14
|
+
interval: number;
|
|
15
|
+
/** 订单次数 */
|
|
16
|
+
numberOfOrders: number;
|
|
17
|
+
/** 最高价格限制 (可选) */
|
|
18
|
+
maxPrice?: number | null;
|
|
19
|
+
/** 最低价格限制 (可选) */
|
|
20
|
+
minPrice?: number | null;
|
|
21
|
+
/** 开始时间 (Unix 时间戳,可选) */
|
|
22
|
+
startAt?: number | null;
|
|
23
|
+
}
|
|
24
|
+
/** 价格模式参数 */
|
|
25
|
+
export interface RecurringPriceParams {
|
|
26
|
+
/** 每次投入数量 (最小单位) */
|
|
27
|
+
inAmount: number;
|
|
28
|
+
/** 目标价格 */
|
|
29
|
+
targetPrice: number;
|
|
30
|
+
/** 订单次数 */
|
|
31
|
+
numberOfOrders: number;
|
|
32
|
+
/** 开始时间 (Unix 时间戳,可选) */
|
|
33
|
+
startAt?: number | null;
|
|
34
|
+
}
|
|
35
|
+
/** 订单参数 (时间模式) */
|
|
36
|
+
export interface RecurringParamsTime {
|
|
37
|
+
time: RecurringTimeParams;
|
|
38
|
+
}
|
|
39
|
+
/** 订单参数 (价格模式) */
|
|
40
|
+
export interface RecurringParamsPrice {
|
|
41
|
+
price: RecurringPriceParams;
|
|
42
|
+
}
|
|
43
|
+
/** 订单参数 */
|
|
44
|
+
export type RecurringParams = RecurringParamsTime | RecurringParamsPrice;
|
|
45
|
+
/** 创建订单请求参数 */
|
|
46
|
+
export interface RecurringCreateOrderParams {
|
|
47
|
+
/** 用户地址 */
|
|
48
|
+
user: string;
|
|
49
|
+
/** 输入代币 Mint */
|
|
50
|
+
inputMint: string;
|
|
51
|
+
/** 输出代币 Mint */
|
|
52
|
+
outputMint: string;
|
|
53
|
+
/** 订单参数 */
|
|
54
|
+
params: RecurringParams;
|
|
55
|
+
}
|
|
56
|
+
/** 创建订单响应 */
|
|
57
|
+
export interface RecurringCreateOrderResponse {
|
|
58
|
+
/** 请求 ID (用于 /execute) */
|
|
59
|
+
requestId: string;
|
|
60
|
+
/** Base64 编码的未签名交易 */
|
|
61
|
+
transaction: string;
|
|
62
|
+
}
|
|
63
|
+
/** 定投类型 */
|
|
64
|
+
export type RecurringType = 'time' | 'price' | 'all';
|
|
65
|
+
/** 取消订单请求参数 */
|
|
66
|
+
export interface RecurringCancelOrderParams {
|
|
67
|
+
/** 用户地址 */
|
|
68
|
+
user: string;
|
|
69
|
+
/** 订单账户地址 */
|
|
70
|
+
order: string;
|
|
71
|
+
/** 定投类型 */
|
|
72
|
+
recurringType: RecurringType;
|
|
73
|
+
}
|
|
74
|
+
/** 取消订单响应 */
|
|
75
|
+
export interface RecurringCancelOrderResponse {
|
|
76
|
+
/** 请求 ID */
|
|
77
|
+
requestId: string;
|
|
78
|
+
/** Base64 编码的未签名交易 */
|
|
79
|
+
transaction: string;
|
|
80
|
+
}
|
|
81
|
+
/** 执行交易请求参数 */
|
|
82
|
+
export interface RecurringExecuteParams {
|
|
83
|
+
/** 请求 ID */
|
|
84
|
+
requestId: string;
|
|
85
|
+
/** 已签名的交易 (Base64) */
|
|
86
|
+
signedTransaction: string;
|
|
87
|
+
}
|
|
88
|
+
/** 执行状态 */
|
|
89
|
+
export type RecurringExecuteStatus = 'Success' | 'Failed';
|
|
90
|
+
/** 执行交易响应 */
|
|
91
|
+
export interface RecurringExecuteResponse {
|
|
92
|
+
/** 交易签名 */
|
|
93
|
+
signature: string;
|
|
94
|
+
/** 执行状态 */
|
|
95
|
+
status: RecurringExecuteStatus;
|
|
96
|
+
/** 错误信息 (失败时) */
|
|
97
|
+
error?: string;
|
|
98
|
+
/** 订单账户地址 */
|
|
99
|
+
order?: string;
|
|
100
|
+
}
|
|
101
|
+
/** 订单列表状态 */
|
|
102
|
+
export type RecurringOrderListStatus = 'active' | 'history';
|
|
103
|
+
/** 交易记录 */
|
|
104
|
+
export interface RecurringTrade {
|
|
105
|
+
/** 订单账户地址 */
|
|
106
|
+
orderKey: string;
|
|
107
|
+
/** Keeper 地址 */
|
|
108
|
+
keeper: string;
|
|
109
|
+
/** 输入代币 Mint */
|
|
110
|
+
inputMint: string;
|
|
111
|
+
/** 输出代币 Mint */
|
|
112
|
+
outputMint: string;
|
|
113
|
+
/** 输入数量 (UI) */
|
|
114
|
+
inputAmount: string;
|
|
115
|
+
/** 输出数量 (UI) */
|
|
116
|
+
outputAmount: string;
|
|
117
|
+
/** 原始输入数量 */
|
|
118
|
+
rawInputAmount: string;
|
|
119
|
+
/** 原始输出数量 */
|
|
120
|
+
rawOutputAmount: string;
|
|
121
|
+
/** 手续费代币 Mint */
|
|
122
|
+
feeMint: string;
|
|
123
|
+
/** 手续费数量 (UI) */
|
|
124
|
+
feeAmount: string;
|
|
125
|
+
/** 原始手续费数量 */
|
|
126
|
+
rawFeeAmount: string;
|
|
127
|
+
/** 交易签名 */
|
|
128
|
+
txId: string;
|
|
129
|
+
/** 确认时间 */
|
|
130
|
+
confirmedAt: string;
|
|
131
|
+
/** 操作类型 */
|
|
132
|
+
action: string;
|
|
133
|
+
/** 产品元数据 */
|
|
134
|
+
productMeta?: unknown;
|
|
135
|
+
}
|
|
136
|
+
/** 时间模式订单详情 */
|
|
137
|
+
export interface RecurringTimeOrder {
|
|
138
|
+
/** 订单账户地址 */
|
|
139
|
+
orderKey: string;
|
|
140
|
+
/** 用户地址 */
|
|
141
|
+
userPubkey: string;
|
|
142
|
+
/** 输入代币 Mint */
|
|
143
|
+
inputMint: string;
|
|
144
|
+
/** 输出代币 Mint */
|
|
145
|
+
outputMint: string;
|
|
146
|
+
/** 周期频率 */
|
|
147
|
+
cycleFrequency: string;
|
|
148
|
+
/** 每周期投入数量 (UI) */
|
|
149
|
+
inAmountPerCycle: string;
|
|
150
|
+
/** 原始每周期投入数量 */
|
|
151
|
+
rawInAmountPerCycle: string;
|
|
152
|
+
/** 已存入数量 (UI) */
|
|
153
|
+
inDeposited: string;
|
|
154
|
+
/** 原始已存入数量 */
|
|
155
|
+
rawInDeposited: string;
|
|
156
|
+
/** 已使用数量 (UI) */
|
|
157
|
+
inUsed: string;
|
|
158
|
+
/** 原始已使用数量 */
|
|
159
|
+
rawInUsed: string;
|
|
160
|
+
/** 已提取输入数量 (UI) */
|
|
161
|
+
inWithdrawn: string;
|
|
162
|
+
/** 原始已提取输入数量 */
|
|
163
|
+
rawInWithdrawn: string;
|
|
164
|
+
/** 已收到输出数量 (UI) */
|
|
165
|
+
outReceived: string;
|
|
166
|
+
/** 原始已收到输出数量 */
|
|
167
|
+
rawOutReceived: string;
|
|
168
|
+
/** 已提取输出数量 (UI) */
|
|
169
|
+
outWithdrawn: string;
|
|
170
|
+
/** 原始已提取输出数量 */
|
|
171
|
+
rawOutWithdrawn: string;
|
|
172
|
+
/** 最大输出数量 (UI) */
|
|
173
|
+
maxOutAmount: string;
|
|
174
|
+
/** 原始最大输出数量 */
|
|
175
|
+
rawMaxOutAmount: string;
|
|
176
|
+
/** 最小输出数量 (UI) */
|
|
177
|
+
minOutAmount: string;
|
|
178
|
+
/** 原始最小输出数量 */
|
|
179
|
+
rawMinOutAmount: string;
|
|
180
|
+
/** 开单交易签名 */
|
|
181
|
+
openTx: string;
|
|
182
|
+
/** 关单交易签名 */
|
|
183
|
+
closeTx: string;
|
|
184
|
+
/** 用户是否已关闭 */
|
|
185
|
+
userClosed: boolean;
|
|
186
|
+
/** 创建时间 */
|
|
187
|
+
createdAt: string;
|
|
188
|
+
/** 更新时间 */
|
|
189
|
+
updatedAt: string;
|
|
190
|
+
/** 交易记录 */
|
|
191
|
+
trades: RecurringTrade[];
|
|
192
|
+
}
|
|
193
|
+
/** 获取订单请求参数 */
|
|
194
|
+
export interface RecurringGetOrdersParams {
|
|
195
|
+
/** 用户地址 */
|
|
196
|
+
user: string;
|
|
197
|
+
/** 定投类型 */
|
|
198
|
+
recurringType: RecurringType;
|
|
199
|
+
/** 订单状态 */
|
|
200
|
+
orderStatus: RecurringOrderListStatus;
|
|
201
|
+
/** 页码 (默认: 1) */
|
|
202
|
+
page?: number;
|
|
203
|
+
/** 代币 Mint 筛选 */
|
|
204
|
+
mint?: string;
|
|
205
|
+
/** 是否包含失败交易 */
|
|
206
|
+
includeFailedTx?: boolean;
|
|
207
|
+
}
|
|
208
|
+
/** 获取订单响应 */
|
|
209
|
+
export interface RecurringGetOrdersResponse {
|
|
210
|
+
/** 用户地址 */
|
|
211
|
+
user: string;
|
|
212
|
+
/** 订单状态 */
|
|
213
|
+
orderStatus: RecurringOrderListStatus;
|
|
214
|
+
/** 当前页 */
|
|
215
|
+
page: number;
|
|
216
|
+
/** 总页数 */
|
|
217
|
+
totalPages: number;
|
|
218
|
+
/** 时间模式订单列表 */
|
|
219
|
+
time?: RecurringTimeOrder[];
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* 创建定投订单(时间模式)
|
|
223
|
+
*
|
|
224
|
+
* 按固定时间间隔自动执行的定投订单。
|
|
225
|
+
*
|
|
226
|
+
* @param params 创建订单参数
|
|
227
|
+
* @param config Jupiter 配置
|
|
228
|
+
* @returns 创建订单响应
|
|
229
|
+
*
|
|
230
|
+
* @example
|
|
231
|
+
* ```typescript
|
|
232
|
+
* import { Sol } from 'four-flap-meme-sdk'
|
|
233
|
+
*
|
|
234
|
+
* Sol.setJupiterConfig({ apiKey: 'your-api-key' })
|
|
235
|
+
*
|
|
236
|
+
* // 创建定投:每天用 1 SOL 买入 USDC,共10天
|
|
237
|
+
* const result = await Sol.createRecurringOrder({
|
|
238
|
+
* user: wallet.publicKey.toBase58(),
|
|
239
|
+
* inputMint: 'So11111111111111111111111111111111111111112', // SOL
|
|
240
|
+
* outputMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC
|
|
241
|
+
* params: {
|
|
242
|
+
* time: {
|
|
243
|
+
* inAmount: 1_000_000_000, // 1 SOL
|
|
244
|
+
* numberOfOrders: 10, // 10次
|
|
245
|
+
* interval: 86400, // 每天 (86400秒)
|
|
246
|
+
* }
|
|
247
|
+
* }
|
|
248
|
+
* })
|
|
249
|
+
*
|
|
250
|
+
* // 签名并执行
|
|
251
|
+
* const tx = VersionedTransaction.deserialize(
|
|
252
|
+
* Buffer.from(result.transaction, 'base64')
|
|
253
|
+
* )
|
|
254
|
+
* tx.sign([wallet])
|
|
255
|
+
*
|
|
256
|
+
* await Sol.executeRecurringOrder({
|
|
257
|
+
* requestId: result.requestId,
|
|
258
|
+
* signedTransaction: Buffer.from(tx.serialize()).toString('base64'),
|
|
259
|
+
* })
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
export declare function createRecurringOrder(params: RecurringCreateOrderParams, config?: JupiterConfig): Promise<RecurringCreateOrderResponse>;
|
|
263
|
+
/**
|
|
264
|
+
* 创建简单定投订单(时间模式)
|
|
265
|
+
*
|
|
266
|
+
* @param user 用户地址
|
|
267
|
+
* @param inputMint 输入代币 Mint
|
|
268
|
+
* @param outputMint 输出代币 Mint
|
|
269
|
+
* @param inAmount 每次投入数量 (最小单位)
|
|
270
|
+
* @param numberOfOrders 订单次数
|
|
271
|
+
* @param intervalSeconds 间隔时间 (秒)
|
|
272
|
+
* @param options 可选参数
|
|
273
|
+
* @param config Jupiter 配置
|
|
274
|
+
* @returns 创建订单响应
|
|
275
|
+
*
|
|
276
|
+
* @example
|
|
277
|
+
* ```typescript
|
|
278
|
+
* // 每天定投 1 SOL 买 USDC,共30天
|
|
279
|
+
* const result = await Sol.createSimpleRecurringOrder(
|
|
280
|
+
* wallet.publicKey.toBase58(),
|
|
281
|
+
* 'So11111111111111111111111111111111111111112', // SOL
|
|
282
|
+
* 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC
|
|
283
|
+
* 1_000_000_000, // 1 SOL
|
|
284
|
+
* 30, // 30次
|
|
285
|
+
* 86400, // 每天
|
|
286
|
+
* )
|
|
287
|
+
* ```
|
|
288
|
+
*/
|
|
289
|
+
export declare function createSimpleRecurringOrder(user: string, inputMint: string, outputMint: string, inAmount: number, numberOfOrders: number, intervalSeconds: number, options?: {
|
|
290
|
+
maxPrice?: number;
|
|
291
|
+
minPrice?: number;
|
|
292
|
+
startAt?: number;
|
|
293
|
+
}, config?: JupiterConfig): Promise<RecurringCreateOrderResponse>;
|
|
294
|
+
/** 预设时间间隔 (秒) */
|
|
295
|
+
export declare const RECURRING_INTERVALS: {
|
|
296
|
+
/** 每分钟 */
|
|
297
|
+
readonly MINUTE: 60;
|
|
298
|
+
/** 每小时 */
|
|
299
|
+
readonly HOUR: 3600;
|
|
300
|
+
/** 每天 */
|
|
301
|
+
readonly DAY: 86400;
|
|
302
|
+
/** 每周 */
|
|
303
|
+
readonly WEEK: 604800;
|
|
304
|
+
/** 每月 (30天) */
|
|
305
|
+
readonly MONTH: 2592000;
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* 创建每日定投
|
|
309
|
+
*/
|
|
310
|
+
export declare function createDailyRecurring(user: string, inputMint: string, outputMint: string, inAmount: number, days: number, config?: JupiterConfig): Promise<RecurringCreateOrderResponse>;
|
|
311
|
+
/**
|
|
312
|
+
* 创建每周定投
|
|
313
|
+
*/
|
|
314
|
+
export declare function createWeeklyRecurring(user: string, inputMint: string, outputMint: string, inAmount: number, weeks: number, config?: JupiterConfig): Promise<RecurringCreateOrderResponse>;
|
|
315
|
+
/**
|
|
316
|
+
* 取消定投订单
|
|
317
|
+
*
|
|
318
|
+
* @param params 取消参数
|
|
319
|
+
* @param config Jupiter 配置
|
|
320
|
+
* @returns 取消订单响应
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* ```typescript
|
|
324
|
+
* const result = await Sol.cancelRecurringOrder({
|
|
325
|
+
* user: wallet.publicKey.toBase58(),
|
|
326
|
+
* order: 'orderAccountAddress',
|
|
327
|
+
* recurringType: 'time',
|
|
328
|
+
* })
|
|
329
|
+
*
|
|
330
|
+
* // 签名并执行
|
|
331
|
+
* const tx = VersionedTransaction.deserialize(
|
|
332
|
+
* Buffer.from(result.transaction, 'base64')
|
|
333
|
+
* )
|
|
334
|
+
* tx.sign([wallet])
|
|
335
|
+
*
|
|
336
|
+
* await Sol.executeRecurringOrder({
|
|
337
|
+
* requestId: result.requestId,
|
|
338
|
+
* signedTransaction: Buffer.from(tx.serialize()).toString('base64'),
|
|
339
|
+
* })
|
|
340
|
+
* ```
|
|
341
|
+
*/
|
|
342
|
+
export declare function cancelRecurringOrder(params: RecurringCancelOrderParams, config?: JupiterConfig): Promise<RecurringCancelOrderResponse>;
|
|
343
|
+
/**
|
|
344
|
+
* 快捷取消时间模式定投订单
|
|
345
|
+
*
|
|
346
|
+
* @param user 用户地址
|
|
347
|
+
* @param order 订单账户地址
|
|
348
|
+
* @param config Jupiter 配置
|
|
349
|
+
* @returns 取消订单响应
|
|
350
|
+
*/
|
|
351
|
+
export declare function cancelTimeRecurringOrder(user: string, order: string, config?: JupiterConfig): Promise<RecurringCancelOrderResponse>;
|
|
352
|
+
/**
|
|
353
|
+
* 执行已签名的定投订单交易
|
|
354
|
+
*
|
|
355
|
+
* @param params 执行参数
|
|
356
|
+
* @param config Jupiter 配置
|
|
357
|
+
* @returns 执行结果
|
|
358
|
+
*/
|
|
359
|
+
export declare function executeRecurringOrder(params: RecurringExecuteParams, config?: JupiterConfig): Promise<RecurringExecuteResponse>;
|
|
360
|
+
/**
|
|
361
|
+
* 获取用户的定投订单
|
|
362
|
+
*
|
|
363
|
+
* @param params 查询参数
|
|
364
|
+
* @param config Jupiter 配置
|
|
365
|
+
* @returns 订单列表响应(含分页)
|
|
366
|
+
*
|
|
367
|
+
* @example
|
|
368
|
+
* ```typescript
|
|
369
|
+
* const response = await Sol.getRecurringOrders({
|
|
370
|
+
* user: wallet.publicKey.toBase58(),
|
|
371
|
+
* recurringType: 'time',
|
|
372
|
+
* orderStatus: 'active',
|
|
373
|
+
* page: 1,
|
|
374
|
+
* })
|
|
375
|
+
*
|
|
376
|
+
* console.log(`共 ${response.totalPages} 页`)
|
|
377
|
+
* response.time?.forEach(order => {
|
|
378
|
+
* console.log(`订单: ${order.orderKey}`)
|
|
379
|
+
* console.log(` 每周期: ${order.inAmountPerCycle}`)
|
|
380
|
+
* console.log(` 已用: ${order.inUsed}`)
|
|
381
|
+
* console.log(` 已收: ${order.outReceived}`)
|
|
382
|
+
* console.log(` 交易数: ${order.trades.length}`)
|
|
383
|
+
* })
|
|
384
|
+
* ```
|
|
385
|
+
*/
|
|
386
|
+
export declare function getRecurringOrders(params: RecurringGetOrdersParams, config?: JupiterConfig): Promise<RecurringGetOrdersResponse>;
|
|
387
|
+
/**
|
|
388
|
+
* 获取用户的活跃时间模式定投订单
|
|
389
|
+
*
|
|
390
|
+
* @param user 用户地址
|
|
391
|
+
* @param page 页码
|
|
392
|
+
* @param config Jupiter 配置
|
|
393
|
+
* @returns 订单列表响应
|
|
394
|
+
*/
|
|
395
|
+
export declare function getActiveTimeRecurringOrders(user: string, page?: number, config?: JupiterConfig): Promise<RecurringGetOrdersResponse>;
|
|
396
|
+
/**
|
|
397
|
+
* 获取用户的历史时间模式定投订单
|
|
398
|
+
*
|
|
399
|
+
* @param user 用户地址
|
|
400
|
+
* @param page 页码
|
|
401
|
+
* @param config Jupiter 配置
|
|
402
|
+
* @returns 订单列表响应
|
|
403
|
+
*/
|
|
404
|
+
export declare function getHistoryTimeRecurringOrders(user: string, page?: number, config?: JupiterConfig): Promise<RecurringGetOrdersResponse>;
|
|
405
|
+
/**
|
|
406
|
+
* 获取所有活跃时间模式定投订单(自动分页)
|
|
407
|
+
*
|
|
408
|
+
* @param user 用户地址
|
|
409
|
+
* @param config Jupiter 配置
|
|
410
|
+
* @returns 所有活跃订单
|
|
411
|
+
*/
|
|
412
|
+
export declare function getAllActiveTimeRecurringOrders(user: string, config?: JupiterConfig): Promise<RecurringTimeOrder[]>;
|
|
413
|
+
/**
|
|
414
|
+
* 计算定投总投入
|
|
415
|
+
*
|
|
416
|
+
* @param inAmount 每次投入数量
|
|
417
|
+
* @param numberOfOrders 订单次数
|
|
418
|
+
* @returns 总投入数量
|
|
419
|
+
*/
|
|
420
|
+
export declare function calculateTotalInvestment(inAmount: number, numberOfOrders: number): number;
|
|
421
|
+
/**
|
|
422
|
+
* 计算定投周期
|
|
423
|
+
*
|
|
424
|
+
* @param intervalSeconds 间隔时间 (秒)
|
|
425
|
+
* @param numberOfOrders 订单次数
|
|
426
|
+
* @returns 总持续时间 (秒)
|
|
427
|
+
*/
|
|
428
|
+
export declare function calculateTotalDuration(intervalSeconds: number, numberOfOrders: number): number;
|
|
429
|
+
/**
|
|
430
|
+
* 估算定投结束时间
|
|
431
|
+
*
|
|
432
|
+
* @param intervalSeconds 间隔时间 (秒)
|
|
433
|
+
* @param numberOfOrders 订单次数
|
|
434
|
+
* @param startAt 开始时间 (Unix 时间戳,默认为当前时间)
|
|
435
|
+
* @returns 结束时间 (Date)
|
|
436
|
+
*/
|
|
437
|
+
export declare function estimateEndDate(intervalSeconds: number, numberOfOrders: number, startAt?: number): Date;
|