2021-03-25 14:22:43 +00:00
|
|
|
import Axios, { AxiosError, AxiosInstance, CancelTokenSource } from "axios";
|
2022-03-16 06:26:15 +00:00
|
|
|
import { setUnauthenticated } from "../../modules/redux/actions";
|
|
|
|
import { AppDispatch } from "../../modules/redux/store";
|
2022-01-22 13:35:11 +00:00
|
|
|
import { Environment, isProdEnv } from "../../utilities";
|
|
|
|
class BazarrClient {
|
2021-03-25 14:22:43 +00:00
|
|
|
axios!: AxiosInstance;
|
|
|
|
source!: CancelTokenSource;
|
2021-08-14 12:59:08 +00:00
|
|
|
dispatch!: AppDispatch;
|
2021-03-25 14:22:43 +00:00
|
|
|
|
|
|
|
constructor() {
|
2021-08-29 16:45:25 +00:00
|
|
|
const baseUrl = `${Environment.baseUrl}/api/`;
|
|
|
|
this.initialize(baseUrl, Environment.apiKey);
|
2021-03-25 14:22:43 +00:00
|
|
|
}
|
|
|
|
|
2021-04-21 14:29:25 +00:00
|
|
|
initialize(url: string, apikey?: string) {
|
2021-03-25 14:22:43 +00:00
|
|
|
this.axios = Axios.create({
|
|
|
|
baseURL: url,
|
|
|
|
});
|
|
|
|
|
|
|
|
this.axios.defaults.headers.post["Content-Type"] = "application/json";
|
2021-04-21 14:29:25 +00:00
|
|
|
this.axios.defaults.headers.common["X-API-KEY"] = apikey ?? "AUTH_NEEDED";
|
2021-03-25 14:22:43 +00:00
|
|
|
|
|
|
|
this.source = Axios.CancelToken.source();
|
|
|
|
|
|
|
|
this.axios.interceptors.request.use((config) => {
|
|
|
|
config.cancelToken = this.source.token;
|
|
|
|
return config;
|
|
|
|
});
|
|
|
|
|
|
|
|
this.axios.interceptors.response.use(
|
|
|
|
(resp) => {
|
|
|
|
if (resp.status >= 200 && resp.status < 300) {
|
|
|
|
return Promise.resolve(resp);
|
|
|
|
} else {
|
|
|
|
this.handleError(resp.status);
|
|
|
|
return Promise.reject(resp);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
(error: AxiosError) => {
|
|
|
|
if (error.response) {
|
|
|
|
const response = error.response;
|
|
|
|
this.handleError(response.status);
|
|
|
|
} else {
|
|
|
|
error.message = "You have disconnected to Bazarr backend";
|
|
|
|
}
|
|
|
|
return Promise.reject(error);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2021-08-18 00:26:52 +00:00
|
|
|
_resetApi(apikey: string) {
|
2021-08-29 16:45:25 +00:00
|
|
|
if (!isProdEnv) {
|
2021-08-18 00:26:52 +00:00
|
|
|
this.axios.defaults.headers.common["X-API-KEY"] = apikey;
|
|
|
|
}
|
2021-04-21 14:29:25 +00:00
|
|
|
}
|
|
|
|
|
2021-03-25 14:22:43 +00:00
|
|
|
handleError(code: number) {
|
|
|
|
switch (code) {
|
|
|
|
case 401:
|
2022-01-22 13:35:11 +00:00
|
|
|
this.dispatch(setUnauthenticated());
|
2021-03-25 14:22:43 +00:00
|
|
|
break;
|
|
|
|
case 500:
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-22 13:35:11 +00:00
|
|
|
export default new BazarrClient();
|