UNPKG

@greaspace/hyperledger-fabric-client-utils

Version:

Client utilities for communicating with chaincode on a Hyperledger Fabric blockchain network.

45 lines (39 loc) 1.83 kB
const logger = require('./logger').getLogger('fabric/parseErrorMessage'); const ERROR_REGEX_COLLECTION = [ /^.*?Calling\s+chaincode\s+Invoke\(\)\s+returned\s+error\s+response\s+(.*)\..*?$/i, // Invoke /^.*?transaction\s+returned\s+with\s+failure:\s+(.*?)$/i // Query ]; const DEFAULT_ERROR_REGEX = /^\[Error:\s+(.*?)\]$/i; module.exports = function parseErrorMessage(message) { try { const errorMessageMatches = ERROR_REGEX_COLLECTION.map((ERROR_REGEX) => { const normalizedMessage = message.replace(/\n/gm, ' '); if (ERROR_REGEX.test(normalizedMessage)) { return normalizedMessage.match(ERROR_REGEX)[1]; } return undefined; }).filter((item) => !!item); if (errorMessageMatches.length > 0) { const errorMessageMatch = errorMessageMatches[0]; try { const errorResponse = JSON.parse(errorMessageMatch); const errorObject = Array.isArray(errorResponse) ? errorResponse[0] : errorResponse; const error = new Error(errorObject.message || 'Unknown error'); Object.keys(errorObject).forEach((key) => { error[key] = errorObject[key]; }); return error; } catch (err) { // Not an object, default Error object is thrown if (DEFAULT_ERROR_REGEX.test(errorMessageMatch)) { const defaultErrorMatch = errorMessageMatch.match(DEFAULT_ERROR_REGEX)[1]; return new Error(defaultErrorMatch); } return new Error(errorMessageMatch); } } } catch (e) { logger.info(`Unable to parse error details from error: ${message}.`); } return new Error(message); };