clodds 1.1.0 → 1.2.0
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 +79 -47
- package/dist/agents/handlers/kalshi.d.ts +1 -2
- package/dist/agents/handlers/kalshi.js +369 -616
- package/dist/agents/handlers/kalshi.js.map +1 -1
- package/dist/agents/handlers/types.d.ts +1 -1
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.js +435 -710
- package/dist/agents/index.js.map +1 -1
- package/dist/bittensor/index.d.ts +3 -2
- package/dist/bittensor/index.js +44 -5
- package/dist/bittensor/index.js.map +1 -1
- package/dist/cli/commands/gateway.js +37 -2
- package/dist/cli/commands/gateway.js.map +1 -1
- package/dist/cli/commands/index.js +3 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/index.js +6 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cron/index.d.ts +1 -1
- package/dist/cron/index.js +26 -34
- package/dist/cron/index.js.map +1 -1
- package/dist/db/index.d.ts +12 -0
- package/dist/db/index.js +51 -23
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrations.js +36 -0
- package/dist/db/migrations.js.map +1 -1
- package/dist/evm/index.d.ts +1 -0
- package/dist/evm/index.js +2 -0
- package/dist/evm/index.js.map +1 -1
- package/dist/evm/pancakeswap.d.ts +55 -0
- package/dist/evm/pancakeswap.js +299 -0
- package/dist/evm/pancakeswap.js.map +1 -0
- package/dist/exchanges/lighter/index.d.ts +95 -0
- package/dist/exchanges/lighter/index.js +154 -0
- package/dist/exchanges/lighter/index.js.map +1 -0
- package/dist/gateway/server.d.ts +9 -0
- package/dist/gateway/server.js +208 -1
- package/dist/gateway/server.js.map +1 -1
- package/dist/gateway/signal-bus.d.ts +2 -43
- package/dist/gateway/signal-bus.js.map +1 -1
- package/dist/index.js +40 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/security.d.ts +44 -0
- package/dist/mcp/security.js +143 -0
- package/dist/mcp/security.js.map +1 -0
- package/dist/mcp/server.js +27 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/services/alt-data/index.d.ts +1 -1
- package/dist/sessions/index.js +66 -7
- package/dist/sessions/index.js.map +1 -1
- package/dist/signal-router/router.d.ts +1 -1
- package/dist/signal-router/types.d.ts +1 -1
- package/dist/skills/bundled/arbitrage/index.js +96 -63
- package/dist/skills/bundled/arbitrage/index.js.map +1 -1
- package/dist/skills/bundled/betfair/index.js +121 -83
- package/dist/skills/bundled/betfair/index.js.map +1 -1
- package/dist/skills/bundled/bridge/index.js +42 -13
- package/dist/skills/bundled/bridge/index.js.map +1 -1
- package/dist/skills/bundled/crypto-hft/index.js +267 -226
- package/dist/skills/bundled/crypto-hft/index.js.map +1 -1
- package/dist/skills/bundled/drift/index.js +83 -52
- package/dist/skills/bundled/drift/index.js.map +1 -1
- package/dist/skills/bundled/embeddings/index.js +87 -49
- package/dist/skills/bundled/embeddings/index.js.map +1 -1
- package/dist/skills/bundled/execution/index.js +47 -25
- package/dist/skills/bundled/execution/index.js.map +1 -1
- package/dist/skills/bundled/feeds/index.js +45 -25
- package/dist/skills/bundled/feeds/index.js.map +1 -1
- package/dist/skills/bundled/hyperliquid/index.js +91 -45
- package/dist/skills/bundled/hyperliquid/index.js.map +1 -1
- package/dist/skills/bundled/integrations/index.js +2 -1
- package/dist/skills/bundled/integrations/index.js.map +1 -1
- package/dist/skills/bundled/kamino/index.js +71 -43
- package/dist/skills/bundled/kamino/index.js.map +1 -1
- package/dist/skills/bundled/lighter/index.d.ts +19 -0
- package/dist/skills/bundled/lighter/index.js +385 -0
- package/dist/skills/bundled/lighter/index.js.map +1 -0
- package/dist/skills/bundled/marginfi/index.d.ts +21 -0
- package/dist/skills/bundled/marginfi/index.js +387 -0
- package/dist/skills/bundled/marginfi/index.js.map +1 -0
- package/dist/skills/bundled/opinion/index.js +44 -25
- package/dist/skills/bundled/opinion/index.js.map +1 -1
- package/dist/skills/bundled/pancakeswap/index.d.ts +19 -0
- package/dist/skills/bundled/pancakeswap/index.js +260 -0
- package/dist/skills/bundled/pancakeswap/index.js.map +1 -0
- package/dist/skills/bundled/setup/index.d.ts +16 -0
- package/dist/skills/bundled/setup/index.js +427 -0
- package/dist/skills/bundled/setup/index.js.map +1 -0
- package/dist/skills/bundled/solend/index.d.ts +22 -0
- package/dist/skills/bundled/solend/index.js +401 -0
- package/dist/skills/bundled/solend/index.js.map +1 -0
- package/dist/skills/bundled/trading-evm/index.js +42 -11
- package/dist/skills/bundled/trading-evm/index.js.map +1 -1
- package/dist/skills/errors.d.ts +20 -0
- package/dist/skills/errors.js +84 -0
- package/dist/skills/errors.js.map +1 -0
- package/dist/skills/executor.d.ts +1 -1
- package/dist/skills/executor.js +515 -41
- package/dist/skills/executor.js.map +1 -1
- package/dist/skills/help.d.ts +33 -0
- package/dist/skills/help.js +73 -0
- package/dist/skills/help.js.map +1 -0
- package/dist/solana/marginfi.d.ts +112 -0
- package/dist/solana/marginfi.js +340 -0
- package/dist/solana/marginfi.js.map +1 -0
- package/dist/solana/solend.d.ts +120 -0
- package/dist/solana/solend.js +261 -0
- package/dist/solana/solend.js.map +1 -0
- package/dist/trading/bridge.d.ts +1 -1
- package/dist/trading/position-bridge.d.ts +1 -1
- package/dist/types/signal-bus.d.ts +48 -0
- package/dist/types/signal-bus.js +9 -0
- package/dist/types/signal-bus.js.map +1 -0
- package/dist/types.d.ts +17 -0
- package/dist/utils/json-utils.d.ts +8 -8
- package/package.json +8 -6
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PancakeSwap V3 Integration for Multi-chain DEX Trading
|
|
4
|
+
*
|
|
5
|
+
* Supports swaps on BNB Chain (primary), Ethereum, Arbitrum, Base.
|
|
6
|
+
* Uses QuoterV2 + SmartRouter V3 ABIs via ethers (no extra npm deps).
|
|
7
|
+
*
|
|
8
|
+
* @see https://docs.pancakeswap.finance
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.PANCAKE_FEE_TIERS = exports.PANCAKE_TOKENS = exports.PANCAKE_CHAIN_CONFIG = void 0;
|
|
12
|
+
exports.resolvePancakeToken = resolvePancakeToken;
|
|
13
|
+
exports.pancakeQuote = pancakeQuote;
|
|
14
|
+
exports.pancakeSwap = pancakeSwap;
|
|
15
|
+
exports.pancakeGetPrice = pancakeGetPrice;
|
|
16
|
+
exports.pancakeGetBalance = pancakeGetBalance;
|
|
17
|
+
const ethers_1 = require("ethers");
|
|
18
|
+
const logger_1 = require("../utils/logger");
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// CONSTANTS
|
|
21
|
+
// =============================================================================
|
|
22
|
+
const CHAIN_CONFIG = {
|
|
23
|
+
bsc: {
|
|
24
|
+
chainId: 56,
|
|
25
|
+
rpc: 'https://bsc-dataseed1.binance.org',
|
|
26
|
+
quoterV2: '0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997',
|
|
27
|
+
swapRouter: '0x13f4EA83D0bd40E75C8222255bc855a974568Dd4',
|
|
28
|
+
weth: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB
|
|
29
|
+
},
|
|
30
|
+
ethereum: {
|
|
31
|
+
chainId: 1,
|
|
32
|
+
rpc: 'https://eth.llamarpc.com',
|
|
33
|
+
quoterV2: '0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997',
|
|
34
|
+
swapRouter: '0x13f4EA83D0bd40E75C8222255bc855a974568Dd4',
|
|
35
|
+
weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
|
|
36
|
+
},
|
|
37
|
+
arbitrum: {
|
|
38
|
+
chainId: 42161,
|
|
39
|
+
rpc: 'https://arb1.arbitrum.io/rpc',
|
|
40
|
+
quoterV2: '0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997',
|
|
41
|
+
swapRouter: '0x32226588378236Fd0c7c4053999F88aC0e5cAc77',
|
|
42
|
+
weth: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',
|
|
43
|
+
},
|
|
44
|
+
base: {
|
|
45
|
+
chainId: 8453,
|
|
46
|
+
rpc: 'https://mainnet.base.org',
|
|
47
|
+
quoterV2: '0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997',
|
|
48
|
+
swapRouter: '0x678Aa4bF4E210cf2166753e054d5b7c31cc7fa86',
|
|
49
|
+
weth: '0x4200000000000000000000000000000000000006',
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
exports.PANCAKE_CHAIN_CONFIG = CHAIN_CONFIG;
|
|
53
|
+
const QUOTER_V2_ABI = [
|
|
54
|
+
'function quoteExactInputSingle(tuple(address tokenIn, address tokenOut, uint256 amountIn, uint24 fee, uint160 sqrtPriceLimitX96) params) external returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)',
|
|
55
|
+
];
|
|
56
|
+
const SWAP_ROUTER_ABI = [
|
|
57
|
+
'function exactInputSingle(tuple(address tokenIn, address tokenOut, uint24 fee, address recipient, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96) params) external payable returns (uint256 amountOut)',
|
|
58
|
+
'function multicall(uint256 deadline, bytes[] calldata data) external payable returns (bytes[] memory results)',
|
|
59
|
+
];
|
|
60
|
+
const ERC20_ABI = [
|
|
61
|
+
'function approve(address spender, uint256 amount) external returns (bool)',
|
|
62
|
+
'function allowance(address owner, address spender) external view returns (uint256)',
|
|
63
|
+
'function balanceOf(address account) external view returns (uint256)',
|
|
64
|
+
'function decimals() external view returns (uint8)',
|
|
65
|
+
'function symbol() external view returns (string)',
|
|
66
|
+
'function name() external view returns (string)',
|
|
67
|
+
];
|
|
68
|
+
// Common tokens per chain
|
|
69
|
+
const COMMON_TOKENS = {
|
|
70
|
+
CAKE: {
|
|
71
|
+
bsc: '0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82',
|
|
72
|
+
ethereum: '0x152649eA73beAb28c5b49B26eb48f7EAD6d4c0bA',
|
|
73
|
+
arbitrum: '0x1b896893dfc86bb67Cf57767b17E4ae3b70a96c2',
|
|
74
|
+
base: '0x3055913c90Fcc1A6CE9a358911721eEb942013A1',
|
|
75
|
+
},
|
|
76
|
+
WBNB: {
|
|
77
|
+
bsc: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',
|
|
78
|
+
},
|
|
79
|
+
USDC: {
|
|
80
|
+
bsc: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',
|
|
81
|
+
ethereum: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
82
|
+
arbitrum: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
|
|
83
|
+
base: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
84
|
+
},
|
|
85
|
+
USDT: {
|
|
86
|
+
bsc: '0x55d398326f99059fF775485246999027B3197955',
|
|
87
|
+
ethereum: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
|
|
88
|
+
arbitrum: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',
|
|
89
|
+
},
|
|
90
|
+
WETH: {
|
|
91
|
+
ethereum: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
|
|
92
|
+
arbitrum: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',
|
|
93
|
+
base: '0x4200000000000000000000000000000000000006',
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
exports.PANCAKE_TOKENS = COMMON_TOKENS;
|
|
97
|
+
// Fee tiers to try (PancakeSwap V3 fee tiers)
|
|
98
|
+
const FEE_TIERS = [100, 500, 2500, 10000]; // 0.01%, 0.05%, 0.25%, 1%
|
|
99
|
+
exports.PANCAKE_FEE_TIERS = FEE_TIERS;
|
|
100
|
+
// =============================================================================
|
|
101
|
+
// WALLET MANAGEMENT
|
|
102
|
+
// =============================================================================
|
|
103
|
+
function getPancakeProvider(chain) {
|
|
104
|
+
const config = CHAIN_CONFIG[chain];
|
|
105
|
+
const envKey = chain === 'bsc' ? 'BSC_RPC_URL' : `${chain.toUpperCase()}_RPC_URL`;
|
|
106
|
+
const customRpc = process.env[envKey];
|
|
107
|
+
return new ethers_1.JsonRpcProvider(customRpc || config.rpc);
|
|
108
|
+
}
|
|
109
|
+
function getPancakeWallet(chain) {
|
|
110
|
+
const privateKey = process.env.EVM_PRIVATE_KEY;
|
|
111
|
+
if (!privateKey) {
|
|
112
|
+
throw new Error('EVM_PRIVATE_KEY environment variable not set');
|
|
113
|
+
}
|
|
114
|
+
const provider = getPancakeProvider(chain);
|
|
115
|
+
return new ethers_1.Wallet(privateKey, provider);
|
|
116
|
+
}
|
|
117
|
+
// =============================================================================
|
|
118
|
+
// TOKEN UTILITIES
|
|
119
|
+
// =============================================================================
|
|
120
|
+
function resolvePancakeToken(symbol, chain) {
|
|
121
|
+
const upper = symbol.toUpperCase();
|
|
122
|
+
if (COMMON_TOKENS[upper]?.[chain]) {
|
|
123
|
+
return COMMON_TOKENS[upper][chain];
|
|
124
|
+
}
|
|
125
|
+
// Native token aliases
|
|
126
|
+
if (chain === 'bsc' && (upper === 'BNB' || upper === 'NATIVE')) {
|
|
127
|
+
return CHAIN_CONFIG.bsc.weth;
|
|
128
|
+
}
|
|
129
|
+
if (upper === 'ETH' || upper === 'NATIVE') {
|
|
130
|
+
return CHAIN_CONFIG[chain].weth;
|
|
131
|
+
}
|
|
132
|
+
// Already an address
|
|
133
|
+
if (symbol.startsWith('0x') && symbol.length === 42) {
|
|
134
|
+
return symbol;
|
|
135
|
+
}
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
async function getTokenInfo(address, chain) {
|
|
139
|
+
const provider = getPancakeProvider(chain);
|
|
140
|
+
const token = new ethers_1.Contract(address, ERC20_ABI, provider);
|
|
141
|
+
const [symbol, decimals] = await Promise.all([
|
|
142
|
+
token.symbol().catch(() => 'UNKNOWN'),
|
|
143
|
+
token.decimals().catch(() => 18),
|
|
144
|
+
]);
|
|
145
|
+
return { address, symbol, decimals: Number(decimals) };
|
|
146
|
+
}
|
|
147
|
+
// =============================================================================
|
|
148
|
+
// QUOTING
|
|
149
|
+
// =============================================================================
|
|
150
|
+
async function pancakeQuote(params) {
|
|
151
|
+
const { chain, inputToken, outputToken, amount, slippageBps = 50 } = params;
|
|
152
|
+
const config = CHAIN_CONFIG[chain];
|
|
153
|
+
const provider = getPancakeProvider(chain);
|
|
154
|
+
const quoter = new ethers_1.Contract(config.quoterV2, QUOTER_V2_ABI, provider);
|
|
155
|
+
const tokenIn = resolvePancakeToken(inputToken, chain) || inputToken;
|
|
156
|
+
const tokenOut = resolvePancakeToken(outputToken, chain) || outputToken;
|
|
157
|
+
const inputInfo = await getTokenInfo(tokenIn, chain);
|
|
158
|
+
const amountIn = (0, ethers_1.parseUnits)(amount, inputInfo.decimals);
|
|
159
|
+
let bestQuote = null;
|
|
160
|
+
for (const fee of FEE_TIERS) {
|
|
161
|
+
try {
|
|
162
|
+
const result = await quoter.quoteExactInputSingle.staticCall({
|
|
163
|
+
tokenIn,
|
|
164
|
+
tokenOut,
|
|
165
|
+
amountIn,
|
|
166
|
+
fee,
|
|
167
|
+
sqrtPriceLimitX96: 0n,
|
|
168
|
+
});
|
|
169
|
+
const amountOut = result[0];
|
|
170
|
+
const gasEstimate = result[3];
|
|
171
|
+
if (!bestQuote || amountOut > bestQuote.amountOut) {
|
|
172
|
+
bestQuote = { amountOut, fee, gasEstimate };
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (!bestQuote) {
|
|
180
|
+
throw new Error(`No PancakeSwap V3 pool found for ${inputToken} -> ${outputToken} on ${chain}`);
|
|
181
|
+
}
|
|
182
|
+
const outputInfo = await getTokenInfo(tokenOut, chain);
|
|
183
|
+
const outputAmount = (0, ethers_1.formatUnits)(bestQuote.amountOut, outputInfo.decimals);
|
|
184
|
+
const clampedSlippage = Math.max(0, Math.min(slippageBps, 10000));
|
|
185
|
+
const minOut = (bestQuote.amountOut * BigInt(10000 - clampedSlippage)) / 10000n;
|
|
186
|
+
const outputAmountMin = (0, ethers_1.formatUnits)(minOut, outputInfo.decimals);
|
|
187
|
+
logger_1.logger.debug({ chain, inputToken, outputToken, amount, outputAmount, fee: bestQuote.fee }, 'PancakeSwap quote');
|
|
188
|
+
return {
|
|
189
|
+
inputToken: tokenIn,
|
|
190
|
+
outputToken: tokenOut,
|
|
191
|
+
inputAmount: amount,
|
|
192
|
+
outputAmount,
|
|
193
|
+
outputAmountMin,
|
|
194
|
+
priceImpact: 0,
|
|
195
|
+
route: [tokenIn, tokenOut],
|
|
196
|
+
gasEstimate: bestQuote.gasEstimate.toString(),
|
|
197
|
+
feeTier: bestQuote.fee,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
// =============================================================================
|
|
201
|
+
// SWAP EXECUTION
|
|
202
|
+
// =============================================================================
|
|
203
|
+
async function pancakeSwap(params) {
|
|
204
|
+
const { chain, inputToken, outputToken, amount, slippageBps = 50, deadline = Math.floor(Date.now() / 1000) + 1800, } = params;
|
|
205
|
+
const config = CHAIN_CONFIG[chain];
|
|
206
|
+
try {
|
|
207
|
+
const quote = await pancakeQuote({ chain, inputToken, outputToken, amount, slippageBps });
|
|
208
|
+
const wallet = getPancakeWallet(chain);
|
|
209
|
+
const recipient = params.recipient || wallet.address;
|
|
210
|
+
const inputInfo = await getTokenInfo(quote.inputToken, chain);
|
|
211
|
+
const outputInfo = await getTokenInfo(quote.outputToken, chain);
|
|
212
|
+
const amountIn = (0, ethers_1.parseUnits)(amount, inputInfo.decimals);
|
|
213
|
+
const amountOutMin = (0, ethers_1.parseUnits)(quote.outputAmountMin, outputInfo.decimals);
|
|
214
|
+
const isNativeIn = quote.inputToken.toLowerCase() === config.weth.toLowerCase() &&
|
|
215
|
+
(inputToken.toUpperCase() === 'BNB' || inputToken.toUpperCase() === 'ETH' || inputToken.toUpperCase() === 'NATIVE');
|
|
216
|
+
// Approve token if not native
|
|
217
|
+
if (!isNativeIn) {
|
|
218
|
+
const token = new ethers_1.Contract(quote.inputToken, ERC20_ABI, wallet);
|
|
219
|
+
const allowance = await token.allowance(wallet.address, config.swapRouter);
|
|
220
|
+
if (allowance < amountIn) {
|
|
221
|
+
logger_1.logger.info({ token: quote.inputToken, router: config.swapRouter }, 'Approving token for PancakeSwap');
|
|
222
|
+
const approveTx = await token.approve(config.swapRouter, ethers_1.MaxUint256);
|
|
223
|
+
await approveTx.wait();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
const router = new ethers_1.Contract(config.swapRouter, SWAP_ROUTER_ABI, wallet);
|
|
227
|
+
const fee = quote.feeTier || 2500;
|
|
228
|
+
const swapParams = {
|
|
229
|
+
tokenIn: quote.inputToken,
|
|
230
|
+
tokenOut: quote.outputToken,
|
|
231
|
+
fee,
|
|
232
|
+
recipient,
|
|
233
|
+
amountIn,
|
|
234
|
+
amountOutMinimum: amountOutMin,
|
|
235
|
+
sqrtPriceLimitX96: 0n,
|
|
236
|
+
};
|
|
237
|
+
logger_1.logger.info({ chain, inputToken, outputToken, amount, amountOutMin: quote.outputAmountMin }, 'Executing PancakeSwap swap');
|
|
238
|
+
const gasEstimate = quote.gasEstimate ? BigInt(quote.gasEstimate) : 0n;
|
|
239
|
+
const gasLimit = gasEstimate > 0n ? (gasEstimate * 130n) / 100n : 500000n;
|
|
240
|
+
const tx = await router.exactInputSingle(swapParams, {
|
|
241
|
+
value: isNativeIn ? amountIn : 0n,
|
|
242
|
+
gasLimit,
|
|
243
|
+
});
|
|
244
|
+
const receipt = await tx.wait();
|
|
245
|
+
logger_1.logger.info({ txHash: receipt.hash, gasUsed: receipt.gasUsed.toString() }, 'PancakeSwap swap complete');
|
|
246
|
+
return {
|
|
247
|
+
success: true,
|
|
248
|
+
txHash: receipt.hash,
|
|
249
|
+
inputAmount: amount,
|
|
250
|
+
outputAmount: quote.outputAmount,
|
|
251
|
+
gasUsed: receipt.gasUsed.toString(),
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
256
|
+
logger_1.logger.error({ chain, inputToken, outputToken, amount, error: message }, 'PancakeSwap swap failed');
|
|
257
|
+
return {
|
|
258
|
+
success: false,
|
|
259
|
+
inputAmount: amount,
|
|
260
|
+
error: message,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// =============================================================================
|
|
265
|
+
// PRICE UTILITY
|
|
266
|
+
// =============================================================================
|
|
267
|
+
async function pancakeGetPrice(chain, tokenA, tokenB) {
|
|
268
|
+
const quote = await pancakeQuote({
|
|
269
|
+
chain,
|
|
270
|
+
inputToken: tokenA,
|
|
271
|
+
outputToken: tokenB,
|
|
272
|
+
amount: '1',
|
|
273
|
+
});
|
|
274
|
+
const price = parseFloat(quote.outputAmount);
|
|
275
|
+
return {
|
|
276
|
+
price,
|
|
277
|
+
invertedPrice: price > 0 ? 1 / price : 0,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
// =============================================================================
|
|
281
|
+
// BALANCE UTILITY
|
|
282
|
+
// =============================================================================
|
|
283
|
+
async function pancakeGetBalance(token, chain, address) {
|
|
284
|
+
const provider = getPancakeProvider(chain);
|
|
285
|
+
const owner = address || getPancakeWallet(chain).address;
|
|
286
|
+
const tokenAddress = resolvePancakeToken(token, chain) || token;
|
|
287
|
+
const upper = token.toUpperCase();
|
|
288
|
+
if (upper === 'BNB' || upper === 'ETH' || upper === 'NATIVE') {
|
|
289
|
+
const balance = await provider.getBalance(owner);
|
|
290
|
+
return (0, ethers_1.formatUnits)(balance, 18);
|
|
291
|
+
}
|
|
292
|
+
const tokenContract = new ethers_1.Contract(tokenAddress, ERC20_ABI, provider);
|
|
293
|
+
const [balance, decimals] = await Promise.all([
|
|
294
|
+
tokenContract.balanceOf(owner),
|
|
295
|
+
tokenContract.decimals(),
|
|
296
|
+
]);
|
|
297
|
+
return (0, ethers_1.formatUnits)(balance, Number(decimals));
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=pancakeswap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pancakeswap.js","sourceRoot":"","sources":["../../src/evm/pancakeswap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lighter — Orderbook DEX on Arbitrum
|
|
3
|
+
*
|
|
4
|
+
* Full-featured integration for the Lighter on-chain orderbook.
|
|
5
|
+
* Uses REST API via fetch (no npm deps).
|
|
6
|
+
*
|
|
7
|
+
* @see https://docs.lighter.xyz
|
|
8
|
+
*/
|
|
9
|
+
declare const API_URL = "https://api.lighter.xyz";
|
|
10
|
+
export interface LighterConfig {
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
walletAddress: string;
|
|
13
|
+
privateKey: string;
|
|
14
|
+
dryRun?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface LighterMarket {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
baseToken: string;
|
|
20
|
+
quoteToken: string;
|
|
21
|
+
basePrecision: number;
|
|
22
|
+
quotePrecision: number;
|
|
23
|
+
minOrderSize: string;
|
|
24
|
+
status: string;
|
|
25
|
+
}
|
|
26
|
+
export interface LighterOrderbookLevel {
|
|
27
|
+
price: number;
|
|
28
|
+
size: number;
|
|
29
|
+
}
|
|
30
|
+
export interface LighterOrderbook {
|
|
31
|
+
market: string;
|
|
32
|
+
bids: LighterOrderbookLevel[];
|
|
33
|
+
asks: LighterOrderbookLevel[];
|
|
34
|
+
timestamp: number;
|
|
35
|
+
}
|
|
36
|
+
export interface LighterOrder {
|
|
37
|
+
orderId: string;
|
|
38
|
+
market: string;
|
|
39
|
+
side: 'BUY' | 'SELL';
|
|
40
|
+
price: string;
|
|
41
|
+
size: string;
|
|
42
|
+
filled: string;
|
|
43
|
+
status: string;
|
|
44
|
+
timestamp: number;
|
|
45
|
+
}
|
|
46
|
+
export interface LighterPosition {
|
|
47
|
+
market: string;
|
|
48
|
+
side: 'LONG' | 'SHORT';
|
|
49
|
+
size: string;
|
|
50
|
+
entryPrice: string;
|
|
51
|
+
markPrice: string;
|
|
52
|
+
unrealizedPnl: string;
|
|
53
|
+
leverage: string;
|
|
54
|
+
liquidationPrice: string;
|
|
55
|
+
}
|
|
56
|
+
export interface LighterBalance {
|
|
57
|
+
token: string;
|
|
58
|
+
total: string;
|
|
59
|
+
available: string;
|
|
60
|
+
inOrders: string;
|
|
61
|
+
}
|
|
62
|
+
export interface LighterOrderParams {
|
|
63
|
+
market: string;
|
|
64
|
+
side: 'BUY' | 'SELL';
|
|
65
|
+
price?: number;
|
|
66
|
+
size: number;
|
|
67
|
+
type?: 'LIMIT' | 'MARKET';
|
|
68
|
+
reduceOnly?: boolean;
|
|
69
|
+
postOnly?: boolean;
|
|
70
|
+
}
|
|
71
|
+
export interface LighterOrderResult {
|
|
72
|
+
success: boolean;
|
|
73
|
+
orderId?: string;
|
|
74
|
+
error?: string;
|
|
75
|
+
}
|
|
76
|
+
export declare function getMarkets(): Promise<LighterMarket[]>;
|
|
77
|
+
export declare function getOrderbook(market: string, depth?: number): Promise<LighterOrderbook>;
|
|
78
|
+
export declare function getPrice(market: string): Promise<{
|
|
79
|
+
bid: number;
|
|
80
|
+
ask: number;
|
|
81
|
+
mid: number;
|
|
82
|
+
}>;
|
|
83
|
+
export declare function getBalance(config: LighterConfig): Promise<LighterBalance[]>;
|
|
84
|
+
export declare function getPositions(config: LighterConfig): Promise<LighterPosition[]>;
|
|
85
|
+
export declare function getOpenOrders(config: LighterConfig, market?: string): Promise<LighterOrder[]>;
|
|
86
|
+
export declare function placeOrder(config: LighterConfig, params: LighterOrderParams): Promise<LighterOrderResult>;
|
|
87
|
+
export declare function cancelOrder(config: LighterConfig, orderId: string): Promise<{
|
|
88
|
+
success: boolean;
|
|
89
|
+
error?: string;
|
|
90
|
+
}>;
|
|
91
|
+
export declare function cancelAllOrders(config: LighterConfig, market?: string): Promise<{
|
|
92
|
+
success: boolean;
|
|
93
|
+
error?: string;
|
|
94
|
+
}>;
|
|
95
|
+
export { API_URL };
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Lighter — Orderbook DEX on Arbitrum
|
|
4
|
+
*
|
|
5
|
+
* Full-featured integration for the Lighter on-chain orderbook.
|
|
6
|
+
* Uses REST API via fetch (no npm deps).
|
|
7
|
+
*
|
|
8
|
+
* @see https://docs.lighter.xyz
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.API_URL = void 0;
|
|
12
|
+
exports.getMarkets = getMarkets;
|
|
13
|
+
exports.getOrderbook = getOrderbook;
|
|
14
|
+
exports.getPrice = getPrice;
|
|
15
|
+
exports.getBalance = getBalance;
|
|
16
|
+
exports.getPositions = getPositions;
|
|
17
|
+
exports.getOpenOrders = getOpenOrders;
|
|
18
|
+
exports.placeOrder = placeOrder;
|
|
19
|
+
exports.cancelOrder = cancelOrder;
|
|
20
|
+
exports.cancelAllOrders = cancelAllOrders;
|
|
21
|
+
const logger_1 = require("../../utils/logger");
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// CONSTANTS
|
|
24
|
+
// =============================================================================
|
|
25
|
+
const API_URL = 'https://api.lighter.xyz';
|
|
26
|
+
exports.API_URL = API_URL;
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// HTTP HELPER
|
|
29
|
+
// =============================================================================
|
|
30
|
+
async function httpRequest(path, options) {
|
|
31
|
+
const headers = {
|
|
32
|
+
'Content-Type': 'application/json',
|
|
33
|
+
};
|
|
34
|
+
if (options?.apiKey) {
|
|
35
|
+
headers['X-API-Key'] = options.apiKey;
|
|
36
|
+
}
|
|
37
|
+
const response = await fetch(`${API_URL}${path}`, {
|
|
38
|
+
method: options?.method || (options?.body ? 'POST' : 'GET'),
|
|
39
|
+
headers,
|
|
40
|
+
body: options?.body ? JSON.stringify(options.body) : undefined,
|
|
41
|
+
});
|
|
42
|
+
if (!response.ok) {
|
|
43
|
+
const text = await response.text();
|
|
44
|
+
throw new Error(`Lighter API error: ${response.status} ${text}`);
|
|
45
|
+
}
|
|
46
|
+
return response.json();
|
|
47
|
+
}
|
|
48
|
+
// =============================================================================
|
|
49
|
+
// PUBLIC API — MARKET DATA (No Auth)
|
|
50
|
+
// =============================================================================
|
|
51
|
+
async function getMarkets() {
|
|
52
|
+
const data = await httpRequest('/api/v1/markets');
|
|
53
|
+
return data.markets || [];
|
|
54
|
+
}
|
|
55
|
+
async function getOrderbook(market, depth = 20) {
|
|
56
|
+
const data = await httpRequest(`/api/v1/orderbook/${encodeURIComponent(market)}?depth=${depth}`);
|
|
57
|
+
return {
|
|
58
|
+
market,
|
|
59
|
+
bids: (data.bids || []).map(l => ({ price: parseFloat(l.price), size: parseFloat(l.size) })),
|
|
60
|
+
asks: (data.asks || []).map(l => ({ price: parseFloat(l.price), size: parseFloat(l.size) })),
|
|
61
|
+
timestamp: Date.now(),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async function getPrice(market) {
|
|
65
|
+
const ob = await getOrderbook(market, 1);
|
|
66
|
+
const bid = ob.bids[0]?.price || 0;
|
|
67
|
+
const ask = ob.asks[0]?.price || 0;
|
|
68
|
+
const mid = bid && ask ? (bid + ask) / 2 : bid || ask;
|
|
69
|
+
return { bid, ask, mid };
|
|
70
|
+
}
|
|
71
|
+
// =============================================================================
|
|
72
|
+
// PUBLIC API — ACCOUNT (Auth Required)
|
|
73
|
+
// =============================================================================
|
|
74
|
+
async function getBalance(config) {
|
|
75
|
+
const data = await httpRequest(`/api/v1/account/${config.walletAddress}/balances`, { apiKey: config.apiKey });
|
|
76
|
+
return data.balances || [];
|
|
77
|
+
}
|
|
78
|
+
async function getPositions(config) {
|
|
79
|
+
const data = await httpRequest(`/api/v1/account/${config.walletAddress}/positions`, { apiKey: config.apiKey });
|
|
80
|
+
return data.positions || [];
|
|
81
|
+
}
|
|
82
|
+
async function getOpenOrders(config, market) {
|
|
83
|
+
const path = market
|
|
84
|
+
? `/api/v1/account/${config.walletAddress}/orders?market=${encodeURIComponent(market)}&status=open`
|
|
85
|
+
: `/api/v1/account/${config.walletAddress}/orders?status=open`;
|
|
86
|
+
const data = await httpRequest(path, { apiKey: config.apiKey });
|
|
87
|
+
return data.orders || [];
|
|
88
|
+
}
|
|
89
|
+
// =============================================================================
|
|
90
|
+
// PUBLIC API — TRADING (Auth Required)
|
|
91
|
+
// =============================================================================
|
|
92
|
+
async function placeOrder(config, params) {
|
|
93
|
+
if (config.dryRun) {
|
|
94
|
+
logger_1.logger.info({ params }, '[DRY RUN] Would place Lighter order');
|
|
95
|
+
return { success: true, orderId: `dry-${Date.now()}` };
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
const data = await httpRequest('/api/v1/order', {
|
|
99
|
+
method: 'POST',
|
|
100
|
+
apiKey: config.apiKey,
|
|
101
|
+
body: {
|
|
102
|
+
wallet: config.walletAddress,
|
|
103
|
+
market: params.market,
|
|
104
|
+
side: params.side,
|
|
105
|
+
type: params.type || (params.price ? 'LIMIT' : 'MARKET'),
|
|
106
|
+
price: params.price?.toString(),
|
|
107
|
+
size: params.size.toString(),
|
|
108
|
+
reduceOnly: params.reduceOnly || false,
|
|
109
|
+
postOnly: params.postOnly || false,
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
return { success: true, orderId: data.orderId };
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
116
|
+
logger_1.logger.error({ error: message, params }, 'Lighter order failed');
|
|
117
|
+
return { success: false, error: message };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function cancelOrder(config, orderId) {
|
|
121
|
+
if (config.dryRun) {
|
|
122
|
+
logger_1.logger.info({ orderId }, '[DRY RUN] Would cancel Lighter order');
|
|
123
|
+
return { success: true };
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
await httpRequest(`/api/v1/order/${orderId}`, {
|
|
127
|
+
method: 'DELETE',
|
|
128
|
+
apiKey: config.apiKey,
|
|
129
|
+
});
|
|
130
|
+
return { success: true };
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
134
|
+
return { success: false, error: message };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async function cancelAllOrders(config, market) {
|
|
138
|
+
if (config.dryRun) {
|
|
139
|
+
logger_1.logger.info({ market }, '[DRY RUN] Would cancel all Lighter orders');
|
|
140
|
+
return { success: true };
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const orders = await getOpenOrders(config, market);
|
|
144
|
+
for (const order of orders) {
|
|
145
|
+
await cancelOrder(config, order.orderId);
|
|
146
|
+
}
|
|
147
|
+
return { success: true };
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
151
|
+
return { success: false, error: message };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/exchanges/lighter/index.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway/server.d.ts
CHANGED
|
@@ -209,6 +209,15 @@ export interface ServerDb {
|
|
|
209
209
|
lastMessage: string | undefined;
|
|
210
210
|
}>;
|
|
211
211
|
updateSessionTitle?(key: string, title: string): void;
|
|
212
|
+
getSessionMessages?(sessionId: string, options?: {
|
|
213
|
+
limit?: number;
|
|
214
|
+
before?: number;
|
|
215
|
+
}): Array<{
|
|
216
|
+
id: string;
|
|
217
|
+
role: string;
|
|
218
|
+
content: string;
|
|
219
|
+
timestamp: number;
|
|
220
|
+
}>;
|
|
212
221
|
}
|
|
213
222
|
export declare function createServer(config: Config['gateway'] & {
|
|
214
223
|
x402?: Config['x402'];
|