@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
62 lines • 2.35 kB
JavaScript
import { TransportStatusError } from "@ledgerhq/errors";
import { getExchangeErrorMessage } from "@ledgerhq/hw-app-exchange";
import { ErrorStatus } from "@ledgerhq/hw-app-exchange/ReturnCode";
import get from "lodash/get";
export class CompleteExchangeError extends Error {
step;
title;
constructor(step, title, message) {
super(message);
this.name = "CompleteExchangeError";
this.title = title;
this.step = step;
}
}
export function convertTransportError(step, err) {
if (err instanceof TransportStatusError) {
const errorCode = step === "CHECK_REFUND_ADDRESS" && err.statusCode == null
? ErrorStatus.INVALID_ADDRESS
: err.statusCode;
const { errorName, errorMessage } = getExchangeErrorMessage(errorCode, step);
return new CompleteExchangeError(step, errorName, errorMessage);
}
return err;
}
export function getErrorDetails(error) {
if (error == null)
return { message: "Unknown error" };
if (typeof error === "string")
return { message: error || "Unknown error" };
const name = get(error, "name");
const message = get(error, "message");
const causeName = get(error, "cause.name");
const causeMessage = get(error, "cause.message");
const causeSwapCode = get(error, "cause.swapCode");
const cause = causeName || causeMessage || causeSwapCode
? { name: causeName, message: causeMessage, swapCode: causeSwapCode }
: undefined;
// Prefer a specific name; fall back to cause.name when top-level is generic "Error"
const effectiveName = name && name !== "Error" ? name : causeName ?? name;
return {
...(effectiveName ? { name: effectiveName } : {}),
message: message || causeMessage || effectiveName || "Unknown error",
...(cause ? { cause } : {}),
};
}
export function getErrorName(error) {
return getErrorDetails(error).name;
}
export function getErrorMessage(error) {
return getErrorDetails(error).message;
}
export function getSwapStepFromError(error) {
const step = get(error, "step");
if (typeof step === "string") {
return step;
}
else if (error.name === "DisabledTransactionBroadcastError") {
return "SIGN_COIN_TRANSACTION";
}
return "UNKNOWN_STEP";
}
//# sourceMappingURL=error.js.map