Skip to content
Snippets Groups Projects
Select Git revision
  • 0e11fb671a0851a961733890ecf2c2f139d55077
  • 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

index.js

Blame
  • index.js 3.52 KiB
    "use strict";
    
    const co = require('co');
    const _ = require('underscore');
    const Server = require('./server');
    const logger = require('./app/lib/logger')('duniter');
    
    module.exports = function (home, memory, overConf) {
      return new Server(home, memory, overConf);
    };
    
    module.exports.statics = {
    
      logger: logger,
    
      /**************
       * Duniter used by its Command Line Interface
       * @param onService A callback for external usage when Duniter server is ready
       */
      cli: (onService) => {
    
        const cli = require('./app/cli');
    
        // Specific errors handling
        process.on('uncaughtException', (err) => {
          // Dunno why this specific exception is not caught
          if (err.code !== "EADDRNOTAVAIL" && err.code !== "EINVAL") {
            logger.error(err);
            process.exit(1);
          }
        });
    
        process.on('unhandledRejection', (reason) => {
          logger.error('Unhandled rejection: ' + reason);
        });
    
        return co(function*() {
          try {
            // Prepare the command
            const command = cli(process.argv);
            // If ever the process gets interrupted
            process.on('SIGINT', () => {
              co(function*() {
                yield command.closeCommand();
                process.exit();
              });
            });
            // Executes the command
            yield command.execute(onService);
            process.exit();
          } catch (e) {
            logger.error(e);
            process.exit(1);
          }
        });
    
      },
    
      autoStack: () => {
    
        const cli = require('./app/cli');
        const stack = {
    
          registerDependency: (requiredObject) => {
            for (const opt of (requiredObject.duniter.cliOptions || [])) {
              cli.addOption(opt.value, opt.desc, opt.parser);
            }
            for (const command of (requiredObject.duniter.cli || [])) {
              cli.addCommand({ name: command.name, desc: command.desc }, command.requires, command.promiseCallback);
            }
          },
    
          executeStack: () => {
    
            // Specific errors handling
            process.on('uncaughtException', (err) => {
              // Dunno why this specific exception is not caught
              if (err.code !== "EADDRNOTAVAIL" && err.code !== "EINVAL") {
                logger.error(err);
                process.exit(1);
              }
            });
    
            process.on('unhandledRejection', (reason) => {
              logger.error('Unhandled rejection: ' + reason);
            });
    
            return co(function*() {
              try {
                // Prepare the command
                const command = cli(process.argv);
                // If ever the process gets interrupted
                process.on('SIGINT', () => {
                  co(function*() {
                    yield command.closeCommand();
                    process.exit();
                  });
                });
                // Executes the command
                yield command.execute();
                process.exit();
              } catch (e) {
                logger.error(e);
                process.exit(1);
              }
            });
          }
        };
    
        const pjson = require('./package.json');
        const duniterModules = [];
    
        // Look for compliant packages
        const prodDeps = Object.keys(pjson.dependencies);
        const devDeps = Object.keys(pjson.devDependencies);
        const duniterDeps = _.filter(prodDeps.concat(devDeps), (dep) => dep.match(/^duniter-/));
        for(const dep of duniterDeps) {
          const required = require(dep);
          if (required.duniter) {
            duniterModules.push({
              name: dep,
              required
            });
          }
        }
    
        for (const duniterModule of duniterModules) {
          stack.registerDependency(duniterModule.required);
        }
    
        return stack;
      }
    };