plane/web/services/api.service.ts

157 lines
3.4 KiB
TypeScript
Raw Normal View History

2022-11-19 14:21:26 +00:00
import axios from "axios";
import Cookies from "js-cookie";
const unAuthorizedStatus = [401];
const nonValidatedRoutes = [
"/",
"/magic-sign-in",
"/reset-password",
"/workspace-member-invitation",
2023-06-16 13:30:04 +00:00
"/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);
}
);
2022-11-19 14:21:26 +00:00
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<any> {
return axios({
method: "get",
url: url,
headers: this.getAccessToken() ? this.getHeaders() : {},
...config,
});
}
2022-11-19 14:21:26 +00:00
get(url: string, config = {}): Promise<any> {
return axios({
method: "get",
url: this.baseURL + url,
headers: this.getAccessToken() ? this.getHeaders() : {},
...config,
});
}
post(url: string, data = {}, config = {}): Promise<any> {
return axios({
method: "post",
url: this.baseURL + url,
data,
headers: this.getAccessToken() ? this.getHeaders() : {},
...config,
});
}
put(url: string, data = {}, config = {}): Promise<any> {
return axios({
method: "put",
url: this.baseURL + url,
data,
headers: this.getAccessToken() ? this.getHeaders() : {},
...config,
});
}
patch(url: string, data = {}, config = {}): Promise<any> {
return axios({
method: "patch",
url: this.baseURL + url,
data,
headers: this.getAccessToken() ? this.getHeaders() : {},
...config,
});
}
delete(url: string, data?: any, config = {}): Promise<any> {
2022-11-19 14:21:26 +00:00
return axios({
method: "delete",
url: this.baseURL + url,
data: data,
2022-11-19 14:21:26 +00:00
headers: this.getAccessToken() ? this.getHeaders() : {},
...config,
});
}
mediaUpload(url: string, data = {}, config = {}): Promise<any> {
return axios({
method: "post",
url: this.baseURL + url,
data,
headers: this.getAccessToken()
? { ...this.getHeaders(), "Content-Type": "multipart/form-data" }
: {},
...config,
});
}
request(config = {}) {
return axios(config);
}
}
export default APIService;