@fabric-es/fabric-cqrs
Version:
Hyperledger Fabric middleware for event sourcing and cqrs pattern
53 lines • 2.71 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const util_1 = __importDefault(require("util"));
const fabric_common_1 = require("fabric-common");
const redux_observable_1 = require("redux-observable");
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
const services_1 = require("../../../services");
const types_1 = require("../../../types");
const utils_1 = require("../../../utils");
const utils_2 = require("../../utils");
const action_1 = require("../action");
exports.default = (action$, _, context) => {
const logger = fabric_common_1.Utils.getLogger('[fabric-cqrs] track.js');
return action$.pipe(redux_observable_1.ofType(action_1.action.TRACK), operators_1.map(({ payload }) => payload), operators_1.mergeMap(payload => rxjs_1.from(services_1.getNetwork({
channelName: payload.channelName,
connectionProfile: payload.connectionProfile,
wallet: payload.wallet,
enrollmentId: payload.enrollmentId,
discovery: true,
asLocalhost: !(process.env.NODE_ENV === 'production')
}).then(({ network, gateway }) => {
logger.debug('getNetwork succeed');
return Object.assign({}, payload, { network, gateway });
}).catch(error => {
logger.error(util_1.default.format('getNework error: %s', error.message));
return Object.assign({}, payload, { error });
}))), operators_1.mergeMap((getNetwork) => {
if (getNetwork.error)
return rxjs_1.of(action_1.action.createError({
tx_id: getNetwork.tx_id,
error: getNetwork.error
}));
else {
const currentTime = Math.round(new Date().getTime());
const { tx_id, args, network, gateway } = getNetwork;
const params = [args.parentName, args.id, args.version.toString()];
const events = utils_1.replaceTag(utils_1.addCreatedAt([{
type: types_1.TRACK_EVENT,
payload: { id: args.id, entityName: args.entityName }
}]));
params.push(JSON.stringify(events));
return services_1.submit$('eventstore:createCommit', params, { network: network || context.network }).pipe(operators_1.tap(commits => {
logger.debug(util_1.default.format('dispatch submit response: %j', commits));
gateway.disconnect();
}), utils_2.dispatchResult(tx_id, action_1.action.createSuccess, action_1.action.createError));
}
}));
};
//# sourceMappingURL=track.js.map