import type { AppConfig, AuthConfig, AuthConfigUpdate, VideoConfig, VideoConfigUpdate, StreamConfigResponse, StreamConfigUpdate, HidConfig, HidConfigUpdate, MsdConfig, MsdConfigUpdate, AtxConfig, AtxConfigUpdate, AtxDevices, AudioConfig, AudioConfigUpdate, ExtensionsStatus, ExtensionInfo, ExtensionLogs, TtydConfig, TtydConfigUpdate, GostcConfig, GostcConfigUpdate, EasytierConfig, EasytierConfigUpdate, FrpcConfig, FrpcConfigUpdate, WebConfigResponse, WebConfigUpdate, } from '@/types/generated' import { request } from './request' export const configApi = { getAll: () => request('/config'), } export const authConfigApi = { get: () => request('/config/auth'), update: (config: AuthConfigUpdate) => request('/config/auth', { method: 'PATCH', body: JSON.stringify(config), }), } export const videoConfigApi = { get: () => request('/config/video'), update: (config: VideoConfigUpdate) => request('/config/video', { method: 'PATCH', body: JSON.stringify(config), }), } export const streamConfigApi = { get: () => request('/config/stream'), update: (config: StreamConfigUpdate) => request('/config/stream', { method: 'PATCH', body: JSON.stringify(config), }), } export const hidConfigApi = { get: () => request('/config/hid'), update: (config: HidConfigUpdate) => request('/config/hid', { method: 'PATCH', body: JSON.stringify(config), }), } export const msdConfigApi = { get: () => request('/config/msd'), update: (config: MsdConfigUpdate) => request('/config/msd', { method: 'PATCH', body: JSON.stringify(config), }), } export interface WolHistoryEntry { mac_address: string updated_at: number } export interface WolHistoryResponse { history: WolHistoryEntry[] } export const atxConfigApi = { get: () => request('/config/atx'), update: (config: AtxConfigUpdate) => request('/config/atx', { method: 'PATCH', body: JSON.stringify(config), }), listDevices: () => request('/devices/atx'), sendWol: (macAddress: string) => request<{ success: boolean; message?: string }>('/atx/wol', { method: 'POST', body: JSON.stringify({ mac_address: macAddress }), }), getWolHistory: (limit = 5) => request(`/atx/wol/history?limit=${Math.max(1, Math.min(50, limit))}`), } export const audioConfigApi = { get: () => request('/config/audio'), update: (config: AudioConfigUpdate) => request('/config/audio', { method: 'PATCH', body: JSON.stringify(config), }), } export const extensionsApi = { getAll: () => request('/extensions'), get: (id: string) => request(`/extensions/${id}`), start: (id: string) => request(`/extensions/${id}/start`, { method: 'POST', }), stop: (id: string) => request(`/extensions/${id}/stop`, { method: 'POST', }), logs: (id: string, lines = 100) => request(`/extensions/${id}/logs?lines=${lines}`), updateTtyd: (config: TtydConfigUpdate) => request('/extensions/ttyd/config', { method: 'PATCH', body: JSON.stringify(config), }), updateGostc: (config: GostcConfigUpdate) => request('/extensions/gostc/config', { method: 'PATCH', body: JSON.stringify(config), }), updateEasytier: (config: EasytierConfigUpdate) => request('/extensions/easytier/config', { method: 'PATCH', body: JSON.stringify(config), }), updateFrpc: (config: FrpcConfigUpdate) => request('/extensions/frpc/config', { method: 'PATCH', body: JSON.stringify(config), }), } export interface RustDeskConfigResponse { enabled: boolean rendezvous_server: string relay_server: string | null device_id: string has_password: boolean has_keypair: boolean relay_key: string | null } export interface RustDeskStatusResponse { config: RustDeskConfigResponse service_status: string rendezvous_status: string | null } export interface RustDeskConfigUpdate { enabled?: boolean rendezvous_server?: string relay_server?: string relay_key?: string device_password?: string } export interface RustDeskPasswordResponse { device_id: string device_password: string } export const rustdeskConfigApi = { get: () => request('/config/rustdesk'), update: (config: RustDeskConfigUpdate) => request('/config/rustdesk', { method: 'PATCH', body: JSON.stringify(config), }), getStatus: () => request('/config/rustdesk/status'), getPassword: () => request('/config/rustdesk/password'), regenerateId: () => request('/config/rustdesk/regenerate-id', { method: 'POST', }), regeneratePassword: () => request('/config/rustdesk/regenerate-password', { method: 'POST', }), start: () => request('/config/rustdesk/start', { method: 'POST' }), stop: () => request('/config/rustdesk/stop', { method: 'POST' }), } export type RtspCodec = 'h264' | 'h265' export interface RtspConfigResponse { enabled: boolean bind: string port: number path: string allow_one_client: boolean codec: RtspCodec username?: string | null password: string | null } export interface RtspConfigUpdate { enabled?: boolean bind?: string port?: number path?: string allow_one_client?: boolean codec?: RtspCodec username?: string password?: string } export interface RtspStatusResponse { config: RtspConfigResponse service_status: string } export const rtspConfigApi = { get: () => request('/config/rtsp'), update: (config: RtspConfigUpdate) => request('/config/rtsp', { method: 'PATCH', body: JSON.stringify(config), }), getStatus: () => request('/config/rtsp/status'), start: () => request('/config/rtsp/start', { method: 'POST' }), stop: () => request('/config/rtsp/stop', { method: 'POST' }), } export type WebConfig = WebConfigResponse export type { WebConfigUpdate } export const webConfigApi = { get: () => request('/config/web'), update: (config: WebConfigUpdate) => request('/config/web', { method: 'PATCH', body: JSON.stringify(config), }), } export interface RedfishConfigResponse { enabled: boolean } export interface RedfishConfigUpdate { enabled?: boolean } export const redfishConfigApi = { get: () => request('/config/redfish'), update: (config: RedfishConfigUpdate) => request('/config/redfish', { method: 'PATCH', body: JSON.stringify(config), }), } export const systemApi = { restart: () => request<{ success: boolean; message?: string }>('/system/restart', { method: 'POST', }), }