import axios from 'axios' import type { AxiosError, AxiosHeaders, AxiosRequestConfig, AxiosResponse } from 'axios' declare const AXIOS_BASE: string declare const AXIOS_HEADERS: string /** * Subset of AxiosRequestConfig */ export type RequestConfig = { baseURL?: string url?: string method: 'get' | 'put' | 'patch' | 'post' | 'delete' params?: unknown data?: TData responseType?: 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | 'stream' signal?: AbortSignal headers?: AxiosRequestConfig['headers'] } /** * Subset of AxiosResponse */ export type ResponseConfig = { data: TData status: number statusText: string headers?: AxiosResponse['headers'] } export const axiosInstance = axios.create({ baseURL: typeof AXIOS_BASE !== 'undefined' ? AXIOS_BASE : undefined, headers: typeof AXIOS_HEADERS !== 'undefined' ? (JSON.parse(AXIOS_HEADERS) as AxiosHeaders) : undefined, }) export const axiosClient = async (config: RequestConfig): Promise> => { const promise = axiosInstance.request>(config).catch((e: AxiosError) => { throw e }) return promise } export default axiosClient