( status: number, statusText: string, errorText: string )
| 220 | * field-level errors object, and generic message fallback. |
| 221 | */ |
| 222 | export function parseAtlassianErrorMessage( |
| 223 | status: number, |
| 224 | statusText: string, |
| 225 | errorText: string |
| 226 | ): string { |
| 227 | try { |
| 228 | const errorData = JSON.parse(errorText) |
| 229 | if (errorData.errorMessage) { |
| 230 | return errorData.errorMessage |
| 231 | } |
| 232 | if (Array.isArray(errorData.errorMessages) && errorData.errorMessages.length > 0) { |
| 233 | return errorData.errorMessages.join(', ') |
| 234 | } |
| 235 | if (Array.isArray(errorData.errors) && errorData.errors.length > 0) { |
| 236 | const err = errorData.errors[0] |
| 237 | if (err?.title) { |
| 238 | return err.detail ? `${err.title}: ${err.detail}` : err.title |
| 239 | } |
| 240 | } |
| 241 | if (errorData.errors && !Array.isArray(errorData.errors)) { |
| 242 | const fieldErrors = Object.entries(errorData.errors) |
| 243 | .map(([field, msg]) => `${field}: ${msg}`) |
| 244 | .join(', ') |
| 245 | if (fieldErrors) return fieldErrors |
| 246 | } |
| 247 | if (errorData.message) { |
| 248 | return errorData.message |
| 249 | } |
| 250 | } catch { |
| 251 | if (errorText) { |
| 252 | return errorText |
| 253 | } |
| 254 | } |
| 255 | return `${status} ${statusText}` |
| 256 | } |
no test coverage detected