bazarr/frontend/src/apis/index.ts

94 lines
2.6 KiB
TypeScript
Raw Normal View History

2021-03-25 14:22:43 +00:00
import Axios, { AxiosError, AxiosInstance, CancelTokenSource } from "axios";
import { siteRedirectToAuth, siteUpdateOffline } from "../@redux/actions";
import reduxStore from "../@redux/store";
import { getBaseUrl } from "../utilites";
2021-03-25 14:22:43 +00:00
class Api {
axios!: AxiosInstance;
source!: CancelTokenSource;
constructor() {
const baseUrl = `${getBaseUrl()}/api/`;
2021-03-25 14:22:43 +00:00
if (process.env.NODE_ENV === "development") {
this.initialize(baseUrl, process.env["REACT_APP_APIKEY"]!);
2021-03-25 14:22:43 +00:00
} else {
this.initialize(baseUrl, window.Bazarr.apiKey);
}
}
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";
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);
}
);
}
danger_resetApi(apikey: string) {
this.axios.defaults.headers.common["X-API-KEY"] = apikey;
}
2021-03-25 14:22:43 +00:00
onOnline() {
const offline = reduxStore.getState().site.offline;
if (offline) {
reduxStore.dispatch(siteUpdateOffline(false));
}
}
onOffline() {
reduxStore.dispatch(siteUpdateOffline(true));
}
handleError(code: number) {
switch (code) {
case 401:
reduxStore.dispatch(siteRedirectToAuth());
break;
case 500:
break;
default:
break;
}
}
}
export default new Api();
export { default as BadgesApi } from "./badges";
export { default as EpisodesApi } from "./episodes";
export { default as FilesApi } from "./files";
export { default as HistoryApi } from "./history";
export * from "./hooks";
2021-03-25 14:22:43 +00:00
export { default as MoviesApi } from "./movies";
export { default as ProvidersApi } from "./providers";
export { default as SeriesApi } from "./series";
export { default as SubtitlesApi } from "./subtitles";
export { default as SystemApi } from "./system";
export { default as UtilsApi } from "./utils";