photoprism/frontend/src/common/api.js

65 lines
1.6 KiB
JavaScript
Raw Normal View History

import "@babel/polyfill/noConflict";
import Axios from "axios";
import Notify from "common/notify";
const testConfig = {"jsHash": "test", "version": "test"};
const config = window.clientConfig ? window.clientConfig : testConfig;
const Api = Axios.create({
baseURL: "/api/v1",
headers: {common: {
"X-Session-Token": window.localStorage.getItem("session_token"),
"X-Client-Hash": config.jsHash,
"X-Client-Version": config.version,
}},
});
Api.interceptors.request.use(function (config) {
// Do something before request is sent
Notify.ajaxStart();
return config;
}, function (error) {
// Do something with request error
return Promise.reject(error);
});
Api.interceptors.response.use(function (response) {
Notify.ajaxEnd();
if(typeof response.data == "string") {
Notify.error("Request failed - invalid response");
console.warn("WARNING: Server returned HTML instead of JSON - API not implemented?")
}
return response;
}, function (error) {
Notify.ajaxEnd();
if (Axios.isCancel(error)) {
return Promise.reject(error);
}
if(console && console.log) {
console.log(error);
}
let errorMessage = "An error occurred - are you offline?";
2018-09-25 08:16:52 +02:00
let code = error.code;
if(error.response && error.response.data) {
let data = error.response.data;
code = data.code;
errorMessage = data.message ? data.message : data.error;
}
if (code === 401) {
Notify.logout(errorMessage);
} else {
Notify.error(errorMessage);
}
return Promise.reject(error);
});
export default Api;