@fabric-es/operator
Version:
Network operator
84 lines • 3.54 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.submitOrEvaluateTx = void 0;
const util_1 = __importDefault(require("util"));
const fabric_network_1 = require("fabric-network");
const js_yaml_1 = __importDefault(require("js-yaml"));
const types_1 = require("../types");
const utils_1 = require("../utils");
const submitOrEvaluateTx = (option) => async ({ identity, chaincodeId, fcn, args = [], eventHandlerStrategies = fabric_network_1.DefaultEventHandlerStrategies.MSPID_SCOPE_ALLFORTX, queryHandlerStrategies = fabric_network_1.DefaultQueryHandlerStrategies.MSPID_SCOPE_SINGLE, asLocalhost = true, }) => {
const logger = utils_1.getLogger({ name: '[operator] submitOrEvaluateTx.js' });
const { channelName, connectionProfile, wallet } = option;
const gateway = new fabric_network_1.Gateway();
let network;
if (!identity)
throw new Error(types_1.MISSING_WALLET_LABEL);
if (!chaincodeId)
throw new Error(types_1.MISSING_CHAINCODE_ID);
if (!fcn)
throw new Error(types_1.MISSING_FCN);
try {
const cp = await utils_1.promiseToReadFile(connectionProfile);
await gateway.connect(js_yaml_1.default.safeLoad(cp), {
identity,
wallet,
eventHandlerOptions: { strategy: eventHandlerStrategies },
queryHandlerOptions: { strategy: queryHandlerStrategies },
discovery: { asLocalhost, enabled: true },
});
}
catch (e) {
logger.error(util_1.default.format('fail to connect gateway, %j', e));
throw new Error(e);
}
try {
network = await gateway.getNetwork(channelName);
}
catch (e) {
logger.error(util_1.default.format('fail to getNetwork, %j', e));
throw new Error(e);
}
logger.info('gateway connected');
return {
disconnect: () => gateway.disconnect(),
evaluate: () => network
.getContract(chaincodeId)
.createTransaction(fcn)
.evaluate(...args)
.then((res) => {
logger.debug(util_1.default.format('successfully evaluate tx: %s', fcn));
return JSON.parse(Buffer.from(JSON.parse(res)).toString());
})
.catch((error) => {
logger.error(util_1.default.format('evaluate tx error in %s: %j', fcn, error));
return { error };
}),
submit: () => {
let input_args = args;
if (fcn === 'eventstore:createCommit') {
input_args = [...args.slice(0, 4), utils_1.createCommitId()];
if (args[4])
input_args.push(args[4]);
else
input_args.push('');
}
return network
.getContract(chaincodeId)
.createTransaction(fcn)
.submit(...input_args)
.then((res) => {
logger.debug(util_1.default.format('successfully submit tx: %s', fcn));
return JSON.parse(Buffer.from(JSON.parse(res)).toString());
})
.catch((error) => {
logger.error(util_1.default.format('submit tx error in %s: %j', fcn, error));
return { error };
});
},
};
};
exports.submitOrEvaluateTx = submitOrEvaluateTx;
//# sourceMappingURL=submitOrEvaluateTx.js.map