UNPKG

@aeternity/aepp-sdk

Version:
207 lines (186 loc) 8.27 kB
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