@metamask/eth-ledger-bridge-keyring
Version:
A MetaMask compatible keyring, for ledger hardware wallets
1 lines • 4.4 kB
Source Map (JSON)
{"version":3,"file":"ledger-error-handler.cjs","sourceRoot":"","sources":["../src/ledger-error-handler.ts"],"names":[],"mappings":";;;AAAA,yDAA8D;AAC9D,2DAKiC;AAEjC,yCAAiE;AAEjE,MAAM,mBAAmB,GAAG,UAAU,CAAC;AACvC,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;IACzC,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC,CAAC;AAEH;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC;QAC5C,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,GAAG,mBAAmB,GAAG,OAAO,EAAE,CAAC;AACzC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,0BAA0B,CACxC,KAAc,EACd,eAAuB;IAEvB,IAAI,KAAK,YAAY,mCAAoB,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,KAAK,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAE3D,6CAA6C;QAC7C,IAAI,IAAA,2BAAkB,EAAC,aAAa,CAAC,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,IAAA,0BAAiB,EAAC,aAAa,CAAC,CAAC;YACrD,IAAI,0BAA0B,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClD,WAAW,CAAC,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,WAAW,CAAC;QACpB,CAAC;QAED,0DAA0D;QAC1D,MAAM,IAAI,mCAAmB,CAAC,KAAK,CAAC,OAAO,EAAE;YAC3C,IAAI,EAAE,yBAAa,CAAC,OAAO;YAC3B,QAAQ,EAAE,wBAAY,CAAC,GAAG;YAC1B,QAAQ,EAAE,wBAAY,CAAC,OAAO;YAC9B,WAAW,EAAE,KAAK,CAAC,OAAO;YAC1B,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;IAED,4CAA4C;IAC5C,IAAI,KAAK,YAAY,mCAAmB,EAAE,CAAC;QACzC,MAAM,KAAK,CAAC;IACd,CAAC;IAED,2BAA2B;IAC3B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,mCAAmB,CAAC,KAAK,CAAC,OAAO,EAAE;YAC3C,IAAI,EAAE,yBAAa,CAAC,OAAO;YAC3B,QAAQ,EAAE,wBAAY,CAAC,GAAG;YAC1B,QAAQ,EAAE,wBAAY,CAAC,OAAO;YAC9B,WAAW,EAAE,KAAK,CAAC,OAAO;YAC1B,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,mCAAmB,CAAC,eAAe,EAAE;QAC7C,IAAI,EAAE,yBAAa,CAAC,OAAO;QAC3B,QAAQ,EAAE,wBAAY,CAAC,GAAG;QAC1B,QAAQ,EAAE,wBAAY,CAAC,OAAO;QAC9B,WAAW,EAAE,eAAe;KAC7B,CAAC,CAAC;AACL,CAAC;AAjDD,gEAiDC","sourcesContent":["import { TransportStatusError } from '@ledgerhq/hw-transport';\nimport {\n ErrorCode as ErrorCodeEnum,\n Severity as SeverityEnum,\n Category as CategoryEnum,\n HardwareWalletError,\n} from '@metamask/hw-wallet-sdk';\n\nimport { createLedgerError, isKnownLedgerError } from './errors';\n\nconst LEDGER_ERROR_PREFIX = 'Ledger: ';\nconst LEDGER_PREFIX_STATUS_CODES = new Set([\n '0x6985',\n '0x6a80',\n '0x5515',\n '0x650f',\n]);\n\n/**\n * Prefixes error messages with the Ledger identifier when needed.\n *\n * @param message - The error message to prefix.\n * @returns The message with a Ledger prefix.\n */\nfunction withLedgerPrefix(message: string): string {\n return message.startsWith(LEDGER_ERROR_PREFIX)\n ? message\n : `${LEDGER_ERROR_PREFIX}${message}`;\n}\n\n/**\n * Central error handler for Ledger TransportStatusError instances.\n * Converts Ledger transport errors into properly typed HardwareWalletError instances\n * using the error mapping system.\n *\n * @param error - The error to handle\n * @param fallbackMessage - Default error message if no specific handling is found\n * @throws HardwareWalletError with appropriate error details from mappings\n */\nexport function handleLedgerTransportError(\n error: unknown,\n fallbackMessage: string,\n): never {\n if (error instanceof TransportStatusError) {\n const statusCodeHex = `0x${error.statusCode.toString(16)}`;\n\n // Try to create error from known status code\n if (isKnownLedgerError(statusCodeHex)) {\n const ledgerError = createLedgerError(statusCodeHex);\n if (LEDGER_PREFIX_STATUS_CODES.has(statusCodeHex)) {\n ledgerError.message = withLedgerPrefix(ledgerError.message);\n }\n throw ledgerError;\n }\n\n // Unknown status code - create generic error with details\n throw new HardwareWalletError(error.message, {\n code: ErrorCodeEnum.Unknown,\n severity: SeverityEnum.Err,\n category: CategoryEnum.Unknown,\n userMessage: error.message,\n cause: error,\n });\n }\n\n // Handle HardwareWalletError - pass through\n if (error instanceof HardwareWalletError) {\n throw error;\n }\n\n // For any other error type\n if (error instanceof Error) {\n throw new HardwareWalletError(error.message, {\n code: ErrorCodeEnum.Unknown,\n severity: SeverityEnum.Err,\n category: CategoryEnum.Unknown,\n userMessage: error.message,\n cause: error,\n });\n }\n\n // Unknown error type\n throw new HardwareWalletError(fallbackMessage, {\n code: ErrorCodeEnum.Unknown,\n severity: SeverityEnum.Err,\n category: CategoryEnum.Unknown,\n userMessage: fallbackMessage,\n });\n}\n"]}