import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios"; // store // import { rootStore } from "@/lib/store-context"; export abstract class APIService { protected baseURL: string; private axiosInstance: AxiosInstance; constructor(baseURL: string) { this.baseURL = baseURL; this.axiosInstance = axios.create({ baseURL, withCredentials: true, }); this.setupInterceptors(); } private setupInterceptors() { // this.axiosInstance.interceptors.response.use( // (response) => response, // (error) => { // const store = rootStore; // if (error.response && error.response.status === 401 && store.user.currentUser) store.user.reset(); // return Promise.reject(error); // } // ); } get(url: string, params = {}): Promise> { return this.axiosInstance.get(url, { params }); } post(url: string, data: RequestType, config = {}): Promise> { return this.axiosInstance.post(url, data, config); } put(url: string, data: RequestType, config = {}): Promise> { return this.axiosInstance.put(url, data, config); } patch(url: string, data: RequestType, config = {}): Promise> { return this.axiosInstance.patch(url, data, config); } delete(url: string, data?: RequestType, config = {}) { return this.axiosInstance.delete(url, { data, ...config }); } request(config: AxiosRequestConfig = {}): Promise> { return this.axiosInstance(config); } }