import axios from "axios"; import Cookies from "js-cookie"; export 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()}`, }; } 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); } }