front-hub/src/api/makeRequest.ts

49 lines
1.3 KiB
TypeScript
Raw Normal View History

import * as KIT from "@frontend/kitui";
import { Method, ResponseType, AxiosError } from "axios";
import { clearAuthToken } from "@frontend/kitui";
import { clearUserData } from "@root/stores/user";
import { clearCustomTariffs } from "@root/stores/customTariffs";
import { clearTickets } from "@root/stores/tickets";
import { redirect } from "react-router-dom";
2024-05-27 15:43:38 +00:00
import { setNotEnoughMoneyAmount } from "@stores/cart";
2024-05-27 15:43:38 +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-22 08:37:17 +00:00
interface ErrorResponseData {
2024-05-27 15:43:38 +00:00
message?: string;
2024-04-22 08:37:17 +00:00
}
2024-05-27 15:43:38 +00:00
async function makeRequest<TRequest = unknown, TResponse = unknown>(
data: MakeRequest
): Promise<TResponse> {
try {
const response = await KIT.makeRequest<unknown>(data);
2024-05-27 15:43:38 +00:00
return response as TResponse;
} catch (e) {
const error = e as AxiosError;
if (
error.response?.status === 400 &&
(error.response?.data as ErrorResponseData)?.message ===
"refreshToken is empty"
) {
clearAuthToken();
clearUserData();
clearCustomTariffs();
clearTickets();
setNotEnoughMoneyAmount(0);
redirect("/");
}
throw e;
}
}
2024-04-22 08:37:17 +00:00
export default makeRequest;