@taquito/taquito
Version:
High level functionality that builds upon the other packages in the Tezos Typescript Library Suite.
117 lines • 5.36 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.flattenErrors = exports.flattenOperationResult = exports.TezosPreapplyFailureError = exports.TezosOperationError = void 0;
var types_1 = require("./types");
var isErrorWithMessage = function (error) {
return 'with' in error;
};
var TezosOperationError = /** @class */ (function () {
function TezosOperationError(errors) {
this.errors = errors;
this.name = 'TezosOperationError';
// Last error is 'often' the one with more detail
var lastError = errors[errors.length - 1];
this.id = lastError.id;
this.kind = lastError.kind;
this.message = "(" + this.kind + ") " + this.id;
if (isErrorWithMessage(lastError) && lastError.with.string) {
this.message = lastError.with.string;
}
}
return TezosOperationError;
}());
exports.TezosOperationError = TezosOperationError;
var TezosPreapplyFailureError = /** @class */ (function () {
function TezosPreapplyFailureError(result) {
this.result = result;
this.name = 'TezosPreapplyFailureError';
this.message = 'Preapply returned an unexpected result';
}
return TezosPreapplyFailureError;
}());
exports.TezosPreapplyFailureError = TezosPreapplyFailureError;
// Flatten all operation content results and internal operation results into a single array
// Some cases where we can have multiple operation results or internal operation results are:
// - When an operation includes a reveal operation
// - When an operation is made using the batch API
// - Smart contract call can contains internal operation results when they call other smart contract internally or originate contracts
var flattenOperationResult = function (response) {
var results = Array.isArray(response) ? response : [response];
var returnedResults = [];
for (var i = 0; i < results.length; i++) {
for (var j = 0; j < results[i].contents.length; j++) {
var content = results[i].contents[j];
if (types_1.hasMetadataWithResult(content)) {
returnedResults.push(__assign({ fee: content.fee }, content.metadata.operation_result));
if (Array.isArray(content.metadata.internal_operation_results)) {
content.metadata.internal_operation_results.forEach(function (x) { return returnedResults.push(x.result); });
}
}
}
}
return returnedResults;
};
exports.flattenOperationResult = flattenOperationResult;
/***
* @description Flatten all error from preapply response (including internal error)
*/
var flattenErrors = function (response, status) {
var e_1, _a;
if (status === void 0) { status = 'failed'; }
var results = Array.isArray(response) ? response : [response];
var errors = [];
// Transaction that do not fail will be backtracked in case one failure occur
for (var i = 0; i < results.length; i++) {
for (var j = 0; j < results[i].contents.length; j++) {
var content = results[i].contents[j];
if (types_1.hasMetadata(content)) {
if (types_1.hasMetadataWithResult(content) && content.metadata.operation_result.status === status) {
errors = errors.concat(content.metadata.operation_result.errors || []);
}
if (types_1.hasMetadataWithInternalOperationResult(content) &&
Array.isArray(content.metadata.internal_operation_results)) {
try {
for (var _b = (e_1 = void 0, __values(content.metadata.internal_operation_results)), _c = _b.next(); !_c.done; _c = _b.next()) {
var internalResult = _c.value;
if ('result' in internalResult && internalResult.result.status === status) {
errors = errors.concat(internalResult.result.errors || []);
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
}
}
}
}
return errors;
};
exports.flattenErrors = flattenErrors;
//# sourceMappingURL=operation-errors.js.map