UNPKG

fabric-network

Version:

SDK for writing node.js applications to interact with Hyperledger Fabric. This package encapsulates the APIs to connect to a Fabric network, submit transactions and perform queries against the ledger.

53 lines 2.17 kB
"use strict"; /* * Copyright 2018, 2020 IBM All Rights Reserved. * * SPDX-License-Identifier: Apache-2.0 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.SingleQueryHandler = void 0; const fabricerror_1 = require("../../errors/fabricerror"); const util = require("util"); const Logger = require("../../logger"); const logger = Logger.getLogger('SingleQueryHandler'); class SingleQueryHandler { constructor(peers) { this.currentPeerIndex = 0; logger.debug('constructor: peers=%j', peers.map((peer) => peer.name)); this.peers = peers; } async evaluate(query) { const method = 'evaluate'; logger.debug('%s - start', method); const startPeerIndex = this.currentPeerIndex; const errorMessages = []; for (let i = 0; i < this.peers.length; i++) { const peerIndex = (startPeerIndex + i) % this.peers.length; this.currentPeerIndex = peerIndex; const peer = this.peers[peerIndex]; logger.debug('%s - sending to peer %s', method, peer.name); const results = await query.evaluate([peer]); const result = results[peer.name]; if (result instanceof Error) { errorMessages.push(result.toString()); } else { if (result.isEndorsed) { logger.debug('%s - return peer response status: %s', method, result.status); return result.payload; } else { logger.debug('%s - throw peer response status: %s message: %s', method, result.status, result.message); const responseError = Object.assign(new Error('peer error response: ' + result.message), result); throw responseError; } } } const message = util.format('Query failed. Errors: %j', errorMessages); const error = new fabricerror_1.FabricError(message); logger.error('evaluate:', error); throw error; } } exports.SingleQueryHandler = SingleQueryHandler; //# sourceMappingURL=singlequeryhandler.js.map