@devasher/kuru-sdk
Version:
Ethers v6 SDK to interact with Kuru (forked from @kuru-labs/kuru-sdk)
215 lines • 10.5 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractErrorMessage = exports.searchForErrorCode = void 0;
const errors_json_1 = __importDefault(require("./errors.json"));
function searchForErrorCode(data) {
if (!data || typeof data !== 'string')
return null;
// Remove '0x' prefix if present
const cleanedData = data.startsWith('0x') ? data.slice(2) : data;
for (const [errorName, errorCode] of Object.entries(errors_json_1.default)) {
if (cleanedData.includes(errorCode)) {
return errorName;
}
}
return null;
}
exports.searchForErrorCode = searchForErrorCode;
function parseJsonBody(body) {
try {
return JSON.parse(body);
}
catch (e) {
return null;
}
}
function extractErrorMessage(error) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
try {
// Handle null or undefined input
if (!error) {
return {
message: 'Failed to extract error message',
originalError: error,
};
}
// Don't parse if already an object
let jsonObj = error;
if (typeof error === 'string') {
try {
jsonObj = JSON.parse(error);
}
catch (e) {
return {
message: 'Failed to extract error message',
details: e instanceof Error ? e.message : 'Unknown error occurred',
originalError: error,
};
}
}
// NEW CASE: Handle nested ethers error structure with error.error
if ((_b = (_a = jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.error) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.body) {
const bodyError = parseJsonBody(jsonObj.error.error.body);
if ((_c = bodyError === null || bodyError === void 0 ? void 0 : bodyError.error) === null || _c === void 0 ? void 0 : _c.data) {
const knownError = searchForErrorCode(bodyError.error.data);
if (knownError) {
return {
message: knownError,
code: bodyError.error.code,
details: jsonObj.reason || jsonObj.message,
originalError: jsonObj,
};
}
}
}
// Case: Handle UNPREDICTABLE_GAS_LIMIT error with nested error.error structure
if ((jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.code) === 'UNPREDICTABLE_GAS_LIMIT' && ((_e = (_d = jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.error) === null || _d === void 0 ? void 0 : _d.error) === null || _e === void 0 ? void 0 : _e.body)) {
const bodyError = parseJsonBody(jsonObj.error.error.body);
if ((_f = bodyError === null || bodyError === void 0 ? void 0 : bodyError.error) === null || _f === void 0 ? void 0 : _f.data) {
const knownError = searchForErrorCode(bodyError.error.data);
if (knownError) {
return {
message: knownError,
code: bodyError.error.code,
details: jsonObj.reason || jsonObj.message,
originalError: jsonObj,
};
}
}
// Return unpredictable gas limit error if no known error found
return {
message: jsonObj.message || jsonObj.reason,
code: jsonObj.code,
details: ((_g = jsonObj.error) === null || _g === void 0 ? void 0 : _g.reason) || ((_h = jsonObj.error) === null || _h === void 0 ? void 0 : _h.message),
originalError: jsonObj,
};
}
// Case: Handle Privy wallet error format
if ((jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.body) && ((_j = jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.error) === null || _j === void 0 ? void 0 : _j.data)) {
const bodyError = parseJsonBody(jsonObj.body);
if ((_k = bodyError === null || bodyError === void 0 ? void 0 : bodyError.error) === null || _k === void 0 ? void 0 : _k.data) {
const knownError = searchForErrorCode(bodyError.error.data);
if (knownError) {
return {
message: knownError,
code: bodyError.error.code,
details: bodyError.error.message,
originalError: jsonObj,
};
}
}
// Try direct error data if body parsing fails
const knownError = searchForErrorCode(jsonObj.error.data);
if (knownError) {
return {
message: knownError,
code: jsonObj.error.code,
details: ((_l = bodyError === null || bodyError === void 0 ? void 0 : bodyError.error) === null || _l === void 0 ? void 0 : _l.message) || 'Unknown error',
originalError: jsonObj,
};
}
}
// Case 1: Already parsed error with known error code
if ((jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.message) && ((_o = (_m = jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.originalError) === null || _m === void 0 ? void 0 : _m.error) === null || _o === void 0 ? void 0 : _o.body)) {
const bodyError = parseJsonBody(jsonObj.originalError.error.body);
if ((_p = bodyError === null || bodyError === void 0 ? void 0 : bodyError.error) === null || _p === void 0 ? void 0 : _p.data) {
const knownError = searchForErrorCode(bodyError.error.data);
if (knownError) {
return {
message: knownError,
code: bodyError.error.code,
details: jsonObj.originalError.reason || jsonObj.details,
originalError: jsonObj.originalError,
};
}
}
return jsonObj;
}
// Case 2: Nested error structure from ethers.js
if ((_r = (_q = jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.originalError) === null || _q === void 0 ? void 0 : _q.error) === null || _r === void 0 ? void 0 : _r.body) {
const bodyError = parseJsonBody(jsonObj.originalError.error.body);
if ((_s = bodyError === null || bodyError === void 0 ? void 0 : bodyError.error) === null || _s === void 0 ? void 0 : _s.data) {
const knownError = searchForErrorCode(bodyError.error.data);
if (knownError) {
return {
message: knownError,
code: bodyError.error.code,
details: jsonObj.reason || jsonObj.message,
originalError: jsonObj,
};
}
}
}
// Case 3: Direct error body structure
if ((_t = jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.error) === null || _t === void 0 ? void 0 : _t.body) {
const bodyError = parseJsonBody(jsonObj.error.body);
if ((_u = bodyError === null || bodyError === void 0 ? void 0 : bodyError.error) === null || _u === void 0 ? void 0 : _u.data) {
const knownError = searchForErrorCode(bodyError.error.data);
if (knownError) {
return {
message: knownError,
code: bodyError.error.code,
details: jsonObj.reason || jsonObj.message,
originalError: jsonObj,
};
}
}
}
// Case 4: Wrapped RPC error
if ((_w = (_v = jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.error) === null || _v === void 0 ? void 0 : _v.data) === null || _w === void 0 ? void 0 : _w.data) {
const knownError = searchForErrorCode(jsonObj.error.data.data);
if (knownError) {
return {
message: knownError,
code: jsonObj.error.data.code,
details: jsonObj.error.data.message,
originalError: jsonObj,
};
}
}
// Case 5: Direct RPC error
if ((_x = jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.data) === null || _x === void 0 ? void 0 : _x.data) {
const knownError = searchForErrorCode(jsonObj.data.data);
if (knownError) {
return {
message: knownError,
code: jsonObj.data.code,
details: jsonObj.data.message,
originalError: jsonObj,
};
}
}
// Case 6: Check error.data directly if it has a known error code
if ((_y = jsonObj === null || jsonObj === void 0 ? void 0 : jsonObj.error) === null || _y === void 0 ? void 0 : _y.data) {
const knownError = searchForErrorCode(jsonObj.error.data);
if (knownError) {
return {
message: knownError,
code: jsonObj.error.code,
details: jsonObj.error.message,
originalError: jsonObj,
};
}
}
// Fallback to original message/reason
return {
message: jsonObj.reason || jsonObj.message || 'Unknown error',
code: jsonObj.code,
details: jsonObj.details,
originalError: jsonObj,
};
}
catch (e) {
console.error('Error while extracting error message:', e);
return {
message: 'Failed to extract error message',
details: e instanceof Error ? e.message : 'Unknown error occurred',
originalError: error,
};
}
}
exports.extractErrorMessage = extractErrorMessage;
//# sourceMappingURL=errorExtractor.js.map