neo-blockchain-bin
Version:
NEO Blockchain binaries.
406 lines (363 loc) • 10.4 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
require('rxjs/add/observable/of');
var neoBlockchainNodeCore = require('neo-blockchain-node-core');
var neoBlockchainOffline = require('neo-blockchain-offline');
var fullNode$ = _interopDefault(require('neo-blockchain-full-node'));
var BehaviorSubject = require('rxjs/BehaviorSubject');
var neoBlockchainNeoSettings = require('neo-blockchain-neo-settings');
var winston = require('winston');
var os = _interopDefault(require('os'));
var path = _interopDefault(require('path'));
function _asyncToGenerator(fn) {
return function () {
var self = this,
args = arguments;
return new Promise(function (resolve, reject) {
var gen = fn.apply(self, args);
function step(key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _next(value) {
step("next", value);
}
function _throw(err) {
step("throw", err);
}
_next();
});
};
}
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
// flowlint-next-line untyped-type-import:off
var isError = function isError(event) {
return event.toLowerCase().includes('error') || event.toLowerCase().includes('failure');
};
var explodeError = function explodeError(error) {
return {
message: [error.message || '(no error message)', error.stack].join('\n')
};
};
var createServerLogger = (function (logger) {
return function (logMessage, exitCallbackIn) {
var error = logMessage.error;
var level = logMessage.level;
if (level == null) {
level = isError(logMessage.event) || error != null ? 'error' : 'info';
}
var message = _extends({}, logMessage, {
level: level
});
if (error != null) {
message = _extends({}, message, {
error: explodeError(error)
});
}
logger.log(message);
var exitCallback = exitCallbackIn;
if (exitCallback != null) {
var numFlushes = logger.transports.length;
var numFlushed = 0;
logger.transports.forEach(function (transport) {
transport.once('finish', function () {
numFlushed += 1;
if (numFlushes === numFlushed) {
exitCallback();
}
});
transport.end();
});
}
};
});
var home = os.homedir();
var resolveHome = (function (value) {
return value.startsWith('~/') ? path.resolve(home, value.slice(2)) : value;
});
var createFullNode = (function (_ref) {
var testNet = _ref.testNet,
dataPathIn = _ref.dataPath,
chainIn = _ref.chain,
dumpPathIn = _ref.dumpPath;
var transports$$1 = [];
transports$$1.push(new winston.transports.Console({
level: 'debug'
}));
var log = createServerLogger(winston.createLogger({
transports: transports$$1
}));
var dataPath = resolveHome(dataPathIn);
var onCreateBlockchain;
var dumpPath = dumpPathIn;
var chain = chainIn;
if (dumpPath != null) {
onCreateBlockchain = function () {
var _ref2 = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee(blockchain) {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return neoBlockchainOffline.dumpChain({
blockchain: blockchain,
path: dumpPath
});
case 2:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function onCreateBlockchain(_x) {
return _ref2.apply(this, arguments);
};
}();
} else if (chain != null) {
onCreateBlockchain = function () {
var _ref3 = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee2(blockchain) {
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return neoBlockchainOffline.loadChain({
blockchain: blockchain,
chain: chain
});
case 2:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
return function onCreateBlockchain(_x2) {
return _ref3.apply(this, arguments);
};
}();
}
var settings;
var options;
var rpcEnvironment;
if (testNet) {
settings = neoBlockchainNeoSettings.test;
rpcEnvironment = {
http: {
host: '0.0.0.0',
port: 8081
}
};
options = {
node: {
seeds: [{
type: 'tcp',
host: 'seed1.neo.org',
port: 20333
}, {
type: 'tcp',
host: 'seed2.neo.org',
port: 20333
}, {
type: 'tcp',
host: 'seed3.neo.org',
port: 20333
}, {
type: 'tcp',
host: 'seed4.neo.org',
port: 20333
}, {
type: 'tcp',
host: 'seed5.neo.org',
port: 20333
}].map(function (value) {
return neoBlockchainNodeCore.createEndpoint(value);
})
},
rpc: {
server: {
keepAliveTimeout: 65000
},
readyHealthCheck: {
rpcEndpoints: ['http://test1.cityofzion.io:8880', 'http://test2.cityofzion.io:8880', 'http://test3.cityofzion.io:8880', 'http://test4.cityofzion.io:8880', 'http://test5.cityofzion.io:8880', 'http://seed1.neo.org:20332', 'http://seed2.neo.org:20332', 'http://seed3.neo.org:20332', 'http://seed4.neo.org:20332', 'http://seed5.neo.org:20332'],
offset: 1,
timeoutMS: 5000
}
}
};
} else {
settings = neoBlockchainNeoSettings.main;
rpcEnvironment = {
http: {
host: '0.0.0.0',
port: 8081
}
};
options = {
node: {
seeds: [{
type: 'tcp',
host: 'seed1.neo.org',
port: 10333
}, {
type: 'tcp',
host: 'seed2.neo.org',
port: 10333
}, {
type: 'tcp',
host: 'seed3.neo.org',
port: 10333
}, {
type: 'tcp',
host: 'seed4.neo.org',
port: 10333
}, {
type: 'tcp',
host: 'seed5.neo.org',
port: 10333
}].map(function (value) {
return neoBlockchainNodeCore.createEndpoint(value);
})
},
rpc: {
server: {
keepAliveTimeout: 65000
},
readyHealthCheck: {
rpcEndpoints: ['http://seed1.cityofzion.io:8080', 'http://seed2.cityofzion.io:8080', 'http://seed3.cityofzion.io:8080', 'http://seed4.cityofzion.io:8080', 'http://seed5.cityofzion.io:8080', 'http://seed1.neo.org:10332', 'http://seed2.neo.org:10332', 'http://seed3.neo.org:10332', 'http://seed4.neo.org:10332', 'http://seed5.neo.org:10332'],
offset: 1,
timeoutMS: 5000
}
}
};
}
return fullNode$({
log: log,
createLogForContext: function createLogForContext() {
return log;
},
createProfile: neoBlockchainNodeCore.createProfile,
settings: settings,
environment: {
dataPath: dataPath,
rpc: rpcEnvironment
},
options$: new BehaviorSubject.BehaviorSubject(options),
onCreateBlockchain: onCreateBlockchain
});
});
var transports$1 = [];
transports$1.push(new winston.transports.Console({
level: 'info'
}));
var log = createServerLogger(winston.createLogger({
transports: transports$1
}));
var setupCLI = (function () {
var shutdownFuncs = [];
var initiateShutdown = function () {
var _ref = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee() {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return Promise.all(shutdownFuncs.map(function (func) {
return func();
}));
case 2:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function initiateShutdown() {
return _ref.apply(this, arguments);
};
}();
var shutdownInitiated = false;
var shutdown = function shutdown(_ref2) {
var exitCode = _ref2.exitCode;
if (!shutdownInitiated) {
shutdownInitiated = true;
initiateShutdown().then(function () {
log({
event: 'SHUTDOWN_SUCCESS'
}, function () {
return process.exit(exitCode);
});
}).catch(function (error) {
log({
event: 'SHUTDOWN_ERROR',
error: error
}, function () {
return process.exit(1);
});
});
}
};
process.on('unhandledRejection', function (error) {
log({
event: 'UNHANDLED_REJECTION.',
error: error
});
shutdown({
exitCode: 1
});
});
process.on('uncaughtException', function (error) {
log({
event: 'UNCAUGHT_EXCEPTION',
error: error
});
shutdown({
exitCode: 1
});
});
process.on('SIGINT', function () {
shutdown({
exitCode: 0
});
});
return {
shutdownFuncs: shutdownFuncs,
shutdown: shutdown
};
});
exports.createFullNode = createFullNode;
exports.createServerLogger = createServerLogger;
exports.log = log;
exports.setupCLI = setupCLI;
//# sourceMappingURL=index.js.map