import http from '@/api/http'; import { Server, Transformers } from '@definitions/user'; import { ServerEggVariable } from '@/api/server/types'; import { rawDataToServerEggVariable } from '@/api/transformers'; interface TokenResponse { token: string; socket: string; } export type ServerPowerState = 'offline' | 'starting' | 'running' | 'stopping'; export interface ServerStats { status: ServerPowerState; isSuspended: boolean; memoryUsageInBytes: number; cpuUsagePercent: number; diskUsageInBytes: number; networkRxInBytes: number; networkTxInBytes: number; uptime: number; } const getServer = async (uuid: string): Promise<[ Server, string[] ]> => { const { data } = await http.get(`/api/client/servers/${uuid}`); return [ Transformers.toServer(data), // eslint-disable-next-line camelcase data.meta?.is_server_owner ? [ '*' ] : (data.meta?.user_permissions || []), ]; }; const getWebsocketToken = async (server: string): Promise => { const { data } = await http.get(`/api/client/servers/${server}/websocket`); return { token: data.data.token, socket: data.data.socket, }; }; const renameServer = async (uuid: string, name: string): Promise => { await http.post(`/api/client/servers/${uuid}/settings/rename`, { name }); }; const reinstallServer = async (uuid: string): Promise => { await http.post(`/api/client/servers/${uuid}/settings/reinstall`); }; const setSelectedDockerImage = async (uuid: string, image: string): Promise => { await http.put(`/api/client/servers/${uuid}/settings/docker-image`, { docker_image: image }); }; const updateStartupVariable = async (uuid: string, key: string, value: string): Promise<[ ServerEggVariable, string ]> => { const { data } = await http.put(`/api/client/servers/${uuid}/startup/variable`, { key, value }); return [ rawDataToServerEggVariable(data), data.meta.startup_command ]; }; const getServerResourceUsage = async (server: string): Promise => { const { data } = await http.get(`/api/client/servers/${server}/resources`); const { attributes } = data; return { status: attributes.current_state, isSuspended: attributes.is_suspended, memoryUsageInBytes: attributes.resources.memory_bytes, cpuUsagePercent: attributes.resources.cpu_absolute, diskUsageInBytes: attributes.resources.disk_bytes, networkRxInBytes: attributes.resources.network_rx_bytes, networkTxInBytes: attributes.resources.network_tx_bytes, uptime: attributes.resources.uptime, }; }; export { getServer, getWebsocketToken, renameServer, reinstallServer, setSelectedDockerImage, updateStartupVariable, getServerResourceUsage, };