import { ServerResponse } from "../../js/models" import { deleteapi, getapi, postapi, putapi } from "../../js/utils" import { useQuery } from "@tanstack/react-query" export type GeneralStats = { services:number } export type Service = { name:string, service_id:string, active:boolean, proto: string, ip_src: string, ip_dst: string, proxy_port: number, public_port: number, } export type ServiceAddForm = { name:string, public_port:number, proxy_port:number, proto:string, ip_src: string, ip_dst: string, } export type ServiceAddResponse = ServerResponse & { service_id: string } export const queryKey = ["porthijack","services"] export const porthijackServiceQuery = () => useQuery({queryKey, queryFn:porthijack.services}) export const porthijack = { services: async () : Promise => { return await getapi("porthijack/services") as Service[]; }, serviceinfo: async (service_id:string) => { return await getapi(`porthijack/services/${service_id}`) as Service; }, servicestart: async (service_id:string) => { const { status } = await postapi(`porthijack/services/${service_id}/start`) as ServerResponse; return status === "ok"?undefined:status }, servicerename: async (service_id:string, name: string) => { const { status } = await putapi(`porthijack/services/${service_id}/rename`,{ name }) as ServerResponse; return status === "ok"?undefined:status }, servicestop: async (service_id:string) => { const { status } = await postapi(`porthijack/services/${service_id}/stop`) as ServerResponse; return status === "ok"?undefined:status }, servicesadd: async (data:ServiceAddForm) => { return await postapi("porthijack/services",data) as ServiceAddResponse; }, servicedelete: async (service_id:string) => { const { status } = await deleteapi(`porthijack/services/${service_id}`) as ServerResponse; return status === "ok"?undefined:status }, changedestination: async (service_id:string, ip_dst:string, proxy_port:number) => { return await putapi(`porthijack/services/${service_id}/change-destination`, {proxy_port, ip_dst}) as ServerResponse; } }