Select Git revision
server.js 19.56 KiB
"use strict";
const stream = require('stream');
const util = require('util');
const path = require('path');
const co = require('co');
const _ = require('underscore');
const Q = require('q');
const archiver = require('archiver');
const unzip = require('unzip2');
const fs = require('fs');
const parsers = require('./app/lib/streams/parsers');
const constants = require('./app/lib/constants');
const fileDAL = require('./app/lib/dal/fileDAL');
const jsonpckg = require('./package.json');
const router = require('./app/lib/streams/router');
const base58 = require('./app/lib/crypto/base58');
const keyring = require('./app/lib/crypto/keyring');
const directory = require('./app/lib/system/directory');
const dos2unix = require('./app/lib/system/dos2unix');
const Synchroniser = require('./app/lib/sync');
const multicaster = require('./app/lib/streams/multicaster');
const upnp = require('./app/lib/system/upnp');
const rawer = require('./app/lib/ucp/rawer');
const permanentProver = require('./app/lib/computation/permanentProver');
function Server (dbConf, overrideConf) {
stream.Duplex.call(this, { objectMode: true });
const home = directory.getHome(dbConf.name, dbConf.home);
const paramsP = directory.getHomeParams(dbConf && dbConf.memory, home);
const logger = require('./app/lib/logger')('server');
const permaProver = this.permaProver = permanentProver(this);
const that = this;
that.home = home;
that.conf = null;
that.dal = null;
that.version = jsonpckg.version;
that.logger = logger;
// External libs
that.lib = {};
that.lib.keyring = require('./app/lib/crypto/keyring');
that.lib.Identity = require('./app/lib/entity/identity');
that.lib.rawer = require('./app/lib/ucp/rawer');
that.lib.http2raw = require('./app/lib/helpers/http2raw');
that.lib.dos2unix = require('./app/lib/system/dos2unix');
that.lib.contacter = require('./app/lib/contacter');
that.lib.bma = require('./app/lib/streams/bma');
that.lib.network = require('./app/lib/system/network');
that.lib.constants = require('./app/lib/constants');
that.lib.ucp = require('./app/lib/ucp/buid');
that.MerkleService = require("./app/lib/helpers/merkle");
that.ParametersService = require("./app/lib/helpers/parameters")();
that.IdentityService = require('./app/service/IdentityService')();
that.MembershipService = require('./app/service/MembershipService')();
that.PeeringService = require('./app/service/PeeringService')(that);
that.BlockchainService = require('./app/service/BlockchainService')(that);
that.TransactionsService = require('./app/service/TransactionsService')();
// Create document mapping
const documentsMapping = {
'identity': { action: that.IdentityService.submitIdentity, parser: parsers.parseIdentity },
'certification': { action: that.IdentityService.submitCertification, parser: parsers.parseCertification},
'revocation': { action: that.IdentityService.submitRevocation, parser: parsers.parseRevocation },
'membership': { action: that.MembershipService.submitMembership, parser: parsers.parseMembership },
'peer': { action: that.PeeringService.submitP, parser: parsers.parsePeer },
'transaction': { action: that.TransactionsService.processTx, parser: parsers.parseTransaction },
'block': { action: _.partial(that.BlockchainService.submitBlock, _, true, constants.NO_FORK_ALLOWED), parser: parsers.parseBlock }