import axios, { type AxiosInstance, type AxiosRequestConfig, type AxiosResponse } from 'axios' const DEFAULT_API_BASE_URL = '/api' const DEFAULT_TIMEOUT = 15_000 class Request { private readonly instance: AxiosInstance constructor( baseURL = import.meta.env.VITE_API_BASE_URL || DEFAULT_API_BASE_URL, timeout = DEFAULT_TIMEOUT, ) { this.instance = axios.create({ baseURL, timeout, withCredentials: false, }) } request(config: AxiosRequestConfig): Promise { return this.instance.request>(config).then((response) => response.data) } get(url: string, config: AxiosRequestConfig = {}): Promise { return this.request({ ...config, url, method: 'GET' }) } post(url: string, data?: unknown, config: AxiosRequestConfig = {}): Promise { return this.request({ ...config, url, data, method: 'POST' }) } } export const request = new Request() export default request