import axios from "axios"; import Cookies from "js-cookie"; // const unAuthorizedStatus = [401]; // const nonValidatedRoutes = [ // "/", // "/magic-sign-in", // "/reset-password", // "/workspace-member-invitation", // "/sign-up", // "/m/", // ]; // const validateRouteCheck = (route: string): boolean => { // let validationToggle = false; // let routeCheck = false; // nonValidatedRoutes.forEach((_route: string) => { // if (route.includes(_route)) { // routeCheck = true; // } // }); // if (routeCheck) validationToggle = true; // return validationToggle; // }; // axios.interceptors.response.use( // (response) => response, // (error) => { // const { status }: any = error.response; // if (!validateRouteCheck(window.location.pathname)) { // if (unAuthorizedStatus.includes(status)) { // Cookies.remove("refreshToken", { path: "/" }); // Cookies.remove("accessToken", { path: "/" }); // window.location.href = `/?next_url=${window.location.pathname}`; // } // } // return Promise.reject(error); // } // ); abstract class APIService { protected baseURL: string; protected headers: any = {}; constructor(baseURL: string) { this.baseURL = baseURL; } setRefreshToken(token: string) { Cookies.set("refreshToken", token); } getRefreshToken() { return Cookies.get("refreshToken"); } purgeRefreshToken() { Cookies.remove("refreshToken", { path: "/" }); } setAccessToken(token: string) { Cookies.set("accessToken", token); } getAccessToken() { return Cookies.get("accessToken"); } purgeAccessToken() { Cookies.remove("accessToken", { path: "/" }); } getHeaders() { return { Authorization: `Bearer ${this.getAccessToken()}`, }; } getWithoutBase(url: string, config = {}): Promise { return axios({ method: "get", url: url, headers: this.getAccessToken() ? this.getHeaders() : {}, ...config, }); } get(url: string, config = {}): Promise { return axios({ method: "get", url: this.baseURL + url, headers: this.getAccessToken() ? this.getHeaders() : {}, ...config, }); } post(url: string, data = {}, config = {}): Promise { return axios({ method: "post", url: this.baseURL + url, data, headers: this.getAccessToken() ? this.getHeaders() : {}, ...config, }); } put(url: string, data = {}, config = {}): Promise { return axios({ method: "put", url: this.baseURL + url, data, headers: this.getAccessToken() ? this.getHeaders() : {}, ...config, }); } patch(url: string, data = {}, config = {}): Promise { return axios({ method: "patch", url: this.baseURL + url, data, headers: this.getAccessToken() ? this.getHeaders() : {}, ...config, }); } delete(url: string, data?: any, config = {}): Promise { return axios({ method: "delete", url: this.baseURL + url, data: data, headers: this.getAccessToken() ? this.getHeaders() : {}, ...config, }); } request(config = {}) { return axios(config); } } export default APIService;