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 };