@fabric-es/fabric-cqrs
Version:
Hyperledger Fabric middleware for event sourcing and cqrs pattern
62 lines • 3.44 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 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