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.
Files changed (115) hide show
  1. package/README.md +79 -47
  2. package/dist/agents/handlers/kalshi.d.ts +1 -2
  3. package/dist/agents/handlers/kalshi.js +369 -616
  4. package/dist/agents/handlers/kalshi.js.map +1 -1
  5. package/dist/agents/handlers/types.d.ts +1 -1
  6. package/dist/agents/index.d.ts +1 -1
  7. package/dist/agents/index.js +435 -710
  8. package/dist/agents/index.js.map +1 -1
  9. package/dist/bittensor/index.d.ts +3 -2
  10. package/dist/bittensor/index.js +44 -5
  11. package/dist/bittensor/index.js.map +1 -1
  12. package/dist/cli/commands/gateway.js +37 -2
  13. package/dist/cli/commands/gateway.js.map +1 -1
  14. package/dist/cli/commands/index.js +3 -2
  15. package/dist/cli/commands/index.js.map +1 -1
  16. package/dist/cli/index.js +6 -4
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cron/index.d.ts +1 -1
  19. package/dist/cron/index.js +26 -34
  20. package/dist/cron/index.js.map +1 -1
  21. package/dist/db/index.d.ts +12 -0
  22. package/dist/db/index.js +51 -23
  23. package/dist/db/index.js.map +1 -1
  24. package/dist/db/migrations.js +36 -0
  25. package/dist/db/migrations.js.map +1 -1
  26. package/dist/evm/index.d.ts +1 -0
  27. package/dist/evm/index.js +2 -0
  28. package/dist/evm/index.js.map +1 -1
  29. package/dist/evm/pancakeswap.d.ts +55 -0
  30. package/dist/evm/pancakeswap.js +299 -0
  31. package/dist/evm/pancakeswap.js.map +1 -0
  32. package/dist/exchanges/lighter/index.d.ts +95 -0
  33. package/dist/exchanges/lighter/index.js +154 -0
  34. package/dist/exchanges/lighter/index.js.map +1 -0
  35. package/dist/gateway/server.d.ts +9 -0
  36. package/dist/gateway/server.js +208 -1
  37. package/dist/gateway/server.js.map +1 -1
  38. package/dist/gateway/signal-bus.d.ts +2 -43
  39. package/dist/gateway/signal-bus.js.map +1 -1
  40. package/dist/index.js +40 -3
  41. package/dist/index.js.map +1 -1
  42. package/dist/mcp/security.d.ts +44 -0
  43. package/dist/mcp/security.js +143 -0
  44. package/dist/mcp/security.js.map +1 -0
  45. package/dist/mcp/server.js +27 -2
  46. package/dist/mcp/server.js.map +1 -1
  47. package/dist/services/alt-data/index.d.ts +1 -1
  48. package/dist/sessions/index.js +66 -7
  49. package/dist/sessions/index.js.map +1 -1
  50. package/dist/signal-router/router.d.ts +1 -1
  51. package/dist/signal-router/types.d.ts +1 -1
  52. package/dist/skills/bundled/arbitrage/index.js +96 -63
  53. package/dist/skills/bundled/arbitrage/index.js.map +1 -1
  54. package/dist/skills/bundled/betfair/index.js +121 -83
  55. package/dist/skills/bundled/betfair/index.js.map +1 -1
  56. package/dist/skills/bundled/bridge/index.js +42 -13
  57. package/dist/skills/bundled/bridge/index.js.map +1 -1
  58. package/dist/skills/bundled/crypto-hft/index.js +267 -226
  59. package/dist/skills/bundled/crypto-hft/index.js.map +1 -1
  60. package/dist/skills/bundled/drift/index.js +83 -52
  61. package/dist/skills/bundled/drift/index.js.map +1 -1
  62. package/dist/skills/bundled/embeddings/index.js +87 -49
  63. package/dist/skills/bundled/embeddings/index.js.map +1 -1
  64. package/dist/skills/bundled/execution/index.js +47 -25
  65. package/dist/skills/bundled/execution/index.js.map +1 -1
  66. package/dist/skills/bundled/feeds/index.js +45 -25
  67. package/dist/skills/bundled/feeds/index.js.map +1 -1
  68. package/dist/skills/bundled/hyperliquid/index.js +91 -45
  69. package/dist/skills/bundled/hyperliquid/index.js.map +1 -1
  70. package/dist/skills/bundled/integrations/index.js +2 -1
  71. package/dist/skills/bundled/integrations/index.js.map +1 -1
  72. package/dist/skills/bundled/kamino/index.js +71 -43
  73. package/dist/skills/bundled/kamino/index.js.map +1 -1
  74. package/dist/skills/bundled/lighter/index.d.ts +19 -0
  75. package/dist/skills/bundled/lighter/index.js +385 -0
  76. package/dist/skills/bundled/lighter/index.js.map +1 -0
  77. package/dist/skills/bundled/marginfi/index.d.ts +21 -0
  78. package/dist/skills/bundled/marginfi/index.js +387 -0
  79. package/dist/skills/bundled/marginfi/index.js.map +1 -0
  80. package/dist/skills/bundled/opinion/index.js +44 -25
  81. package/dist/skills/bundled/opinion/index.js.map +1 -1
  82. package/dist/skills/bundled/pancakeswap/index.d.ts +19 -0
  83. package/dist/skills/bundled/pancakeswap/index.js +260 -0
  84. package/dist/skills/bundled/pancakeswap/index.js.map +1 -0
  85. package/dist/skills/bundled/setup/index.d.ts +16 -0
  86. package/dist/skills/bundled/setup/index.js +427 -0
  87. package/dist/skills/bundled/setup/index.js.map +1 -0
  88. package/dist/skills/bundled/solend/index.d.ts +22 -0
  89. package/dist/skills/bundled/solend/index.js +401 -0
  90. package/dist/skills/bundled/solend/index.js.map +1 -0
  91. package/dist/skills/bundled/trading-evm/index.js +42 -11
  92. package/dist/skills/bundled/trading-evm/index.js.map +1 -1
  93. package/dist/skills/errors.d.ts +20 -0
  94. package/dist/skills/errors.js +84 -0
  95. package/dist/skills/errors.js.map +1 -0
  96. package/dist/skills/executor.d.ts +1 -1
  97. package/dist/skills/executor.js +515 -41
  98. package/dist/skills/executor.js.map +1 -1
  99. package/dist/skills/help.d.ts +33 -0
  100. package/dist/skills/help.js +73 -0
  101. package/dist/skills/help.js.map +1 -0
  102. package/dist/solana/marginfi.d.ts +112 -0
  103. package/dist/solana/marginfi.js +340 -0
  104. package/dist/solana/marginfi.js.map +1 -0
  105. package/dist/solana/solend.d.ts +120 -0
  106. package/dist/solana/solend.js +261 -0
  107. package/dist/solana/solend.js.map +1 -0
  108. package/dist/trading/bridge.d.ts +1 -1
  109. package/dist/trading/position-bridge.d.ts +1 -1
  110. package/dist/types/signal-bus.d.ts +48 -0
  111. package/dist/types/signal-bus.js +9 -0
  112. package/dist/types/signal-bus.js.map +1 -0
  113. package/dist/types.d.ts +17 -0
  114. package/dist/utils/json-utils.d.ts +8 -8
  115. 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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"}
@@ -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'];