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"; import type { AxiosResponse } from "axios"; interface MakeRequest { method?: Method | undefined; url: string; body?: unknown; useToken?: boolean | undefined; contentType?: boolean | undefined; responseType?: ResponseType | undefined; signal?: AbortSignal | undefined; withCredentials?: boolean | undefined; } type ExtendedAxiosResponse = AxiosResponse & { message: string }; export const makeRequest = async ( data: MakeRequest, ): Promise => { try { const response = await KIT.makeRequest(data); return response; } catch (nativeError) { const error = nativeError as AxiosError; if ( error.response?.status === 400 && (error.response?.data as ExtendedAxiosResponse)?.message === "refreshToken is empty" ) { cleanAuthTicketData(); clearAuthToken(); clearUserData(); clearQuizData(); redirect("/"); } throw nativeError; } };