{"version":3,"file":"extractErrorMessage.cjs","names":[],"sources":["../../../src/utils/extractErrorMessage.ts"],"sourcesContent":["export const extractErrorMessage = (error: unknown): string => {\n  const trimToSingleLine = (text: string): string =>\n    text\n      .split(/\\r?\\n/)\n      .map((stringValue) => stringValue.trim())\n      .filter(Boolean)[0] ?? text.trim();\n\n  const looksLikeJson = (value: string): boolean => {\n    const stringValue = value.trim();\n\n    if (!stringValue) return false;\n    const first = stringValue[0];\n    return first === '{' || first === '[' || first === '\"';\n  };\n\n  const sanitizeUnexpectedTokenMessage = (text: string): string => {\n    // If the text mentions an invalid JSON parse, try to extract the meaningful part\n    const t = text.trim();\n\n    if (/Unexpected token/i.test(t) && /not valid JSON/i.test(t)) {\n      const quoted = t.match(/\"([^\"]+)\"/);\n\n      if (quoted?.[1]) return quoted[1];\n      // Fallback: drop the leading parser error description\n      const afterColon = t.split(':').slice(1).join(':').trim();\n\n      if (afterColon) return afterColon;\n    }\n    return t;\n  };\n\n  const pickFieldsFromObject = (\n    value: unknown,\n    seen: Set<unknown>\n  ): string | undefined => {\n    if (!value || typeof value !== 'object') return undefined;\n\n    if (seen.has(value)) return undefined;\n\n    seen.add(value);\n\n    // If the value itself is an array (e.g. ZodError.issues), iterate its items\n\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        const fromItem = pickFieldsFromObject(item, seen);\n\n        if (fromItem) return fromItem;\n\n        if (typeof (item as any)?.message === 'string')\n          return (item as any).message;\n      }\n      return undefined;\n    }\n\n    const obj = value as Record<string, unknown>;\n\n    // Check for message first (highest priority)\n\n    if (typeof obj.message === 'string' && obj.message.trim()) {\n      return obj.message;\n    }\n\n    // Check for error_description\n\n    if (\n      typeof obj.error_description === 'string' &&\n      obj.error_description.trim()\n    ) {\n      return obj.error_description;\n    }\n\n    // Check for error\n\n    if (typeof obj.error === 'string' && obj.error.trim()) {\n      return obj.error;\n    }\n\n    // Handle title and code combination\n    const title = typeof obj.title === 'string' ? obj.title.trim() : '';\n    const code = typeof obj.code === 'string' ? obj.code.trim() : '';\n\n    if (title && code) {\n      return `${title} (${code})`;\n    }\n\n    if (title) {\n      return title;\n    }\n\n    if (code) {\n      return code;\n    }\n\n    // Check for statusText\n\n    if (typeof obj.statusText === 'string' && obj.statusText.trim()) {\n      return obj.statusText;\n    }\n\n    // Common nested structures (Axios/Fetch-like)\n    const response = obj.response as Record<string, unknown> | undefined;\n\n    if (response && typeof response === 'object') {\n      const data = response.data as unknown;\n      const fromData = pickFieldsFromObject(data, seen);\n\n      if (fromData) return fromData;\n    }\n\n    const data = obj.data as unknown;\n    const fromData = pickFieldsFromObject(data, seen);\n\n    if (fromData) return fromData;\n\n    // Nested cause chain\n    const cause = (obj as { cause?: unknown }).cause;\n    const fromCause =\n      pickFieldsFromObject(cause, seen) ??\n      (typeof (cause as any)?.message === 'string'\n        ? (cause as any).message\n        : undefined);\n\n    if (fromCause) return fromCause;\n\n    // Arrays of errors\n    const errors = obj.errors as unknown;\n\n    if (Array.isArray(errors)) {\n      for (const item of errors) {\n        const fromItem = pickFieldsFromObject(item, seen);\n\n        if (fromItem) return fromItem;\n\n        if (typeof (item as any)?.message === 'string')\n          return (item as any).message;\n      }\n    }\n\n    return undefined;\n  };\n\n  const tryParseJsonString = (maybeJson: string): string | undefined => {\n    if (!looksLikeJson(maybeJson)) return undefined;\n    try {\n      const parsed = JSON.parse(maybeJson);\n      const picked = pickFieldsFromObject(parsed, new Set());\n\n      if (picked) return picked;\n\n      if (typeof parsed === 'string') return parsed;\n      return undefined;\n    } catch {\n      return undefined;\n    }\n  };\n\n  if (typeof error === 'string') {\n    const cleaned = sanitizeUnexpectedTokenMessage(error);\n    return tryParseJsonString(cleaned) ?? trimToSingleLine(cleaned);\n  }\n\n  if (error && typeof error === 'object') {\n    // Native Error instance\n\n    if (error instanceof Error) {\n      const cleaned = sanitizeUnexpectedTokenMessage(error.message);\n      const fromMessage = tryParseJsonString(cleaned);\n\n      if (fromMessage) return trimToSingleLine(fromMessage);\n      // Dive into cause when present\n      const fromCause = extractErrorMessage(error.cause as unknown);\n\n      if (fromCause && fromCause !== 'An unknown error occurred')\n        return trimToSingleLine(fromCause);\n      return trimToSingleLine(cleaned);\n    }\n\n    // Generic object\n    const seen = new Set<unknown>();\n    const fromObject = pickFieldsFromObject(error, seen);\n\n    if (fromObject) {\n      const cleaned = sanitizeUnexpectedTokenMessage(fromObject);\n      return tryParseJsonString(cleaned) ?? trimToSingleLine(cleaned);\n    }\n\n    try {\n      const serialized = JSON.stringify(error);\n      return trimToSingleLine(serialized);\n    } catch {\n      return trimToSingleLine(String(error));\n    }\n  }\n\n  return 'An unknown error occurred';\n};\n"],"mappings":"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"}