File size: 925 Bytes
9e89154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * Normalizes Flask `error_response` / legacy shapes — mirrors
 * `frontend/src/services/api.js` interceptor order:
 * `error.message` | `error` (string) | top-level `message` | axios message | fallback.
 */
export function extractApiErrorMessage(
  err: unknown,
  responseData: unknown
): string {
  if (responseData && typeof responseData === "object") {
    const r = responseData as {
      error?: unknown;
      message?: unknown;
    };
    const nested = r.error;
    if (
      nested &&
      typeof nested === "object" &&
      nested !== null &&
      "message" in nested
    ) {
      const m = (nested as { message?: unknown }).message;
      if (typeof m === "string") return m;
    }
    if (typeof nested === "string") return nested;
    if (typeof r.message === "string") return r.message;
  }
  if (err instanceof Error && err.message) return err.message;
  return "An unexpected error occurred";
}