UNPKG

@bpanel/chain-sockets

Version:

A utility plugin for bPanel for managing blockchain state in your redux store

100 lines (78 loc) 3.03 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.addSocketConstants = exports.middleware = exports.reduceChain = exports.metadata = undefined; var _assign = require('babel-runtime/core-js/object/assign'); var _assign2 = _interopRequireDefault(_assign); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _constants = require('./constants'); var _actions = require('./actions'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* END IMPORTS */ /* START EXPORTS */ // Entry point for your plugin // This should expose your plugin's modules /* START IMPORTS */ var metadata = exports.metadata = { name: '@bpanel/chain-sockets', displayName: 'Chain Sockets', author: 'bcoin-org', description: 'A simple utility plugin for bPanel to subscribe to chain events', version: require('../package.json').version }; var reduceChain = exports.reduceChain = function reduceChain(state, action) { var type = action.type, payload = action.payload; var newState = (0, _extends3.default)({}, state); switch (type) { case 'SET_CHAIN_TIP': { return (0, _extends3.default)({}, newState, action.payload); } default: return state; } }; // custom middleware for our plugin. This gets // added to the list of middlewares in the app's store creator // Use this to intercept and act on dispatched actions // e.g. for responding to socket events var middleware = exports.middleware = function middleware(_ref) { var dispatch = _ref.dispatch, getState = _ref.getState; return function (next) { return function (action) { var type = action.type, payload = action.payload; var chainState = getState().chain; if (type === _constants.SOCKET_CONNECTED) { // actions to dispatch when the socket has connected // these are broadcasts and subscriptions we want to make // to the bcoin node dispatch((0, _actions.watchChain)()); dispatch((0, _actions.subscribeBlockConnect)()); } else if (type === _constants.NEW_BLOCK && chainState.genesis) { dispatch(_actions.setChainTip.apply(undefined, (0, _toConsumableArray3.default)(payload))); } return next(action); }; }; }; // add new socket listeners // push an object with event and actionType properties // onto existing array of listeners var addSocketConstants = exports.addSocketConstants = function addSocketConstants() { var sockets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { listeners: [] }; sockets.listeners.push({ event: 'new block', actionType: _constants.NEW_BLOCK }); return (0, _assign2.default)(sockets, { socketListeners: sockets.listeners }); }; /* END EXPORTS */