@bpanel/chain-sockets
Version:
A utility plugin for bPanel for managing blockchain state in your redux store
100 lines (78 loc) • 3.03 kB
JavaScript
;
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 */