diff --git a/src/api/api.ts b/src/api/api.ts index 0c23452..357df1b 100644 --- a/src/api/api.ts +++ b/src/api/api.ts @@ -1,3 +1,5 @@ +import { useMainStore } from "@/hooks/useMainStore"; + interface CommonResponse { success: boolean; error: string; @@ -48,7 +50,7 @@ export async function fetcher(method: FetcherMethod, path: string, data?: any } // auto refresh token - if (!lastestRefreshTokenAt || Date.now() - lastestRefreshTokenAt > 1000 * 60 * 60) { + if (document.cookie && (!lastestRefreshTokenAt || Date.now() - lastestRefreshTokenAt > 1000 * 60 * 60)) { lastestRefreshTokenAt = Date.now(); fetch("/api/v1/refresh-token") } diff --git a/src/components/install-commands.tsx b/src/components/install-commands.tsx index 61a82cc..679e6eb 100644 --- a/src/components/install-commands.tsx +++ b/src/components/install-commands.tsx @@ -6,8 +6,8 @@ import { } from "@/components/ui/dropdown-menu" import { Button, ButtonProps } from "@/components/ui/button" import { forwardRef, useState } from "react" -import { useConfig } from "@/hooks/useConfig" -import { ConfigEssential } from "@/types" +import useSettings from "@/hooks/useSetting" +import { ModelConfig } from "@/types" import { Check, Clipboard } from "lucide-react" import { toast } from "sonner" @@ -21,15 +21,15 @@ enum OSTypes { export const InstallCommandsMenu = forwardRef((props, ref) => { const [copy, setCopy] = useState(false); - const { config } = useConfig(); + const settings = useSettings(); const { t } = useTranslation(); const switchState = async (type: number) => { if (!copy) { try { setCopy(true); - if (config) - await navigator.clipboard.writeText(generateCommand(type, config)); + if (settings) + await navigator.clipboard.writeText(generateCommand(type, settings)); } catch (e) { console.error(e); toast(t("Error"), { @@ -60,7 +60,7 @@ export const InstallCommandsMenu = forwardRef((p ); }) -const generateCommand = (type: number, { agent_secret_key, install_host, listen_port, tls }: ConfigEssential) => { +const generateCommand = (type: number, { agent_secret_key, install_host, listen_port, tls }: ModelConfig) => { if (!install_host) throw new Error("You have not specify the installed host."); diff --git a/src/components/profile.tsx b/src/components/profile.tsx index 16aef93..fbcd657 100644 --- a/src/components/profile.tsx +++ b/src/components/profile.tsx @@ -32,22 +32,25 @@ import { useTranslation } from "react-i18next"; const profileFormSchema = z.object({ original_password: z.string().min(5).max(72), new_password: z.string().min(8).max(72), + new_username: z.string().min(1).max(32), }); export const ProfileCard = ({ className }: { className: string }) => { const { t } = useTranslation(); + const { profile, setProfile } = useMainStore(); + const form = useForm>({ resolver: zodResolver(profileFormSchema), defaultValues: { original_password: '', new_password: '', + new_username: profile?.username, }, resetOptions: { keepDefaultValues: false, } }) - const { setProfile } = useMainStore(); const [open, setOpen] = useState(false); const onSubmit = async (values: z.infer) => { @@ -69,18 +72,33 @@ export const ProfileCard = ({ className }: { className: string }) => {
- {t("UpdatePassword")} + {t("UpdateProfile")}
+ ( + + {t("NewUsername")} + + + + + + )} + /> ({}); - -interface ConfigProviderProps { - children: React.ReactNode; -} - -export const ConfigProvider: React.FC = ({ children }) => { - const config = useConfigStore(store => store.config); - const setConfig = useConfigStore(store => store.setConfig); - - const location = useLocation(); - - useEffect(() => { - (async () => { - if (location.pathname !== "/dashboard/settings") - try { - const c = await getSettings(); - const { agent_secret_key, language, listen_port, install_host, site_name, tls } = c; - const data = { - agent_secret_key, - language, - listen_port, - install_host, - site_name, - tls, - }; - setConfig(data); - } catch (error) { - setConfig(undefined); - } - })(); - }, [location.pathname]) - - const value: ConfigContextProps = useMemo(() => ({ - config: config, - }), [config]); - return {children}; -} - -export const useConfig = () => { - return useContext(ConfigContext); -}; diff --git a/src/hooks/useConfigStore.ts b/src/hooks/useConfigStore.ts deleted file mode 100644 index e6cb0c4..0000000 --- a/src/hooks/useConfigStore.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ConfigStore } from '@/types' -import { create } from 'zustand' -import { persist, createJSONStorage } from 'zustand/middleware' - -export const useConfigStore = create( - persist( - (set, get) => ({ - config: get()?.config, - setConfig: config => set({ config }), - }), - { - name: 'configStore', - storage: createJSONStorage(() => localStorage), - }, - ), -) diff --git a/src/hooks/useSetting.tsx b/src/hooks/useSetting.tsx new file mode 100644 index 0000000..657b195 --- /dev/null +++ b/src/hooks/useSetting.tsx @@ -0,0 +1,11 @@ +import { swrFetcher } from "@/api/api"; +import { ModelConfig } from "@/types"; +import useSWR from "swr"; + +export default function useSetting() { + const { data } = useSWR( + "/api/v1/setting", + swrFetcher + ); + return data; +} diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index aba5100..3616a67 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -103,7 +103,8 @@ "Refresh": "Refresh", "CopyPath": "copy path", "Goto": "Go to", - "UpdatePassword": "change password", + "UpdateProfile": "Update profile", + "NewUsername": "New username", "OriginalPassword": "original password", "NewPassword": "New Password", "EditDDNS": "Edit DDNS", diff --git a/src/locales/it/translation.json b/src/locales/it/translation.json index d04e843..06139d5 100644 --- a/src/locales/it/translation.json +++ b/src/locales/it/translation.json @@ -104,7 +104,8 @@ "Refresh": "aggiornare", "CopyPath": "percorso di copia", "Goto": "Vai a", - "UpdatePassword": "cambiare la password", + "UpdateProfile": "Aggiorna il profilo", + "NewUsername": "Nuovo nome utente", "OriginalPassword": "password originale", "NewPassword": "Nuova parola d'ordine", "EditDDNS": "Modifica DDNS", diff --git a/src/locales/zh-CN/translation.json b/src/locales/zh-CN/translation.json index d535642..f9e9d7a 100644 --- a/src/locales/zh-CN/translation.json +++ b/src/locales/zh-CN/translation.json @@ -104,7 +104,8 @@ "Refresh": "刷新", "CopyPath": "复制路径", "Goto": "前往", - "UpdatePassword": "更改密码", + "UpdateProfile": "更新个人资料", + "NewUsername": "新用户名", "OriginalPassword": "原始密码", "NewPassword": "新密码", "EditDDNS": "编辑DDNS", diff --git a/src/locales/zh-TW/translation.json b/src/locales/zh-TW/translation.json index 60bcfe9..c08b84f 100644 --- a/src/locales/zh-TW/translation.json +++ b/src/locales/zh-TW/translation.json @@ -104,7 +104,8 @@ "Refresh": "刷新", "CopyPath": "複製路徑", "Goto": "前往", - "UpdatePassword": "更改密碼", + "UpdateProfile": "更新個人資料", + "NewUsername": "新用戶名", "OriginalPassword": "原始密碼", "NewPassword": "新密碼", "EditDDNS": "編輯DDNS", diff --git a/src/main.tsx b/src/main.tsx index 6b24711..644c6dd 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -22,7 +22,6 @@ import ServerGroupPage from './routes/server-group'; import NotificationGroupPage from './routes/notification-group'; import { ServerProvider } from './hooks/useServer'; import { NotificationProvider } from './hooks/useNotfication'; -import { ConfigProvider } from './hooks/useConfig'; import CronPage from './routes/cron'; import NotificationPage from './routes/notification'; import AlertRulePage from './routes/alert-rule'; @@ -37,9 +36,7 @@ const router = createBrowserRouter([ element: ( - - - + ), diff --git a/src/types/api.ts b/src/types/api.ts index 1051617..c65e9e6 100644 --- a/src/types/api.ts +++ b/src/types/api.ts @@ -9,262 +9,262 @@ * --------------------------------------------------------------- */ -export interface GithubComNaibaNezhaModelCommonResponseAny { - data: any; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseAny { + data?: any; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayModelAlertRule { - data: ModelAlertRule[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayModelAlertRule { + data?: ModelAlertRule[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayModelCron { - data: ModelCron[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayModelCron { + data?: ModelCron[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayModelDDNSProfile { - data: ModelDDNSProfile[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayModelDDNSProfile { + data?: ModelDDNSProfile[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayModelNAT { - data: ModelNAT[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayModelNAT { + data?: ModelNAT[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayModelNotification { - data: ModelNotification[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayModelNotification { + data?: ModelNotification[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayModelNotificationGroupResponseItem { - data: ModelNotificationGroupResponseItem[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayModelNotificationGroupResponseItem { + data?: ModelNotificationGroupResponseItem[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayModelServer { - data: ModelServer[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayModelServer { + data?: ModelServer[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayModelServerGroupResponseItem { - data: ModelServerGroupResponseItem[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayModelServerGroupResponseItem { + data?: ModelServerGroupResponseItem[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayModelServiceInfos { - data: ModelServiceInfos[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayModelServiceInfos { + data?: ModelServiceInfos[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayModelUser { - data: ModelUser[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayModelUser { + data?: ModelUser[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayModelWAF { - data: ModelWAF[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayModelWAF { + data?: ModelWAF[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayString { - data: string[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayString { + data?: string[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseArrayUint64 { - data: number[]; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseArrayUint64 { + data?: number[]; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseModelConfig { - data: ModelConfig; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseModelConfig { + data?: ModelConfig; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseModelForceUpdateResponse { - data: ModelForceUpdateResponse; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseModelForceUpdateResponse { + data?: ModelForceUpdateResponse; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseModelLoginResponse { - data: ModelLoginResponse; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseModelLoginResponse { + data?: ModelLoginResponse; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseModelProfile { - data: ModelProfile; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseModelProfile { + data?: ModelProfile; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseModelServiceResponse { - data: ModelServiceResponse; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseModelServiceResponse { + data?: ModelServiceResponse; + error?: string; + success?: boolean; } -export interface GithubComNaibaNezhaModelCommonResponseUint64 { - data: number; - error: string; - success: boolean; +export interface GithubComNezhahqNezhaModelCommonResponseUint64 { + data?: number; + error?: string; + success?: boolean; } export interface ModelAlertRule { - created_at: string; - enable: boolean; + created_at?: string; + enable?: boolean; /** 失败时执行的触发任务id */ - fail_trigger_tasks: number[]; - id: number; - name: string; + fail_trigger_tasks?: number[]; + id?: number; + name?: string; /** 该报警规则所在的通知组 */ - notification_group_id: number; + notification_group_id?: number; /** 恢复时执行的触发任务id */ - recover_trigger_tasks: number[]; - rules: ModelRule[]; + recover_trigger_tasks?: number[]; + rules?: ModelRule[]; /** 触发模式: 0-始终触发(默认) 1-单次触发 */ - trigger_mode: number; - updated_at: string; + trigger_mode?: number; + updated_at?: string; } export interface ModelAlertRuleForm { enable?: boolean; /** 失败时触发的任务id */ - fail_trigger_tasks: number[]; + fail_trigger_tasks?: number[]; /** @minLength 1 */ - name: string; - notification_group_id: number; + name?: string; + notification_group_id?: number; /** 恢复时触发的任务id */ - recover_trigger_tasks: number[]; - rules: ModelRule[]; + recover_trigger_tasks?: number[]; + rules?: ModelRule[]; /** @default 0 */ - trigger_mode: number; + trigger_mode?: number; } export interface ModelConfig { - agent_secret_key: string; - avg_ping_count: number; + agent_secret_key?: string; + avg_ping_count?: number; /** 覆盖范围(0:提醒未被 IgnoredIPNotification 包含的所有服务器; 1:仅提醒被 IgnoredIPNotification 包含的服务器;) */ - cover: number; - custom_code: string; - custom_code_dashboard: string; + cover?: number; + custom_code?: string; + custom_code_dashboard?: string; /** debug模式开关 */ - debug: boolean; - dns_servers: string; + debug?: boolean; + dns_servers?: string; /** IP变更提醒 */ - enable_ip_change_notification: boolean; + enable_ip_change_notification?: boolean; /** 通知信息IP不打码 */ - enable_plain_ip_in_notification: boolean; + enable_plain_ip_in_notification?: boolean; /** 特定服务器IP(多个服务器用逗号分隔) */ - ignored_ip_notification: string; + ignored_ip_notification?: string; /** [ServerID] -> bool(值为true代表当前ServerID在特定服务器列表内) */ - ignored_ip_notification_server_ids: Record; - install_host: string; - ip_change_notification_group_id: number; - jwt_secret_key: string; + ignored_ip_notification_server_ids?: Record; + install_host?: string; + ip_change_notification_group_id?: number; + jwt_secret_key?: string; /** 系统语言,默认 zh_CN */ - language: string; - listen_port: number; + language?: string; + listen_port?: number; /** 时区,默认为 Asia/Shanghai */ - location: string; + location?: string; /** 真实IP */ - real_ip_header: string; - site_name: string; - tls: boolean; + real_ip_header?: string; + site_name?: string; + tls?: boolean; } export interface ModelCreateFMResponse { - session_id: string; + session_id?: string; } export interface ModelCreateTerminalResponse { - server_id: number; - server_name: string; - session_id: string; + server_id?: number; + server_name?: string; + session_id?: string; } export interface ModelCron { - command: string; + command?: string; /** 计划任务覆盖范围 (0:仅覆盖特定服务器 1:仅忽略特定服务器 2:由触发该计划任务的服务器执行) */ - cover: number; - created_at: string; - cron_job_id: number; - id: number; + cover?: number; + created_at?: string; + cron_job_id?: number; + id?: number; /** 最后一次执行时间 */ - last_executed_at: string; + last_executed_at?: string; /** 最后一次执行结果 */ - last_result: boolean; - name: string; + last_result?: boolean; + name?: string; /** 指定通知方式的分组 */ - notification_group_id: number; + notification_group_id?: number; /** 推送成功的通知 */ - push_successful: boolean; + push_successful?: boolean; /** 分钟 小时 天 月 星期 */ - scheduler: string; - servers: number[]; + scheduler?: string; + servers?: number[]; /** 0:计划任务 1:触发任务 */ - task_type: number; - updated_at: string; + task_type?: number; + updated_at?: string; } export interface ModelCronForm { command?: string; /** @default 0 */ - cover: number; + cover?: number; /** @minLength 1 */ - name: string; - notification_group_id: number; + name?: string; + notification_group_id?: number; push_successful?: boolean; - scheduler: string; - servers: number[]; + scheduler?: string; + servers?: number[]; /** * 0:计划任务 1:触发任务 * @default 0 */ - task_type: number; + task_type?: number; } export interface ModelCycleTransferStats { - from: string; - max: number; - min: number; - name: string; - next_update: Record; - server_name: Record; - to: string; - transfer: Record; + from?: string; + max?: number; + min?: number; + name?: string; + next_update?: Record; + server_name?: Record; + to?: string; + transfer?: Record; } export interface ModelDDNSForm { access_id?: string; access_secret?: string; - domains: string[]; + domains?: string[]; enable_ipv4?: boolean; enable_ipv6?: boolean; /** @default 3 */ - max_retries: number; + max_retries?: number; /** @minLength 1 */ - name: string; - provider: string; + name?: string; + provider?: string; webhook_headers?: string; /** @default 1 */ webhook_method?: number; @@ -275,22 +275,22 @@ export interface ModelDDNSForm { } export interface ModelDDNSProfile { - access_id: string; - access_secret: string; - created_at: string; - domains: string[]; - enable_ipv4: boolean; - enable_ipv6: boolean; - id: number; - max_retries: number; - name: string; - provider: string; - updated_at: string; - webhook_headers: string; - webhook_method: number; - webhook_request_body: string; - webhook_request_type: number; - webhook_url: string; + access_id?: string; + access_secret?: string; + created_at?: string; + domains?: string[]; + enable_ipv4?: boolean; + enable_ipv6?: boolean; + id?: number; + max_retries?: number; + name?: string; + provider?: string; + updated_at?: string; + webhook_headers?: string; + webhook_method?: number; + webhook_request_body?: string; + webhook_request_type?: number; + webhook_url?: string; } export interface ModelForceUpdateResponse { @@ -300,137 +300,137 @@ export interface ModelForceUpdateResponse { } export interface ModelGeoIP { - country_code: string; - ip: ModelIP; + country_code?: string; + ip?: ModelIP; } export interface ModelHost { - arch: string; - boot_time: number; - cpu: string[]; - disk_total: number; - gpu: string[]; - mem_total: number; - platform: string; - platform_version: string; - swap_total: number; - version: string; - virtualization: string; + arch?: string; + boot_time?: number; + cpu?: string[]; + disk_total?: number; + gpu?: string[]; + mem_total?: number; + platform?: string; + platform_version?: string; + swap_total?: number; + version?: string; + virtualization?: string; } export interface ModelHostState { - cpu: number; - disk_used: number; - gpu: number[]; - load_1: number; - load_15: number; - load_5: number; - mem_used: number; - net_in_speed: number; - net_in_transfer: number; - net_out_speed: number; - net_out_transfer: number; - process_count: number; - swap_used: number; - tcp_conn_count: number; - temperatures: ModelSensorTemperature[]; - udp_conn_count: number; - uptime: number; + cpu?: number; + disk_used?: number; + gpu?: number[]; + load_1?: number; + load_15?: number; + load_5?: number; + mem_used?: number; + net_in_speed?: number; + net_in_transfer?: number; + net_out_speed?: number; + net_out_transfer?: number; + process_count?: number; + swap_used?: number; + tcp_conn_count?: number; + temperatures?: ModelSensorTemperature[]; + udp_conn_count?: number; + uptime?: number; } export interface ModelIP { - ipv4_addr: string; - ipv6_addr: string; + ipv4_addr?: string; + ipv6_addr?: string; } export interface ModelLoginRequest { - password: string; - username: string; + password?: string; + username?: string; } export interface ModelLoginResponse { - expire: string; - token: string; + expire?: string; + token?: string; } export interface ModelNAT { - created_at: string; - domain: string; - host: string; - id: number; - name: string; - server_id: number; - updated_at: string; + created_at?: string; + domain?: string; + host?: string; + id?: number; + name?: string; + server_id?: number; + updated_at?: string; } export interface ModelNATForm { - domain: string; - host: string; + domain?: string; + host?: string; /** @minLength 1 */ - name: string; - server_id: number; + name?: string; + server_id?: number; } export interface ModelNotification { - created_at: string; - id: number; - name: string; - request_body: string; - request_header: string; - request_method: number; - request_type: number; - updated_at: string; - url: string; - verify_tls: boolean; + created_at?: string; + id?: number; + name?: string; + request_body?: string; + request_header?: string; + request_method?: number; + request_type?: number; + updated_at?: string; + url?: string; + verify_tls?: boolean; } export interface ModelNotificationForm { /** @minLength 1 */ - name: string; - request_body: string; - request_header: string; - request_method: number; - request_type: number; + name?: string; + request_body?: string; + request_header?: string; + request_method?: number; + request_type?: number; skip_check?: boolean; - url: string; + url?: string; verify_tls?: boolean; } export interface ModelNotificationGroup { - created_at: string; - id: number; - name: string; - updated_at: string; + created_at?: string; + id?: number; + name?: string; + updated_at?: string; } export interface ModelNotificationGroupForm { /** @minLength 1 */ - name: string; - notifications: number[]; + name?: string; + notifications?: number[]; } export interface ModelNotificationGroupResponseItem { - group: ModelNotificationGroup; - notifications: number[]; + group?: ModelNotificationGroup; + notifications?: number[]; } export interface ModelProfile { - created_at: string; - id: number; - login_ip: string; - password: string; - updated_at: string; - username: string; + created_at?: string; + id?: number; + login_ip?: string; + password?: string; + updated_at?: string; + username?: string; } export interface ModelProfileForm { - new_password: string; - original_password: string; + new_password?: string; + original_password?: string; } export interface ModelRule { /** 覆盖范围 RuleCoverAll/IgnoreAll */ - cover: number; + cover?: number; /** 流量统计周期 */ cycle_interval?: number; /** 流量统计的开始时间 */ @@ -453,7 +453,7 @@ export interface ModelRule { * net_all_speed、transfer_in、transfer_out、transfer_all、offline * transfer_in_cycle、transfer_out_cycle、transfer_all_cycle */ - type: string; + type?: string; } export interface ModelSensorTemperature { @@ -462,27 +462,27 @@ export interface ModelSensorTemperature { } export interface ModelServer { - created_at: string; + created_at?: string; /** DDNS配置 */ ddns_profiles?: number[]; /** 展示排序,越大越靠前 */ - display_index: number; + display_index?: number; /** 启用DDNS */ - enable_ddns: boolean; - geoip: ModelGeoIP; + enable_ddns?: boolean; + geoip?: ModelGeoIP; /** 对游客隐藏 */ - hide_for_guest: boolean; - host: ModelHost; - id: number; - last_active: string; - name: string; + hide_for_guest?: boolean; + host?: ModelHost; + id?: number; + last_active?: string; + name?: string; /** 管理员可见备注 */ - note: string; + note?: string; /** 公开备注 */ - public_note: string; - state: ModelHostState; - updated_at: string; - uuid: string; + public_note?: string; + state?: ModelHostState; + updated_at?: string; + uuid?: string; } export interface ModelServerForm { @@ -492,12 +492,12 @@ export interface ModelServerForm { * 展示排序,越大越靠前 * @default 0 */ - display_index: number; + display_index?: number; /** 启用DDNS */ enable_ddns?: boolean; /** 对游客隐藏 */ hide_for_guest?: boolean; - name: string; + name?: string; /** 管理员可见备注 */ note?: string; /** 公开备注 */ @@ -505,95 +505,95 @@ export interface ModelServerForm { } export interface ModelServerGroup { - created_at: string; - id: number; - name: string; - updated_at: string; + created_at?: string; + id?: number; + name?: string; + updated_at?: string; } export interface ModelServerGroupForm { /** @minLength 1 */ - name: string; - servers: number[]; + name?: string; + servers?: number[]; } export interface ModelServerGroupResponseItem { - group: ModelServerGroup; - servers: number[]; + group?: ModelServerGroup; + servers?: number[]; } export interface ModelService { - cover: number; - created_at: string; - duration: number; - enable_show_in_service: boolean; - enable_trigger_task: boolean; + cover?: number; + created_at?: string; + duration?: number; + enable_show_in_service?: boolean; + enable_trigger_task?: boolean; /** 失败时执行的触发任务id */ - fail_trigger_tasks: number[]; - id: number; - latency_notify: boolean; - max_latency: number; - min_latency: number; - name: string; + fail_trigger_tasks?: number[]; + id?: number; + latency_notify?: boolean; + max_latency?: number; + min_latency?: number; + name?: string; /** 当前服务监控所属的通知组 ID */ - notification_group_id: number; - notify: boolean; + notification_group_id?: number; + notify?: boolean; /** 恢复时执行的触发任务id */ - recover_trigger_tasks: number[]; - skip_servers: Record; - target: string; - type: number; - updated_at: string; + recover_trigger_tasks?: number[]; + skip_servers?: Record; + target?: string; + type?: number; + updated_at?: string; } export interface ModelServiceForm { - cover: number; - duration: number; + cover?: number; + duration?: number; enable_show_in_service?: boolean; enable_trigger_task?: boolean; - fail_trigger_tasks: number[]; + fail_trigger_tasks?: number[]; latency_notify?: boolean; /** @default 0 */ - max_latency: number; + max_latency?: number; /** @default 0 */ - min_latency: number; + min_latency?: number; /** @minLength 1 */ - name: string; - notification_group_id: number; + name?: string; + notification_group_id?: number; notify?: boolean; - recover_trigger_tasks: number[]; - skip_servers: Record; - target: string; - type: number; + recover_trigger_tasks?: number[]; + skip_servers?: Record; + target?: string; + type?: number; } export interface ModelServiceInfos { - avg_delay: number[]; - created_at: number[]; - monitor_id: number; - monitor_name: string; - server_id: number; - server_name: string; + avg_delay?: number[]; + created_at?: number[]; + monitor_id?: number; + monitor_name?: string; + server_id?: number; + server_name?: string; } export interface ModelServiceResponse { - cycle_transfer_stats: Record; - services: Record; + cycle_transfer_stats?: Record; + services?: Record; } export interface ModelServiceResponseItem { - current_down: number; - current_up: number; - delay: number[]; - down: number[]; - service: ModelService; - total_down: number; - total_up: number; - up: number[]; + current_down?: number; + current_up?: number; + delay?: number[]; + down?: number[]; + service?: ModelService; + total_down?: number; + total_up?: number; + up?: number[]; } export interface ModelSettingForm { - cover: number; + cover?: number; custom_code?: string; custom_code_dashboard?: string; custom_nameservers?: string; @@ -602,54 +602,54 @@ export interface ModelSettingForm { ignored_ip_notification?: string; install_host?: string; /** IP变更提醒的通知组 */ - ip_change_notification_group_id: number; + ip_change_notification_group_id?: number; /** @minLength 2 */ - language: string; + language?: string; /** 真实IP */ real_ip_header?: string; /** @minLength 1 */ - site_name: string; + site_name?: string; } export interface ModelStreamServer { - country_code: string; + country_code?: string; /** 展示排序,越大越靠前 */ - display_index: number; - host: ModelHost; - id: number; - last_active: string; - name: string; + display_index?: number; + host?: ModelHost; + id?: number; + last_active?: string; + name?: string; /** 公开备注,只第一个数据包有值 */ - public_note: string; - state: ModelHostState; + public_note?: string; + state?: ModelHostState; } export interface ModelStreamServerData { - now: number; - servers: ModelStreamServer[]; + now?: number; + servers?: ModelStreamServer[]; } export interface ModelTerminalForm { - protocol: string; - server_id: number; + protocol?: string; + server_id?: number; } export interface ModelUser { - created_at: string; - id: number; - password: string; - updated_at: string; - username: string; + created_at?: string; + id?: number; + password?: string; + updated_at?: string; + username?: string; } export interface ModelUserForm { - password: string; - username: string; + password?: string; + username?: string; } export interface ModelWAF { - count: number; - ip: number[]; - last_block_reason: number; - last_block_timestamp: number; + count?: number; + ip?: number[]; + last_block_reason?: number; + last_block_timestamp?: number; } diff --git a/src/types/configContext.ts b/src/types/configContext.ts deleted file mode 100644 index a29afc2..0000000 --- a/src/types/configContext.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ConfigEssential } from "@/types"; - -export interface ConfigContextProps { - config?: ConfigEssential; -} diff --git a/src/types/configStore.ts b/src/types/configStore.ts deleted file mode 100644 index e974ae3..0000000 --- a/src/types/configStore.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface ConfigEssential { - language: string; - agent_secret_key: string; - install_host: string; - listen_port: number; - site_name: string; - tls: boolean; -} - -export interface ConfigStore { - config?: ConfigEssential; - setConfig: (config?: ConfigEssential) => void; -} diff --git a/src/types/index.ts b/src/types/index.ts index d40b10c..583ce58 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -12,5 +12,3 @@ export * from './notificationStore'; export * from './notificationContext'; export * from './fm'; export * from './settings'; -export * from './configStore'; -export * from './configContext';