@zeroexcore/trader 1.0.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/README.md +12 -1
  2. package/package.json +5 -1
  3. package/dist/commands/book.d.ts +0 -3
  4. package/dist/commands/book.d.ts.map +0 -1
  5. package/dist/commands/book.js +0 -44
  6. package/dist/commands/book.js.map +0 -1
  7. package/dist/commands/nft/floor.d.ts +0 -3
  8. package/dist/commands/nft/floor.d.ts.map +0 -1
  9. package/dist/commands/nft/floor.js +0 -30
  10. package/dist/commands/nft/floor.js.map +0 -1
  11. package/dist/commands/nft/index.d.ts +0 -3
  12. package/dist/commands/nft/index.d.ts.map +0 -1
  13. package/dist/commands/nft/index.js +0 -14
  14. package/dist/commands/nft/index.js.map +0 -1
  15. package/dist/commands/nft/listings.d.ts +0 -3
  16. package/dist/commands/nft/listings.d.ts.map +0 -1
  17. package/dist/commands/nft/listings.js +0 -37
  18. package/dist/commands/nft/listings.js.map +0 -1
  19. package/dist/commands/nft/popular.d.ts +0 -3
  20. package/dist/commands/nft/popular.d.ts.map +0 -1
  21. package/dist/commands/nft/popular.js +0 -32
  22. package/dist/commands/nft/popular.js.map +0 -1
  23. package/dist/commands/nft/portfolio.d.ts +0 -3
  24. package/dist/commands/nft/portfolio.d.ts.map +0 -1
  25. package/dist/commands/nft/portfolio.js +0 -43
  26. package/dist/commands/nft/portfolio.js.map +0 -1
  27. package/dist/commands/nft/search.d.ts +0 -3
  28. package/dist/commands/nft/search.d.ts.map +0 -1
  29. package/dist/commands/nft/search.js +0 -36
  30. package/dist/commands/nft/search.js.map +0 -1
  31. package/dist/commands/nft.d.ts +0 -3
  32. package/dist/commands/nft.d.ts.map +0 -1
  33. package/dist/commands/nft.js +0 -165
  34. package/dist/commands/nft.js.map +0 -1
  35. package/dist/commands/perps/info.d.ts +0 -3
  36. package/dist/commands/perps/info.d.ts.map +0 -1
  37. package/dist/commands/perps/info.js +0 -51
  38. package/dist/commands/perps/info.js.map +0 -1
  39. package/dist/commands/perps/markets.d.ts +0 -3
  40. package/dist/commands/perps/markets.d.ts.map +0 -1
  41. package/dist/commands/perps/markets.js +0 -43
  42. package/dist/commands/perps/markets.js.map +0 -1
  43. package/dist/commands/perps.d.ts +0 -3
  44. package/dist/commands/perps.d.ts.map +0 -1
  45. package/dist/commands/perps.js +0 -186
  46. package/dist/commands/perps.js.map +0 -1
  47. package/dist/commands/positions/close.d.ts +0 -3
  48. package/dist/commands/positions/close.d.ts.map +0 -1
  49. package/dist/commands/positions/close.js +0 -31
  50. package/dist/commands/positions/close.js.map +0 -1
  51. package/dist/commands/positions/filter.d.ts +0 -3
  52. package/dist/commands/positions/filter.d.ts.map +0 -1
  53. package/dist/commands/positions/filter.js +0 -20
  54. package/dist/commands/positions/filter.js.map +0 -1
  55. package/dist/commands/positions/index.d.ts +0 -3
  56. package/dist/commands/positions/index.d.ts.map +0 -1
  57. package/dist/commands/positions/index.js +0 -22
  58. package/dist/commands/positions/index.js.map +0 -1
  59. package/dist/commands/positions/list.d.ts +0 -3
  60. package/dist/commands/positions/list.d.ts.map +0 -1
  61. package/dist/commands/positions/list.js +0 -38
  62. package/dist/commands/positions/list.js.map +0 -1
  63. package/dist/commands/positions/note.d.ts +0 -3
  64. package/dist/commands/positions/note.d.ts.map +0 -1
  65. package/dist/commands/positions/note.js +0 -19
  66. package/dist/commands/positions/note.js.map +0 -1
  67. package/dist/commands/positions/open.d.ts +0 -3
  68. package/dist/commands/positions/open.d.ts.map +0 -1
  69. package/dist/commands/positions/open.js +0 -47
  70. package/dist/commands/positions/open.js.map +0 -1
  71. package/dist/commands/positions/show.d.ts +0 -3
  72. package/dist/commands/positions/show.d.ts.map +0 -1
  73. package/dist/commands/positions/show.js +0 -46
  74. package/dist/commands/positions/show.js.map +0 -1
  75. package/dist/commands/positions/stats.d.ts +0 -3
  76. package/dist/commands/positions/stats.d.ts.map +0 -1
  77. package/dist/commands/positions/stats.js +0 -27
  78. package/dist/commands/positions/stats.js.map +0 -1
  79. package/dist/commands/positions/tag.d.ts +0 -3
  80. package/dist/commands/positions/tag.d.ts.map +0 -1
  81. package/dist/commands/positions/tag.js +0 -19
  82. package/dist/commands/positions/tag.js.map +0 -1
  83. package/dist/commands/positions/update.d.ts +0 -3
  84. package/dist/commands/positions/update.d.ts.map +0 -1
  85. package/dist/commands/positions/update.js +0 -35
  86. package/dist/commands/positions/update.js.map +0 -1
  87. package/dist/commands/positions.d.ts +0 -3
  88. package/dist/commands/positions.d.ts.map +0 -1
  89. package/dist/commands/positions.js +0 -247
  90. package/dist/commands/positions.js.map +0 -1
  91. package/dist/commands/predict/list.d.ts +0 -3
  92. package/dist/commands/predict/list.d.ts.map +0 -1
  93. package/dist/commands/predict/list.js +0 -46
  94. package/dist/commands/predict/list.js.map +0 -1
  95. package/dist/commands/predict/market.d.ts +0 -3
  96. package/dist/commands/predict/market.d.ts.map +0 -1
  97. package/dist/commands/predict/market.js +0 -37
  98. package/dist/commands/predict/market.js.map +0 -1
  99. package/dist/commands/predict/watch.d.ts +0 -3
  100. package/dist/commands/predict/watch.d.ts.map +0 -1
  101. package/dist/commands/predict/watch.js +0 -73
  102. package/dist/commands/predict/watch.js.map +0 -1
  103. package/dist/commands/predict.d.ts +0 -3
  104. package/dist/commands/predict.d.ts.map +0 -1
  105. package/dist/commands/predict.js +0 -484
  106. package/dist/commands/predict.js.map +0 -1
  107. package/dist/commands/trade/index.d.ts +0 -3
  108. package/dist/commands/trade/index.d.ts.map +0 -1
  109. package/dist/commands/trade/index.js +0 -8
  110. package/dist/commands/trade/index.js.map +0 -1
  111. package/dist/commands/trade/info.d.ts +0 -3
  112. package/dist/commands/trade/info.d.ts.map +0 -1
  113. package/dist/commands/trade/info.js +0 -37
  114. package/dist/commands/trade/info.js.map +0 -1
  115. package/dist/commands/trade/quote.d.ts +0 -3
  116. package/dist/commands/trade/quote.d.ts.map +0 -1
  117. package/dist/commands/trade/quote.js +0 -56
  118. package/dist/commands/trade/quote.js.map +0 -1
  119. package/dist/commands/trade/search.d.ts +0 -3
  120. package/dist/commands/trade/search.d.ts.map +0 -1
  121. package/dist/commands/trade/search.js +0 -22
  122. package/dist/commands/trade/search.js.map +0 -1
  123. package/dist/commands/trade/swap.d.ts +0 -3
  124. package/dist/commands/trade/swap.d.ts.map +0 -1
  125. package/dist/commands/trade/swap.js +0 -70
  126. package/dist/commands/trade/swap.js.map +0 -1
  127. package/dist/commands/trade.d.ts +0 -5
  128. package/dist/commands/trade.d.ts.map +0 -1
  129. package/dist/commands/trade.js +0 -167
  130. package/dist/commands/trade.js.map +0 -1
  131. package/dist/utils/perps/idl.json +0 -7241
@@ -1,56 +0,0 @@
1
- import { Command } from 'commander';
2
- import Big from 'big.js';
3
- import { getTokenDecimals, toSmallestUnit, fromSmallestUnit } from '../../utils/amounts.js';
4
- import { getSwapQuote } from '../../utils/jupiter.js';
5
- import { resolveToken } from '../../utils/token-book.js';
6
- import { output, error } from '../shared.js';
7
- export const quoteCommand = new Command('quote')
8
- .argument('<input-mint>', 'Input token symbol or address')
9
- .argument('<output-mint>', 'Output token symbol or address')
10
- .argument('<amount>', 'Amount in human-readable format')
11
- .description('Get swap quote')
12
- .option('-s, --slippage <bps>', 'Slippage in basis points', '50')
13
- .action(async (inputMintOrTicker, outputMintOrTicker, amount, options) => {
14
- const inputMint = resolveToken(inputMintOrTicker);
15
- const outputMint = resolveToken(outputMintOrTicker);
16
- try {
17
- const decimals = await getTokenDecimals(inputMint);
18
- const amountInSmallestUnit = toSmallestUnit(amount, decimals);
19
- const quote = await getSwapQuote({
20
- inputMint,
21
- outputMint,
22
- amount: parseInt(amountInSmallestUnit),
23
- slippageBps: parseInt(options.slippage),
24
- });
25
- const outputDecimals = await getTokenDecimals(outputMint);
26
- const outputAmount = fromSmallestUnit(quote.outAmount, outputDecimals);
27
- const price = new Big(amount).div(new Big(outputAmount));
28
- const priceImpact = typeof quote.priceImpactPct === 'string'
29
- ? new Big(quote.priceImpactPct).times(100)
30
- : new Big(quote.priceImpactPct).times(100);
31
- const impactNum = parseFloat(priceImpact.toFixed(3));
32
- output({
33
- inputToken: inputMintOrTicker.toUpperCase(),
34
- inputAmount: amount,
35
- outputToken: outputMintOrTicker.toUpperCase(),
36
- outputAmount: new Big(outputAmount).toFixed(6),
37
- price: price.toFixed(6),
38
- priceImpactPct: impactNum,
39
- slippageBps: parseInt(options.slippage),
40
- }, () => {
41
- const impactEmoji = impactNum < 0 ? '⚠️' : '✅';
42
- return [
43
- '📊 Swap Quote:',
44
- ` You pay: ${amount} ${inputMintOrTicker.toUpperCase()}`,
45
- ` You get: ~${new Big(outputAmount).toFixed(4)} ${outputMintOrTicker.toUpperCase()}`,
46
- ` Price: ${price.toFixed(6)} ${inputMintOrTicker.toUpperCase()} per ${outputMintOrTicker.toUpperCase()}`,
47
- ` Price Impact: ${impactEmoji} ${impactNum.toFixed(3)}% (${impactNum < 0 ? 'you lose value' : 'you gain value'})`,
48
- ` Slippage Tolerance: ${new Big(options.slippage).div(100).toFixed(2)}%`,
49
- ].join('\n');
50
- });
51
- }
52
- catch (e) {
53
- error('Failed to get quote', e.message);
54
- }
55
- });
56
- //# sourceMappingURL=quote.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quote.js","sourceRoot":"","sources":["../../../src/commands/trade/quote.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const searchCommand: Command;
3
- //# sourceMappingURL=search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/trade/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAoBtB,CAAC"}
@@ -1,22 +0,0 @@
1
- import { Command } from 'commander';
2
- import { searchToken } from '../../utils/jupiter.js';
3
- import { output, error } from '../shared.js';
4
- export const searchCommand = new Command('search')
5
- .argument('<query>', 'Token name or symbol')
6
- .description('Search for token by name or symbol')
7
- .action(async (query) => {
8
- try {
9
- const tokens = await searchToken(query);
10
- output({ query, results: tokens.map((t) => ({ symbol: t.symbol, name: t.name, address: t.address })) }, () => {
11
- const lines = ['🔍 Search Results:', ''];
12
- for (const t of tokens) {
13
- lines.push(` ${t.symbol.padEnd(10)} ${t.name.slice(0, 30).padEnd(32)} ${t.address}`);
14
- }
15
- return lines.join('\n');
16
- });
17
- }
18
- catch (e) {
19
- error('Search failed', e.message);
20
- }
21
- });
22
- //# sourceMappingURL=search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/trade/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;KAC3C,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;QAExC,MAAM,CACJ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAC/F,GAAG,EAAE;YACH,MAAM,KAAK,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;YACzC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const swapCommand: Command;
3
- //# sourceMappingURL=swap.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,WAAW,SAyEpB,CAAC"}
@@ -1,70 +0,0 @@
1
- import { Connection } from '@solana/web3.js';
2
- import { Command } from 'commander';
3
- import Big from 'big.js';
4
- import { getTokenDecimals, toSmallestUnit } from '../../utils/amounts.js';
5
- import { executeSwap, getSwapQuote } from '../../utils/jupiter.js';
6
- import { resolveToken } from '../../utils/token-book.js';
7
- import { loadKeypairForSigning } from '../../utils/wallet.js';
8
- import { output, error, requirePassword, getRpcUrl } from '../shared.js';
9
- export const swapCommand = new Command('swap')
10
- .argument('<input-mint>', 'Input token symbol or address')
11
- .argument('<output-mint>', 'Output token symbol or address')
12
- .argument('<amount>', 'Amount in human-readable format')
13
- .description('Execute swap')
14
- .option('-s, --slippage <bps>', 'Slippage in basis points', '50')
15
- .option('--priority-fee <lamports>', 'Priority fee in lamports')
16
- .action(async (inputMintOrTicker, outputMintOrTicker, amount, options) => {
17
- const inputMint = resolveToken(inputMintOrTicker);
18
- const outputMint = resolveToken(outputMintOrTicker);
19
- const password = requirePassword();
20
- try {
21
- const rpcUrl = getRpcUrl();
22
- const connection = new Connection(rpcUrl, 'confirmed');
23
- const keypair = loadKeypairForSigning(password);
24
- const decimals = await getTokenDecimals(inputMint);
25
- const amountInSmallestUnit = toSmallestUnit(parseFloat(amount), decimals);
26
- const quote = await getSwapQuote({
27
- inputMint,
28
- outputMint,
29
- amount: parseInt(amountInSmallestUnit),
30
- slippageBps: parseInt(options.slippage),
31
- taker: keypair.publicKey.toBase58(),
32
- });
33
- const outputDecimals = await getTokenDecimals(outputMint);
34
- const outputAmount = parseFloat(quote.outAmount) / Math.pow(10, outputDecimals);
35
- const price = parseFloat(amount) / outputAmount;
36
- const priceImpact = typeof quote.priceImpactPct === 'string'
37
- ? new Big(quote.priceImpactPct).times(100)
38
- : new Big(quote.priceImpactPct).times(100);
39
- const impactNum = parseFloat(priceImpact.toFixed(3));
40
- const signature = await executeSwap(connection, keypair, quote, options.priorityFee ? parseInt(options.priorityFee) : undefined);
41
- output({
42
- success: true,
43
- inputToken: inputMintOrTicker.toUpperCase(),
44
- inputAmount: amount,
45
- outputToken: outputMintOrTicker.toUpperCase(),
46
- outputAmount: outputAmount.toFixed(6),
47
- price: price.toFixed(6),
48
- priceImpactPct: impactNum,
49
- signature,
50
- explorer: `https://solscan.io/tx/${signature}`,
51
- }, () => {
52
- const impactEmoji = impactNum < 0 ? '⚠️' : '✅';
53
- return [
54
- '🔄 Swap Executed:',
55
- ` You paid: ${amount} ${inputMintOrTicker.toUpperCase()}`,
56
- ` You got: ~${outputAmount.toFixed(4)} ${outputMintOrTicker.toUpperCase()}`,
57
- ` Price: ${price.toFixed(6)} ${inputMintOrTicker.toUpperCase()} per ${outputMintOrTicker.toUpperCase()}`,
58
- ` Price Impact: ${impactEmoji} ${impactNum.toFixed(3)}%`,
59
- '',
60
- '✅ Swap successful!',
61
- `📝 Signature: ${signature}`,
62
- `🔗 View on Solscan: https://solscan.io/tx/${signature}`,
63
- ].join('\n');
64
- });
65
- }
66
- catch (e) {
67
- error('Swap failed', e.message);
68
- }
69
- });
70
- //# sourceMappingURL=swap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const tradeCommand: Command;
3
- export declare const searchCommand: Command;
4
- export declare const infoCommand: Command;
5
- //# sourceMappingURL=trade.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trade.d.ts","sourceRoot":"","sources":["../../src/commands/trade.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,YAAY,SAAiE,CAAC;AAgI3F,eAAO,MAAM,aAAa,SAoBtB,CAAC;AAEL,eAAO,MAAM,WAAW,SAkCpB,CAAC"}
@@ -1,167 +0,0 @@
1
- import { Connection } from '@solana/web3.js';
2
- import { Command } from 'commander';
3
- import Big from 'big.js';
4
- import { getTokenDecimals, toSmallestUnit, fromSmallestUnit } from '../utils/amounts.js';
5
- import { executeSwap, getSwapQuote, searchToken } from '../utils/jupiter.js';
6
- import { resolveToken } from '../utils/token-book.js';
7
- import { formatTokenInfo, getTokenInfo } from '../utils/token-info.js';
8
- import { loadKeypairForSigning } from '../utils/wallet.js';
9
- import { output, error, requirePassword, getRpcUrl } from './shared.js';
10
- export const tradeCommand = new Command('trade').description('Execute trades via Jupiter');
11
- tradeCommand
12
- .command('quote <input-mint> <output-mint> <amount>')
13
- .description('Get swap quote (amount in human-readable format, e.g., 400 for 400 USDC)')
14
- .option('-s, --slippage <bps>', 'Slippage in basis points', '50')
15
- .action(async (inputMintOrTicker, outputMintOrTicker, amount, options) => {
16
- const inputMint = resolveToken(inputMintOrTicker);
17
- const outputMint = resolveToken(outputMintOrTicker);
18
- try {
19
- const decimals = await getTokenDecimals(inputMint);
20
- const amountInSmallestUnit = toSmallestUnit(amount, decimals);
21
- const quote = await getSwapQuote({
22
- inputMint,
23
- outputMint,
24
- amount: parseInt(amountInSmallestUnit),
25
- slippageBps: parseInt(options.slippage),
26
- });
27
- const outputDecimals = await getTokenDecimals(outputMint);
28
- const outputAmount = fromSmallestUnit(quote.outAmount, outputDecimals);
29
- const price = new Big(amount).div(new Big(outputAmount));
30
- const priceImpact = typeof quote.priceImpactPct === 'string'
31
- ? new Big(quote.priceImpactPct).times(100)
32
- : new Big(quote.priceImpactPct).times(100);
33
- const impactNum = parseFloat(priceImpact.toFixed(3));
34
- output({
35
- inputToken: inputMintOrTicker.toUpperCase(),
36
- inputAmount: amount,
37
- outputToken: outputMintOrTicker.toUpperCase(),
38
- outputAmount: new Big(outputAmount).toFixed(6),
39
- price: price.toFixed(6),
40
- priceImpactPct: impactNum,
41
- slippageBps: parseInt(options.slippage),
42
- }, () => {
43
- const impactEmoji = impactNum < 0 ? '⚠️' : '✅';
44
- return [
45
- '📊 Swap Quote:',
46
- ` You pay: ${amount} ${inputMintOrTicker.toUpperCase()}`,
47
- ` You get: ~${new Big(outputAmount).toFixed(4)} ${outputMintOrTicker.toUpperCase()}`,
48
- ` Price: ${price.toFixed(6)} ${inputMintOrTicker.toUpperCase()} per ${outputMintOrTicker.toUpperCase()}`,
49
- ` Price Impact: ${impactEmoji} ${impactNum.toFixed(3)}% (${impactNum < 0 ? 'you lose value' : 'you gain value'})`,
50
- ` Slippage Tolerance: ${new Big(options.slippage).div(100).toFixed(2)}%`,
51
- ].join('\n');
52
- });
53
- }
54
- catch (e) {
55
- error('Failed to get quote', e.message);
56
- }
57
- });
58
- tradeCommand
59
- .command('swap <input-mint> <output-mint> <amount>')
60
- .description('Execute swap (amount in human-readable format, e.g., 400 for 400 USDC)')
61
- .option('-s, --slippage <bps>', 'Slippage in basis points', '50')
62
- .option('--priority-fee <lamports>', 'Priority fee in lamports')
63
- .action(async (inputMintOrTicker, outputMintOrTicker, amount, options) => {
64
- const inputMint = resolveToken(inputMintOrTicker);
65
- const outputMint = resolveToken(outputMintOrTicker);
66
- const password = requirePassword();
67
- try {
68
- const rpcUrl = getRpcUrl();
69
- const connection = new Connection(rpcUrl, 'confirmed');
70
- const keypair = loadKeypairForSigning(password);
71
- const decimals = await getTokenDecimals(inputMint);
72
- const amountInSmallestUnit = toSmallestUnit(parseFloat(amount), decimals);
73
- const quote = await getSwapQuote({
74
- inputMint,
75
- outputMint,
76
- amount: parseInt(amountInSmallestUnit),
77
- slippageBps: parseInt(options.slippage),
78
- taker: keypair.publicKey.toBase58(),
79
- });
80
- const outputDecimals = await getTokenDecimals(outputMint);
81
- const outputAmount = parseFloat(quote.outAmount) / Math.pow(10, outputDecimals);
82
- const price = parseFloat(amount) / outputAmount;
83
- const priceImpact = typeof quote.priceImpactPct === 'string'
84
- ? new Big(quote.priceImpactPct).times(100)
85
- : new Big(quote.priceImpactPct).times(100);
86
- const impactNum = parseFloat(priceImpact.toFixed(3));
87
- const signature = await executeSwap(connection, keypair, quote, options.priorityFee ? parseInt(options.priorityFee) : undefined);
88
- output({
89
- success: true,
90
- inputToken: inputMintOrTicker.toUpperCase(),
91
- inputAmount: amount,
92
- outputToken: outputMintOrTicker.toUpperCase(),
93
- outputAmount: outputAmount.toFixed(6),
94
- price: price.toFixed(6),
95
- priceImpactPct: impactNum,
96
- signature,
97
- explorer: `https://solscan.io/tx/${signature}`,
98
- }, () => {
99
- const impactEmoji = impactNum < 0 ? '⚠️' : '✅';
100
- return [
101
- '🔄 Swap Executed:',
102
- ` You paid: ${amount} ${inputMintOrTicker.toUpperCase()}`,
103
- ` You got: ~${outputAmount.toFixed(4)} ${outputMintOrTicker.toUpperCase()}`,
104
- ` Price: ${price.toFixed(6)} ${inputMintOrTicker.toUpperCase()} per ${outputMintOrTicker.toUpperCase()}`,
105
- ` Price Impact: ${impactEmoji} ${impactNum.toFixed(3)}%`,
106
- '',
107
- '✅ Swap successful!',
108
- `📝 Signature: ${signature}`,
109
- `🔗 View on Solscan: https://solscan.io/tx/${signature}`,
110
- ].join('\n');
111
- });
112
- }
113
- catch (e) {
114
- error('Swap failed', e.message);
115
- }
116
- });
117
- export const searchCommand = new Command('search')
118
- .argument('<query>', 'Token name or symbol')
119
- .description('Search for token by name or symbol')
120
- .action(async (query) => {
121
- try {
122
- const tokens = await searchToken(query);
123
- output({ query, results: tokens.map((t) => ({ symbol: t.symbol, name: t.name, address: t.address })) }, () => {
124
- const lines = ['🔍 Search Results:', ''];
125
- for (const t of tokens) {
126
- lines.push(` ${t.symbol.padEnd(10)} ${t.name.slice(0, 30).padEnd(32)} ${t.address}`);
127
- }
128
- return lines.join('\n');
129
- });
130
- }
131
- catch (e) {
132
- error('Search failed', e.message);
133
- }
134
- });
135
- export const infoCommand = new Command('info')
136
- .argument('<token>', 'Token symbol or address')
137
- .description('Get detailed token information by symbol or address')
138
- .action(async (tokenOrTicker) => {
139
- try {
140
- const tokenAddress = resolveToken(tokenOrTicker);
141
- const info = await getTokenInfo(tokenAddress);
142
- output({
143
- ...info,
144
- explorers: {
145
- solscan: `https://solscan.io/token/${info.address}`,
146
- solanaExplorer: `https://explorer.solana.com/address/${info.address}`,
147
- dexscreener: info.markets?.[0]?.pair ? `https://dexscreener.com/solana/${info.markets[0].pair}` : null,
148
- },
149
- }, () => {
150
- const formatted = formatTokenInfo(info);
151
- const links = [
152
- '',
153
- '🔗 EXPLORERS',
154
- ` Solscan: https://solscan.io/token/${info.address}`,
155
- ` Solana Explorer: https://explorer.solana.com/address/${info.address}`,
156
- ];
157
- if (info.markets && info.markets.length > 0) {
158
- links.push(` DexScreener: https://dexscreener.com/solana/${info.markets[0].pair}`);
159
- }
160
- return formatted + links.join('\n');
161
- });
162
- }
163
- catch (e) {
164
- error('Failed to get token info', e.message);
165
- }
166
- });
167
- //# sourceMappingURL=trade.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trade.js","sourceRoot":"","sources":["../../src/commands/trade.ts"],"names":[],"mappings":"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"}