fuego-cli 1.3.1 → 1.4.1
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 +71 -7
- package/dist/commands/balance.d.ts.map +1 -1
- package/dist/commands/balance.js +34 -26
- package/dist/commands/balance.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +2 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/jupiter-quote.d.ts +7 -0
- package/dist/commands/jupiter-quote.d.ts.map +1 -0
- package/dist/commands/jupiter-quote.js +101 -0
- package/dist/commands/jupiter-quote.js.map +1 -0
- package/dist/commands/jupiter-swap.d.ts +8 -0
- package/dist/commands/jupiter-swap.d.ts.map +1 -0
- package/dist/commands/jupiter-swap.js +120 -0
- package/dist/commands/jupiter-swap.js.map +1 -0
- package/dist/commands/purch.d.ts +1 -0
- package/dist/commands/purch.d.ts.map +1 -1
- package/dist/commands/purch.js +13 -3
- package/dist/commands/purch.js.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/fuego-cli-1.4.1.tgz +0 -0
- package/package.json +1 -1
- package/src/commands/balance.ts +51 -34
- package/src/commands/create.ts +2 -1
- package/src/commands/jupiter-quote.ts +122 -0
- package/src/commands/jupiter-swap.ts +146 -0
- package/src/commands/purch.ts +17 -3
- package/src/index.ts +22 -0
- package/fuego-cli-1.3.1.tgz +0 -0
package/README.md
CHANGED
|
@@ -69,11 +69,13 @@ fuego dashboard
|
|
|
69
69
|
|---------|-------------|
|
|
70
70
|
| `fuego create` | Create a new Solana wallet |
|
|
71
71
|
| `fuego address` | Show your wallet address |
|
|
72
|
-
| `fuego balance` | Check SOL
|
|
72
|
+
| `fuego balance` | Check all token balances (SOL + SPL tokens) |
|
|
73
73
|
| `fuego rpc` | Show or configure your Solana RPC endpoint |
|
|
74
74
|
| `fuego contacts` | Manage your contacts |
|
|
75
75
|
| `fuego fund` | Show funding options: MoonPay link + QR code |
|
|
76
76
|
| `fuego send` | Send SOL, USDC, or USDT to an address or contact |
|
|
77
|
+
| `fuego jupiter quote` | Get swap quotes from Jupiter |
|
|
78
|
+
| `fuego jupiter swap` | Execute token swaps via Jupiter |
|
|
77
79
|
| `fuego purch` | Purchase products via x402 (Amazon, Shopify, etc.) |
|
|
78
80
|
|
|
79
81
|
### Project Management
|
|
@@ -115,7 +117,7 @@ fuego create --name prod-wallet
|
|
|
115
117
|
|
|
116
118
|
### `fuego balance`
|
|
117
119
|
|
|
118
|
-
Check balances via the Fuego server.
|
|
120
|
+
Check all token balances via the Fuego server. Shows SOL plus all SPL tokens in your wallet.
|
|
119
121
|
|
|
120
122
|
```bash
|
|
121
123
|
fuego balance
|
|
@@ -129,9 +131,9 @@ fuego bal
|
|
|
129
131
|
|
|
130
132
|
Address: DmFy...eUZF
|
|
131
133
|
|
|
132
|
-
- SOL:
|
|
133
|
-
- USDC:
|
|
134
|
-
-
|
|
134
|
+
- SOL: 0.105113976
|
|
135
|
+
- USDC: 28.85
|
|
136
|
+
- BONK: 712,687.68
|
|
135
137
|
```
|
|
136
138
|
|
|
137
139
|
---
|
|
@@ -306,9 +308,58 @@ fuego send melanie 5 --token USDT --yes
|
|
|
306
308
|
|
|
307
309
|
---
|
|
308
310
|
|
|
311
|
+
### `fuego jupiter quote <amount>`
|
|
312
|
+
|
|
313
|
+
Get a swap quote from Jupiter for any supported token pair.
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
# Quote SOL to USDC
|
|
317
|
+
fuego jupiter quote 0.5 --input SOL --output USDC
|
|
318
|
+
|
|
319
|
+
# Quote USDC to BONK
|
|
320
|
+
fuego jupiter quote 100 --input USDC --output BONK
|
|
321
|
+
|
|
322
|
+
# Quote using full mint addresses
|
|
323
|
+
fuego jupiter quote 1.0 --input SOL --output DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Options:**
|
|
327
|
+
- `-i, --input <token>` — **Required.** Input token symbol (SOL, USDC, USDT, BONK, JUP) or full mint address
|
|
328
|
+
- `-o, --output <token>` — **Required.** Output token symbol or full mint address
|
|
329
|
+
|
|
330
|
+
**Output:** Shows expected output amount, price impact, and routing information.
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
### `fuego jupiter swap <amount>`
|
|
335
|
+
|
|
336
|
+
Execute a token swap via Jupiter.
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
# Swap SOL to USDC (preview only)
|
|
340
|
+
fuego jupiter swap 0.5 --input SOL --output USDC
|
|
341
|
+
|
|
342
|
+
# Swap SOL to BONK (with confirmation)
|
|
343
|
+
fuego jupiter swap 0.05 --input SOL --output BONK --yes
|
|
344
|
+
|
|
345
|
+
# Swap USDC to random token by mint address
|
|
346
|
+
fuego jupiter swap 10 --input USDC --output <mint-address> --yes
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
**Options:**
|
|
350
|
+
- `-i, --input <token>` — **Required.** Input token symbol or full mint address
|
|
351
|
+
- `-o, --output <token>` — **Required.** Output token symbol or full mint address
|
|
352
|
+
- `-y, --yes` — Skip confirmation and execute immediately
|
|
353
|
+
|
|
354
|
+
**Supported Tokens:** SOL, USDC, USDT, BONK, JUP (or any token by full mint address)
|
|
355
|
+
|
|
356
|
+
**Note:** For unknown tokens, provide the full 44-character mint address. The dashboard caches the top 100 tokens for symbol lookups.
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
309
360
|
### `fuego purch <product-url>`
|
|
310
361
|
|
|
311
|
-
Purchase products via x402/Purch.xyz (Amazon
|
|
362
|
+
Purchase products via x402/Purch.xyz (Amazon) using USDC on Solana.
|
|
312
363
|
|
|
313
364
|
```bash
|
|
314
365
|
# Purchase from Amazon
|
|
@@ -320,7 +371,8 @@ fuego purch https://amazon.com/dp/B071G6PFDR \
|
|
|
320
371
|
--city "Austin" \
|
|
321
372
|
--state TX \
|
|
322
373
|
--postal-code 78701 \
|
|
323
|
-
--country US
|
|
374
|
+
--country US \
|
|
375
|
+
--max-price 1000
|
|
324
376
|
```
|
|
325
377
|
|
|
326
378
|
**Required Options:**
|
|
@@ -334,6 +386,18 @@ fuego purch https://amazon.com/dp/B071G6PFDR \
|
|
|
334
386
|
**Optional:**
|
|
335
387
|
- `--address-line2 <address>` — Apartment, suite, etc.
|
|
336
388
|
- `--country <code>` — Country code (default: US)
|
|
389
|
+
- `--max-price <cents>` — Maximum price in cents (e.g., `1000` = $10.00). **Required** for URL-based products.
|
|
390
|
+
|
|
391
|
+
**Important Notes:**
|
|
392
|
+
|
|
393
|
+
⚠️ **URL Format:** Use the **full Amazon URL**, not abbreviated links (like `a.co/...`). Full URLs look like:
|
|
394
|
+
- ✅ `https://www.amazon.com/dp/B0CJ44HMBF?th=1`
|
|
395
|
+
- ❌ `https://a.co/d/0ewxA3W7` (abbreviated links won't work)
|
|
396
|
+
|
|
397
|
+
⚠️ **Max Price:** For Amazon/Shopify products, `--max-price` is required. Enter the amount in cents:
|
|
398
|
+
- `$5.00` → `--max-price 500`
|
|
399
|
+
- `$10.00` → `--max-price 1000`
|
|
400
|
+
- `$25.50` → `--max-price 2550`
|
|
337
401
|
|
|
338
402
|
**How it works:**
|
|
339
403
|
1. Sends product URL and shipping info to Purch.xyz
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AA4BA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsEpD"}
|
package/dist/commands/balance.js
CHANGED
|
@@ -14,44 +14,52 @@ export async function balanceCommand() {
|
|
|
14
14
|
try {
|
|
15
15
|
const publicKey = config.publicKey;
|
|
16
16
|
const network = 'mainnet-beta';
|
|
17
|
-
// Query
|
|
18
|
-
const
|
|
17
|
+
// Query all tokens via /tokens endpoint
|
|
18
|
+
const tokensResponse = await fetch(`${FUEGO_SERVER_URL}/tokens`, {
|
|
19
19
|
method: 'POST',
|
|
20
20
|
headers: { 'Content-Type': 'application/json' },
|
|
21
21
|
body: JSON.stringify({ network, address: publicKey })
|
|
22
22
|
});
|
|
23
|
-
const
|
|
24
|
-
const solBalance = solData.success ? solData.data.sol : 0;
|
|
25
|
-
// Query USDC balance
|
|
26
|
-
const usdcResponse = await fetch(`${FUEGO_SERVER_URL}/usdc-balance`, {
|
|
27
|
-
method: 'POST',
|
|
28
|
-
headers: { 'Content-Type': 'application/json' },
|
|
29
|
-
body: JSON.stringify({ network, address: publicKey })
|
|
30
|
-
});
|
|
31
|
-
const usdcData = await usdcResponse.json();
|
|
32
|
-
const usdcBalance = usdcData.success ? parseFloat(usdcData.data.ui_amount) : 0;
|
|
33
|
-
// Query USDT balance
|
|
34
|
-
const usdtResponse = await fetch(`${FUEGO_SERVER_URL}/usdt-balance`, {
|
|
35
|
-
method: 'POST',
|
|
36
|
-
headers: { 'Content-Type': 'application/json' },
|
|
37
|
-
body: JSON.stringify({ network, address: publicKey })
|
|
38
|
-
});
|
|
39
|
-
const usdtData = await usdtResponse.json();
|
|
40
|
-
const usdtBalance = usdtData.success ? parseFloat(usdtData.data.ui_amount) : 0;
|
|
23
|
+
const tokensData = await tokensResponse.json();
|
|
41
24
|
spinner.stop();
|
|
42
|
-
|
|
25
|
+
if (!tokensData.success || !tokensData.data) {
|
|
26
|
+
console.log(chalk.red('❌ Failed to fetch balances from server'));
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
const { sol_balance, tokens } = tokensData.data;
|
|
30
|
+
// Build balance lines
|
|
31
|
+
const balanceLines = [
|
|
43
32
|
`Address: ${formatPublicKey(publicKey)}`,
|
|
44
33
|
'',
|
|
45
|
-
`${chalk.yellow('- SOL:')} ${chalk.white(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
34
|
+
`${chalk.yellow('- SOL:')} ${chalk.white(sol_balance.toFixed(9))}`,
|
|
35
|
+
];
|
|
36
|
+
// Add each token balance
|
|
37
|
+
for (const token of tokens) {
|
|
38
|
+
const formattedAmount = token.ui_amount.toLocaleString('en-US', {
|
|
39
|
+
minimumFractionDigits: 2,
|
|
40
|
+
maximumFractionDigits: token.decimals > 6 ? 6 : token.decimals
|
|
41
|
+
});
|
|
42
|
+
// Color-code common tokens
|
|
43
|
+
let tokenColor = chalk.white;
|
|
44
|
+
if (token.symbol === 'USDC')
|
|
45
|
+
tokenColor = chalk.green;
|
|
46
|
+
else if (token.symbol === 'USDT')
|
|
47
|
+
tokenColor = chalk.cyan;
|
|
48
|
+
else if (token.symbol === 'BONK')
|
|
49
|
+
tokenColor = chalk.magenta;
|
|
50
|
+
balanceLines.push(`${tokenColor(`- ${token.symbol}:`)} ${chalk.white(formattedAmount)}`);
|
|
51
|
+
}
|
|
52
|
+
// If no tokens found, note that
|
|
53
|
+
if (tokens.length === 0) {
|
|
54
|
+
balanceLines.push(chalk.gray('(No SPL tokens found)'));
|
|
55
|
+
}
|
|
56
|
+
showInfo('💰 Your Balances', balanceLines);
|
|
49
57
|
flameDivider();
|
|
50
58
|
}
|
|
51
59
|
catch (error) {
|
|
52
60
|
spinner.stop();
|
|
53
61
|
console.log(chalk.red(`\n❌ Failed to fetch balances: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
54
|
-
console.log(chalk.gray('\nMake sure the Fuego server is running:
|
|
62
|
+
console.log(chalk.gray('\nMake sure the Fuego server is running: fuego serve'));
|
|
55
63
|
process.exit(1);
|
|
56
64
|
}
|
|
57
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFzE"}
|
package/dist/commands/create.js
CHANGED
|
@@ -37,7 +37,8 @@ export async function createCommand(options) {
|
|
|
37
37
|
fs.writeJsonSync(configPath, {
|
|
38
38
|
...existingConfig,
|
|
39
39
|
network: existingConfig.network || 'mainnet',
|
|
40
|
-
rpcUrl: existingConfig.rpcUrl || 'https://api.mainnet-beta.solana.com'
|
|
40
|
+
rpcUrl: existingConfig.rpcUrl || 'https://api.mainnet-beta.solana.com',
|
|
41
|
+
jupiterKey: existingConfig.jupiterKey || ''
|
|
41
42
|
}, { spaces: 2 });
|
|
42
43
|
// Create address book directory and empty file
|
|
43
44
|
const contactsDir = options.directory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxG,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpG,OAAO,EAAE,MAAM,UAAU,CAAC;AAQ1B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS;IAExB,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,iCAAiC;QACvC,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS;YAClC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,cAAc;YACpC,CAAC,CAAC,aAAa,EAAE,CAAC;QAEpB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;QAE3C,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,WAAW,CAAC,iHAAiH,CAAC,CAAC;YAC/H,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,GAAG,kCAAkC,CAAC;QAClD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAEtB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAElE,+BAA+B;QAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS;YAClC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,cAAc;YACpC,CAAC,CAAC,aAAa,EAAE,CAAC;QAEpB,2DAA2D;QAC3D,IAAI,cAAc,GAAQ,EAAE,CAAC;QAC7B,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QAED,qDAAqD;QACrD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE;YAC3B,GAAG,cAAc;YACjB,OAAO,EAAE,cAAc,CAAC,OAAO,IAAI,SAAS;YAC5C,MAAM,EAAE,cAAc,CAAC,MAAM,IAAI,qCAAqC;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jupiter-quote.d.ts","sourceRoot":"","sources":["../../src/commands/jupiter-quote.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAsBD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0F9F"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { loadWalletConfig, findFuegoPath } from '../lib/config.js';
|
|
5
|
+
import { showInfo, showError, flameDivider } from '../lib/ascii.js';
|
|
6
|
+
const TOKEN_MINTS = {
|
|
7
|
+
'SOL': 'So11111111111111111111111111111111111111112',
|
|
8
|
+
'USDC': 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
|
9
|
+
'USDT': 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
|
|
10
|
+
'BONK': 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263',
|
|
11
|
+
'JUP': 'JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN',
|
|
12
|
+
};
|
|
13
|
+
function resolveToken(token) {
|
|
14
|
+
const upper = token.toUpperCase();
|
|
15
|
+
if (TOKEN_MINTS[upper]) {
|
|
16
|
+
return TOKEN_MINTS[upper];
|
|
17
|
+
}
|
|
18
|
+
// If it's a full mint address, use it directly
|
|
19
|
+
if (token.length === 44) {
|
|
20
|
+
return token;
|
|
21
|
+
}
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
export async function jupiterQuoteCommand(amount, options) {
|
|
25
|
+
console.log();
|
|
26
|
+
// Validate amount
|
|
27
|
+
if (!amount) {
|
|
28
|
+
console.log(chalk.red('❌ Usage: fuego jupiter quote <amount> --input SOL --output USDC'));
|
|
29
|
+
console.log(chalk.gray('\nExamples:'));
|
|
30
|
+
console.log(chalk.gray(' fuego jupiter quote 0.5 --input SOL --output USDC'));
|
|
31
|
+
console.log(chalk.gray(' fuego jupiter quote 10 --input USDC --output BONK'));
|
|
32
|
+
console.log(chalk.gray('\nSupported tokens: SOL, USDC, USDT, BONK, JUP'));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
const amountNum = parseFloat(amount);
|
|
36
|
+
if (isNaN(amountNum) || amountNum <= 0) {
|
|
37
|
+
console.log(chalk.red('❌ Invalid amount. Please provide a positive number.'));
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
// Validate tokens
|
|
41
|
+
if (!options.input || !options.output) {
|
|
42
|
+
console.log(chalk.red('❌ Both --input and --output tokens are required.'));
|
|
43
|
+
console.log(chalk.gray('Example: --input SOL --output USDC'));
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
const inputMint = resolveToken(options.input);
|
|
47
|
+
const outputMint = resolveToken(options.output);
|
|
48
|
+
if (!inputMint) {
|
|
49
|
+
console.log(chalk.red(`❌ Unknown input token: ${options.input}`));
|
|
50
|
+
console.log(chalk.gray('Supported: SOL, USDC, USDT, BONK, JUP'));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
if (!outputMint) {
|
|
54
|
+
console.log(chalk.red(`❌ Unknown output token: ${options.output}`));
|
|
55
|
+
console.log(chalk.gray('Supported: SOL, USDC, USDT, BONK, JUP'));
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
// Load wallet
|
|
59
|
+
const walletConfig = loadWalletConfig();
|
|
60
|
+
if (!walletConfig) {
|
|
61
|
+
console.log(chalk.red('❌ No wallet found. Run "fuego create" first.'));
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
showInfo('🪐 Jupiter Quote', [
|
|
65
|
+
`From: ${chalk.cyan(options.input.toUpperCase())}`,
|
|
66
|
+
`To: ${chalk.cyan(options.output.toUpperCase())}`,
|
|
67
|
+
`Amount: ${chalk.yellow(amount)}`,
|
|
68
|
+
`Network: ${chalk.gray('mainnet-beta')}`
|
|
69
|
+
]);
|
|
70
|
+
console.log();
|
|
71
|
+
console.log(chalk.blue('⏳ Fetching quote from Jupiter...'));
|
|
72
|
+
// Find fuego path and call script
|
|
73
|
+
const fuegoPath = findFuegoPath();
|
|
74
|
+
if (!fuegoPath) {
|
|
75
|
+
showError('Fuego installation not found. Run "fuego install" first.');
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
const scriptPath = path.join(fuegoPath, 'scripts', 'jupiter', 'jupiter_price.mjs');
|
|
79
|
+
const nodeProcess = spawn('node', [
|
|
80
|
+
scriptPath,
|
|
81
|
+
'--input', options.input,
|
|
82
|
+
'--output', options.output,
|
|
83
|
+
'--amount', amount
|
|
84
|
+
]);
|
|
85
|
+
nodeProcess.stdout.on('data', (data) => {
|
|
86
|
+
process.stdout.write(data);
|
|
87
|
+
});
|
|
88
|
+
nodeProcess.stderr.on('data', (data) => {
|
|
89
|
+
process.stderr.write(data);
|
|
90
|
+
});
|
|
91
|
+
nodeProcess.on('close', (code) => {
|
|
92
|
+
if (code === 0) {
|
|
93
|
+
flameDivider();
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
showError('Failed to fetch quote');
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=jupiter-quote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jupiter-quote.js","sourceRoot":"","sources":["../../src/commands/jupiter-quote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jupiter-swap.d.ts","sourceRoot":"","sources":["../../src/commands/jupiter-swap.ts"],"names":[],"mappings":"AAMA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAqBD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkH5F"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { loadWalletConfig, findFuegoPath } from '../lib/config.js';
|
|
5
|
+
import { showSuccess, showInfo, showError, flameDivider } from '../lib/ascii.js';
|
|
6
|
+
const TOKEN_MINTS = {
|
|
7
|
+
'SOL': 'So11111111111111111111111111111111111111112',
|
|
8
|
+
'USDC': 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
|
9
|
+
'USDT': 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
|
|
10
|
+
'BONK': 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263',
|
|
11
|
+
'JUP': 'JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN',
|
|
12
|
+
};
|
|
13
|
+
function resolveToken(token) {
|
|
14
|
+
const upper = token.toUpperCase();
|
|
15
|
+
if (TOKEN_MINTS[upper]) {
|
|
16
|
+
return TOKEN_MINTS[upper];
|
|
17
|
+
}
|
|
18
|
+
if (token.length === 44) {
|
|
19
|
+
return token;
|
|
20
|
+
}
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
export async function jupiterSwapCommand(amount, options) {
|
|
24
|
+
console.log();
|
|
25
|
+
// Validate amount
|
|
26
|
+
if (!amount) {
|
|
27
|
+
console.log(chalk.red('❌ Usage: fuego jupiter swap <amount> --input SOL --output USDC [--yes]'));
|
|
28
|
+
console.log(chalk.gray('\nExamples:'));
|
|
29
|
+
console.log(chalk.gray(' fuego jupiter swap 0.5 --input SOL --output USDC'));
|
|
30
|
+
console.log(chalk.gray(' fuego jupiter swap 10 --input USDC --output BONK --yes'));
|
|
31
|
+
console.log(chalk.gray('\nSupported tokens: SOL, USDC, USDT, BONK, JUP'));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
const amountNum = parseFloat(amount);
|
|
35
|
+
if (isNaN(amountNum) || amountNum <= 0) {
|
|
36
|
+
console.log(chalk.red('❌ Invalid amount. Please provide a positive number.'));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
// Validate tokens
|
|
40
|
+
if (!options.input || !options.output) {
|
|
41
|
+
console.log(chalk.red('❌ Both --input and --output tokens are required.'));
|
|
42
|
+
console.log(chalk.gray('Example: --input SOL --output USDC'));
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
const inputMint = resolveToken(options.input);
|
|
46
|
+
const outputMint = resolveToken(options.output);
|
|
47
|
+
if (!inputMint) {
|
|
48
|
+
console.log(chalk.red(`❌ Unknown input token: ${options.input}`));
|
|
49
|
+
console.log(chalk.gray('Supported: SOL, USDC, USDT, BONK, JUP'));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
if (!outputMint) {
|
|
53
|
+
console.log(chalk.red(`❌ Unknown output token: ${options.output}`));
|
|
54
|
+
console.log(chalk.gray('Supported: SOL, USDC, USDT, BONK, JUP'));
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
// Load wallet
|
|
58
|
+
const walletConfig = loadWalletConfig();
|
|
59
|
+
if (!walletConfig) {
|
|
60
|
+
console.log(chalk.red('❌ No wallet found. Run "fuego create" first.'));
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
// Show transaction preview
|
|
64
|
+
showInfo('🪐 Jupiter Swap Preview', [
|
|
65
|
+
`From: ${chalk.yellow(amount)} ${chalk.cyan(options.input.toUpperCase())}`,
|
|
66
|
+
`To: ${chalk.cyan(options.output.toUpperCase())}`,
|
|
67
|
+
`Wallet: ${chalk.gray(walletConfig.publicKey.substring(0, 16))}...`,
|
|
68
|
+
`Network: ${chalk.gray('mainnet-beta')}`
|
|
69
|
+
]);
|
|
70
|
+
// Confirm unless --yes
|
|
71
|
+
if (!options.yes) {
|
|
72
|
+
console.log();
|
|
73
|
+
console.log(chalk.yellow('⚠️ Add --yes to confirm and execute swap'));
|
|
74
|
+
console.log(chalk.gray('Or run first: fuego jupiter quote ' + amount + ' --input ' + options.input + ' --output ' + options.output));
|
|
75
|
+
flameDivider();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
console.log();
|
|
79
|
+
console.log(chalk.blue('⏳ Executing Jupiter swap...'));
|
|
80
|
+
console.log(chalk.gray('This may take a moment...'));
|
|
81
|
+
// Find fuego path and call script
|
|
82
|
+
const fuegoPath = findFuegoPath();
|
|
83
|
+
if (!fuegoPath) {
|
|
84
|
+
showError('Fuego installation not found. Run "fuego install" first.');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
const scriptPath = path.join(fuegoPath, 'scripts', 'jupiter', 'jupiter_swap_regular.mjs');
|
|
88
|
+
const nodeProcess = spawn('node', [
|
|
89
|
+
scriptPath,
|
|
90
|
+
'--input', options.input,
|
|
91
|
+
'--output', options.output,
|
|
92
|
+
'--amount', amount
|
|
93
|
+
]);
|
|
94
|
+
let output = '';
|
|
95
|
+
nodeProcess.stdout.on('data', (data) => {
|
|
96
|
+
output += data.toString();
|
|
97
|
+
process.stdout.write(data);
|
|
98
|
+
});
|
|
99
|
+
nodeProcess.stderr.on('data', (data) => {
|
|
100
|
+
process.stderr.write(data);
|
|
101
|
+
});
|
|
102
|
+
nodeProcess.on('close', (code) => {
|
|
103
|
+
if (code === 0) {
|
|
104
|
+
// Extract signature from output if present
|
|
105
|
+
const sigMatch = output.match(/Signature: ([A-Za-z0-9]+)/);
|
|
106
|
+
if (sigMatch) {
|
|
107
|
+
showSuccess('✅ Swap Complete!', `${chalk.yellow(amount)} ${chalk.cyan(options.input?.toUpperCase() || 'INPUT')} → ${chalk.cyan(options.output?.toUpperCase() || 'OUTPUT')}`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
showSuccess('✅ Swap Executed!', '');
|
|
111
|
+
}
|
|
112
|
+
flameDivider();
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
showError('Swap failed. Check output above for details.');
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=jupiter-swap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jupiter-swap.js","sourceRoot":"","sources":["../../src/commands/jupiter-swap.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/purch.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purch.d.ts","sourceRoot":"","sources":["../../src/commands/purch.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"purch.d.ts","sourceRoot":"","sources":["../../src/commands/purch.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwH3F"}
|
package/dist/commands/purch.js
CHANGED
|
@@ -18,6 +18,7 @@ export async function purchCommand(productUrl, options) {
|
|
|
18
18
|
console.log(chalk.gray(' --state <state-code>'));
|
|
19
19
|
console.log(chalk.gray(' --postal-code <zip>'));
|
|
20
20
|
console.log(chalk.gray(' --country <country-code>'));
|
|
21
|
+
console.log(chalk.gray(' --max-price <price-in-cents> (e.g., 1000 = $10.00, required for URL products)'));
|
|
21
22
|
console.log(chalk.gray('\nExample:'));
|
|
22
23
|
console.log(chalk.gray(' fuego purch https://amazon.com/dp/B071G6PFDR \\'));
|
|
23
24
|
console.log(chalk.gray(' --email <your-email@example.com> \\'));
|
|
@@ -27,7 +28,8 @@ export async function purchCommand(productUrl, options) {
|
|
|
27
28
|
console.log(chalk.gray(' --city "<your-city>" \\'));
|
|
28
29
|
console.log(chalk.gray(' --state <ST> \\'));
|
|
29
30
|
console.log(chalk.gray(' --postal-code <ZIP> \\'));
|
|
30
|
-
console.log(chalk.gray(' --country <CC>'));
|
|
31
|
+
console.log(chalk.gray(' --country <CC> \\'));
|
|
32
|
+
console.log(chalk.gray(' --max-price 1000'));
|
|
31
33
|
process.exit(1);
|
|
32
34
|
}
|
|
33
35
|
// Load wallet
|
|
@@ -37,7 +39,7 @@ export async function purchCommand(productUrl, options) {
|
|
|
37
39
|
process.exit(1);
|
|
38
40
|
}
|
|
39
41
|
// Show order preview
|
|
40
|
-
|
|
42
|
+
const previewItems = [
|
|
41
43
|
`Product: ${chalk.cyan(productUrl)}`,
|
|
42
44
|
`Email: ${chalk.cyan(options.email)}`,
|
|
43
45
|
`Name: ${chalk.cyan(options.name)}`,
|
|
@@ -46,7 +48,12 @@ export async function purchCommand(productUrl, options) {
|
|
|
46
48
|
`Country: ${chalk.cyan(options.country || 'US')}`,
|
|
47
49
|
`Wallet: ${chalk.gray(walletConfig.publicKey)}`,
|
|
48
50
|
`Network: ${chalk.gray('mainnet-beta')}`
|
|
49
|
-
]
|
|
51
|
+
];
|
|
52
|
+
if (options.maxPrice) {
|
|
53
|
+
const dollars = (parseInt(options.maxPrice) / 100).toFixed(2);
|
|
54
|
+
previewItems.splice(1, 0, `Max Price: ${chalk.cyan('$' + dollars)}`);
|
|
55
|
+
}
|
|
56
|
+
showInfo('🛒 x402 Purchase Preview', previewItems);
|
|
50
57
|
console.log();
|
|
51
58
|
console.log(chalk.blue('⏳ Processing x402 payment via Purch.xyz...'));
|
|
52
59
|
// Find fuego installation path and call Node.js script
|
|
@@ -70,6 +77,9 @@ export async function purchCommand(productUrl, options) {
|
|
|
70
77
|
if (options.addressLine2) {
|
|
71
78
|
args.push('--address-line2', options.addressLine2);
|
|
72
79
|
}
|
|
80
|
+
if (options.maxPrice) {
|
|
81
|
+
args.push('--max-price', options.maxPrice);
|
|
82
|
+
}
|
|
73
83
|
const nodeProcess = spawn('node', args);
|
|
74
84
|
let output = '';
|
|
75
85
|
let errorOutput = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purch.js","sourceRoot":"","sources":["../../src/commands/purch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"purch.js","sourceRoot":"","sources":["../../src/commands/purch.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,8 @@ import { contactsAddCommand, contactsListCommand, contactsShowCommand, contactsR
|
|
|
13
13
|
import { sendCommand } from './commands/send.js';
|
|
14
14
|
import { fundCommand } from './commands/fund.js';
|
|
15
15
|
import { purchCommand } from './commands/purch.js';
|
|
16
|
+
import { jupiterQuoteCommand } from './commands/jupiter-quote.js';
|
|
17
|
+
import { jupiterSwapCommand } from './commands/jupiter-swap.js';
|
|
16
18
|
import { showBanner } from './lib/ascii.js';
|
|
17
19
|
import { getFuegoCliVersion } from './lib/config.js';
|
|
18
20
|
async function main() {
|
|
@@ -114,7 +116,24 @@ async function main() {
|
|
|
114
116
|
.requiredOption('--state <state>', 'State/Province code (e.g., TX)')
|
|
115
117
|
.requiredOption('--postal-code <code>', 'Postal/ZIP code')
|
|
116
118
|
.option('--country <code>', 'Country code (default: US)', 'US')
|
|
119
|
+
.option('--max-price <cents>', 'Maximum price in cents (e.g., 1000 = $10.00, required for URL products)')
|
|
117
120
|
.action(purchCommand);
|
|
121
|
+
const jupiter = program
|
|
122
|
+
.command('jupiter')
|
|
123
|
+
.description('🪐 Jupiter swap commands');
|
|
124
|
+
jupiter
|
|
125
|
+
.command('quote <amount>')
|
|
126
|
+
.description('Get a swap quote from Jupiter')
|
|
127
|
+
.requiredOption('-i, --input <token>', 'Input token (SOL, USDC, USDT, BONK, JUP)')
|
|
128
|
+
.requiredOption('-o, --output <token>', 'Output token (SOL, USDC, USDT, BONK, JUP)')
|
|
129
|
+
.action(jupiterQuoteCommand);
|
|
130
|
+
jupiter
|
|
131
|
+
.command('swap <amount>')
|
|
132
|
+
.description('Execute a swap via Jupiter')
|
|
133
|
+
.requiredOption('-i, --input <token>', 'Input token (SOL, USDC, USDT, BONK, JUP)')
|
|
134
|
+
.requiredOption('-o, --output <token>', 'Output token (SOL, USDC, USDT, BONK, JUP)')
|
|
135
|
+
.option('-y, --yes', 'Skip confirmation and execute immediately')
|
|
136
|
+
.action(jupiterSwapCommand);
|
|
118
137
|
await program.parseAsync(process.argv);
|
|
119
138
|
}
|
|
120
139
|
main().catch((error) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC7H,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,KAAK,UAAU,IAAI;IACjB,iDAAiD;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,UAAU,EAAE,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,sDAAsD,CAAC;SACnE,OAAO,CAAC,kBAAkB,EAAE,CAAC;SAC7B,eAAe,CAAC;QACf,WAAW,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACnD,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,aAAa,EAAE,2BAA2B,CAAC;SAClD,MAAM,CAAC,wBAAwB,EAAE,yBAAyB,CAAC;SAC3D,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,SAAS,CAAC;SACrD,MAAM,CAAC,aAAa,CAAC,CAAC;IAEzB,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,mBAAmB,EAAE,kFAAkF,CAAC;SAC/G,MAAM,CAAC,cAAc,CAAC,CAAC;IAE1B,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,MAAM,CAAC;SACb,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,cAAc,CAAC,CAAC;IAE1B,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,KAAK,CAAC;SACZ,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,cAAc,CAAC,CAAC;IAE1B,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,kEAAkE,CAAC;SAC/E,MAAM,CAAC,YAAY,CAAC,CAAC;IAExB,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,KAAK,CAAC,MAAM,CAAC;SACb,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE5B,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC;SACxC,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC;SAClD,MAAM,CAAC,aAAa,CAAC,CAAC;IAEzB,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,iBAAiB,EAAE,8DAA8D,CAAC;SACzF,MAAM,CAAC,yBAAyB,EAAE,yCAAyC,EAAE,SAAS,CAAC;SACvF,MAAM,CAAC,UAAU,CAAC,CAAC;IAEtB,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,sEAAsE,CAAC,CAAC;IAEvF,QAAQ;SACL,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,eAAe,CAAC;SAC5B,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;SAC5E,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAE9B,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,QAAQ;SACL,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,QAAQ;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEjC,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8DAA8D,CAAC;SAC3E,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO;SACJ,OAAO,CAAC,2BAA2B,CAAC;SACpC,WAAW,CAAC,kDAAkD,CAAC;SAC/D,cAAc,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;SACxE,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC7D,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,8DAA8D,CAAC;SAC3E,cAAc,CAAC,iBAAiB,EAAE,+BAA+B,CAAC;SAClE,cAAc,CAAC,eAAe,EAAE,wBAAwB,CAAC;SACzD,cAAc,CAAC,2BAA2B,EAAE,uBAAuB,CAAC;SACpE,MAAM,CAAC,2BAA2B,EAAE,mCAAmC,CAAC;SACxE,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC;SACvC,cAAc,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;SACnE,cAAc,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;SACzD,MAAM,CAAC,kBAAkB,EAAE,4BAA4B,EAAE,IAAI,CAAC;SAC9D,MAAM,CAAC,YAAY,CAAC,CAAC;IAExB,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/package.json
CHANGED
package/src/commands/balance.ts
CHANGED
|
@@ -5,17 +5,24 @@ import ora from 'ora';
|
|
|
5
5
|
|
|
6
6
|
const FUEGO_SERVER_URL = 'http://127.0.0.1:8080';
|
|
7
7
|
|
|
8
|
-
interface
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
interface Token {
|
|
9
|
+
symbol: string;
|
|
10
|
+
ui_amount: number;
|
|
11
|
+
decimals: number;
|
|
12
|
+
mint: string;
|
|
13
|
+
token_account: string;
|
|
14
|
+
amount: string;
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
interface
|
|
17
|
+
interface TokensResponse {
|
|
16
18
|
success: boolean;
|
|
17
19
|
data?: {
|
|
18
|
-
|
|
20
|
+
wallet: string;
|
|
21
|
+
network: string;
|
|
22
|
+
sol_balance: number;
|
|
23
|
+
sol_lamports: number;
|
|
24
|
+
token_count: number;
|
|
25
|
+
tokens: Token[];
|
|
19
26
|
};
|
|
20
27
|
}
|
|
21
28
|
|
|
@@ -35,48 +42,58 @@ export async function balanceCommand(): Promise<void> {
|
|
|
35
42
|
const publicKey = config.publicKey;
|
|
36
43
|
const network = 'mainnet-beta';
|
|
37
44
|
|
|
38
|
-
// Query
|
|
39
|
-
const
|
|
45
|
+
// Query all tokens via /tokens endpoint
|
|
46
|
+
const tokensResponse = await fetch(`${FUEGO_SERVER_URL}/tokens`, {
|
|
40
47
|
method: 'POST',
|
|
41
48
|
headers: { 'Content-Type': 'application/json' },
|
|
42
49
|
body: JSON.stringify({ network, address: publicKey })
|
|
43
50
|
});
|
|
44
|
-
const
|
|
45
|
-
const solBalance = solData.success ? solData.data!.sol : 0;
|
|
51
|
+
const tokensData = await tokensResponse.json() as TokensResponse;
|
|
46
52
|
|
|
47
|
-
|
|
48
|
-
const usdcResponse = await fetch(`${FUEGO_SERVER_URL}/usdc-balance`, {
|
|
49
|
-
method: 'POST',
|
|
50
|
-
headers: { 'Content-Type': 'application/json' },
|
|
51
|
-
body: JSON.stringify({ network, address: publicKey })
|
|
52
|
-
});
|
|
53
|
-
const usdcData = await usdcResponse.json() as TokenBalanceResponse;
|
|
54
|
-
const usdcBalance = usdcData.success ? parseFloat(usdcData.data!.ui_amount) : 0;
|
|
53
|
+
spinner.stop();
|
|
55
54
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
body: JSON.stringify({ network, address: publicKey })
|
|
61
|
-
});
|
|
62
|
-
const usdtData = await usdtResponse.json() as TokenBalanceResponse;
|
|
63
|
-
const usdtBalance = usdtData.success ? parseFloat(usdtData.data!.ui_amount) : 0;
|
|
55
|
+
if (!tokensData.success || !tokensData.data) {
|
|
56
|
+
console.log(chalk.red('❌ Failed to fetch balances from server'));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
64
59
|
|
|
65
|
-
|
|
60
|
+
const { sol_balance, tokens } = tokensData.data;
|
|
66
61
|
|
|
67
|
-
|
|
62
|
+
// Build balance lines
|
|
63
|
+
const balanceLines: string[] = [
|
|
68
64
|
`Address: ${formatPublicKey(publicKey)}`,
|
|
69
65
|
'',
|
|
70
|
-
`${chalk.yellow('- SOL:')} ${chalk.white(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
66
|
+
`${chalk.yellow('- SOL:')} ${chalk.white(sol_balance.toFixed(9))}`,
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
// Add each token balance
|
|
70
|
+
for (const token of tokens) {
|
|
71
|
+
const formattedAmount = token.ui_amount.toLocaleString('en-US', {
|
|
72
|
+
minimumFractionDigits: 2,
|
|
73
|
+
maximumFractionDigits: token.decimals > 6 ? 6 : token.decimals
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// Color-code common tokens
|
|
77
|
+
let tokenColor = chalk.white;
|
|
78
|
+
if (token.symbol === 'USDC') tokenColor = chalk.green;
|
|
79
|
+
else if (token.symbol === 'USDT') tokenColor = chalk.cyan;
|
|
80
|
+
else if (token.symbol === 'BONK') tokenColor = chalk.magenta;
|
|
81
|
+
|
|
82
|
+
balanceLines.push(`${tokenColor(`- ${token.symbol}:`)} ${chalk.white(formattedAmount)}`);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// If no tokens found, note that
|
|
86
|
+
if (tokens.length === 0) {
|
|
87
|
+
balanceLines.push(chalk.gray('(No SPL tokens found)'));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
showInfo('💰 Your Balances', balanceLines);
|
|
74
91
|
|
|
75
92
|
flameDivider();
|
|
76
93
|
} catch (error) {
|
|
77
94
|
spinner.stop();
|
|
78
95
|
console.log(chalk.red(`\n❌ Failed to fetch balances: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
79
|
-
console.log(chalk.gray('\nMake sure the Fuego server is running:
|
|
96
|
+
console.log(chalk.gray('\nMake sure the Fuego server is running: fuego serve'));
|
|
80
97
|
process.exit(1);
|
|
81
98
|
}
|
|
82
99
|
}
|
package/src/commands/create.ts
CHANGED
|
@@ -53,7 +53,8 @@ export async function createCommand(options: CreateOptions): Promise<void> {
|
|
|
53
53
|
fs.writeJsonSync(configPath, {
|
|
54
54
|
...existingConfig,
|
|
55
55
|
network: existingConfig.network || 'mainnet',
|
|
56
|
-
rpcUrl: existingConfig.rpcUrl || 'https://api.mainnet-beta.solana.com'
|
|
56
|
+
rpcUrl: existingConfig.rpcUrl || 'https://api.mainnet-beta.solana.com',
|
|
57
|
+
jupiterKey: existingConfig.jupiterKey || ''
|
|
57
58
|
}, { spaces: 2 });
|
|
58
59
|
|
|
59
60
|
// Create address book directory and empty file
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { loadWalletConfig, findFuegoPath } from '../lib/config.js';
|
|
5
|
+
import { showSuccess, showInfo, showError, flameDivider } from '../lib/ascii.js';
|
|
6
|
+
|
|
7
|
+
interface QuoteOptions {
|
|
8
|
+
input?: string;
|
|
9
|
+
output?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const TOKEN_MINTS: { [key: string]: string } = {
|
|
13
|
+
'SOL': 'So11111111111111111111111111111111111111112',
|
|
14
|
+
'USDC': 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
|
15
|
+
'USDT': 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
|
|
16
|
+
'BONK': 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263',
|
|
17
|
+
'JUP': 'JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN',
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
function resolveToken(token: string): string {
|
|
21
|
+
const upper = token.toUpperCase();
|
|
22
|
+
if (TOKEN_MINTS[upper]) {
|
|
23
|
+
return TOKEN_MINTS[upper];
|
|
24
|
+
}
|
|
25
|
+
// If it's a full mint address, use it directly
|
|
26
|
+
if (token.length === 44) {
|
|
27
|
+
return token;
|
|
28
|
+
}
|
|
29
|
+
return '';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export async function jupiterQuoteCommand(amount: string, options: QuoteOptions): Promise<void> {
|
|
33
|
+
console.log();
|
|
34
|
+
|
|
35
|
+
// Validate amount
|
|
36
|
+
if (!amount) {
|
|
37
|
+
console.log(chalk.red('❌ Usage: fuego jupiter quote <amount> --input SOL --output USDC'));
|
|
38
|
+
console.log(chalk.gray('\nExamples:'));
|
|
39
|
+
console.log(chalk.gray(' fuego jupiter quote 0.5 --input SOL --output USDC'));
|
|
40
|
+
console.log(chalk.gray(' fuego jupiter quote 10 --input USDC --output BONK'));
|
|
41
|
+
console.log(chalk.gray('\nSupported tokens: SOL, USDC, USDT, BONK, JUP'));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const amountNum = parseFloat(amount);
|
|
46
|
+
if (isNaN(amountNum) || amountNum <= 0) {
|
|
47
|
+
console.log(chalk.red('❌ Invalid amount. Please provide a positive number.'));
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Validate tokens
|
|
52
|
+
if (!options.input || !options.output) {
|
|
53
|
+
console.log(chalk.red('❌ Both --input and --output tokens are required.'));
|
|
54
|
+
console.log(chalk.gray('Example: --input SOL --output USDC'));
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const inputMint = resolveToken(options.input);
|
|
59
|
+
const outputMint = resolveToken(options.output);
|
|
60
|
+
|
|
61
|
+
if (!inputMint) {
|
|
62
|
+
console.log(chalk.red(`❌ Unknown input token: ${options.input}`));
|
|
63
|
+
console.log(chalk.gray('Supported: SOL, USDC, USDT, BONK, JUP'));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (!outputMint) {
|
|
68
|
+
console.log(chalk.red(`❌ Unknown output token: ${options.output}`));
|
|
69
|
+
console.log(chalk.gray('Supported: SOL, USDC, USDT, BONK, JUP'));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Load wallet
|
|
74
|
+
const walletConfig = loadWalletConfig();
|
|
75
|
+
if (!walletConfig) {
|
|
76
|
+
console.log(chalk.red('❌ No wallet found. Run "fuego create" first.'));
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
showInfo('🪐 Jupiter Quote', [
|
|
81
|
+
`From: ${chalk.cyan(options.input.toUpperCase())}`,
|
|
82
|
+
`To: ${chalk.cyan(options.output.toUpperCase())}`,
|
|
83
|
+
`Amount: ${chalk.yellow(amount)}`,
|
|
84
|
+
`Network: ${chalk.gray('mainnet-beta')}`
|
|
85
|
+
]);
|
|
86
|
+
|
|
87
|
+
console.log();
|
|
88
|
+
console.log(chalk.blue('⏳ Fetching quote from Jupiter...'));
|
|
89
|
+
|
|
90
|
+
// Find fuego path and call script
|
|
91
|
+
const fuegoPath = findFuegoPath();
|
|
92
|
+
if (!fuegoPath) {
|
|
93
|
+
showError('Fuego installation not found. Run "fuego install" first.');
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const scriptPath = path.join(fuegoPath, 'scripts', 'jupiter', 'jupiter_price.mjs');
|
|
98
|
+
|
|
99
|
+
const nodeProcess = spawn('node', [
|
|
100
|
+
scriptPath,
|
|
101
|
+
'--input', options.input,
|
|
102
|
+
'--output', options.output,
|
|
103
|
+
'--amount', amount
|
|
104
|
+
]);
|
|
105
|
+
|
|
106
|
+
nodeProcess.stdout.on('data', (data) => {
|
|
107
|
+
process.stdout.write(data);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
nodeProcess.stderr.on('data', (data) => {
|
|
111
|
+
process.stderr.write(data);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
nodeProcess.on('close', (code) => {
|
|
115
|
+
if (code === 0) {
|
|
116
|
+
flameDivider();
|
|
117
|
+
} else {
|
|
118
|
+
showError('Failed to fetch quote');
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { loadWalletConfig, findFuegoPath } from '../lib/config.js';
|
|
5
|
+
import { showSuccess, showInfo, showError, flameDivider } from '../lib/ascii.js';
|
|
6
|
+
|
|
7
|
+
interface SwapOptions {
|
|
8
|
+
input?: string;
|
|
9
|
+
output?: string;
|
|
10
|
+
yes?: boolean;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const TOKEN_MINTS: { [key: string]: string } = {
|
|
14
|
+
'SOL': 'So11111111111111111111111111111111111111112',
|
|
15
|
+
'USDC': 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
|
16
|
+
'USDT': 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
|
|
17
|
+
'BONK': 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263',
|
|
18
|
+
'JUP': 'JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
function resolveToken(token: string): string {
|
|
22
|
+
const upper = token.toUpperCase();
|
|
23
|
+
if (TOKEN_MINTS[upper]) {
|
|
24
|
+
return TOKEN_MINTS[upper];
|
|
25
|
+
}
|
|
26
|
+
if (token.length === 44) {
|
|
27
|
+
return token;
|
|
28
|
+
}
|
|
29
|
+
return '';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export async function jupiterSwapCommand(amount: string, options: SwapOptions): Promise<void> {
|
|
33
|
+
console.log();
|
|
34
|
+
|
|
35
|
+
// Validate amount
|
|
36
|
+
if (!amount) {
|
|
37
|
+
console.log(chalk.red('❌ Usage: fuego jupiter swap <amount> --input SOL --output USDC [--yes]'));
|
|
38
|
+
console.log(chalk.gray('\nExamples:'));
|
|
39
|
+
console.log(chalk.gray(' fuego jupiter swap 0.5 --input SOL --output USDC'));
|
|
40
|
+
console.log(chalk.gray(' fuego jupiter swap 10 --input USDC --output BONK --yes'));
|
|
41
|
+
console.log(chalk.gray('\nSupported tokens: SOL, USDC, USDT, BONK, JUP'));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const amountNum = parseFloat(amount);
|
|
46
|
+
if (isNaN(amountNum) || amountNum <= 0) {
|
|
47
|
+
console.log(chalk.red('❌ Invalid amount. Please provide a positive number.'));
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Validate tokens
|
|
52
|
+
if (!options.input || !options.output) {
|
|
53
|
+
console.log(chalk.red('❌ Both --input and --output tokens are required.'));
|
|
54
|
+
console.log(chalk.gray('Example: --input SOL --output USDC'));
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const inputMint = resolveToken(options.input);
|
|
59
|
+
const outputMint = resolveToken(options.output);
|
|
60
|
+
|
|
61
|
+
if (!inputMint) {
|
|
62
|
+
console.log(chalk.red(`❌ Unknown input token: ${options.input}`));
|
|
63
|
+
console.log(chalk.gray('Supported: SOL, USDC, USDT, BONK, JUP'));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (!outputMint) {
|
|
68
|
+
console.log(chalk.red(`❌ Unknown output token: ${options.output}`));
|
|
69
|
+
console.log(chalk.gray('Supported: SOL, USDC, USDT, BONK, JUP'));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Load wallet
|
|
74
|
+
const walletConfig = loadWalletConfig();
|
|
75
|
+
if (!walletConfig) {
|
|
76
|
+
console.log(chalk.red('❌ No wallet found. Run "fuego create" first.'));
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Show transaction preview
|
|
81
|
+
showInfo('🪐 Jupiter Swap Preview', [
|
|
82
|
+
`From: ${chalk.yellow(amount)} ${chalk.cyan(options.input.toUpperCase())}`,
|
|
83
|
+
`To: ${chalk.cyan(options.output.toUpperCase())}`,
|
|
84
|
+
`Wallet: ${chalk.gray(walletConfig.publicKey.substring(0, 16))}...`,
|
|
85
|
+
`Network: ${chalk.gray('mainnet-beta')}`
|
|
86
|
+
]);
|
|
87
|
+
|
|
88
|
+
// Confirm unless --yes
|
|
89
|
+
if (!options.yes) {
|
|
90
|
+
console.log();
|
|
91
|
+
console.log(chalk.yellow('⚠️ Add --yes to confirm and execute swap'));
|
|
92
|
+
console.log(chalk.gray('Or run first: fuego jupiter quote ' + amount + ' --input ' + options.input + ' --output ' + options.output));
|
|
93
|
+
flameDivider();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
console.log();
|
|
98
|
+
console.log(chalk.blue('⏳ Executing Jupiter swap...'));
|
|
99
|
+
console.log(chalk.gray('This may take a moment...'));
|
|
100
|
+
|
|
101
|
+
// Find fuego path and call script
|
|
102
|
+
const fuegoPath = findFuegoPath();
|
|
103
|
+
if (!fuegoPath) {
|
|
104
|
+
showError('Fuego installation not found. Run "fuego install" first.');
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const scriptPath = path.join(fuegoPath, 'scripts', 'jupiter', 'jupiter_swap_regular.mjs');
|
|
109
|
+
|
|
110
|
+
const nodeProcess = spawn('node', [
|
|
111
|
+
scriptPath,
|
|
112
|
+
'--input', options.input,
|
|
113
|
+
'--output', options.output,
|
|
114
|
+
'--amount', amount
|
|
115
|
+
]);
|
|
116
|
+
|
|
117
|
+
let output = '';
|
|
118
|
+
|
|
119
|
+
nodeProcess.stdout.on('data', (data) => {
|
|
120
|
+
output += data.toString();
|
|
121
|
+
process.stdout.write(data);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
nodeProcess.stderr.on('data', (data) => {
|
|
125
|
+
process.stderr.write(data);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
nodeProcess.on('close', (code) => {
|
|
129
|
+
if (code === 0) {
|
|
130
|
+
// Extract signature from output if present
|
|
131
|
+
const sigMatch = output.match(/Signature: ([A-Za-z0-9]+)/);
|
|
132
|
+
if (sigMatch) {
|
|
133
|
+
showSuccess(
|
|
134
|
+
'✅ Swap Complete!',
|
|
135
|
+
`${chalk.yellow(amount)} ${chalk.cyan(options.input?.toUpperCase() || 'INPUT')} → ${chalk.cyan(options.output?.toUpperCase() || 'OUTPUT')}`
|
|
136
|
+
);
|
|
137
|
+
} else {
|
|
138
|
+
showSuccess('✅ Swap Executed!', '');
|
|
139
|
+
}
|
|
140
|
+
flameDivider();
|
|
141
|
+
} else {
|
|
142
|
+
showError('Swap failed. Check output above for details.');
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
package/src/commands/purch.ts
CHANGED
|
@@ -13,6 +13,7 @@ interface PurchOptions {
|
|
|
13
13
|
state: string;
|
|
14
14
|
postalCode: string;
|
|
15
15
|
country?: string;
|
|
16
|
+
maxPrice?: string;
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
export async function purchCommand(productUrl: string, options: PurchOptions): Promise<void> {
|
|
@@ -31,6 +32,7 @@ export async function purchCommand(productUrl: string, options: PurchOptions): P
|
|
|
31
32
|
console.log(chalk.gray(' --state <state-code>'));
|
|
32
33
|
console.log(chalk.gray(' --postal-code <zip>'));
|
|
33
34
|
console.log(chalk.gray(' --country <country-code>'));
|
|
35
|
+
console.log(chalk.gray(' --max-price <price-in-cents> (e.g., 1000 = $10.00, required for URL products)'));
|
|
34
36
|
console.log(chalk.gray('\nExample:'));
|
|
35
37
|
console.log(chalk.gray(' fuego purch https://amazon.com/dp/B071G6PFDR \\'));
|
|
36
38
|
console.log(chalk.gray(' --email <your-email@example.com> \\'));
|
|
@@ -40,7 +42,8 @@ export async function purchCommand(productUrl: string, options: PurchOptions): P
|
|
|
40
42
|
console.log(chalk.gray(' --city "<your-city>" \\'));
|
|
41
43
|
console.log(chalk.gray(' --state <ST> \\'));
|
|
42
44
|
console.log(chalk.gray(' --postal-code <ZIP> \\'));
|
|
43
|
-
console.log(chalk.gray(' --country <CC>'));
|
|
45
|
+
console.log(chalk.gray(' --country <CC> \\'));
|
|
46
|
+
console.log(chalk.gray(' --max-price 1000'));
|
|
44
47
|
process.exit(1);
|
|
45
48
|
}
|
|
46
49
|
|
|
@@ -52,7 +55,7 @@ export async function purchCommand(productUrl: string, options: PurchOptions): P
|
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
// Show order preview
|
|
55
|
-
|
|
58
|
+
const previewItems = [
|
|
56
59
|
`Product: ${chalk.cyan(productUrl)}`,
|
|
57
60
|
`Email: ${chalk.cyan(options.email)}`,
|
|
58
61
|
`Name: ${chalk.cyan(options.name)}`,
|
|
@@ -61,7 +64,14 @@ export async function purchCommand(productUrl: string, options: PurchOptions): P
|
|
|
61
64
|
`Country: ${chalk.cyan(options.country || 'US')}`,
|
|
62
65
|
`Wallet: ${chalk.gray(walletConfig.publicKey)}`,
|
|
63
66
|
`Network: ${chalk.gray('mainnet-beta')}`
|
|
64
|
-
]
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
if (options.maxPrice) {
|
|
70
|
+
const dollars = (parseInt(options.maxPrice) / 100).toFixed(2);
|
|
71
|
+
previewItems.splice(1, 0, `Max Price: ${chalk.cyan('$' + dollars)}`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
showInfo('🛒 x402 Purchase Preview', previewItems);
|
|
65
75
|
|
|
66
76
|
console.log();
|
|
67
77
|
console.log(chalk.blue('⏳ Processing x402 payment via Purch.xyz...'));
|
|
@@ -91,6 +101,10 @@ export async function purchCommand(productUrl: string, options: PurchOptions): P
|
|
|
91
101
|
args.push('--address-line2', options.addressLine2);
|
|
92
102
|
}
|
|
93
103
|
|
|
104
|
+
if (options.maxPrice) {
|
|
105
|
+
args.push('--max-price', options.maxPrice);
|
|
106
|
+
}
|
|
107
|
+
|
|
94
108
|
const nodeProcess = spawn('node', args);
|
|
95
109
|
|
|
96
110
|
let output = '';
|
package/src/index.ts
CHANGED
|
@@ -14,6 +14,8 @@ import { contactsAddCommand, contactsListCommand, contactsShowCommand, contactsR
|
|
|
14
14
|
import { sendCommand } from './commands/send.js';
|
|
15
15
|
import { fundCommand } from './commands/fund.js';
|
|
16
16
|
import { purchCommand } from './commands/purch.js';
|
|
17
|
+
import { jupiterQuoteCommand } from './commands/jupiter-quote.js';
|
|
18
|
+
import { jupiterSwapCommand } from './commands/jupiter-swap.js';
|
|
17
19
|
import { showBanner } from './lib/ascii.js';
|
|
18
20
|
import { getFuegoCliVersion } from './lib/config.js';
|
|
19
21
|
|
|
@@ -134,8 +136,28 @@ async function main() {
|
|
|
134
136
|
.requiredOption('--state <state>', 'State/Province code (e.g., TX)')
|
|
135
137
|
.requiredOption('--postal-code <code>', 'Postal/ZIP code')
|
|
136
138
|
.option('--country <code>', 'Country code (default: US)', 'US')
|
|
139
|
+
.option('--max-price <cents>', 'Maximum price in cents (e.g., 1000 = $10.00, required for URL products)')
|
|
137
140
|
.action(purchCommand);
|
|
138
141
|
|
|
142
|
+
const jupiter = program
|
|
143
|
+
.command('jupiter')
|
|
144
|
+
.description('🪐 Jupiter swap commands');
|
|
145
|
+
|
|
146
|
+
jupiter
|
|
147
|
+
.command('quote <amount>')
|
|
148
|
+
.description('Get a swap quote from Jupiter')
|
|
149
|
+
.requiredOption('-i, --input <token>', 'Input token (SOL, USDC, USDT, BONK, JUP)')
|
|
150
|
+
.requiredOption('-o, --output <token>', 'Output token (SOL, USDC, USDT, BONK, JUP)')
|
|
151
|
+
.action(jupiterQuoteCommand);
|
|
152
|
+
|
|
153
|
+
jupiter
|
|
154
|
+
.command('swap <amount>')
|
|
155
|
+
.description('Execute a swap via Jupiter')
|
|
156
|
+
.requiredOption('-i, --input <token>', 'Input token (SOL, USDC, USDT, BONK, JUP)')
|
|
157
|
+
.requiredOption('-o, --output <token>', 'Output token (SOL, USDC, USDT, BONK, JUP)')
|
|
158
|
+
.option('-y, --yes', 'Skip confirmation and execute immediately')
|
|
159
|
+
.action(jupiterSwapCommand);
|
|
160
|
+
|
|
139
161
|
await program.parseAsync(process.argv);
|
|
140
162
|
}
|
|
141
163
|
|
package/fuego-cli-1.3.1.tgz
DELETED
|
Binary file
|