From 5ed9af4420a18520707e4f3d83cacbc5554ae8c6 Mon Sep 17 00:00:00 2001 From: Ben Date: Tue, 25 Feb 2025 15:30:00 +0100 Subject: [PATCH 01/11] fixes external-ip nat argument for codex v0.2.0 --- src/handlers/nodeHandlers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/handlers/nodeHandlers.js b/src/handlers/nodeHandlers.js index ef0eddb..9df5ecb 100644 --- a/src/handlers/nodeHandlers.js +++ b/src/handlers/nodeHandlers.js @@ -77,7 +77,7 @@ export async function runCodex(config, showNavigationMenu) { `--disc-port=${config.ports.discPort}`, `--listen-addrs=/ip4/0.0.0.0/tcp/${config.ports.listenPort}`, `--api-port=${config.ports.apiPort}`, - `--nat=${nat}`, + `--nat=extip:${nat}`, `--api-cors-origin="*"`, `--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P` ]; From a56bd2a69c38c63f4310d1401741526c65c04eb4 Mon Sep 17 00:00:00 2001 From: Kumaraguru <19eucs071@skcet.ac.in> Date: Tue, 25 Feb 2025 12:33:56 -0700 Subject: [PATCH 02/11] fixing the abrupt stop by handling path variables --- src/handlers/installationHandlers.js | 63 +++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/src/handlers/installationHandlers.js b/src/handlers/installationHandlers.js index 8234144..6bb8a3f 100644 --- a/src/handlers/installationHandlers.js +++ b/src/handlers/installationHandlers.js @@ -100,6 +100,46 @@ async function clearCodexExePathFromConfig(config) { saveConfig(config); } +async function configureShellPath(installPath) { + try { + const homedir = os.homedir(); + let shellConfigFile; + let exportLine = `export PATH="${installPath}:$PATH"`; + + if (platform === 'win32') { + // For Windows, update the User PATH environment variable + const currentPath = process.env.PATH || ''; + if (!currentPath.includes(installPath)) { + await runCommand(`setx PATH "${installPath};%PATH%"`); + } + return true; + } else { + // For Unix-like systems (macOS and Linux) + if (platform === 'darwin') { + // Check for zsh first (default on modern macOS) + if (fs.existsSync(path.join(homedir, '.zshrc'))) { + shellConfigFile = path.join(homedir, '.zshrc'); + } else { + shellConfigFile = path.join(homedir, '.bash_profile'); + } + } else { + // Linux + shellConfigFile = path.join(homedir, '.bashrc'); + } + + // Check if PATH is already configured + const fileContent = fs.existsSync(shellConfigFile) ? fs.readFileSync(shellConfigFile, 'utf8') : ''; + if (!fileContent.includes(installPath)) { + fs.appendFileSync(shellConfigFile, `\n${exportLine}\n`); + } + return true; + } + } catch (error) { + console.log(showErrorMessage(`Failed to configure PATH: ${error.message}`)); + return false; + } +} + async function performInstall(config) { const agreed = await showPrivacyDisclaimer(); if (!agreed) { @@ -187,12 +227,23 @@ async function performInstall(config) { const version = await getCodexVersion(config); console.log(chalk.green(version)); - console.log(showSuccessMessage( - 'Codex is successfully installed!\n' + - `Install path: "${config.codexExe}"\n\n` + - 'The default configuration should work for most platforms.\n' + - 'Please review the configuration before starting Codex.\n' - )); + // Configure shell PATH + const pathConfigured = await configureShellPath(installPath); + if (pathConfigured) { + console.log(showSuccessMessage( + 'Codex is successfully installed!\n' + + `Install path: "${config.codexExe}"\n\n` + + 'PATH has been configured automatically.\n' + + 'Please restart your terminal for the changes to take effect.\n\n' + + 'The default configuration should work for most platforms.\n' + + 'Please review the configuration before starting Codex.\n' + )); + } else { + console.log(showInfoMessage( + 'Codex is installed but PATH configuration failed.\n' + + `Please manually add "${installPath}" to your PATH.\n` + )); + } } catch (error) { throw new Error('Installation completed but Codex command is not available. Please restart your terminal and try again.'); } From a67cf3031f7a702ea2ce0f702bd63a0471d83693 Mon Sep 17 00:00:00 2001 From: Kumaraguru <19eucs071@skcet.ac.in> Date: Tue, 25 Feb 2025 13:08:59 -0700 Subject: [PATCH 03/11] updating version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 16bf6b5..390736c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "codexstorage", - "version": "1.0.11", + "version": "1.0.12", "description": "CLI tool for Codex Storage", "main": "index.js", "type": "module", From 127858a52ac37423cc7f93d365470162e11bfe17 Mon Sep 17 00:00:00 2001 From: Kumaraguru <19eucs071@skcet.ac.in> Date: Tue, 25 Feb 2025 14:45:55 -0700 Subject: [PATCH 04/11] making download codex work without edit configuration and replacing it with a success message to make it more intuitive --- src/handlers/installationHandlers.js | 54 +++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/src/handlers/installationHandlers.js b/src/handlers/installationHandlers.js index 6bb8a3f..12ed04f 100644 --- a/src/handlers/installationHandlers.js +++ b/src/handlers/installationHandlers.js @@ -229,15 +229,54 @@ async function performInstall(config) { // Configure shell PATH const pathConfigured = await configureShellPath(installPath); + spinner.success(); + if (pathConfigured) { - console.log(showSuccessMessage( - 'Codex is successfully installed!\n' + - `Install path: "${config.codexExe}"\n\n` + - 'PATH has been configured automatically.\n' + - 'Please restart your terminal for the changes to take effect.\n\n' + - 'The default configuration should work for most platforms.\n' + - 'Please review the configuration before starting Codex.\n' + console.log(boxen( + chalk.green('Codex is installed successfully!\n\n') + + chalk.cyan('Current configuration:\n') + + `${chalk.white('Data path')} = ${config.dataDir}\n` + + `${chalk.white('Logs path')} = ${config.logsDir}\n` + + `${chalk.white('Storage quota')} = ${config.storageQuota} Bytes\n` + + `${chalk.white('Discovery port')} = ${config.ports.discPort}\n` + + `${chalk.white('P2P Listen port')} = ${config.ports.listenPort}\n` + + `${chalk.white('API Port')} = ${config.ports.apiPort}\n\n` + + chalk.gray('You can modify the above configuration from the main menu.'), + { + padding: 1, + margin: 1, + borderStyle: 'round', + borderColor: 'green', + title: '✅ Installation Complete', + titleAlignment: 'center' + } )); + + const { choice } = await inquirer.prompt([ + { + type: 'list', + name: 'choice', + message: 'What would you like to do?', + choices: [ + '1. Run the node', + '2. Return to main menu', + '3. Exit' + ], + pageSize: 3, + loop: true + } + ]); + + switch (choice.split('.')[0].trim()) { + case '1': + await runCodex(config, showNavigationMenu); + break; + case '2': + await showNavigationMenu(); + break; + case '3': + process.exit(0); + } } else { console.log(showInfoMessage( 'Codex is installed but PATH configuration failed.\n' + @@ -252,7 +291,6 @@ async function performInstall(config) { "Please review the configuration before starting Codex." )); - spinner.success(); return true; } catch (error) { spinner.error(); From 806b47e7e5e3fe4da6cc1b30613b3941106db603 Mon Sep 17 00:00:00 2001 From: Kumaraguru <19eucs071@skcet.ac.in> Date: Tue, 25 Feb 2025 18:56:32 -0700 Subject: [PATCH 05/11] fixing the cors issue with the node --- src/handlers/nodeHandlers.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/handlers/nodeHandlers.js b/src/handlers/nodeHandlers.js index 9df5ecb..00f5ffe 100644 --- a/src/handlers/nodeHandlers.js +++ b/src/handlers/nodeHandlers.js @@ -71,6 +71,7 @@ export async function runCodex(config, showNavigationMenu) { const executable = config.codexExe; const args = [ `--data-dir="${config.dataDir}"`, + `--api-cors-origin="*"`, `--log-level=DEBUG`, `--log-file="${logFilePath}"`, `--storage-quota="${config.storageQuota}"`, From 01ef30f18e20a2fe81116e605df16b3b1aecd94c Mon Sep 17 00:00:00 2001 From: Kumaraguru <19eucs071@skcet.ac.in> Date: Tue, 25 Feb 2025 19:01:23 -0700 Subject: [PATCH 06/11] fixing the error post download node --- src/handlers/installationHandlers.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/handlers/installationHandlers.js b/src/handlers/installationHandlers.js index 12ed04f..14b4e4c 100644 --- a/src/handlers/installationHandlers.js +++ b/src/handlers/installationHandlers.js @@ -258,23 +258,19 @@ async function performInstall(config) { name: 'choice', message: 'What would you like to do?', choices: [ - '1. Run the node', - '2. Return to main menu', - '3. Exit' + '1. Return to main menu', + '2. Exit', ], - pageSize: 3, + pageSize: 2, loop: true } ]); switch (choice.split('.')[0].trim()) { case '1': - await runCodex(config, showNavigationMenu); - break; - case '2': await showNavigationMenu(); break; - case '3': + case '2': process.exit(0); } } else { From 3875d7f7ba1b01a19c20cda24b1901ecc4af4af5 Mon Sep 17 00:00:00 2001 From: Kumaraguru <19eucs071@skcet.ac.in> Date: Tue, 25 Feb 2025 19:02:23 -0700 Subject: [PATCH 07/11] update version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 390736c..382f964 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "codexstorage", - "version": "1.0.12", + "version": "1.0.14", "description": "CLI tool for Codex Storage", "main": "index.js", "type": "module", From a0fc9ce4166ecff051e110800abd01ed93526915 Mon Sep 17 00:00:00 2001 From: jessiebroke <18238304+jessiebroke@users.noreply.github.com> Date: Thu, 27 Feb 2025 11:23:28 -0700 Subject: [PATCH 08/11] Fix Codex Storage ASCII art splash screen menu --- src/constants/ascii.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/constants/ascii.js b/src/constants/ascii.js index 70a6a09..3247832 100644 --- a/src/constants/ascii.js +++ b/src/constants/ascii.js @@ -1,13 +1,13 @@ export const ASCII_ART = ` -██████╗ ██████╗ ██████╗ ███████╗██╗ ██╗ -██╔════╝██╔═══██╗██╔══██╗██╔════╝╚██╗██╔╝ +██████╗ ██████╗ ██████╗ ███████╗██╗ ██╗ +██╔════╝██╔═══██╗██╔══██╗██╔═══╝ ╚██╗██╔╝ ██║ ██║ ██║██║ ██║█████╗ ╚███╔╝ ██║ ██║ ██║██║ ██║██╔══╝ ██╔██╗ -╚██████╗╚██████╔╝██████╔╝██████ ██╗ +╚██████╗╚██████╔╝██████╔╝███████╗██╗ ██╗ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ███████╗████████╗ ██████╗ ██████╗ █████╗ ██████╗ ███████╗ -██╔════╝╚══██╔══╝██╔═══██╗██╔══██╗██╔══██╗██╔════╝ █╔══��═╝ +██╔════╝╚══██╔══╝██╔═══██╗██╔══██╗██╔══██╗██╔════╝ █╔═════╝ ███████╗ ██║ ██║ ██║██████╔╝███████║██║ ███╗█████╗ ╚════██║ ██║ ██║ ██║██╔══██╗██╔══██║██║ ██║██╔══╝ ███████║ ██║ ╚██████╔╝██║ ██║██║ ██║╚██████╔╝███████╗ From d84d13db7b31148fea30258c0adec2cb18bbc3f2 Mon Sep 17 00:00:00 2001 From: Kumaraguru <19eucs071@skcet.ac.in> Date: Fri, 21 Mar 2025 08:52:21 +0000 Subject: [PATCH 09/11] fixing bootstrap node sprs --- src/handlers/nodeHandlers.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/handlers/nodeHandlers.js b/src/handlers/nodeHandlers.js index 00f5ffe..4ef7300 100644 --- a/src/handlers/nodeHandlers.js +++ b/src/handlers/nodeHandlers.js @@ -71,7 +71,14 @@ export async function runCodex(config, showNavigationMenu) { const executable = config.codexExe; const args = [ `--data-dir="${config.dataDir}"`, + `--storage-quota=11811160064`, `--api-cors-origin="*"`, + `--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P`, + `--bootstrap-node=spr:CiUIAhIhAyUvcPkKoGE7-gh84RmKIPHJPdsX5Ugm_IHVJgF-Mmu_EgIDARo8CicAJQgCEiEDJS9w-QqgYTv6CHzhGYog8ck92xflSCb8gdUmAX4ya78QoemesAYaCwoJBES39Q2RAnVOKkYwRAIgLi3rouyaZFS_Uilx8k99ySdQCP1tsmLR21tDb9p8LcgCIG30o5YnEooQ1n6tgm9fCT7s53k6XlxyeSkD_uIO9mb3`, + `--bootstrap-node=spr:CiUIAhIhA7E4DEMer8nUOIUSaNPA4z6x0n9Xaknd28Cfw9S2-cCeEgIDARo8CicAJQgCEiEDsTgMQx6vydQ4hRJo08DjPrHSf1dqSd3bwJ_D1Lb5wJ4Qt_CesAYaCwoJBEDhWZORAnVYKkYwRAIgFNzhnftocLlVHJl1onuhbSUM7MysXPV6dawHAA0DZNsCIDRVu9gnPTH5UkcRXLtt7MLHCo4-DL-RCMyTcMxYBXL0`, + `--bootstrap-node=spr:CiUIAhIhAzZn3JmJab46BNjadVnLNQKbhnN3eYxwqpteKYY32SbOEgIDARo8CicAJQgCEiEDNmfcmYlpvjoE2Np1Wcs1ApuGc3d5jHCqm14phjfZJs4QrvWesAYaCwoJBKpA-TaRAnViKkcwRQIhANuMmZDD2c25xzTbKSirEpkZYoxbq-FU_lpI0K0e4mIVAiBfQX4yR47h1LCnHznXgDs6xx5DLO5q3lUcicqUeaqGeg`, + `--bootstrap-node=spr:CiUIAhIhAgybmRwboqDdUJjeZrzh43sn5mp8jt6ENIb08tLn4x01EgIDARo8CicAJQgCEiECDJuZHBuioN1QmN5mvOHjeyfmanyO3oQ0hvTy0ufjHTUQh4ifsAYaCwoJBI_0zSiRAnVsKkcwRQIhAJCb_z0E3RsnQrEePdJzMSQrmn_ooHv6mbw1DOh5IbVNAiBbBJrWR8eBV6ftzMd6ofa5khNA2h88OBhMqHCIzSjCeA`, + `--bootstrap-node=spr:CiUIAhIhAntGLadpfuBCD9XXfiN_43-V3L5VWgFCXxg4a8uhDdnYEgIDARo8CicAJQgCEiECe0Ytp2l-4EIP1dd-I3_jf5XcvlVaAUJfGDhry6EN2dgQsIufsAYaCwoJBNEmoCiRAnV2KkYwRAIgXO3bzd5VF8jLZG8r7dcLJ_FnQBYp1BcxrOvovEa40acCIDhQ14eJRoPwJ6GKgqOkXdaFAsoszl-HIRzYcXKeb7D9`, `--log-level=DEBUG`, `--log-file="${logFilePath}"`, `--storage-quota="${config.storageQuota}"`, @@ -83,9 +90,9 @@ export async function runCodex(config, showNavigationMenu) { `--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P` ]; - const command = + const command = `"${executable}" ${args.join(" ")}` - + console.log(showInfoMessage( '🚀 Codex node is running...\n\n' + 'If your firewall ask, be sure to allow Codex to receive connections. \n' + @@ -117,7 +124,7 @@ export async function runCodex(config, showNavigationMenu) { // Start periodic logging const stopLogging = await startPeriodicLogging(config); - + nodeProcess.on('exit', () => { stopLogging(); }); @@ -223,7 +230,7 @@ async function showNodeDetails(data, showNavigationMenu) { case '3': try { const existingWallet = await getWalletAddress(); - + console.log(boxen( `${chalk.cyan('Current wallet address:')}\n${existingWallet || 'Not set'}`, { @@ -258,14 +265,14 @@ export async function checkNodeStatus(config, showNavigationMenu) { const spinner = createSpinner('Checking node status...').start(); const response = await runCommand(`curl http://localhost:${config.ports.apiPort}/api/codex/v1/debug/info`); spinner.success(); - + const data = JSON.parse(response); - + const peerCount = data.table.nodes.length; const isOnline = peerCount > 2; - + console.log(boxen( - isOnline + isOnline ? chalk.green('Node is ONLINE & DISCOVERABLE') : chalk.yellow('Node is ONLINE but has few peers'), { From 5f00939b107c26d10fa92dc28ae677055be5e8ca Mon Sep 17 00:00:00 2001 From: Kumaraguru <19eucs071@skcet.ac.in> Date: Fri, 21 Mar 2025 08:56:57 +0000 Subject: [PATCH 10/11] updating release version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 382f964..ccdf1a7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "codexstorage", - "version": "1.0.14", + "version": "1.0.15", "description": "CLI tool for Codex Storage", "main": "index.js", "type": "module", From f3ad7737459d4f17bb7d9b68824d6d8e1d3c298d Mon Sep 17 00:00:00 2001 From: Kumaraguru <19eucs071@skcet.ac.in> Date: Fri, 21 Mar 2025 13:39:20 +0000 Subject: [PATCH 11/11] fixing cors issue --- package.json | 2 +- src/handlers/nodeHandlers.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index ccdf1a7..bb34a90 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "codexstorage", - "version": "1.0.15", + "version": "1.0.16", "description": "CLI tool for Codex Storage", "main": "index.js", "type": "module", diff --git a/src/handlers/nodeHandlers.js b/src/handlers/nodeHandlers.js index 4ef7300..de3a84c 100644 --- a/src/handlers/nodeHandlers.js +++ b/src/handlers/nodeHandlers.js @@ -71,8 +71,8 @@ export async function runCodex(config, showNavigationMenu) { const executable = config.codexExe; const args = [ `--data-dir="${config.dataDir}"`, - `--storage-quota=11811160064`, `--api-cors-origin="*"`, + `--storage-quota=11811160064`, `--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P`, `--bootstrap-node=spr:CiUIAhIhAyUvcPkKoGE7-gh84RmKIPHJPdsX5Ugm_IHVJgF-Mmu_EgIDARo8CicAJQgCEiEDJS9w-QqgYTv6CHzhGYog8ck92xflSCb8gdUmAX4ya78QoemesAYaCwoJBES39Q2RAnVOKkYwRAIgLi3rouyaZFS_Uilx8k99ySdQCP1tsmLR21tDb9p8LcgCIG30o5YnEooQ1n6tgm9fCT7s53k6XlxyeSkD_uIO9mb3`, `--bootstrap-node=spr:CiUIAhIhA7E4DEMer8nUOIUSaNPA4z6x0n9Xaknd28Cfw9S2-cCeEgIDARo8CicAJQgCEiEDsTgMQx6vydQ4hRJo08DjPrHSf1dqSd3bwJ_D1Lb5wJ4Qt_CesAYaCwoJBEDhWZORAnVYKkYwRAIgFNzhnftocLlVHJl1onuhbSUM7MysXPV6dawHAA0DZNsCIDRVu9gnPTH5UkcRXLtt7MLHCo4-DL-RCMyTcMxYBXL0`, @@ -86,7 +86,6 @@ export async function runCodex(config, showNavigationMenu) { `--listen-addrs=/ip4/0.0.0.0/tcp/${config.ports.listenPort}`, `--api-port=${config.ports.apiPort}`, `--nat=extip:${nat}`, - `--api-cors-origin="*"`, `--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P` ];