Skip to content
Snippets Groups Projects
Select Git revision
  • 456010983dff30ce10b7288473f8f5610054d48f
  • dev default protected
  • release/1.9.1 protected
  • pini-1.8-docker
  • pini-sync-onlypeers
  • duniter-v2s-issue-123-industrialize-releases
  • feature/build-aarch64-nodejs16
  • release/1.8 protected
  • pini-docker
  • ci_tags
  • fix/1448/1.8/txs_not_stored
  • feature/node-20
  • fix/1441/node_summary_with_storage
  • fix/1442/improve_bma_tx_history
  • feature/wotwizard-1.8
  • release/1.9 protected
  • 1.7 protected
  • feature/docker-set-latest protected
  • feature/fast-docker-build-1.8.4
  • fast-docker-build protected
  • feature/dump-distance
  • v1.8.7 protected
  • v1.8.7-rc4 protected
  • v1.8.7-rc3 protected
  • v1.8.7-rc2 protected
  • v1.8.7-rc1 protected
  • v1.8.6 protected
  • v1.7.23 protected
  • v1.8.5 protected
  • v1.8.4 protected
  • v1.8.3 protected
  • v1.8.2 protected
  • v1.8.1 protected
  • v1.8.0 protected
  • v1.8.0-rc1 protected
  • v1.8.0-beta5 protected
  • v1.8.0-beta4 protected
  • v1.8.0-beta3 protected
  • v1.8.0-beta2 protected
  • v1.8.0-beta protected
  • v1.7.21 protected
41 results

cli.ts

Blame
  • cli.ts 3.42 KiB
    const Command = require('commander').Command;
    const pjson = require('../package.json');
    const duniter = require('../index');
    
    export const ExecuteCommand = () => {
    
      const options:any = [];
      const commands:any = [];
    
      return {
    
        addOption: (optFormat:string, optDesc:string, optParser:any) => options.push({ optFormat, optDesc, optParser }),
    
        addCommand: (command:any, executionCallback:any) => commands.push({ command, executionCallback }),
    
        // To execute the provided command
        execute: async (programArgs:string[]) => {
    
          const program = new Command();
    
          // Callback for command success
          let onResolve:any;
    
          // Callback for command rejection
          let onReject:any = () => Promise.reject(Error("Uninitilized rejection throw"));
    
          // Command execution promise
          const currentCommand = new Promise((resolve, reject) => {
            onResolve = resolve;
            onReject = reject;
          });
    
          program
            .version(pjson.version)
            .usage('<command> [options]')
    
            .option('--home <path>', 'Path to Duniter HOME (defaults to "$HOME/.config/duniter").')
            .option('-d, --mdb <name>', 'Database name (defaults to "duniter_default").')
    
            .option('--autoconf', 'With `config` and `init` commands, will guess the best network and key options witout asking for confirmation')
            .option('--addep <endpoint>', 'With `config` command, add given endpoint to the list of endpoints of this node')
            .option('--remep <endpoint>', 'With `config` command, remove given endpoint to the list of endpoints of this node')
    
            .option('--cpu <percent>', 'Percent of CPU usage for proof-of-work computation', parsePercent)
            .option('--prefix <nodeId>', 'Prefix node id for the first character of nonce', parseInt)
    
            .option('-c, --currency <name>', 'Name of the currency managed by this node.')
    
            .option('--nostdout', 'Disable stdout printing for `export-bc` command')
            .option('--noshuffle', 'Disable peers shuffling for `sync` command')
    
            .option('--timeout <milliseconds>', 'Timeout to use when contacting peers', parseInt)
            .option('--httplogs', 'Enable HTTP logs')
            .option('--nohttplogs', 'Disable HTTP logs')
            .option('--isolate', 'Avoid the node to send peering or status informations to the network')
            .option('--forksize <size>', 'Maximum size of fork window', parseInt)
            .option('--memory', 'Memory mode')
          ;
    
          for (const opt of options) {
            program
              .option(opt.optFormat, opt.optDesc, opt.optParser);
          }
    
          for (const cmd of commands) {
            program
              .command(cmd.command.name)
              .description(cmd.command.desc)
              .action(async function() {
                const args = Array.from(arguments);
                try {
                  const resOfExecution = await cmd.executionCallback.apply(null, [program].concat(args));
                  onResolve(resOfExecution);
                } catch (e) {
                  onReject(e);
                }
              });
          }
    
          program
            .on('*', function (cmd:any) {
              console.log("Unknown command '%s'. Try --help for a listing of commands & options.", cmd);
              onResolve();
            });
    
          program.parse(programArgs);
    
          if (programArgs.length <= 2) {
            onReject('No command given.');
          }
          return currentCommand;
        }
      };
    };
    
    function parsePercent(s:string) {
      const f = parseFloat(s);
      return isNaN(f) ? 0 : f;
    }