2024-04-16 20:20:46 +00:00
|
|
|
import * as KIT from "@frontend/kitui";
|
|
|
|
import { Method, ResponseType, AxiosError } from "axios";
|
|
|
|
import { clearAuthToken } from "@frontend/kitui";
|
|
|
|
import { cleanAuthTicketData } from "@root/ticket";
|
|
|
|
import { clearUserData } from "@root/user";
|
|
|
|
import { clearQuizData } from "@root/quizes/store";
|
|
|
|
import { redirect } from "react-router-dom";
|
|
|
|
|
2024-04-17 14:16:49 +00:00
|
|
|
interface MakeRequest {
|
|
|
|
method?: Method | undefined;
|
|
|
|
url: string;
|
|
|
|
body?: unknown;
|
|
|
|
useToken?: boolean | undefined;
|
|
|
|
contentType?: boolean | undefined;
|
|
|
|
responseType?: ResponseType | undefined;
|
|
|
|
signal?: AbortSignal | undefined;
|
|
|
|
withCredentials?: boolean | undefined;
|
|
|
|
}
|
2024-04-16 20:20:46 +00:00
|
|
|
|
2024-04-17 14:16:49 +00:00
|
|
|
async function makeRequest<TRequest = unknown, TResponse = unknown>(
|
|
|
|
data: MakeRequest,
|
|
|
|
): Promise<TResponse> {
|
|
|
|
try {
|
|
|
|
const response = await KIT.makeRequest<unknown>(data);
|
2024-04-16 20:20:46 +00:00
|
|
|
|
2024-04-17 14:16:49 +00:00
|
|
|
return response as TResponse;
|
|
|
|
} catch (e) {
|
|
|
|
const error = e as AxiosError;
|
|
|
|
if (
|
|
|
|
error.response?.status === 400 &&
|
|
|
|
error.response?.data?.message === "refreshToken is empty"
|
|
|
|
) {
|
|
|
|
cleanAuthTicketData();
|
|
|
|
clearAuthToken();
|
|
|
|
clearUserData();
|
|
|
|
clearQuizData();
|
|
|
|
redirect("/");
|
|
|
|
}
|
|
|
|
throw e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export default makeRequest;
|