Spaces:
Sleeping
Sleeping
File size: 1,296 Bytes
a9df8b1 | 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import axios from 'axios'
type ErrorPayload = {
detail?: unknown
error?: unknown
message?: unknown
}
function stringifyDetail(detail: unknown): string | null {
if (!detail) return null
if (typeof detail === 'string') return detail
if (Array.isArray(detail)) {
return detail
.map(item => {
if (typeof item === 'string') return item
if (item && typeof item === 'object' && 'msg' in item) {
return String((item as { msg: unknown }).msg)
}
return JSON.stringify(item)
})
.filter(Boolean)
.join('; ')
}
if (typeof detail === 'object') return JSON.stringify(detail)
return String(detail)
}
export function getApiErrorMessage(error: unknown, fallback = 'Request failed'): string {
if (axios.isAxiosError(error)) {
const data = error.response?.data as ErrorPayload | string | undefined
if (typeof data === 'string' && data.trim()) return data
if (data && typeof data === 'object') {
return (
stringifyDetail(data.detail) ||
stringifyDetail(data.error) ||
stringifyDetail(data.message) ||
error.message ||
fallback
)
}
return error.message || fallback
}
if (error instanceof Error) return error.message || fallback
return fallback
}
|