(error: unknown)
| 15 | } |
| 16 | |
| 17 | export function handleApiError(error: unknown): never { |
| 18 | if (axios.isAxiosError(error)) { |
| 19 | const status = error.response?.status; |
| 20 | const data = error.response?.data; |
| 21 | |
| 22 | switch (status) { |
| 23 | case 400: |
| 24 | throw new DocumentEngineError( |
| 25 | data?.message || 'Bad request - invalid parameters', |
| 26 | 'BAD_REQUEST', |
| 27 | 400, |
| 28 | data |
| 29 | ); |
| 30 | case 401: |
| 31 | throw new DocumentEngineError( |
| 32 | 'Authentication failed - check your API token', |
| 33 | 'AUTHENTICATION_FAILED', |
| 34 | 401, |
| 35 | data |
| 36 | ); |
| 37 | case 403: |
| 38 | throw new DocumentEngineError( |
| 39 | 'Access forbidden - insufficient permissions', |
| 40 | 'ACCESS_FORBIDDEN', |
| 41 | 403, |
| 42 | data |
| 43 | ); |
| 44 | case 404: |
| 45 | throw new DocumentEngineError( |
| 46 | data?.message || 'Resource not found', |
| 47 | 'NOT_FOUND', |
| 48 | 404, |
| 49 | data |
| 50 | ); |
| 51 | case 409: |
| 52 | throw new DocumentEngineError( |
| 53 | data?.message || 'Conflict - resource already exists or is in use', |
| 54 | 'CONFLICT', |
| 55 | 409, |
| 56 | data |
| 57 | ); |
| 58 | case 413: |
| 59 | throw new DocumentEngineError( |
| 60 | 'File too large - exceeds size limits', |
| 61 | 'FILE_TOO_LARGE', |
| 62 | 413, |
| 63 | data |
| 64 | ); |
| 65 | case 429: |
| 66 | throw new DocumentEngineError( |
| 67 | 'Rate limit exceeded - too many requests', |
| 68 | 'RATE_LIMIT_EXCEEDED', |
| 69 | 429, |
| 70 | data |
| 71 | ); |
| 72 | case 500: |
| 73 | case 502: |
| 74 | case 503: |
no outgoing calls
no test coverage detected