import Axios, {AxiosError, AxiosRequestConfig, AxiosResponse} from "axios"; interface Response { code: number message: string data: T } export async function getRequest(url: string): Promise { return sendRequest({ method: "GET", url: `/api${url}`, responseType: "json", }); } export function postRequest(url: string, data: object = {}): Promise { return sendRequest({ method: "POST", url: `/api${url}`, responseType: "json", data, }); } export function putRequest(url: string, data: object): Promise { return sendRequest({ method: "PUT", url: `/api${url}`, responseType: "json", data, }); } export function deleteRequest(url: string): Promise { return sendRequest({ method: "DELETE", url: `/api${url}`, responseType: "json", }); } async function sendRequest(config: AxiosRequestConfig): Promise { try { const res = await Axios(config); return await handleResponse(res); } catch (e) { return await handleResponse((e as AxiosError).response as AxiosResponse); } } function handleResponse(response: AxiosResponse): Promise { const obj: Response = response.data; if (![200, 201].includes(response.status)) { if (response.status === 403) { return Promise.reject(obj.message); } } return Promise.resolve(obj.data); }