UNPKG

@metamask/eth-ledger-bridge-keyring

Version:
77 lines 3.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleLedgerTransportError = void 0; const hw_transport_1 = require("@ledgerhq/hw-transport"); const hw_wallet_sdk_1 = require("@metamask/hw-wallet-sdk"); const errors_1 = require("./errors.cjs"); const LEDGER_ERROR_PREFIX = 'Ledger: '; const LEDGER_PREFIX_STATUS_CODES = new Set([ '0x6985', '0x6a80', '0x5515', '0x650f', ]); /** * Prefixes error messages with the Ledger identifier when needed. * * @param message - The error message to prefix. * @returns The message with a Ledger prefix. */ function withLedgerPrefix(message) { return message.startsWith(LEDGER_ERROR_PREFIX) ? message : `${LEDGER_ERROR_PREFIX}${message}`; } /** * Central error handler for Ledger TransportStatusError instances. * Converts Ledger transport errors into properly typed HardwareWalletError instances * using the error mapping system. * * @param error - The error to handle * @param fallbackMessage - Default error message if no specific handling is found * @throws HardwareWalletError with appropriate error details from mappings */ function handleLedgerTransportError(error, fallbackMessage) { if (error instanceof hw_transport_1.TransportStatusError) { const statusCodeHex = `0x${error.statusCode.toString(16)}`; // Try to create error from known status code if ((0, errors_1.isKnownLedgerError)(statusCodeHex)) { const ledgerError = (0, errors_1.createLedgerError)(statusCodeHex); if (LEDGER_PREFIX_STATUS_CODES.has(statusCodeHex)) { ledgerError.message = withLedgerPrefix(ledgerError.message); } throw ledgerError; } // Unknown status code - create generic error with details throw new hw_wallet_sdk_1.HardwareWalletError(error.message, { code: hw_wallet_sdk_1.ErrorCode.Unknown, severity: hw_wallet_sdk_1.Severity.Err, category: hw_wallet_sdk_1.Category.Unknown, userMessage: error.message, cause: error, }); } // Handle HardwareWalletError - pass through if (error instanceof hw_wallet_sdk_1.HardwareWalletError) { throw error; } // For any other error type if (error instanceof Error) { throw new hw_wallet_sdk_1.HardwareWalletError(error.message, { code: hw_wallet_sdk_1.ErrorCode.Unknown, severity: hw_wallet_sdk_1.Severity.Err, category: hw_wallet_sdk_1.Category.Unknown, userMessage: error.message, cause: error, }); } // Unknown error type throw new hw_wallet_sdk_1.HardwareWalletError(fallbackMessage, { code: hw_wallet_sdk_1.ErrorCode.Unknown, severity: hw_wallet_sdk_1.Severity.Err, category: hw_wallet_sdk_1.Category.Unknown, userMessage: fallbackMessage, }); } exports.handleLedgerTransportError = handleLedgerTransportError; //# sourceMappingURL=ledger-error-handler.cjs.map