UNPKG

@fabric-es/fabric-cqrs

Version:

Hyperledger Fabric middleware for event sourcing and cqrs pattern

51 lines 2.39 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.dispatcher = void 0; const util_1 = __importDefault(require("util")); const utils_1 = require("../store/utils"); const dispatcher = (actionDispatcher, options, onSuccess) => (args) => new Promise((resolve, reject) => { const { name, store, slice, SuccessAction, typeGuard, ErrorAction, logger } = options; const tid = utils_1.generateToken(); const unsubscribe = store.subscribe(() => { const { tx_id, error, type } = store.getState()[slice]; const result = store.getState()[slice].result; if (tx_id === tid && type === SuccessAction) { unsubscribe(); const data = onSuccess ? onSuccess(result) : result; if (typeGuard) if (result === null) { logger.info(util_1.default.format('actionName %s, tx_id: %s resolved', name, tx_id)); resolve({ data: null }); } else if (typeGuard(result)) { logger.info(util_1.default.format('actionName %s, tx_id: %s resolved', name, tx_id)); resolve({ data }); } else { logger.error(util_1.default.format('fail to pass TypeGuard, %s, %j', name, result)); reject(`fail to pass TypeGuard: ${name}`); } else { logger.info(util_1.default.format('actionName %s, tx_id: %s resolved', name, tx_id)); resolve({ data }); } } if (tx_id === tid && type === ErrorAction) { logger.warn(util_1.default.format('[dispatcher] ErrorAction: [%s], tx_id: %s, %s, %j', name, tid, ErrorAction, error)); unsubscribe(); reject(new Error(util_1.default.format('%s, %j', type, error))); } }); store.dispatch(actionDispatcher({ tx_id: tid, args })); logger.info(util_1.default.format('[dispatcher] actionName: %s, tx_id: %s dispatched', name, tid)); }) .then(({ data }) => ({ status: 'OK', data, })) .catch((error) => ({ status: 'ERROR', data: null, error })); exports.dispatcher = dispatcher; //# sourceMappingURL=dispatcher.js.map