mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-10-25 13:12:07 +08:00
This reverts commit cb751052a4.
Remove the tray latency test and its dashboard URL persistence and cache
changes because the two entry points have diverging behavior.
Preserve the subsequent IPC binding migration and remove generated fields,
input projections, and locale entries that depended on the reverted feature.
1047 lines
33 KiB
TypeScript
1047 lines
33 KiB
TypeScript
// This file has been generated by Tauri Specta. Do not edit this file manually.
|
|
|
|
import { invoke as __TAURI_INVOKE, Channel } from '@tauri-apps/api/core'
|
|
|
|
/** Commands */
|
|
export const commands = {
|
|
getSystemInfo: () => __TAURI_INVOKE<SystemInfo>('get_system_info'),
|
|
/** 获取应用的运行时间(毫秒) */
|
|
getAppUptime: () => __TAURI_INVOKE<number>('get_app_uptime'),
|
|
exportDiagnosticInfo: () => __TAURI_INVOKE<null>('export_diagnostic_info'),
|
|
probeListener: (request: ListenerProbe) =>
|
|
__TAURI_INVOKE<ListenerProbeOutcome>('probe_listener', { request }),
|
|
saveProxyPorts: (settings: ProxyPortSettings) =>
|
|
__TAURI_INVOKE<SaveProxyPortsOutcome>('save_proxy_ports', { settings }),
|
|
getSysProxy: () => __TAURI_INVOKE<SystemProxy>('get_sys_proxy'),
|
|
getAutoProxy: () => __TAURI_INVOKE<AutoProxy>('get_auto_proxy'),
|
|
getEmbeddedServerPort: () =>
|
|
__TAURI_INVOKE<number>('get_embedded_server_port'),
|
|
openAppDir: () => __TAURI_INVOKE<null>('open_app_dir'),
|
|
openLogsDir: () => __TAURI_INVOKE<null>('open_logs_dir'),
|
|
openCoreDir: () => __TAURI_INVOKE<null>('open_core_dir'),
|
|
getNetworkInterfaces: () =>
|
|
__TAURI_INVOKE<string[]>('get_network_interfaces'),
|
|
getSystemHostname: () => __TAURI_INVOKE<string>('get_system_hostname'),
|
|
restartApp: () => __TAURI_INVOKE<null>('restart_app'),
|
|
installUpdate: (version: string, onEvent: Channel<DownloadEvent>) =>
|
|
__TAURI_INVOKE<boolean>('install_update', { version, onEvent }),
|
|
cancelUpdateDownload: () => __TAURI_INVOKE<void>('cancel_update_download'),
|
|
restartCore: () => __TAURI_INVOKE<null>('restart_core'),
|
|
/** Replaces the managed core binary atomically instead of letting mihomo overwrite itself. */
|
|
upgradeClashCore: (force: boolean) =>
|
|
__TAURI_INVOKE<CoreUpgradeReport>('upgrade_clash_core', { force }),
|
|
/** Returns one coherent core/service snapshot instead of independently refreshed state. */
|
|
getRuntimeState: () => __TAURI_INVOKE<RunStateView>('get_runtime_state'),
|
|
getPendingFailures: () =>
|
|
__TAURI_INVOKE<PendingFailure[]>('get_pending_failures'),
|
|
getSidecarFailure: () =>
|
|
__TAURI_INVOKE<SidecarFailureSnapshot>('get_sidecar_failure'),
|
|
entryLightweightMode: () => __TAURI_INVOKE<null>('entry_lightweight_mode'),
|
|
installService: () =>
|
|
__TAURI_INVOKE<ServiceInstallOutcome>('install_service'),
|
|
uninstallService: () => __TAURI_INVOKE<null>('uninstall_service'),
|
|
reinstallService: () =>
|
|
__TAURI_INVOKE<ServiceInstallOutcome>('reinstall_service'),
|
|
repairService: () => __TAURI_INVOKE<ServiceInstallOutcome>('repair_service'),
|
|
continueWithSidecar: () => __TAURI_INVOKE<null>('continue_with_sidecar'),
|
|
syncRuntimeProviders: () => __TAURI_INVOKE<void>('sync_runtime_providers'),
|
|
getClashInfo: () => __TAURI_INVOKE<ClashInfo>('get_clash_info'),
|
|
patchClashConfig: (payload: YamlMapping) =>
|
|
__TAURI_INVOKE<null>('patch_clash_config', { payload }),
|
|
patchClashMode: (payload: string) =>
|
|
__TAURI_INVOKE<null>('patch_clash_mode', { payload }),
|
|
/** Reads the saved mode without depending on strict mihomo `/configs` deserialization. */
|
|
getClashMode: () => __TAURI_INVOKE<string | null>('get_clash_mode'),
|
|
changeClashCore: (clashCore: string) =>
|
|
__TAURI_INVOKE<{
|
|
/** Stable frontend identifier, when classified. */
|
|
code?: string | null
|
|
/** Human-readable diagnostic detail. */
|
|
detail: string
|
|
/** Requested operation when known by the command. */
|
|
operation?: FailedOperation | null
|
|
} | null>('change_clash_core', { clashCore }),
|
|
getRuntimeConfig: () =>
|
|
__TAURI_INVOKE<{ [key in string]: JsonValue } | null>('get_runtime_config'),
|
|
getProxyView: () => __TAURI_INVOKE<ProxyViewV1_Serialize>('get_proxy_view'),
|
|
getRuntimeYaml: () => __TAURI_INVOKE<string>('get_runtime_yaml'),
|
|
getRuntimeLogs: () => __TAURI_INVOKE<RuntimeLogs>('get_runtime_logs'),
|
|
getRuntimeProxyChainConfig: (proxyChainExitNode: string) =>
|
|
__TAURI_INVOKE<string>('get_runtime_proxy_chain_config', {
|
|
proxyChainExitNode,
|
|
}),
|
|
updateProxyChainConfigInRuntime: (proxyChainConfig: JsonValue | null) =>
|
|
__TAURI_INVOKE<ValidationOutcome>('update_proxy_chain_config_in_runtime', {
|
|
proxyChainConfig,
|
|
}),
|
|
invokeUwpTool: () => __TAURI_INVOKE<null>('invoke_uwp_tool'),
|
|
copyClashEnv: () => __TAURI_INVOKE<null>('copy_clash_env'),
|
|
syncTrayProxySelection: () =>
|
|
__TAURI_INVOKE<null>('sync_tray_proxy_selection'),
|
|
/** Merges one selection pair into fresh backend state to avoid stale-list overwrites. */
|
|
recordSelectedNode: (groupName: string, node: string) =>
|
|
__TAURI_INVOKE<null>('record_selected_node', { groupName, node }),
|
|
forgetSelectedNode: (groupName: string) =>
|
|
__TAURI_INVOKE<null>('forget_selected_node', { groupName }),
|
|
saveDnsConfig: (dnsConfig: YamlMapping) =>
|
|
__TAURI_INVOKE<null>('save_dns_config', { dnsConfig }),
|
|
applyDnsConfig: (apply: boolean) =>
|
|
__TAURI_INVOKE<null>('apply_dns_config', { apply }),
|
|
setDnsOverride: (
|
|
profileUid: string,
|
|
enabled: boolean,
|
|
confirmation: string | null,
|
|
) =>
|
|
__TAURI_INVOKE<DnsOverrideOutcome>('set_dns_override', {
|
|
profileUid,
|
|
enabled,
|
|
confirmation,
|
|
}),
|
|
takeDnsOverrideNotice: () =>
|
|
__TAURI_INVOKE<boolean>('take_dns_override_notice'),
|
|
takeServiceFallbackNotice: () =>
|
|
__TAURI_INVOKE<
|
|
| { kind: 'unavailable' }
|
|
| { kind: 'coreRejected'; reason: string }
|
|
| { kind: 'notAutoStarted' }
|
|
| null
|
|
>('take_service_fallback_notice'),
|
|
getCoreStartupError: () =>
|
|
__TAURI_INVOKE<
|
|
| { kind: 'startFailed'; detail: string }
|
|
| { kind: 'serviceCoreStopped'; detail: string }
|
|
| null
|
|
>('get_core_startup_error'),
|
|
takeServiceRepairNotice: () =>
|
|
__TAURI_INVOKE<boolean>('take_service_repair_notice'),
|
|
takeServiceOwnerNotice: () =>
|
|
__TAURI_INVOKE<string | null>('take_service_owner_notice'),
|
|
takeDiscardedKeysNotice: () =>
|
|
__TAURI_INVOKE<string | null>('take_discarded_keys_notice'),
|
|
getDnsConfigContent: () =>
|
|
__TAURI_INVOKE<string | null>('get_dns_config_content'),
|
|
validateDnsConfig: () =>
|
|
__TAURI_INVOKE<ValidationOutcome>('validate_dns_config'),
|
|
getClashLogs: () => __TAURI_INVOKE<string[]>('get_clash_logs'),
|
|
/** 获取Verge配置 */
|
|
getVergeConfig: () => __TAURI_INVOKE<IVerge_Serialize>('get_verge_config'),
|
|
/** 修改Verge配置 */
|
|
patchVergeConfig: (payload: IVerge_Deserialize) =>
|
|
__TAURI_INVOKE<null>('patch_verge_config', { payload }),
|
|
testDelay: (url: string) => __TAURI_INVOKE<number>('test_delay', { url }),
|
|
getAppDir: () => __TAURI_INVOKE<string>('get_app_dir'),
|
|
copyIconFile: (path: string, iconInfo: IconInfo) =>
|
|
__TAURI_INVOKE<string>('copy_icon_file', { path, iconInfo }),
|
|
downloadIconCache: (url: string, name: string) =>
|
|
__TAURI_INVOKE<string>('download_icon_cache', { url, name }),
|
|
openDevtools: () => __TAURI_INVOKE<void>('open_devtools'),
|
|
exitApp: () => __TAURI_INVOKE<void>('exit_app'),
|
|
getNetworkInterfacesInfo: () =>
|
|
__TAURI_INVOKE<NetworkInterfaceView[]>('get_network_interfaces_info'),
|
|
getProfiles: () => __TAURI_INVOKE<IProfiles_Serialize>('get_profiles'),
|
|
enhanceProfiles: () => __TAURI_INVOKE<ValidationOutcome>('enhance_profiles'),
|
|
patchProfilesConfig: (profiles: ProfileSelection) =>
|
|
__TAURI_INVOKE<ValidationOutcome>('patch_profiles_config', { profiles }),
|
|
viewProfile: (index: string) =>
|
|
__TAURI_INVOKE<null>('view_profile', { index }),
|
|
patchProfile: (index: string, profile: ProfilePatch_Deserialize) =>
|
|
__TAURI_INVOKE<null>('patch_profile', { index, profile }),
|
|
createProfile: (item: ProfileCreate_Deserialize, fileData: string | null) =>
|
|
__TAURI_INVOKE<null>('create_profile', { item, fileData }),
|
|
importProfile: (
|
|
url: string,
|
|
option: {
|
|
user_agent?: string | null
|
|
with_proxy?: boolean | null
|
|
self_proxy?: boolean | null
|
|
update_interval?: number | null
|
|
/**
|
|
* HTTP request timeout in seconds
|
|
* default is 60 seconds
|
|
*/
|
|
timeout_seconds?: number | null
|
|
/** default is `false` */
|
|
danger_accept_invalid_certs?: boolean | null
|
|
allow_auto_update?: boolean | null
|
|
merge?: string | null
|
|
script?: string | null
|
|
rules?: string | null
|
|
proxies?: string | null
|
|
groups?: string | null
|
|
} | null,
|
|
) => __TAURI_INVOKE<null>('import_profile', { url, option }),
|
|
reorderProfile: (activeId: string, overId: string) =>
|
|
__TAURI_INVOKE<null>('reorder_profile', { activeId, overId }),
|
|
updateProfile: (
|
|
index: string,
|
|
option: {
|
|
user_agent?: string | null
|
|
with_proxy?: boolean | null
|
|
self_proxy?: boolean | null
|
|
update_interval?: number | null
|
|
/**
|
|
* HTTP request timeout in seconds
|
|
* default is 60 seconds
|
|
*/
|
|
timeout_seconds?: number | null
|
|
/** default is `false` */
|
|
danger_accept_invalid_certs?: boolean | null
|
|
allow_auto_update?: boolean | null
|
|
merge?: string | null
|
|
script?: string | null
|
|
rules?: string | null
|
|
proxies?: string | null
|
|
groups?: string | null
|
|
} | null,
|
|
) => __TAURI_INVOKE<null>('update_profile', { index, option }),
|
|
deleteProfile: (index: string) =>
|
|
__TAURI_INVOKE<null>('delete_profile', { index }),
|
|
readProfileFile: (index: string) =>
|
|
__TAURI_INVOKE<string>('read_profile_file', { index }),
|
|
/** 保存profiles的配置 */
|
|
saveProfileFile: (index: string, fileData: string | null) =>
|
|
__TAURI_INVOKE<ValidationOutcome>('save_profile_file', { index, fileData }),
|
|
getNextUpdateTime: (uid: string) =>
|
|
__TAURI_INVOKE<number | null>('get_next_update_time', { uid }),
|
|
createLocalBackup: () => __TAURI_INVOKE<null>('create_local_backup'),
|
|
listLocalBackup: () => __TAURI_INVOKE<LocalBackupFile[]>('list_local_backup'),
|
|
deleteLocalBackup: (filename: string) =>
|
|
__TAURI_INVOKE<null>('delete_local_backup', { filename }),
|
|
restoreLocalBackup: (filename: string) =>
|
|
__TAURI_INVOKE<null>('restore_local_backup', { filename }),
|
|
importLocalBackup: (source: string) =>
|
|
__TAURI_INVOKE<string>('import_local_backup', { source }),
|
|
exportLocalBackup: (filename: string, destination: string) =>
|
|
__TAURI_INVOKE<null>('export_local_backup', { filename, destination }),
|
|
createWebdavBackup: () => __TAURI_INVOKE<null>('create_webdav_backup'),
|
|
saveWebdavConfig: (url: string, username: string, password: string) =>
|
|
__TAURI_INVOKE<null>('save_webdav_config', { url, username, password }),
|
|
listWebdavBackup: () => __TAURI_INVOKE<WebDavFile[]>('list_webdav_backup'),
|
|
deleteWebdavBackup: (filename: string) =>
|
|
__TAURI_INVOKE<null>('delete_webdav_backup', { filename }),
|
|
restoreWebdavBackup: (filename: string) =>
|
|
__TAURI_INVOKE<null>('restore_webdav_backup', { filename }),
|
|
getUnlockItems: () => __TAURI_INVOKE<UnlockItem[]>('get_unlock_items'),
|
|
checkMediaUnlock: (onComplete: Channel<UnlockItem>) =>
|
|
__TAURI_INVOKE<UnlockItem[]>('check_media_unlock', { onComplete }),
|
|
checkMediaUnlockItem: (name: string) =>
|
|
__TAURI_INVOKE<UnlockItem>('check_media_unlock_item', { name }),
|
|
}
|
|
|
|
/* Types */
|
|
export type AutoProxy = {
|
|
enable: boolean
|
|
url: string
|
|
}
|
|
|
|
export type ClashInfo = {
|
|
/** clash core port */
|
|
mixed_port: number
|
|
socks_port: number
|
|
port: number
|
|
/** same as `external-controller` */
|
|
server: string
|
|
/** clash secret */
|
|
secret: string | null
|
|
}
|
|
|
|
/** Structured command failure returned to the frontend. */
|
|
export type CommandFailure =
|
|
| CommandFailure_Serialize
|
|
| CommandFailure_Deserialize
|
|
|
|
/** Structured command failure returned to the frontend. */
|
|
export type CommandFailure_Deserialize = {
|
|
/** Stable frontend identifier, when classified. */
|
|
code: string | null
|
|
/** Human-readable diagnostic detail. */
|
|
detail: string
|
|
/** Requested operation when known by the command. */
|
|
operation: FailedOperation | null
|
|
}
|
|
|
|
/** Structured command failure returned to the frontend. */
|
|
export type CommandFailure_Serialize = {
|
|
/** Stable frontend identifier, when classified. */
|
|
code?: string | null
|
|
/** Human-readable diagnostic detail. */
|
|
detail: string
|
|
/** Requested operation when known by the command. */
|
|
operation?: FailedOperation | null
|
|
}
|
|
|
|
/** Why the Core is not running, kept until a Core starts again. */
|
|
export type CoreFailure =
|
|
| { kind: 'startFailed'; detail: string }
|
|
| { kind: 'serviceCoreStopped'; detail: string }
|
|
|
|
export type CoreUpgradeReport = {
|
|
/** False when the managed core was already at the latest version. */
|
|
upgraded: boolean
|
|
}
|
|
|
|
export type DelayHistory = {
|
|
time: string
|
|
delay: number
|
|
}
|
|
|
|
export type DnsOverrideOutcome =
|
|
| { status: 'applied' }
|
|
| { status: 'confirmation_required'; source: string }
|
|
|
|
/** Same wire shape as the updater plugin's JS `DownloadEvent`. */
|
|
export type DownloadEvent =
|
|
| {
|
|
event: 'Started'
|
|
data: {
|
|
contentLength: number | null
|
|
}
|
|
}
|
|
| {
|
|
event: 'Progress'
|
|
data: {
|
|
chunkLength: number
|
|
}
|
|
}
|
|
| { event: 'Finished' }
|
|
|
|
/** Operation associated with a pending failure. */
|
|
export type FailedOperation =
|
|
| 'systemProxyEnable'
|
|
| 'systemProxyDisable'
|
|
| 'systemProxyRestore'
|
|
| 'systemProxyGuard'
|
|
|
|
/** Define the `profiles.yaml` schema */
|
|
export type IProfiles = IProfiles_Serialize | IProfiles_Deserialize
|
|
|
|
/** Define the `profiles.yaml` schema */
|
|
export type IProfiles_Deserialize = {
|
|
current?: string | null
|
|
items?: PrfItem_Deserialize[] | null
|
|
}
|
|
|
|
/** Define the `profiles.yaml` schema */
|
|
export type IProfiles_Serialize = {
|
|
current: string | null
|
|
items: PrfItem_Serialize[] | null
|
|
}
|
|
|
|
/** ### `verge.yaml` schema */
|
|
export type IVerge = IVerge_Serialize | IVerge_Deserialize
|
|
|
|
export type IVergeTestItem = {
|
|
uid?: string | null
|
|
name?: string | null
|
|
icon?: string | null
|
|
url?: string | null
|
|
}
|
|
|
|
export type IVergeTheme = {
|
|
primary_color?: string | null
|
|
secondary_color?: string | null
|
|
primary_text?: string | null
|
|
secondary_text?: string | null
|
|
info_color?: string | null
|
|
error_color?: string | null
|
|
warning_color?: string | null
|
|
success_color?: string | null
|
|
font_family?: string | null
|
|
css_injection?: string | null
|
|
}
|
|
|
|
/** ### `verge.yaml` schema */
|
|
export type IVerge_Deserialize = {
|
|
/** silent | error | warn | info | debug | trace */
|
|
app_log_level?: string | null
|
|
/** Maximum app log size in KiB. */
|
|
app_log_max_size?: number | null
|
|
app_log_max_count?: number | null
|
|
language?: string | null
|
|
/** `light` or `dark` or `system` */
|
|
theme_mode?: string | null
|
|
tray_event?: string | null
|
|
env_type?: string | null
|
|
start_page?: string | null
|
|
startup_script?: string | null
|
|
traffic_graph?: boolean | null
|
|
/** show memory info (only for Clash Meta) */
|
|
enable_memory_usage?: boolean | null
|
|
enable_group_icon?: boolean | null
|
|
pause_render_traffic_stats_on_blur?: boolean | null
|
|
common_tray_icon?: boolean | null
|
|
menu_icon?: string | null
|
|
menu_order?: string[] | null
|
|
proxy_group_tools_position?: string | null
|
|
notice_position?: string | null
|
|
collapse_navbar?: boolean | null
|
|
sysproxy_tray_icon?: boolean | null
|
|
tun_tray_icon?: boolean | null
|
|
enable_tun_mode?: boolean | null
|
|
enable_auto_launch?: boolean | null
|
|
enable_silent_start?: boolean | null
|
|
enable_system_proxy?: boolean | null
|
|
enable_proxy_guard?: boolean | null
|
|
enable_bypass_check?: boolean | null
|
|
/** Initial DNS override preference for profiles without a saved setting. */
|
|
enable_dns_settings?: boolean | null
|
|
profile_dns_settings?: { [key in string]: ProfileDnsSettings_Deserialize }
|
|
use_default_bypass?: boolean | null
|
|
system_proxy_bypass?: string | null
|
|
proxy_guard_duration?: number | null
|
|
proxy_auto_config?: boolean | null
|
|
pac_file_content?: string | null
|
|
proxy_host?: string | null
|
|
theme_setting?: IVergeTheme | null
|
|
web_ui_list?: string[] | null
|
|
clash_core?: string | null
|
|
/** format: {func},{key} */
|
|
hotkeys?: string[] | null
|
|
enable_global_hotkey?: boolean | null
|
|
home_cards?: JsonValue | null
|
|
auto_close_connection?: boolean | null
|
|
auto_check_update?: boolean | null
|
|
default_latency_test?: string | null
|
|
default_latency_timeout?: number | null
|
|
enable_auto_delay_detection?: boolean | null
|
|
/** 自动检测当前节点延迟的间隔(分钟) */
|
|
auto_delay_detection_interval_minutes?: number | null
|
|
enable_builtin_enhanced?: boolean | null
|
|
proxy_layout_column?: number | null
|
|
test_list?: IVergeTestItem[] | null
|
|
/** 0: 不清理; 1: 1天;2: 7天; 3: 30天; 4: 90天 */
|
|
auto_log_clean?: number | null
|
|
enable_auto_backup_schedule?: boolean | null
|
|
/** Automatic backup interval in hours */
|
|
auto_backup_interval_hours?: number | null
|
|
auto_backup_on_change?: boolean | null
|
|
verge_mixed_port?: number | null
|
|
verge_socks_port?: number | null
|
|
verge_socks_enabled?: boolean | null
|
|
verge_port?: number | null
|
|
verge_http_enabled?: boolean | null
|
|
webdav_url?: string | null
|
|
webdav_username?: string | null
|
|
webdav_password?: string | null
|
|
tray_proxy_groups_display_mode?: string | null
|
|
tray_inline_outbound_modes?: boolean | null
|
|
enable_auto_light_weight_mode?: boolean | null
|
|
/** 自动进入轻量模式的延迟(分钟) */
|
|
auto_light_weight_minutes?: number | null
|
|
enable_hover_jump_navigator?: boolean | null
|
|
/** 代理页面自动滚动延迟(毫秒) */
|
|
hover_jump_navigator_delay?: number | null
|
|
enable_external_controller?: boolean | null
|
|
tray_icon?: string | null
|
|
verge_redir_port?: number | null
|
|
verge_redir_enabled?: boolean | null
|
|
verge_tproxy_port?: number | null
|
|
verge_tproxy_enabled?: boolean | null
|
|
enable_tray_speed?: boolean | null
|
|
}
|
|
|
|
/** ### `verge.yaml` schema */
|
|
export type IVerge_Serialize = {
|
|
/** silent | error | warn | info | debug | trace */
|
|
app_log_level: string | null
|
|
/** Maximum app log size in KiB. */
|
|
app_log_max_size: number | null
|
|
app_log_max_count: number | null
|
|
language: string | null
|
|
/** `light` or `dark` or `system` */
|
|
theme_mode: string | null
|
|
tray_event: string | null
|
|
env_type: string | null
|
|
start_page: string | null
|
|
startup_script: string | null
|
|
traffic_graph: boolean | null
|
|
/** show memory info (only for Clash Meta) */
|
|
enable_memory_usage: boolean | null
|
|
enable_group_icon?: boolean | null
|
|
pause_render_traffic_stats_on_blur: boolean | null
|
|
common_tray_icon?: boolean | null
|
|
menu_icon?: string | null
|
|
menu_order?: string[] | null
|
|
proxy_group_tools_position?: string | null
|
|
notice_position?: string | null
|
|
collapse_navbar: boolean | null
|
|
sysproxy_tray_icon: boolean | null
|
|
tun_tray_icon: boolean | null
|
|
enable_tun_mode: boolean | null
|
|
enable_auto_launch: boolean | null
|
|
enable_silent_start: boolean | null
|
|
enable_system_proxy: boolean | null
|
|
enable_proxy_guard: boolean | null
|
|
enable_bypass_check: boolean | null
|
|
/** Initial DNS override preference for profiles without a saved setting. */
|
|
enable_dns_settings: boolean | null
|
|
profile_dns_settings?: { [key in string]: ProfileDnsSettings_Serialize }
|
|
use_default_bypass: boolean | null
|
|
system_proxy_bypass: string | null
|
|
proxy_guard_duration: number | null
|
|
proxy_auto_config: boolean | null
|
|
pac_file_content: string | null
|
|
proxy_host: string | null
|
|
theme_setting: IVergeTheme | null
|
|
web_ui_list: string[] | null
|
|
clash_core?: string | null
|
|
/** format: {func},{key} */
|
|
hotkeys?: string[] | null
|
|
enable_global_hotkey: boolean | null
|
|
home_cards: JsonValue | null
|
|
auto_close_connection: boolean | null
|
|
auto_check_update: boolean | null
|
|
default_latency_test: string | null
|
|
default_latency_timeout: number | null
|
|
enable_auto_delay_detection: boolean | null
|
|
/** 自动检测当前节点延迟的间隔(分钟) */
|
|
auto_delay_detection_interval_minutes: number | null
|
|
enable_builtin_enhanced: boolean | null
|
|
proxy_layout_column: number | null
|
|
test_list: IVergeTestItem[] | null
|
|
/** 0: 不清理; 1: 1天;2: 7天; 3: 30天; 4: 90天 */
|
|
auto_log_clean: number | null
|
|
enable_auto_backup_schedule: boolean | null
|
|
/** Automatic backup interval in hours */
|
|
auto_backup_interval_hours: number | null
|
|
auto_backup_on_change: boolean | null
|
|
verge_mixed_port: number | null
|
|
verge_socks_port: number | null
|
|
verge_socks_enabled: boolean | null
|
|
verge_port: number | null
|
|
verge_http_enabled: boolean | null
|
|
webdav_url?: string | null
|
|
webdav_username?: string | null
|
|
webdav_password?: string | null
|
|
tray_proxy_groups_display_mode?: string | null
|
|
tray_inline_outbound_modes: boolean | null
|
|
enable_auto_light_weight_mode: boolean | null
|
|
/** 自动进入轻量模式的延迟(分钟) */
|
|
auto_light_weight_minutes: number | null
|
|
enable_hover_jump_navigator: boolean | null
|
|
/** 代理页面自动滚动延迟(毫秒) */
|
|
hover_jump_navigator_delay: number | null
|
|
enable_external_controller: boolean | null
|
|
tray_icon?: string | null
|
|
verge_redir_port?: number | null
|
|
verge_redir_enabled?: boolean | null
|
|
verge_tproxy_port?: number | null
|
|
verge_tproxy_enabled?: boolean | null
|
|
enable_tray_speed?: boolean | null
|
|
}
|
|
|
|
export type IconInfo = {
|
|
name: string
|
|
previous_t: string
|
|
current_t: string
|
|
}
|
|
|
|
export type InterfaceAddress =
|
|
| ({ V4: IpAddress } & { V6?: never })
|
|
| ({ V6: IpAddress } & { V4?: never })
|
|
|
|
export type IpAddress = {
|
|
ip: string
|
|
}
|
|
|
|
export type JsonValue =
|
|
| null
|
|
| boolean
|
|
| number
|
|
| null
|
|
| string
|
|
| JsonValue[]
|
|
| { [key in string]: JsonValue }
|
|
|
|
export type ListenerProbe = {
|
|
address: string
|
|
transports: ListenerTransport[]
|
|
}
|
|
|
|
export type ListenerProbeOutcome =
|
|
| { status: 'available' }
|
|
| { status: 'conflict'; port: number; transport: ListenerTransport }
|
|
| { status: 'invalid'; message: string }
|
|
| { status: 'indeterminate'; message: string }
|
|
|
|
export type ListenerTransport = 'tcp' | 'udp'
|
|
|
|
export type LocalBackupFile = {
|
|
filename: string
|
|
path: string
|
|
last_modified: string
|
|
content_length: number
|
|
}
|
|
|
|
export type NetworkInterfaceView = {
|
|
name: string
|
|
addr: InterfaceAddress[]
|
|
mac_addr: string | null
|
|
}
|
|
|
|
export type NoticeStatus =
|
|
| 'info'
|
|
| 'import_sub_url::ok'
|
|
| 'import_sub_url::error'
|
|
| 'set_config::error'
|
|
| 'core_start::error'
|
|
| 'service_core::repair_required'
|
|
| 'service_core::app_data_not_owned'
|
|
| 'service_core::sidecar_fallback'
|
|
| 'dns_override::auto_disabled'
|
|
| 'enhance::discarded_keys'
|
|
| 'tun_mode::auto_disabled'
|
|
| 'tun_mode::auto_disable_failed'
|
|
| 'app_restart::core_stop_failed'
|
|
| 'app_quit::core_stop_failed'
|
|
| 'update_with_clash_proxy'
|
|
| 'update_failed_even_with_clash'
|
|
| 'reactivate_profiles::error'
|
|
| 'update_failed'
|
|
| 'config_validate::boot_error'
|
|
| 'config_validate::error'
|
|
| 'config_validate::process_terminated'
|
|
| 'config_validate::script_error'
|
|
| 'config_validate::script_syntax_error'
|
|
| 'config_validate::script_missing_main'
|
|
| 'config_validate::file_not_found'
|
|
| 'config_validate::yaml_syntax_error'
|
|
| 'config_validate::yaml_read_error'
|
|
| 'config_validate::yaml_mapping_error'
|
|
| 'config_validate::merge_syntax_error'
|
|
| 'config_validate::merge_mapping_error'
|
|
| 'config_core::change_success'
|
|
| 'config_core::change_error'
|
|
| 'mixed_port::fallback'
|
|
| 'mixed_port::fallback_error'
|
|
|
|
export type PendingAction =
|
|
| 'install'
|
|
| 'uninstall'
|
|
| 'reinstall'
|
|
| 'forceReinstall'
|
|
|
|
/** Latest unresolved failure for one stable code. */
|
|
export type PendingFailure = {
|
|
/** Stable code used as the table key. */
|
|
code: string
|
|
/** Full diagnostic context chain. */
|
|
detail: string
|
|
operation: FailedOperation
|
|
/** Monotonic identity for repeated failures under the same code. */
|
|
sequence: number
|
|
}
|
|
|
|
export type PlatformVergeFields = {
|
|
tray_icon?: string | null
|
|
verge_redir_port?: number | null
|
|
verge_redir_enabled?: boolean | null
|
|
verge_tproxy_port?: number | null
|
|
verge_tproxy_enabled?: boolean | null
|
|
enable_tray_speed?: boolean | null
|
|
}
|
|
|
|
export type PrfExtra = {
|
|
upload: number
|
|
download: number
|
|
total: number
|
|
expire: number
|
|
}
|
|
|
|
export type PrfItem = PrfItem_Serialize | PrfItem_Deserialize
|
|
|
|
export type PrfItem_Deserialize = {
|
|
uid?: string | null
|
|
/** enum value: remote | local | script | merge */
|
|
type?: string | null
|
|
name?: string | null
|
|
file?: string | null
|
|
desc?: string | null
|
|
url?: string | null
|
|
selected?: PrfSelected[] | null
|
|
extra?: PrfExtra | null
|
|
updated?: number | null
|
|
option?: PrfOption_Deserialize | null
|
|
home?: string | null
|
|
}
|
|
|
|
export type PrfItem_Serialize = {
|
|
uid: string | null
|
|
/** enum value: remote | local | script | merge */
|
|
type: string | null
|
|
name: string | null
|
|
file: string | null
|
|
desc?: string | null
|
|
url?: string | null
|
|
selected?: PrfSelected[] | null
|
|
extra?: PrfExtra | null
|
|
updated: number | null
|
|
option?: PrfOption_Serialize | null
|
|
home?: string | null
|
|
}
|
|
|
|
export type PrfOption = PrfOption_Serialize | PrfOption_Deserialize
|
|
|
|
export type PrfOption_Deserialize = {
|
|
user_agent?: string | null
|
|
with_proxy?: boolean | null
|
|
self_proxy?: boolean | null
|
|
update_interval?: number | null
|
|
/**
|
|
* HTTP request timeout in seconds
|
|
* default is 60 seconds
|
|
*/
|
|
timeout_seconds?: number | null
|
|
/** default is `false` */
|
|
danger_accept_invalid_certs?: boolean | null
|
|
allow_auto_update?: boolean | null
|
|
merge?: string | null
|
|
script?: string | null
|
|
rules?: string | null
|
|
proxies?: string | null
|
|
groups?: string | null
|
|
}
|
|
|
|
export type PrfOption_Serialize = {
|
|
user_agent?: string | null
|
|
with_proxy?: boolean | null
|
|
self_proxy?: boolean | null
|
|
update_interval?: number | null
|
|
/**
|
|
* HTTP request timeout in seconds
|
|
* default is 60 seconds
|
|
*/
|
|
timeout_seconds?: number | null
|
|
/** default is `false` */
|
|
danger_accept_invalid_certs?: boolean | null
|
|
allow_auto_update?: boolean | null
|
|
merge: string | null
|
|
script: string | null
|
|
rules: string | null
|
|
proxies: string | null
|
|
groups: string | null
|
|
}
|
|
|
|
export type PrfSelected = {
|
|
name?: string | null
|
|
now?: string | null
|
|
}
|
|
|
|
export type ProfileCreate = ProfileCreate_Serialize | ProfileCreate_Deserialize
|
|
|
|
export type ProfileCreate_Deserialize = {
|
|
type?: string | null
|
|
name?: string | null
|
|
desc?: string | null
|
|
url?: string | null
|
|
option?: PrfOption_Deserialize | null
|
|
}
|
|
|
|
export type ProfileCreate_Serialize = {
|
|
type: string | null
|
|
name: string | null
|
|
desc: string | null
|
|
url: string | null
|
|
option: PrfOption_Serialize | null
|
|
}
|
|
|
|
export type ProfileDnsSettings =
|
|
| ProfileDnsSettings_Serialize
|
|
| ProfileDnsSettings_Deserialize
|
|
|
|
export type ProfileDnsSettings_Deserialize = {
|
|
enabled: boolean
|
|
confirmation?: string | null
|
|
}
|
|
|
|
export type ProfileDnsSettings_Serialize = {
|
|
enabled: boolean
|
|
confirmation?: string | null
|
|
}
|
|
|
|
export type ProfilePatch = ProfilePatch_Serialize | ProfilePatch_Deserialize
|
|
|
|
export type ProfilePatch_Deserialize = {
|
|
type?: string | null
|
|
name?: string | null
|
|
desc?: string | null
|
|
file?: string | null
|
|
url?: string | null
|
|
selected?: PrfSelected[] | null
|
|
extra?: PrfExtra | null
|
|
updated?: number | null
|
|
option?: PrfOption_Deserialize | null
|
|
}
|
|
|
|
export type ProfilePatch_Serialize = {
|
|
type: string | null
|
|
name: string | null
|
|
desc: string | null
|
|
file: string | null
|
|
url: string | null
|
|
selected: PrfSelected[] | null
|
|
extra: PrfExtra | null
|
|
updated: number | null
|
|
option: PrfOption_Serialize | null
|
|
}
|
|
|
|
export type ProfileSelection = {
|
|
current?: string | null
|
|
}
|
|
|
|
export type ProfileUpdatePayload = {
|
|
uid: string
|
|
}
|
|
|
|
export type ProxyCapabilities = {
|
|
udp: boolean
|
|
xudp: boolean
|
|
tfo: boolean
|
|
mptcp: boolean
|
|
smux: boolean
|
|
}
|
|
|
|
export type ProxyGroupView =
|
|
| ProxyGroupView_Serialize
|
|
| ProxyGroupView_Deserialize
|
|
|
|
export type ProxyGroupView_Deserialize = {
|
|
name: string
|
|
type: string
|
|
now: string | null
|
|
fixed: string | null
|
|
hidden: boolean | null
|
|
icon: string | null
|
|
testUrl: string | null
|
|
history: DelayHistory[]
|
|
members: ProxyMemberRef[]
|
|
} & ProxyCapabilities
|
|
|
|
export type ProxyGroupView_Serialize = {
|
|
name: string
|
|
type: string
|
|
now?: string | null
|
|
fixed?: string | null
|
|
hidden?: boolean | null
|
|
icon?: string | null
|
|
testUrl?: string | null
|
|
history: DelayHistory[]
|
|
members: ProxyMemberRef[]
|
|
} & ProxyCapabilities
|
|
|
|
export type ProxyMemberRef =
|
|
| { kind: 'group'; name: string }
|
|
| { kind: 'node'; name: string; recordId: string }
|
|
| { kind: 'unresolved'; name: string; reason: ProxyMemberUnresolvedReason }
|
|
|
|
export type ProxyMemberUnresolvedReason =
|
|
| 'missing'
|
|
| 'ambiguous'
|
|
| 'provider-unavailable'
|
|
|
|
export type ProxyNodeSource =
|
|
| { kind: 'core'; proxyName: string }
|
|
| { kind: 'provider'; providerName: string; proxyName: string }
|
|
|
|
export type ProxyNodeView = ProxyNodeView_Serialize | ProxyNodeView_Deserialize
|
|
|
|
export type ProxyNodeView_Deserialize = {
|
|
recordId: string
|
|
name: string
|
|
type: string
|
|
history: DelayHistory[]
|
|
id: string | null
|
|
hidden: boolean | null
|
|
icon: string | null
|
|
testUrl: string | null
|
|
source: ProxyNodeSource
|
|
} & ProxyCapabilities
|
|
|
|
export type ProxyNodeView_Serialize = {
|
|
recordId: string
|
|
name: string
|
|
type: string
|
|
history: DelayHistory[]
|
|
id?: string | null
|
|
hidden?: boolean | null
|
|
icon?: string | null
|
|
testUrl?: string | null
|
|
source: ProxyNodeSource
|
|
} & ProxyCapabilities
|
|
|
|
export type ProxyPortSettings = {
|
|
mixedPort: number
|
|
socks: ToggleableProxyPort
|
|
http: ToggleableProxyPort
|
|
redir: ToggleableProxyPort
|
|
tproxy: ToggleableProxyPort
|
|
}
|
|
|
|
export type ProxyProviderVehicleType = 'HTTP' | 'File' | 'Inline'
|
|
|
|
export type ProxyProviderView =
|
|
| ProxyProviderView_Serialize
|
|
| ProxyProviderView_Deserialize
|
|
|
|
export type ProxyProviderView_Deserialize = {
|
|
name: string
|
|
vehicleType: ProxyProviderVehicleType
|
|
updatedAt: string | null
|
|
subscriptionInfo: ProxySubscriptionInfo | null
|
|
proxyRecordIds: string[]
|
|
}
|
|
|
|
export type ProxyProviderView_Serialize = {
|
|
name: string
|
|
vehicleType: ProxyProviderVehicleType
|
|
updatedAt?: string | null
|
|
subscriptionInfo?: ProxySubscriptionInfo | null
|
|
proxyRecordIds: string[]
|
|
}
|
|
|
|
export type ProxySubscriptionInfo = {
|
|
upload: number
|
|
download: number
|
|
total: number
|
|
expire: number
|
|
}
|
|
|
|
export type ProxyViewOrderSource = 'runtime' | 'fallback'
|
|
|
|
export type ProxyViewProviderState = 'ready' | 'unavailable'
|
|
|
|
export type ProxyViewV1 = ProxyViewV1_Serialize | ProxyViewV1_Deserialize
|
|
|
|
export type ProxyViewV1_Deserialize = {
|
|
schemaVersion: number
|
|
orderSource: ProxyViewOrderSource
|
|
providerState: ProxyViewProviderState
|
|
global: ProxyGroupView_Deserialize | null
|
|
direct: string | null
|
|
groups: ProxyGroupView_Deserialize[]
|
|
records: { [key in string]: ProxyNodeView_Deserialize }
|
|
standalone: string[]
|
|
providers: ProxyProviderView_Deserialize[]
|
|
}
|
|
|
|
export type ProxyViewV1_Serialize = {
|
|
schemaVersion: number
|
|
orderSource: ProxyViewOrderSource
|
|
providerState: ProxyViewProviderState
|
|
global: ProxyGroupView_Serialize | null
|
|
direct: string | null
|
|
groups: ProxyGroupView_Serialize[]
|
|
records: { [key in string]: ProxyNodeView_Serialize }
|
|
standalone: string[]
|
|
providers: ProxyProviderView_Serialize[]
|
|
}
|
|
|
|
export type RunStateView = {
|
|
mode: RunningMode
|
|
service: ServiceHealthKind
|
|
serviceUnavailableReason: string | null
|
|
pendingAction: PendingAction | null
|
|
sidecarAllowed: boolean
|
|
isAdmin: boolean
|
|
opInFlight: boolean
|
|
serviceUsable: boolean
|
|
tunCapable: boolean
|
|
serviceNeedsAttention: boolean
|
|
}
|
|
|
|
export type RunningMode = 'Service' | 'Sidecar' | 'NotRunning'
|
|
|
|
export type RuntimeLogs = { [key in string]: [string, string][] }
|
|
|
|
export type SaveProxyPortsOutcome =
|
|
| { status: 'saved' }
|
|
| { status: 'conflict'; port: number; transport: ListenerTransport }
|
|
|
|
/** Why the Service was unavailable when the core fell back to Sidecar. */
|
|
export type ServiceFallbackNotice =
|
|
| { kind: 'unavailable' }
|
|
| { kind: 'coreRejected'; reason: string }
|
|
| { kind: 'notAutoStarted' }
|
|
|
|
export type ServiceHealthKind =
|
|
| 'unknown'
|
|
| 'ready'
|
|
| 'notInstalled'
|
|
| 'versionMismatch'
|
|
| 'unavailable'
|
|
|
|
export type ServiceInstallOutcome =
|
|
| { status: 'installed' }
|
|
| { status: 'sidecar'; reason: string }
|
|
|
|
/** A removal has a revision too, so a delayed read cannot restore a resolved failure. */
|
|
export type SidecarFailureSnapshot = {
|
|
revision: number
|
|
detail: string | null
|
|
}
|
|
|
|
export type SystemInfo = {
|
|
system_name: string
|
|
system_version: string
|
|
}
|
|
|
|
export type SystemProxy = {
|
|
enable: boolean
|
|
server: string
|
|
bypass: string
|
|
}
|
|
|
|
export type ToggleableProxyPort = {
|
|
enabled: boolean
|
|
port: number
|
|
}
|
|
|
|
export type UnlockItem = {
|
|
name: string
|
|
status: string
|
|
region: string | null
|
|
check_time: string | null
|
|
}
|
|
|
|
export type ValidationErrorKind =
|
|
| 'fileMissing'
|
|
| 'fileRead'
|
|
| 'yamlSyntax'
|
|
| 'yamlMapping'
|
|
| 'scriptSyntax'
|
|
| 'scriptMissingMain'
|
|
| 'coreRejected'
|
|
| 'processTerminated'
|
|
| 'timeout'
|
|
|
|
export type ValidationOutcome =
|
|
| { status: 'valid' }
|
|
| { status: 'invalid'; kind: ValidationErrorKind; message: string }
|
|
| { status: 'skipped'; reason: ValidationSkipReason }
|
|
| { status: 'busy' }
|
|
|
|
export type ValidationSkipReason = 'exiting' | 'debounced'
|
|
|
|
export type VergeEventPayloads = {
|
|
'verge://refresh-clash-config': null
|
|
'verge://refresh-verge-config': null
|
|
'verge://refresh-profiles': null
|
|
'verge://refresh-proxy-config': null
|
|
'verge://notice-message': [NoticeStatus, string]
|
|
'profile-changed': string
|
|
'verge://timer-updated': string
|
|
'profile-update-started': ProfileUpdatePayload
|
|
'profile-update-completed': ProfileUpdatePayload
|
|
'verge://run-state-changed': RunStateView
|
|
'verge://pending-failures-changed': null
|
|
}
|
|
|
|
export type WebDavFile = {
|
|
href: string
|
|
last_modified: string
|
|
}
|
|
|
|
export type YamlMapping = { [key in string]: JsonValue }
|
|
|
|
export type YamlValue = JsonValue
|