network-resurrector/frontend/src/utils/api.js

76 lines
1.8 KiB
JavaScript

import * as axios from "../utils/axios";
import { toast } from "react-toastify";
import env from "../utils/env";
const apiHost = env.REACT_APP_NETWORK_RESURRECTOR_API_URL;
const networkRoute = `${apiHost}/network`;
const systemRoute = `${apiHost}/system`;
const powerActionsRoute = `${apiHost}/resurrector`;
const securityRoute = `${apiHost}/security`;
const routes = {
permissions: `${securityRoute}/permissions`,
releaseNotes: `${systemRoute}/release-notes`,
resetCache: `${systemRoute}/reset-cache`,
machines: `${networkRoute}/machines`,
wakeMachine: `${powerActionsRoute}/wake`,
pingMachine: `${powerActionsRoute}/ping`,
shutdownMachine: `${powerActionsRoute}/shutdown`,
restartMachine: `${powerActionsRoute}/restart`,
system: {
version: `${systemRoute}/version`,
releaseNotes: `${systemRoute}/release-notes`,
resetCache: `${systemRoute}/reset-cache`
}
};
const handleError = err => {
let message;
switch (err?.status) {
case 500:
message = err.title;
break;
case 404:
message = err.message;
break;
default:
message = err.title;
}
toast.error(message);
};
const defaultOptions = {
onCompleted: () => null,
onError: handleError
};
const call = async (request, options = defaultOptions) => {
const internalOptions = { ...defaultOptions, ...options };
const { onCompleted, onError } = internalOptions;
try {
const result = await request();
onCompleted(result);
} catch (error) {
onError(error);
}
};
const get = (route, options) => {
const promise = call(() => axios.get(route), options);
return promise;
};
const post = (route, data, options) => {
const promise = call(() => axios.post(route, data), options);
return promise;
};
const endpoints = routes;
export { routes, get, post, endpoints };