UNPKG

stellar-plus

Version:

beta version of stellar-plus, an all-in-one sdk for the Stellar blockchain

81 lines (80 loc) 3.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.diagnoseSubmitError = exports.extractDataFromSubmitTransactionError = void 0; const stellar_sdk_1 = require("@stellar/stellar-sdk"); const axios_1 = require("axios"); const axios_2 = require("./axios"); const horizon_error_codes_1 = require("./horizon-error-codes"); const transaction_1 = require("./transaction"); const extractDataFromSubmitTransactionError = (response) => { return Object.assign({}, response); }; exports.extractDataFromSubmitTransactionError = extractDataFromSubmitTransactionError; const diagnoseSubmitError = (error, tx) => { const transactionData = tx ? (0, transaction_1.extractTransactionData)(tx) : undefined; if (error instanceof axios_1.AxiosError) { const axiosError = (0, axios_2.extractAxiosErrorInfo)(error); if (axiosError.data && isHorizonErrorResponseData(axiosError.data)) { const horizonError = axiosError.data; const diagnostic = horizonError.status === 400 // Failed transaction, contains error codes ? reviewTransactionError(horizonError, tx) : undefined; return { // Horizon Error diagnostic, meta: { transactionData, data: axiosError.data, }, }; } return { // Axios Error meta: { message: axiosError.message, transactionData, data: axiosError.data, }, }; } return { // Generic Error meta: { error, transactionData }, }; }; exports.diagnoseSubmitError = diagnoseSubmitError; const isHorizonErrorResponseData = (data) => { if (typeof data === 'object' && data !== null) { const potentialError = data; // Type assertion return ('status' in potentialError && 'title' in potentialError && 'type' in potentialError && 'detail' in potentialError); } return false; }; const reviewTransactionError = (errorData, tx) => { const diagnostic = {}; if (errorData.extras && errorData.extras.result_codes) { const codes = errorData.extras.result_codes; // Transaction level errors if (codes.transaction) { diagnostic.transaction = Object.assign(Object.assign({ code: codes.transaction }, { issue: 'Unknown transaction error', suggestion: 'No suggestion available', }), horizon_error_codes_1.transactionErrorMessages[codes.transaction]); } // Operation specific errors if (codes.operations && codes.operations.length > 0) { const envelope = tx && tx instanceof stellar_sdk_1.FeeBumpTransaction ? tx.innerTransaction : tx; const operationDetails = envelope ? (0, transaction_1.extractOperationsData)(envelope.operations, false) : []; diagnostic.operations = codes.operations.map((opCode, index) => { var _a; const operation = operationDetails[index].type; const opDiagnostic = Object.assign(Object.assign(Object.assign({ code: opCode }, { issue: `Unknown operation error: ${opCode}`, suggestion: 'No suggestion available', }), horizon_error_codes_1.operationErrorMessages[opCode]), (_a = horizon_error_codes_1.operationSpecificErrorMessages[operation]) === null || _a === void 0 ? void 0 : _a[opCode]); return Object.assign({ operation: operation || undefined }, opDiagnostic); }); } } return diagnostic; };