@aeternity/aepp-sdk
Version:
SDK for the æternity blockchain
207 lines (186 loc) • 8.27 kB
JavaScript
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
import _typeof from "@babel/runtime-corejs3/helpers/typeof";
import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context4; _forEachInstanceProperty(_context4 = ownKeys(Object(source), true)).call(_context4, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { var _context5; _forEachInstanceProperty(_context5 = ownKeys(Object(source))).call(_context5, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; }
import _Map from "@babel/runtime-corejs3/core-js-stable/map";
import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
import _entriesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/entries";
import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
/**
* NodePool module
* @module @aeternity/aepp-sdk/es/node-pool
* @export NodePool
* @example import { NodePool } from '@aeternity/aepp-sdk'
*/
import stampit from '@stamp/it';
import { getterForCurrentNode, prepareNodeObject } from './helpers';
import { getNetworkId } from '../node';
/**
* Node Pool Stamp
* This stamp allow you to make basic manipulation(add, remove, select) on list of nodes
* @function
* @alias module:@aeternity/aepp-sdk/es/node-pool
* @rtype Stamp
* @param {Object} [options={}] - Initializer object
* @param {Array} [options.nodes] - Array with Node instances
* @return {Object} NodePool instance
*/
export var NodePool = stampit({
init: function init() {
var _this = this;
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$nodes = _ref.nodes,
nodes = _ref$nodes === void 0 ? [] : _ref$nodes;
this.pool = new _Map();
this.validateNodes(nodes);
_forEachInstanceProperty(nodes).call(nodes, function (node, i) {
var name = node.name,
instance = node.instance;
_this.addNode(name, instance, i === 0);
});
if (nodes.length) this.selectNode(nodes[0].name);
},
propertyDescriptors: {
api: {
enumerable: true,
configurable: false,
get: function get() {
return getterForCurrentNode(this.selectedNode);
}
},
_isIrisNode: {
enumerable: true,
configurable: false,
get: function get() {
return this.selectedNode.instance._isIrisNode;
}
}
},
methods: {
/**
* Add Node
* @function
* @alias module:@aeternity/aepp-sdk/es/node-pool
* @rtype (name: String, nodeInstance: Object, select: Boolean) => Void
* @param {String} name - Node name
* @param {Object} nodeInstance - Node instance
* @param {Boolean} select - Select this node as current
* @return {Void}
* @example
* nodePool.addNode('testNode', awaitNode({ url, internalUrl }), true) // add and select new node with name 'testNode'
*/
addNode: function addNode(name, nodeInstance) {
var select = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (this.pool.has(name)) throw new Error("Node with name ".concat(name, " already exist"));
this.validateNodes([{
name: name,
instance: nodeInstance
}]);
this.pool.set(name, prepareNodeObject(name, nodeInstance));
if (select || !this.selectedNode) {
this.selectNode(name);
}
},
/**
* Select Node
* @function
* @alias module:@aeternity/aepp-sdk/es/node-pool
* @rtype (name: String) => Void
* @param {String} name - Node name
* @return {Void}
* @example
* nodePool.selectNode('testNode')
*/
selectNode: function selectNode(name) {
if (!this.pool.has(name)) throw new Error("Node with name ".concat(name, " not in pool"));
this.selectedNode = this.pool.get(name);
},
/**
* Get NetworkId of current Node
* @function
* @alias module:@aeternity/aepp-sdk/es/node-pool
* @rtype () => String
* @return {String}
* @example
* nodePool.getNetworkId()
*/
getNetworkId: getNetworkId,
/**
* Check if you have selected node
* @function
* @alias module:@aeternity/aepp-sdk/es/node-pool
* @rtype () => Boolean
* @return {Boolean}
* @example
* nodePool.isNodeConnected()
*/
isNodeConnected: function isNodeConnected() {
return !!this.selectedNode.instance;
},
/**
* Get information about node
* @function
* @alias module:@aeternity/aepp-sdk/es/node-pool
* @rtype () => Object
* @return {Object}
* @example
* nodePool.getNodeInfo() // { name, version, networkId, protocol, ... }
*/
getNodeInfo: function getNodeInfo() {
if (!this.isNodeConnected()) throw new Error('Can not get node info. Node is not connected');
return _objectSpread({
name: this.selectedNode.name
}, this.selectedNode.instance.getNodeInfo());
},
/**
* Get array of available nodes
* @function
* @alias module:@aeternity/aepp-sdk/es/node-pool
* @rtype () => Object[]
* @return {Object[]}
* @example
* nodePool.getNodesInPool()
*/
getNodesInPool: function getNodesInPool() {
var _context, _context2;
return _mapInstanceProperty(_context = _Array$from(_entriesInstanceProperty(_context2 = this.pool).call(_context2))).call(_context, function (_ref2) {
var _ref3 = _slicedToArray(_ref2, 2),
name = _ref3[0],
node = _ref3[1];
return _objectSpread({
name: name
}, node.instance.getNodeInfo());
});
},
validateNodes: function validateNodes(nodes) {
var nodeProps = ['api', 'consensusProtocolVersion', 'genesisHash'];
_forEachInstanceProperty(nodes).call(nodes, function (node, index) {
var _context3;
if (_typeof(node) !== 'object') throw new Error('Node must be an object with "name" and "instance" props');
if (_findInstanceProperty(_context3 = ['name', 'instance']).call(_context3, function (k) {
return !node[k];
})) throw new Error("Node object on index ".concat(index, " must contain node \"name\" and \"ins\""));
if (!node.instance || _typeof(node.instance) !== 'object' || _findInstanceProperty(nodeProps).call(nodeProps, function (prop) {
return !(prop in node.instance);
})) {
throw new Error('Invalid node instance object');
}
});
}
},
props: {
selectedNode: {}
}
});
export default NodePool;
//# sourceMappingURL=index.js.map