@metamask/eth-ledger-bridge-keyring
Version:
A MetaMask compatible keyring, for ledger hardware wallets
77 lines • 3.05 kB
JavaScript
;
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