UNPKG

@fabric-es/fabric-cqrs

Version:

Hyperledger Fabric middleware for event sourcing and cqrs pattern

62 lines 3.44 kB
"use strict"; 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 redux_observable_1 = require("redux-observable"); const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); const services_1 = require("../../../services"); const utils_1 = require("../../utils"); const action_1 = require("../action"); const { CREATE, createSuccess, createError, track, trackSuccess, trackError } = action_1.action; exports.default = (action$, _, context) => action$.pipe(redux_observable_1.ofType(CREATE), 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: !payload.args.isPrivateData, asLocalhost: !(process.env.NODE_ENV === 'production'), }) .then(({ network, gateway }) => Object.assign({}, { payload, network, gateway })) .catch((error) => { context.logger.error(util_1.default.format('[store/command/create.js] getNework error: %s', error.message)); return Object.assign({}, Object.assign(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 { payload, network, gateway } = getNetwork; const { tx_id, args, enrollmentId, channelName, connectionProfile, wallet } = payload; const { id, entityName, parentName, version, isPrivateData, signedRequest } = args; const events = (args === null || args === void 0 ? void 0 : args.events) ? JSON.stringify(args === null || args === void 0 ? void 0 : args.events) : null; return isPrivateData ? services_1.submitPrivateData$('privatedata:createCommit', [entityName, id, version.toString()], { eventstr: Buffer.from(events) }, { network: network || context.network }).pipe(operators_1.tap(() => gateway.disconnect()), operators_1.map((result) => { if (result.error) return createError({ tx_id, error: result.error }); else if (result.status) { if (result.status === 'ERROR') return createError({ tx_id, error: result }); } return parentName ? track({ channelName, connectionProfile, wallet, tx_id, enrollmentId, args: { entityName, parentName, id, version: 0 }, }) : createSuccess({ tx_id, result }); })) : services_1.submit$('eventstore:createCommit', [entityName, id, version.toString(), events, signedRequest !== null && signedRequest !== void 0 ? signedRequest : ''], { network: network || context.network, }).pipe(operators_1.tap(() => gateway.disconnect()), utils_1.dispatchResult(tx_id, createSuccess, createError)); } })); //# sourceMappingURL=create.js.map