{"version":3,"file":"dmk-error-translator.mjs","sourceRoot":"","sources":["../../src/dmk/dmk-error-translator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,wCAAwC;AACtE,OAAO,EAAE,oBAAoB,EAAE,+BAA+B;AAC9D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACpB,gCAAgC;AAEjC,OAAO,EAAE,cAAc,EAAE,sBAAkB;AAE3C,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAc;IAEd,sDAAsD;IACtD,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,mDAAmD;IACnD,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtD,OAAO,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,sBAAsB;IACtB,OAAO,IAAI,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,WAAW,IAAI,KAAK,CACrB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAkB;IAC3C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACzE,OAAO,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,yBAAyB,CAAC;AACnC,CAAC","sourcesContent":["import { DeviceExchangeError } from '@ledgerhq/device-management-kit';\nimport { TransportStatusError } from '@ledgerhq/hw-transport';\nimport {\n  getDmkErrorFromTag,\n  HardwareWalletError,\n} from '@metamask/hw-wallet-sdk';\n\nimport { createDmkError } from '../errors';\n\nconst GENERIC_ERROR_STATUS_CODE = 0x6f00;\n\n/**\n * Translates a DMK error into an error the Ledger keyring error handler can\n * process.\n *\n * Resolution order:\n * 1. **DMK `_tag`** — connection/session-level DMK errors (e.g.\n *    `DeviceSessionNotFound`, `DeviceLockedError`) carry a `_tag` but no hex\n *    APDU status code. These are resolved to a {@link HardwareWalletError}\n *    via the shared SDK mappings.\n * 2. **`DeviceExchangeError` hex code** — APDU-level errors that carry a\n *    4-character hex `errorCode` (e.g. `'6985'`). These are converted to a\n *    {@link TransportStatusError} so the existing `LEDGER_ERROR_MAPPINGS`\n *    lookup in the keyring error handler applies.\n * 3. **Generic fallback** — anything else is wrapped in a\n *    {@link TransportStatusError} with status `0x6f00`.\n *\n * @param error - The error from a DMK device action or command.\n * @returns A `HardwareWalletError` (for resolved DMK tags) or a\n * `TransportStatusError` (for hex codes and the generic fallback).\n */\nexport function translateDmkError(\n  error: unknown,\n): TransportStatusError | HardwareWalletError {\n  // 1. DMK connection/session errors identified by _tag\n  const tagResolution = getDmkErrorFromTag(error);\n  if (tagResolution) {\n    return createDmkError(tagResolution.tag);\n  }\n\n  // 2. DeviceExchangeError with hex APDU status code\n  if (isDeviceExchangeError(error)) {\n    const statusCode = parseHexErrorCode(error.errorCode);\n    return new TransportStatusError(statusCode);\n  }\n\n  // 3. Generic fallback\n  return new TransportStatusError(GENERIC_ERROR_STATUS_CODE);\n}\n\nexport function isDeviceExchangeError(\n  error: unknown,\n): error is DeviceExchangeError<string> {\n  return (\n    typeof error === 'object' &&\n    error !== null &&\n    '_tag' in error &&\n    'errorCode' in error\n  );\n}\n\nfunction parseHexErrorCode(errorCode: unknown): number {\n  if (typeof errorCode === 'string' && /^[0-9a-fA-F]{4}$/u.test(errorCode)) {\n    return parseInt(errorCode, 16);\n  }\n\n  return GENERIC_ERROR_STATUS_CODE;\n}\n"]}