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 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, USDC, USDT balances |
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: 1.234567890
133
- - USDC: $0.00
134
- - USDT: $0.00
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, Shopify, etc.) using USDC on Solana.
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":"AAqBA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA4DpD"}
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AA4BA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsEpD"}
@@ -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 SOL balance
18
- const solResponse = await fetch(`${FUEGO_SERVER_URL}/sol-balance`, {
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 solData = await solResponse.json();
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
- showInfo('💰 Your Balances', [
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(solBalance.toFixed(9))}`,
46
- `${chalk.green('- USDC:')} ${chalk.white('$' + usdcBalance.toFixed(2))}`,
47
- `${chalk.cyan('- USDT:')} ${chalk.white('$' + usdtBalance.toFixed(2))}`,
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: cd fuego/server && cargo run'));
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":"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"}
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,CAuFzE"}
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"}
@@ -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":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface QuoteOptions {
2
+ input?: string;
3
+ output?: string;
4
+ }
5
+ export declare function jupiterQuoteCommand(amount: string, options: QuoteOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=jupiter-quote.d.ts.map
@@ -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":"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,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAOjF,MAAM,WAAW,GAA8B;IAC7C,KAAK,EAAE,6CAA6C;IACpD,MAAM,EAAE,8CAA8C;IACtD,MAAM,EAAE,8CAA8C;IACtD,MAAM,EAAE,8CAA8C;IACtD,KAAK,EAAE,6CAA6C;CACrD,CAAC;AAEF,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,+CAA+C;IAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAc,EAAE,OAAqB;IAC7E,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,kBAAkB;IAClB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,cAAc;IACd,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,kBAAkB,EAAE;QAC3B,SAAS,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE;QAClD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE;QACjD,WAAW,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACjC,YAAY,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;KACzC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAE5D,kCAAkC;IAClC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,CAAC,0DAA0D,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAEnF,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE;QAChC,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,KAAK;QACxB,UAAU,EAAE,OAAO,CAAC,MAAM;QAC1B,UAAU,EAAE,MAAM;KACnB,CAAC,CAAC;IAEH,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAC/B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,uBAAuB,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface SwapOptions {
2
+ input?: string;
3
+ output?: string;
4
+ yes?: boolean;
5
+ }
6
+ export declare function jupiterSwapCommand(amount: string, options: SwapOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=jupiter-swap.d.ts.map
@@ -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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"}
@@ -7,6 +7,7 @@ interface PurchOptions {
7
7
  state: string;
8
8
  postalCode: string;
9
9
  country?: string;
10
+ maxPrice?: string;
10
11
  }
11
12
  export declare function purchCommand(productUrl: string, options: PurchOptions): Promise<void>;
12
13
  export {};
@@ -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;CAClB;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2G3F"}
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"}
@@ -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
- showInfo('🛒 x402 Purchase Preview', [
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":"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"}
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fuego-cli",
3
- "version": "1.3.1",
3
+ "version": "1.4.1",
4
4
  "description": "Command-line interface for Fuego - the sovereign Solana wallet for AI agents",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -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 BalanceResponse {
9
- success: boolean;
10
- data?: {
11
- sol: number;
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 TokenBalanceResponse {
17
+ interface TokensResponse {
16
18
  success: boolean;
17
19
  data?: {
18
- ui_amount: string;
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 SOL balance
39
- const solResponse = await fetch(`${FUEGO_SERVER_URL}/sol-balance`, {
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 solData = await solResponse.json() as BalanceResponse;
45
- const solBalance = solData.success ? solData.data!.sol : 0;
51
+ const tokensData = await tokensResponse.json() as TokensResponse;
46
52
 
47
- // Query USDC balance
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
- // Query USDT balance
57
- const usdtResponse = await fetch(`${FUEGO_SERVER_URL}/usdt-balance`, {
58
- method: 'POST',
59
- headers: { 'Content-Type': 'application/json' },
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
- spinner.stop();
60
+ const { sol_balance, tokens } = tokensData.data;
66
61
 
67
- showInfo('💰 Your Balances', [
62
+ // Build balance lines
63
+ const balanceLines: string[] = [
68
64
  `Address: ${formatPublicKey(publicKey)}`,
69
65
  '',
70
- `${chalk.yellow('- SOL:')} ${chalk.white(solBalance.toFixed(9))}`,
71
- `${chalk.green('- USDC:')} ${chalk.white('$' + usdcBalance.toFixed(2))}`,
72
- `${chalk.cyan('- USDT:')} ${chalk.white('$' + usdtBalance.toFixed(2))}`,
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: cd fuego/server && cargo run'));
96
+ console.log(chalk.gray('\nMake sure the Fuego server is running: fuego serve'));
80
97
  process.exit(1);
81
98
  }
82
99
  }
@@ -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
+ }
@@ -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
- showInfo('🛒 x402 Purchase Preview', [
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
 
Binary file