UNPKG

@ledgerhq/live-common

Version:
62 lines 2.35 kB
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