39 lines
1015 B
TypeScript
39 lines
1015 B
TypeScript
import type { AxiosError } from "axios";
|
|
|
|
export type ServerError = {
|
|
statusCode: number;
|
|
error: string;
|
|
message: string;
|
|
};
|
|
|
|
export const parseAxiosError = (nativeError: unknown): [string, number?] => {
|
|
const error = nativeError as AxiosError;
|
|
|
|
if (error.response?.data && "statusCode" in (error.response.data as ServerError)) {
|
|
const serverError = error.response.data as ServerError;
|
|
const translatedMessage = serverError.message;
|
|
if (translatedMessage !== undefined) serverError.message = translatedMessage;
|
|
return [serverError.message, serverError.statusCode];
|
|
}
|
|
|
|
switch (error.status) {
|
|
case 404:
|
|
return ["Not found.", error.status];
|
|
|
|
case 403:
|
|
return ["Access is restricted.", error.status];
|
|
|
|
case 401:
|
|
return ["Authorization error.", error.status];
|
|
|
|
case 500:
|
|
return ["Internal Server Error.", error.status];
|
|
|
|
case 503:
|
|
return ["Service unavailable.", error.status];
|
|
|
|
default:
|
|
return ["Unknown server error."];
|
|
}
|
|
};
|