fuego-cli 0.1.0 ā 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +211 -49
- package/dist/commands/balance.d.ts +2 -0
- package/dist/commands/balance.d.ts.map +1 -0
- package/dist/commands/balance.js +58 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +14 -8
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/dashboard.d.ts +2 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +51 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +11 -1
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/serve.d.ts +2 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +39 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +92 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +25 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +56 -0
- package/dist/lib/config.js.map +1 -1
- package/fuego-cli-1.0.0.tgz +0 -0
- package/package.json +1 -1
- package/src/commands/balance.ts +82 -0
- package/src/commands/create.ts +16 -8
- package/src/commands/dashboard.ts +59 -0
- package/src/commands/install.ts +14 -1
- package/src/commands/serve.ts +48 -0
- package/src/commands/update.ts +120 -0
- package/src/index.ts +28 -0
- package/src/lib/config.ts +75 -3
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import { getFuegoCliVersion, getFuegoCliVersionInfo, getFuegoVersionInfo, findFuegoPath, setFuegoCliVersion, setFuegoVersion } from '../lib/config.js';
|
|
7
|
+
import { showSuccess, showInfo, showWarning, flameDivider } from '../lib/ascii.js';
|
|
8
|
+
export async function updateCommand(options) {
|
|
9
|
+
console.log(); // spacer
|
|
10
|
+
const updateCli = options.cli || (!options.cli && !options.fuego);
|
|
11
|
+
const updateFuego = options.fuego || (!options.cli && !options.fuego);
|
|
12
|
+
const currentCliVersion = getFuegoCliVersion();
|
|
13
|
+
const cliInfo = getFuegoCliVersionInfo();
|
|
14
|
+
const fuegoInfo = getFuegoVersionInfo();
|
|
15
|
+
const fuegoPath = findFuegoPath();
|
|
16
|
+
// Show current versions
|
|
17
|
+
showInfo('š¦ Current Versions', [
|
|
18
|
+
`fuego-cli: ${chalk.cyan(cliInfo?.version || currentCliVersion)} ${cliInfo?.lastUpdated ? chalk.gray(`(updated: ${new Date(cliInfo.lastUpdated).toLocaleDateString()})`) : ''}`,
|
|
19
|
+
`fuego: ${chalk.cyan(fuegoInfo?.version || 'not installed')} ${fuegoInfo?.lastUpdated ? chalk.gray(`(updated: ${new Date(fuegoInfo.lastUpdated).toLocaleDateString()})`) : ''}`,
|
|
20
|
+
]);
|
|
21
|
+
console.log(); // spacer
|
|
22
|
+
let cliUpdated = false;
|
|
23
|
+
let fuegoUpdated = false;
|
|
24
|
+
// Update fuego-cli
|
|
25
|
+
if (updateCli) {
|
|
26
|
+
const spinner = ora('Checking for fuego-cli updates...').start();
|
|
27
|
+
try {
|
|
28
|
+
spinner.text = 'Updating fuego-cli...';
|
|
29
|
+
execSync('npm install -g fuego-cli@latest', { stdio: 'pipe' });
|
|
30
|
+
spinner.stop();
|
|
31
|
+
setFuegoCliVersion(currentCliVersion);
|
|
32
|
+
showSuccess('ā
fuego-cli updated!', `Version: ${chalk.cyan(currentCliVersion)}`);
|
|
33
|
+
cliUpdated = true;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
spinner.stop();
|
|
37
|
+
console.log(chalk.red(`ā Failed to update fuego-cli: ${error.message}`));
|
|
38
|
+
console.log(chalk.gray('You may need to run with sudo or check your npm permissions.'));
|
|
39
|
+
}
|
|
40
|
+
console.log(); // spacer
|
|
41
|
+
}
|
|
42
|
+
// Update fuego project
|
|
43
|
+
if (updateFuego) {
|
|
44
|
+
if (!fuegoPath) {
|
|
45
|
+
showWarning('Fuego project not found.\n\nRun "fuego install" first.');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const spinner = ora('Checking for fuego updates...').start();
|
|
49
|
+
try {
|
|
50
|
+
// Check if it's a git repo
|
|
51
|
+
const gitPath = path.join(fuegoPath, '.git');
|
|
52
|
+
if (!fs.existsSync(gitPath)) {
|
|
53
|
+
spinner.stop();
|
|
54
|
+
showWarning('Fuego installation is not a git repository.\n\nCannot auto-update. You may need to reinstall.');
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
spinner.text = 'Pulling latest changes...';
|
|
58
|
+
execSync('git pull origin main', {
|
|
59
|
+
cwd: fuegoPath,
|
|
60
|
+
stdio: 'pipe'
|
|
61
|
+
});
|
|
62
|
+
spinner.stop();
|
|
63
|
+
// Get the latest commit hash as version
|
|
64
|
+
const commitHash = execSync('git rev-parse --short HEAD', {
|
|
65
|
+
cwd: fuegoPath
|
|
66
|
+
}).toString().trim();
|
|
67
|
+
setFuegoVersion(commitHash, fuegoPath);
|
|
68
|
+
showSuccess('ā
fuego updated!', `Version: ${chalk.cyan(commitHash)}`);
|
|
69
|
+
showInfo('š Location', [fuegoPath]);
|
|
70
|
+
console.log(); // spacer
|
|
71
|
+
console.log(chalk.yellow('š Note: You may need to rebuild the server:'));
|
|
72
|
+
console.log(chalk.gray(` cd ${fuegoPath}/server && cargo build`));
|
|
73
|
+
fuegoUpdated = true;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
spinner.stop();
|
|
77
|
+
console.log(chalk.red(`ā Failed to update fuego: ${error.message}`));
|
|
78
|
+
if (error.message.includes('not a git repository')) {
|
|
79
|
+
console.log(chalk.gray('The fuego installation may have been downloaded as a ZIP or installed differently.'));
|
|
80
|
+
console.log(chalk.gray('Run "fuego install" to get a fresh copy that can be updated.'));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
flameDivider();
|
|
85
|
+
if (cliUpdated || fuegoUpdated) {
|
|
86
|
+
console.log(chalk.green('\n⨠Update complete!'));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
console.log(chalk.yellow('\nā ļø Some updates failed. Check the errors above.'));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,10 @@ import chalk from 'chalk';
|
|
|
4
4
|
import { createCommand } from './commands/create.js';
|
|
5
5
|
import { installCommand } from './commands/install.js';
|
|
6
6
|
import { addressCommand } from './commands/address.js';
|
|
7
|
+
import { balanceCommand } from './commands/balance.js';
|
|
8
|
+
import { serveCommand } from './commands/serve.js';
|
|
9
|
+
import { dashboardCommand } from './commands/dashboard.js';
|
|
10
|
+
import { updateCommand } from './commands/update.js';
|
|
7
11
|
import { showBanner } from './lib/ascii.js';
|
|
8
12
|
async function main() {
|
|
9
13
|
// Show banner for help and when no args provided
|
|
@@ -36,6 +40,26 @@ async function main() {
|
|
|
36
40
|
.alias('addr')
|
|
37
41
|
.description('Show your wallet address')
|
|
38
42
|
.action(addressCommand);
|
|
43
|
+
program
|
|
44
|
+
.command('balance')
|
|
45
|
+
.alias('bal')
|
|
46
|
+
.description('Show your wallet balances (SOL, USDC, USDT)')
|
|
47
|
+
.action(balanceCommand);
|
|
48
|
+
program
|
|
49
|
+
.command('serve')
|
|
50
|
+
.description('Start the Fuego Rust server (runs cargo run in server directory)')
|
|
51
|
+
.action(serveCommand);
|
|
52
|
+
program
|
|
53
|
+
.command('dashboard')
|
|
54
|
+
.alias('dash')
|
|
55
|
+
.description('Open the Fuego dashboard in your browser')
|
|
56
|
+
.action(dashboardCommand);
|
|
57
|
+
program
|
|
58
|
+
.command('update')
|
|
59
|
+
.description('Update fuego-cli and/or fuego to latest versions')
|
|
60
|
+
.option('--cli', 'Update only fuego-cli')
|
|
61
|
+
.option('--fuego', 'Update only the fuego project')
|
|
62
|
+
.action(updateCommand);
|
|
39
63
|
await program.parseAsync(process.argv);
|
|
40
64
|
}
|
|
41
65
|
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,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,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,OAAO,CAAC;SAChB,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,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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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
|
+
export declare function getFuegoCliVersion(): string;
|
|
1
2
|
interface Config {
|
|
2
3
|
rpcUrl?: string;
|
|
3
4
|
network?: 'mainnet' | 'devnet' | 'testnet';
|
|
4
5
|
defaultToken?: string;
|
|
5
|
-
|
|
6
|
+
'fuego-cli'?: {
|
|
7
|
+
version: string;
|
|
8
|
+
lastUpdated: string;
|
|
9
|
+
};
|
|
10
|
+
fuego?: {
|
|
11
|
+
version: string;
|
|
12
|
+
lastUpdated: string;
|
|
13
|
+
installPath?: string;
|
|
14
|
+
};
|
|
15
|
+
[key: string]: any;
|
|
6
16
|
}
|
|
7
17
|
interface WalletConfig {
|
|
8
18
|
publicKey: string;
|
|
@@ -16,8 +26,20 @@ export declare function getWalletConfigPath(): string;
|
|
|
16
26
|
export declare function getConfigPath(): string;
|
|
17
27
|
export declare function loadWalletConfig(): WalletConfig | null;
|
|
18
28
|
export declare function saveWalletConfig(config: WalletConfig): void;
|
|
19
|
-
export declare function getConfig(key: string):
|
|
20
|
-
export declare function setConfig(key: string, value:
|
|
29
|
+
export declare function getConfig(key: string): any;
|
|
30
|
+
export declare function setConfig(key: string, value: any): void;
|
|
21
31
|
export declare function listConfig(): Config;
|
|
32
|
+
export declare function getFuegoCliVersionInfo(): {
|
|
33
|
+
version: string;
|
|
34
|
+
lastUpdated: string;
|
|
35
|
+
} | null;
|
|
36
|
+
export declare function setFuegoCliVersion(version: string): void;
|
|
37
|
+
export declare function getFuegoVersionInfo(): {
|
|
38
|
+
version: string;
|
|
39
|
+
lastUpdated: string;
|
|
40
|
+
installPath?: string;
|
|
41
|
+
} | null;
|
|
42
|
+
export declare function setFuegoVersion(version: string, installPath?: string): void;
|
|
43
|
+
export declare function findFuegoPath(): string | null;
|
|
22
44
|
export {};
|
|
23
45
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAYA,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C;AAED,UAAU,MAAM;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,gBAAgB,IAAI,YAAY,GAAG,IAAI,CAKtD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAG3D;AAcD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAG1C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAIvD;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAGD,wBAAgB,sBAAsB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGxF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAOxD;AAED,wBAAgB,mBAAmB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAG3G;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ3E;AAGD,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAkB7C"}
|
package/dist/lib/config.js
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import os from 'os';
|
|
4
|
+
import { createRequire } from 'module';
|
|
5
|
+
const require = createRequire(import.meta.url);
|
|
4
6
|
const CONFIG_DIR = path.join(os.homedir(), '.fuego');
|
|
5
7
|
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
6
8
|
const WALLET_FILE = path.join(CONFIG_DIR, 'wallet.json');
|
|
7
9
|
const WALLET_CONFIG_FILE = path.join(CONFIG_DIR, 'wallet-config.json');
|
|
10
|
+
// Get current CLI version from package.json
|
|
11
|
+
export function getFuegoCliVersion() {
|
|
12
|
+
try {
|
|
13
|
+
const pkg = require('../../package.json');
|
|
14
|
+
return pkg.version;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return '0.1.0';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
8
20
|
export function getWalletPath() {
|
|
9
21
|
return WALLET_FILE;
|
|
10
22
|
}
|
|
@@ -46,4 +58,48 @@ export function setConfig(key, value) {
|
|
|
46
58
|
export function listConfig() {
|
|
47
59
|
return loadConfig();
|
|
48
60
|
}
|
|
61
|
+
// Version tracking functions
|
|
62
|
+
export function getFuegoCliVersionInfo() {
|
|
63
|
+
const config = loadConfig();
|
|
64
|
+
return config['fuego-cli'] || null;
|
|
65
|
+
}
|
|
66
|
+
export function setFuegoCliVersion(version) {
|
|
67
|
+
const config = loadConfig();
|
|
68
|
+
config['fuego-cli'] = {
|
|
69
|
+
version,
|
|
70
|
+
lastUpdated: new Date().toISOString()
|
|
71
|
+
};
|
|
72
|
+
saveConfig(config);
|
|
73
|
+
}
|
|
74
|
+
export function getFuegoVersionInfo() {
|
|
75
|
+
const config = loadConfig();
|
|
76
|
+
return config.fuego || null;
|
|
77
|
+
}
|
|
78
|
+
export function setFuegoVersion(version, installPath) {
|
|
79
|
+
const config = loadConfig();
|
|
80
|
+
config.fuego = {
|
|
81
|
+
version,
|
|
82
|
+
lastUpdated: new Date().toISOString(),
|
|
83
|
+
...(installPath && { installPath })
|
|
84
|
+
};
|
|
85
|
+
saveConfig(config);
|
|
86
|
+
}
|
|
87
|
+
// Find fuego installation path
|
|
88
|
+
export function findFuegoPath() {
|
|
89
|
+
// Check config first
|
|
90
|
+
const fuegoInfo = getFuegoVersionInfo();
|
|
91
|
+
if (fuegoInfo?.installPath && fs.existsSync(fuegoInfo.installPath)) {
|
|
92
|
+
return fuegoInfo.installPath;
|
|
93
|
+
}
|
|
94
|
+
// Check default locations
|
|
95
|
+
const openclawPath = path.join(os.homedir(), '.openclaw', 'workspace', 'fuego');
|
|
96
|
+
const localPath = path.join(process.cwd(), 'fuego');
|
|
97
|
+
if (fs.existsSync(path.join(openclawPath, 'server'))) {
|
|
98
|
+
return openclawPath;
|
|
99
|
+
}
|
|
100
|
+
else if (fs.existsSync(path.join(localPath, 'server'))) {
|
|
101
|
+
return localPath;
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
49
105
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { loadWalletConfig } from '../lib/config.js';
|
|
3
|
+
import { showInfo, formatPublicKey, flameDivider } from '../lib/ascii.js';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
|
|
6
|
+
const FUEGO_SERVER_URL = 'http://127.0.0.1:8080';
|
|
7
|
+
|
|
8
|
+
interface BalanceResponse {
|
|
9
|
+
success: boolean;
|
|
10
|
+
data?: {
|
|
11
|
+
sol: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface TokenBalanceResponse {
|
|
16
|
+
success: boolean;
|
|
17
|
+
data?: {
|
|
18
|
+
ui_amount: string;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export async function balanceCommand(): Promise<void> {
|
|
23
|
+
console.log(); // spacer
|
|
24
|
+
|
|
25
|
+
const config = loadWalletConfig();
|
|
26
|
+
|
|
27
|
+
if (!config) {
|
|
28
|
+
console.log(chalk.red('ā No wallet found. Run "fuego create" first.'));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const spinner = ora('Fetching balances from Fuego server...').start();
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
const publicKey = config.publicKey;
|
|
36
|
+
const network = 'mainnet-beta';
|
|
37
|
+
|
|
38
|
+
// Query SOL balance
|
|
39
|
+
const solResponse = await fetch(`${FUEGO_SERVER_URL}/balance`, {
|
|
40
|
+
method: 'POST',
|
|
41
|
+
headers: { 'Content-Type': 'application/json' },
|
|
42
|
+
body: JSON.stringify({ network, address: publicKey })
|
|
43
|
+
});
|
|
44
|
+
const solData = await solResponse.json() as BalanceResponse;
|
|
45
|
+
const solBalance = solData.success ? solData.data!.sol : 0;
|
|
46
|
+
|
|
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;
|
|
55
|
+
|
|
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;
|
|
64
|
+
|
|
65
|
+
spinner.stop();
|
|
66
|
+
|
|
67
|
+
showInfo('š° Your Balances', [
|
|
68
|
+
`Address: ${formatPublicKey(publicKey)}`,
|
|
69
|
+
'',
|
|
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
|
+
]);
|
|
74
|
+
|
|
75
|
+
flameDivider();
|
|
76
|
+
} catch (error) {
|
|
77
|
+
spinner.stop();
|
|
78
|
+
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'));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
package/src/commands/create.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import ora from 'ora';
|
|
3
3
|
import { FuegoWallet } from '../lib/wallet.js';
|
|
4
|
-
import { getWalletPath, getConfigPath } from '../lib/config.js';
|
|
4
|
+
import { getWalletPath, getConfigPath, getFuegoCliVersion, setFuegoCliVersion } from '../lib/config.js';
|
|
5
5
|
import { showSuccess, showWarning, showInfo, formatPublicKey, flameDivider } from '../lib/ascii.js';
|
|
6
6
|
import fs from 'fs-extra';
|
|
7
7
|
|
|
@@ -37,19 +37,27 @@ export async function createCommand(options: CreateOptions): Promise<void> {
|
|
|
37
37
|
|
|
38
38
|
const { publicKey, mnemonic } = await wallet.create(options.name);
|
|
39
39
|
|
|
40
|
-
// Create config.json
|
|
40
|
+
// Create or update config.json
|
|
41
41
|
const configPath = options.directory
|
|
42
42
|
? `${options.directory}/config.json`
|
|
43
43
|
: getConfigPath();
|
|
44
44
|
|
|
45
|
-
if (
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
version: '0.1.0'
|
|
50
|
-
}, { spaces: 2 });
|
|
45
|
+
// Load existing config if it exists (from install command)
|
|
46
|
+
let existingConfig: any = {};
|
|
47
|
+
if (fs.existsSync(configPath)) {
|
|
48
|
+
existingConfig = fs.readJsonSync(configPath);
|
|
51
49
|
}
|
|
52
50
|
|
|
51
|
+
// Merge with defaults, preserving fuego install info
|
|
52
|
+
fs.writeJsonSync(configPath, {
|
|
53
|
+
...existingConfig,
|
|
54
|
+
network: existingConfig.network || 'mainnet',
|
|
55
|
+
rpcUrl: existingConfig.rpcUrl || 'https://api.mainnet-beta.solana.com'
|
|
56
|
+
}, { spaces: 2 });
|
|
57
|
+
|
|
58
|
+
// Store fuego-cli version
|
|
59
|
+
setFuegoCliVersion(getFuegoCliVersion());
|
|
60
|
+
|
|
53
61
|
spinner.stop();
|
|
54
62
|
|
|
55
63
|
// Success display
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { exec } from 'child_process';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { promisify } from 'util';
|
|
6
|
+
import { showInfo, flameDivider } from '../lib/ascii.js';
|
|
7
|
+
import { findFuegoPath } from '../lib/config.js';
|
|
8
|
+
|
|
9
|
+
const execAsync = promisify(exec);
|
|
10
|
+
|
|
11
|
+
export async function dashboardCommand(): Promise<void> {
|
|
12
|
+
console.log(); // spacer
|
|
13
|
+
|
|
14
|
+
// Find fuego installation (checks config first, then falls back to auto-detect)
|
|
15
|
+
const fuegoPath = findFuegoPath();
|
|
16
|
+
|
|
17
|
+
if (!fuegoPath || !fs.existsSync(path.join(fuegoPath, 'dashboard', 'dashboard.html'))) {
|
|
18
|
+
console.log(chalk.red('ā Fuego dashboard not found.'));
|
|
19
|
+
console.log(chalk.gray('\nRun "fuego install" first to install the Fuego project.'));
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const dashboardPath = path.join(fuegoPath, 'dashboard', 'dashboard.html');
|
|
24
|
+
|
|
25
|
+
showInfo('š„ Opening Fuego Dashboard', [
|
|
26
|
+
`Location: ${chalk.cyan(dashboardPath)}`
|
|
27
|
+
]);
|
|
28
|
+
|
|
29
|
+
flameDivider();
|
|
30
|
+
|
|
31
|
+
// Open the dashboard based on platform
|
|
32
|
+
const platform = process.platform;
|
|
33
|
+
let command: string;
|
|
34
|
+
|
|
35
|
+
switch (platform) {
|
|
36
|
+
case 'darwin': // macOS
|
|
37
|
+
command = `open "${dashboardPath}"`;
|
|
38
|
+
break;
|
|
39
|
+
case 'linux':
|
|
40
|
+
command = `xdg-open "${dashboardPath}"`;
|
|
41
|
+
break;
|
|
42
|
+
case 'win32':
|
|
43
|
+
command = `start "" "${dashboardPath}"`;
|
|
44
|
+
break;
|
|
45
|
+
default:
|
|
46
|
+
console.log(chalk.yellow(`ā ļø Unsupported platform: ${platform}`));
|
|
47
|
+
console.log(chalk.gray(`Please open manually: ${dashboardPath}`));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
await execAsync(command);
|
|
53
|
+
console.log(chalk.green('\nā
Dashboard opened!'));
|
|
54
|
+
console.log(chalk.gray('Note: Make sure the Fuego server is running (fuego serve)'));
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.log(chalk.yellow('\nā ļø Could not open dashboard automatically.'));
|
|
57
|
+
console.log(chalk.gray(`Please open manually: ${dashboardPath}`));
|
|
58
|
+
}
|
|
59
|
+
}
|
package/src/commands/install.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { execSync } from 'child_process';
|
|
|
4
4
|
import fs from 'fs-extra';
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import os from 'os';
|
|
7
|
+
import { setFuegoVersion, getConfigPath } from '../lib/config.js';
|
|
7
8
|
import { showSuccess, showWarning, showInfo, flameDivider } from '../lib/ascii.js';
|
|
8
9
|
|
|
9
10
|
interface InstallOptions {
|
|
@@ -42,6 +43,10 @@ export async function installCommand(options: InstallOptions): Promise<void> {
|
|
|
42
43
|
spinner.color = 'cyan';
|
|
43
44
|
await fs.ensureDir(path.dirname(installPath));
|
|
44
45
|
|
|
46
|
+
// Ensure .fuego config directory exists (even if create hasn't run yet)
|
|
47
|
+
const fuegoDir = path.join(os.homedir(), '.fuego');
|
|
48
|
+
await fs.ensureDir(fuegoDir);
|
|
49
|
+
|
|
45
50
|
spinner.text = 'Cloning Fuego repository...';
|
|
46
51
|
spinner.color = 'red';
|
|
47
52
|
|
|
@@ -51,6 +56,14 @@ export async function installCommand(options: InstallOptions): Promise<void> {
|
|
|
51
56
|
|
|
52
57
|
spinner.stop();
|
|
53
58
|
|
|
59
|
+
// Get the commit hash as version
|
|
60
|
+
const commitHash = execSync('git rev-parse --short HEAD', {
|
|
61
|
+
cwd: installPath
|
|
62
|
+
}).toString().trim();
|
|
63
|
+
|
|
64
|
+
// Store version info with install path
|
|
65
|
+
setFuegoVersion(commitHash, installPath);
|
|
66
|
+
|
|
54
67
|
// Show contextual next steps
|
|
55
68
|
const relativePath = path.relative(process.cwd(), installPath);
|
|
56
69
|
const cdPath = relativePath.startsWith('..') ? installPath : relativePath;
|
|
@@ -58,7 +71,7 @@ export async function installCommand(options: InstallOptions): Promise<void> {
|
|
|
58
71
|
|
|
59
72
|
showSuccess(
|
|
60
73
|
'š„ Fuego Installed Successfully!',
|
|
61
|
-
`Location: ${chalk.cyan(installPath)}`
|
|
74
|
+
`Location: ${chalk.cyan(installPath)}\nVersion: ${chalk.cyan(commitHash)}`
|
|
62
75
|
);
|
|
63
76
|
|
|
64
77
|
showInfo('š Next Steps', [
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { showInfo, flameDivider } from '../lib/ascii.js';
|
|
6
|
+
import { findFuegoPath } from '../lib/config.js';
|
|
7
|
+
|
|
8
|
+
export async function serveCommand(): Promise<void> {
|
|
9
|
+
console.log(); // spacer
|
|
10
|
+
|
|
11
|
+
// Find fuego installation (checks config first, then falls back to auto-detect)
|
|
12
|
+
const fuegoPath = findFuegoPath();
|
|
13
|
+
|
|
14
|
+
if (!fuegoPath) {
|
|
15
|
+
console.log(chalk.red('ā Fuego server not found.'));
|
|
16
|
+
console.log(chalk.gray('\nRun "fuego install" first to install the Fuego project.'));
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const serverPath = path.join(fuegoPath, 'server');
|
|
21
|
+
|
|
22
|
+
showInfo('š„ Starting Fuego Server', [
|
|
23
|
+
`Location: ${chalk.cyan(serverPath)}`,
|
|
24
|
+
'Command: cargo run',
|
|
25
|
+
'',
|
|
26
|
+
'Server will be available at:',
|
|
27
|
+
chalk.cyan('http://127.0.0.1:8080')
|
|
28
|
+
]);
|
|
29
|
+
|
|
30
|
+
flameDivider();
|
|
31
|
+
console.log(); // spacer
|
|
32
|
+
|
|
33
|
+
// Spawn cargo run in the server directory
|
|
34
|
+
const child = spawn('cargo', ['run'], {
|
|
35
|
+
cwd: serverPath,
|
|
36
|
+
stdio: 'inherit'
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
child.on('error', (error) => {
|
|
40
|
+
console.log(chalk.red(`\nā Failed to start server: ${error.message}`));
|
|
41
|
+
console.log(chalk.gray('\nMake sure Rust and Cargo are installed: https://rustup.rs'));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
child.on('exit', (code) => {
|
|
46
|
+
process.exit(code || 0);
|
|
47
|
+
});
|
|
48
|
+
}
|