{"version":3,"file":"ledger-error-handler.mjs","sourceRoot":"","sources":["../src/ledger-error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,+BAA+B;AAC9D,OAAO,EACL,SAAS,IAAI,aAAa,EAC1B,QAAQ,IAAI,YAAY,EACxB,QAAQ,IAAI,YAAY,EACxB,mBAAmB,EACpB,gCAAgC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAiB;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,MAAM,UAAU,0BAA0B,CACxC,KAAc,EACd,eAAuB;IAEvB,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,KAAK,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAE3D,6CAA6C;QAC7C,IAAI,kBAAkB,CAAC,aAAa,CAAC,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,iBAAiB,CAAC,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,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE;YAC3C,IAAI,EAAE,aAAa,CAAC,OAAO;YAC3B,QAAQ,EAAE,YAAY,CAAC,GAAG;YAC1B,QAAQ,EAAE,YAAY,CAAC,OAAO;YAC9B,WAAW,EAAE,KAAK,CAAC,OAAO;YAC1B,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;IAED,4CAA4C;IAC5C,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,MAAM,KAAK,CAAC;IACd,CAAC;IAED,2BAA2B;IAC3B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE;YAC3C,IAAI,EAAE,aAAa,CAAC,OAAO;YAC3B,QAAQ,EAAE,YAAY,CAAC,GAAG;YAC1B,QAAQ,EAAE,YAAY,CAAC,OAAO;YAC9B,WAAW,EAAE,KAAK,CAAC,OAAO;YAC1B,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,mBAAmB,CAAC,eAAe,EAAE;QAC7C,IAAI,EAAE,aAAa,CAAC,OAAO;QAC3B,QAAQ,EAAE,YAAY,CAAC,GAAG;QAC1B,QAAQ,EAAE,YAAY,CAAC,OAAO;QAC9B,WAAW,EAAE,eAAe;KAC7B,CAAC,CAAC;AACL,CAAC","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"]}