mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-04-13 05:20:28 +08:00
1088 lines
23 KiB
TypeScript
1088 lines
23 KiB
TypeScript
type Platform =
|
|
| 'aix'
|
|
| 'android'
|
|
| 'darwin'
|
|
| 'freebsd'
|
|
| 'haiku'
|
|
| 'linux'
|
|
| 'openbsd'
|
|
| 'sunos'
|
|
| 'win32'
|
|
| 'cygwin'
|
|
| 'netbsd'
|
|
|
|
/**
|
|
* defines in `vite.config.ts`
|
|
*/
|
|
declare const OS_PLATFORM: Platform
|
|
|
|
/**
|
|
* Some interface for clash api
|
|
*/
|
|
interface IConfigData {
|
|
port: number
|
|
mode: string
|
|
ipv6: boolean
|
|
'socket-port': number
|
|
'allow-lan': boolean
|
|
'log-level': string
|
|
'mixed-port': number
|
|
'redir-port': number
|
|
'socks-port': number
|
|
'tproxy-port': number
|
|
'external-controller': string
|
|
'external-controller-cors': {
|
|
'allow-private-network': boolean
|
|
'allow-origins': string[]
|
|
}
|
|
secret: string
|
|
'unified-delay': boolean
|
|
tun: {
|
|
stack: string
|
|
device: string
|
|
'auto-route': boolean
|
|
'auto-redirect'?: boolean
|
|
'auto-detect-interface': boolean
|
|
'dns-hijack': string[]
|
|
'route-exclude-address'?: string[]
|
|
'strict-route': boolean
|
|
mtu: number
|
|
}
|
|
dns?: {
|
|
enable?: boolean
|
|
listen?: string
|
|
'enhanced-mode'?: 'fake-ip' | 'redir-host'
|
|
'fake-ip-range'?: string
|
|
'fake-ip-filter'?: string[]
|
|
'fake-ip-filter-mode'?: 'blacklist' | 'whitelist'
|
|
'prefer-h3'?: boolean
|
|
'respect-rules'?: boolean
|
|
nameserver?: string[]
|
|
fallback?: string[]
|
|
'default-nameserver'?: string[]
|
|
'proxy-server-nameserver'?: string[]
|
|
'direct-nameserver'?: string[]
|
|
'direct-nameserver-follow-policy'?: boolean
|
|
'nameserver-policy'?: Record<string, any>
|
|
'use-hosts'?: boolean
|
|
'use-system-hosts'?: boolean
|
|
'fallback-filter'?: {
|
|
geoip?: boolean
|
|
'geoip-code'?: string
|
|
ipcidr?: string[]
|
|
domain?: string[]
|
|
}
|
|
}
|
|
tunnels?: {
|
|
network: string[]
|
|
address: string
|
|
target: string
|
|
proxy?: string
|
|
}[]
|
|
'proxy-groups'?: IProxyGroupItem[]
|
|
}
|
|
|
|
interface IProxyItem {
|
|
name: string
|
|
type: string
|
|
udp: boolean
|
|
xudp: boolean
|
|
tfo: boolean
|
|
mptcp: boolean
|
|
smux: boolean
|
|
history: {
|
|
time: string
|
|
delay: number
|
|
}[]
|
|
testUrl?: string
|
|
all?: string[]
|
|
now?: string
|
|
hidden?: boolean
|
|
icon?: string
|
|
provider?: string // 记录是否来自provider
|
|
fixed?: string // 记录固定(优先)的节点
|
|
}
|
|
|
|
type IProxyGroupItem = Omit<IProxyItem, 'all'> & {
|
|
all: IProxyItem[]
|
|
}
|
|
|
|
interface IProxyProviderItem {
|
|
name: string
|
|
type: string
|
|
proxies: IProxyItem[]
|
|
updatedAt: string
|
|
vehicleType: string
|
|
subscriptionInfo?: {
|
|
Upload: number
|
|
Download: number
|
|
Total: number
|
|
Expire: number
|
|
}
|
|
}
|
|
|
|
interface IRuleProviderItem {
|
|
name: string
|
|
behavior: string
|
|
format: string
|
|
ruleCount: number
|
|
type: string
|
|
updatedAt: string
|
|
vehicleType: string
|
|
}
|
|
|
|
interface ITrafficItem {
|
|
up: number
|
|
down: number
|
|
up_rate?: number
|
|
down_rate?: number
|
|
last_updated?: number
|
|
}
|
|
|
|
interface IFormattedTrafficData {
|
|
up_rate_formatted: string
|
|
down_rate_formatted: string
|
|
total_up_formatted: string
|
|
total_down_formatted: string
|
|
is_fresh: boolean
|
|
}
|
|
|
|
interface IFormattedMemoryData {
|
|
inuse_formatted: string
|
|
oslimit_formatted: string
|
|
usage_percent: number
|
|
is_fresh: boolean
|
|
}
|
|
|
|
// 增强的类型安全接口定义,确保所有字段必需
|
|
interface ISystemMonitorOverview {
|
|
traffic: {
|
|
raw: {
|
|
up: number
|
|
down: number
|
|
up_rate: number
|
|
down_rate: number
|
|
}
|
|
formatted: {
|
|
up_rate: string
|
|
down_rate: string
|
|
total_up: string
|
|
total_down: string
|
|
}
|
|
is_fresh: boolean
|
|
}
|
|
memory: {
|
|
raw: {
|
|
inuse: number
|
|
oslimit: number
|
|
usage_percent: number
|
|
}
|
|
formatted: {
|
|
inuse: string
|
|
oslimit: string
|
|
usage_percent: number
|
|
}
|
|
is_fresh: boolean
|
|
}
|
|
overall_status: 'active' | 'inactive' | 'error' | 'unknown' | 'healthy'
|
|
}
|
|
|
|
// 类型安全的数据验证器
|
|
interface ISystemMonitorOverviewValidator {
|
|
validate(data: any): data is ISystemMonitorOverview
|
|
sanitize(data: any): ISystemMonitorOverview
|
|
}
|
|
|
|
interface ILogItem {
|
|
type: string
|
|
time?: string
|
|
payload: string
|
|
}
|
|
|
|
type LogLevel = import('tauri-plugin-mihomo-api').LogLevel
|
|
type LogFilter = 'all' | 'debug' | 'info' | 'warn' | 'err'
|
|
type LogOrder = 'asc' | 'desc'
|
|
|
|
interface IClashLog {
|
|
enable: boolean
|
|
logLevel: LogLevel
|
|
logFilter: LogFilter
|
|
logOrder: LogOrder
|
|
}
|
|
|
|
interface IConnectionsItem {
|
|
id: string
|
|
metadata: {
|
|
network: string
|
|
type: string
|
|
host: string
|
|
sourceIP: string
|
|
sourcePort: string
|
|
destinationPort: string
|
|
destinationIP?: string
|
|
remoteDestination?: string
|
|
process?: string
|
|
processPath?: string
|
|
}
|
|
upload: number
|
|
download: number
|
|
start: string
|
|
chains: string[]
|
|
rule: string
|
|
rulePayload: string
|
|
curUpload?: number // upload speed, calculate at runtime
|
|
curDownload?: number // download speed, calculate at runtime
|
|
}
|
|
|
|
interface IConnections {
|
|
downloadTotal: number
|
|
uploadTotal: number
|
|
connections: IConnectionsItem[]
|
|
}
|
|
|
|
interface IConnectionSetting {
|
|
layout: 'table' | 'list'
|
|
}
|
|
|
|
/**
|
|
* Some interface for command
|
|
*/
|
|
|
|
interface IClashInfo {
|
|
// status: string;
|
|
mixed_port?: number // clash mixed port
|
|
socks_port?: number // clash socks port
|
|
redir_port?: number // clash redir port
|
|
tproxy_port?: number // clash tproxy port
|
|
port?: number // clash http port
|
|
server?: string // external-controller
|
|
secret?: string
|
|
}
|
|
|
|
interface IProfileItem {
|
|
uid: string
|
|
type?: 'local' | 'remote' | 'merge' | 'script'
|
|
name?: string
|
|
desc?: string
|
|
file?: string
|
|
url?: string
|
|
updated?: number
|
|
selected?: {
|
|
name?: string
|
|
now?: string
|
|
}[]
|
|
extra?: {
|
|
upload: number
|
|
download: number
|
|
total: number
|
|
expire: number
|
|
}
|
|
option?: IProfileOption
|
|
home?: string
|
|
}
|
|
|
|
interface IProfileOption {
|
|
user_agent?: string
|
|
with_proxy?: boolean
|
|
self_proxy?: boolean
|
|
update_interval?: number
|
|
timeout_seconds?: number
|
|
danger_accept_invalid_certs?: boolean
|
|
allow_auto_update?: boolean
|
|
merge?: string
|
|
script?: string
|
|
rules?: string
|
|
proxies?: string
|
|
groups?: string
|
|
}
|
|
|
|
interface IProfilesConfig {
|
|
current?: string
|
|
items?: IProfileItem[]
|
|
}
|
|
|
|
interface IVergeTestItem {
|
|
uid: string
|
|
name?: string
|
|
icon?: string
|
|
url: string
|
|
}
|
|
interface IAddress {
|
|
V4?: {
|
|
ip: string
|
|
broadcast?: string
|
|
netmask?: string
|
|
}
|
|
V6?: {
|
|
ip: string
|
|
broadcast?: string
|
|
netmask?: string
|
|
}
|
|
}
|
|
interface INetworkInterface {
|
|
name: string
|
|
addr: IAddress[]
|
|
mac_addr?: string
|
|
index: number
|
|
}
|
|
|
|
interface ISeqProfileConfig {
|
|
prepend: []
|
|
append: []
|
|
delete: []
|
|
}
|
|
|
|
interface IProxyGroupConfig {
|
|
name: string
|
|
type: 'select' | 'url-test' | 'fallback' | 'load-balance' | 'relay'
|
|
proxies?: string[]
|
|
use?: string[]
|
|
url?: string
|
|
interval?: number
|
|
lazy?: boolean
|
|
timeout?: number
|
|
'max-failed-times'?: number
|
|
'disable-udp'?: boolean
|
|
'interface-name': string
|
|
'routing-mark'?: number
|
|
'include-all'?: boolean
|
|
'include-all-proxies'?: boolean
|
|
'include-all-providers'?: boolean
|
|
filter?: string
|
|
'exclude-filter'?: string
|
|
'exclude-type'?: string
|
|
'expected-status'?: string
|
|
hidden?: boolean
|
|
icon?: string
|
|
}
|
|
|
|
interface WsOptions {
|
|
path?: string
|
|
headers?: {
|
|
[key: string]: string
|
|
}
|
|
'max-early-data'?: number
|
|
'early-data-header-name'?: string
|
|
'v2ray-http-upgrade'?: boolean
|
|
'v2ray-http-upgrade-fast-open'?: boolean
|
|
}
|
|
|
|
interface HttpOptions {
|
|
method?: string
|
|
path?: string[]
|
|
headers?: {
|
|
[key: string]: string[]
|
|
}
|
|
}
|
|
|
|
interface H2Options {
|
|
path?: string
|
|
host?: string
|
|
}
|
|
|
|
interface GrpcOptions {
|
|
'grpc-service-name'?: string
|
|
}
|
|
|
|
interface RealityOptions {
|
|
'public-key'?: string
|
|
'short-id'?: string
|
|
}
|
|
type ClientFingerprint =
|
|
| 'chrome'
|
|
| 'firefox'
|
|
| 'safari'
|
|
| 'iOS'
|
|
| 'android'
|
|
| 'edge'
|
|
| '360'
|
|
| 'qq'
|
|
| 'random'
|
|
type NetworkType = 'ws' | 'http' | 'h2' | 'grpc' | 'tcp'
|
|
type CipherType =
|
|
| 'none'
|
|
| 'auto'
|
|
| 'dummy'
|
|
| 'aes-128-gcm'
|
|
| 'aes-192-gcm'
|
|
| 'aes-256-gcm'
|
|
| 'lea-128-gcm'
|
|
| 'lea-192-gcm'
|
|
| 'lea-256-gcm'
|
|
| 'aes-128-gcm-siv'
|
|
| 'aes-256-gcm-siv'
|
|
| '2022-blake3-aes-128-gcm'
|
|
| '2022-blake3-aes-256-gcm'
|
|
| 'aes-128-cfb'
|
|
| 'aes-192-cfb'
|
|
| 'aes-256-cfb'
|
|
| 'aes-128-ctr'
|
|
| 'aes-192-ctr'
|
|
| 'aes-256-ctr'
|
|
| 'chacha20'
|
|
| 'chacha20-ietf'
|
|
| 'chacha20-ietf-poly1305'
|
|
| '2022-blake3-chacha20-poly1305'
|
|
| 'rabbit128-poly1305'
|
|
| 'xchacha20-ietf-poly1305'
|
|
| 'xchacha20'
|
|
| 'aegis-128l'
|
|
| 'aegis-256'
|
|
| 'aez-384'
|
|
| 'deoxys-ii-256-128'
|
|
| 'rc4-md5'
|
|
type MieruTransport = 'TCP' | 'UDP'
|
|
type MieruMultiplexing =
|
|
| 'MULTIPLEXING_OFF'
|
|
| 'MULTIPLEXING_LOW'
|
|
| 'MULTIPLEXING_MIDDLE'
|
|
| 'MULTIPLEXING_HIGH'
|
|
type SudokuAeadMethod = 'chacha20-poly1305' | 'aes-128-gcm' | 'none'
|
|
type SudokuTableType = 'prefer_ascii' | 'prefer_entropy'
|
|
type SudokuHttpMaskMode = 'legacy' | 'stream' | 'poll' | 'auto'
|
|
type SudokuHttpMaskStrategy = 'random' | 'post' | 'websocket'
|
|
// base
|
|
interface IProxyBaseConfig {
|
|
tfo?: boolean
|
|
mptcp?: boolean
|
|
'interface-name'?: string
|
|
'routing-mark'?: number
|
|
'ip-version'?: 'dual' | 'ipv4' | 'ipv6' | 'ipv4-prefer' | 'ipv6-prefer'
|
|
'dialer-proxy'?: string
|
|
}
|
|
// direct
|
|
interface IProxyDirectConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'direct'
|
|
}
|
|
// dns
|
|
interface IProxyDnsConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'dns'
|
|
}
|
|
// http
|
|
interface IProxyHttpConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'http'
|
|
server?: string
|
|
port?: number
|
|
username?: string
|
|
password?: string
|
|
tls?: boolean
|
|
sni?: string
|
|
'skip-cert-verify'?: boolean
|
|
fingerprint?: string
|
|
headers?: {
|
|
[key: string]: string
|
|
}
|
|
}
|
|
// socks5
|
|
interface IProxySocks5Config extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'socks5'
|
|
server?: string
|
|
port?: number
|
|
username?: string
|
|
password?: string
|
|
tls?: boolean
|
|
udp?: boolean
|
|
'skip-cert-verify'?: boolean
|
|
fingerprint?: string
|
|
}
|
|
// ssh
|
|
interface IProxySshConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'ssh'
|
|
server?: string
|
|
port?: number
|
|
username?: string
|
|
password?: string
|
|
'private-key'?: string
|
|
'private-key-passphrase'?: string
|
|
'host-key'?: string
|
|
'host-key-algorithms'?: string
|
|
}
|
|
// trojan
|
|
interface IProxyTrojanConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'trojan'
|
|
server?: string
|
|
port?: number
|
|
password?: string
|
|
alpn?: string[]
|
|
sni?: string
|
|
'skip-cert-verify'?: boolean
|
|
fingerprint?: string
|
|
udp?: boolean
|
|
network?: NetworkType
|
|
'reality-opts'?: RealityOptions
|
|
'grpc-opts'?: GrpcOptions
|
|
'ws-opts'?: WsOptions
|
|
'ss-opts'?: {
|
|
enabled?: boolean
|
|
method?: string
|
|
password?: string
|
|
}
|
|
'client-fingerprint'?: ClientFingerprint
|
|
}
|
|
// anytls
|
|
interface IProxyAnyTLSConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'anytls'
|
|
server?: string
|
|
port?: number
|
|
password?: string
|
|
alpn?: string[]
|
|
sni?: string
|
|
'client-fingerprint'?: ClientFingerprint
|
|
'skip-cert-verify'?: boolean
|
|
fingerprint?: string
|
|
certificate?: string
|
|
'private-key'?: string
|
|
'ech-opts'?: {
|
|
enable?: boolean
|
|
config?: string
|
|
}
|
|
udp?: boolean
|
|
'idle-session-check-interval'?: number
|
|
'idle-session-timeout'?: number
|
|
'min-idle-session'?: number
|
|
}
|
|
// tuic
|
|
interface IProxyTuicConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'tuic'
|
|
server?: string
|
|
port?: number
|
|
token?: string
|
|
uuid?: string
|
|
password?: string
|
|
ip?: string
|
|
'heartbeat-interval'?: number
|
|
alpn?: string[]
|
|
'reduce-rtt'?: boolean
|
|
'request-timeout'?: number
|
|
'udp-relay-mode'?: string
|
|
'congestion-controller'?: string
|
|
'disable-sni'?: boolean
|
|
'max-udp-relay-packet-size'?: number
|
|
'fast-open'?: boolean
|
|
'max-open-streams'?: number
|
|
cwnd?: number
|
|
'skip-cert-verify'?: boolean
|
|
fingerprint?: string
|
|
ca?: string
|
|
'ca-str'?: string
|
|
'recv-window-conn'?: number
|
|
'recv-window'?: number
|
|
'disable-mtu-discovery'?: boolean
|
|
'max-datagram-frame-size'?: number
|
|
sni?: string
|
|
'udp-over-stream'?: boolean
|
|
'udp-over-stream-version'?: number
|
|
}
|
|
// mieru
|
|
interface IProxyMieruConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'mieru'
|
|
server?: string
|
|
port?: number
|
|
'port-range'?: string
|
|
transport?: MieruTransport
|
|
udp?: boolean
|
|
username?: string
|
|
password?: string
|
|
multiplexing?: MieruMultiplexing
|
|
'handshake-mode'?: string
|
|
}
|
|
// masque
|
|
interface IProxyMasqueConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'masque'
|
|
server?: string
|
|
port?: number
|
|
'private-key'?: string
|
|
'public-key'?: string
|
|
ip?: string
|
|
ipv6?: string
|
|
mtu?: number
|
|
udp?: boolean
|
|
'remote-dns-resolve'?: boolean
|
|
dns?: string[]
|
|
}
|
|
// vless
|
|
interface IProxyVlessConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'vless'
|
|
server?: string
|
|
port?: number
|
|
uuid?: string
|
|
flow?: string
|
|
tls?: boolean
|
|
alpn?: string[]
|
|
udp?: boolean
|
|
'packet-addr'?: boolean
|
|
xudp?: boolean
|
|
'packet-encoding'?: string
|
|
network?: NetworkType
|
|
'reality-opts'?: RealityOptions
|
|
'http-opts'?: HttpOptions
|
|
'h2-opts'?: H2Options
|
|
'grpc-opts'?: GrpcOptions
|
|
'ws-opts'?: WsOptions
|
|
'ws-path'?: string
|
|
'ws-headers'?: {
|
|
[key: string]: string
|
|
}
|
|
'skip-cert-verify'?: boolean
|
|
fingerprint?: string
|
|
servername?: string
|
|
'client-fingerprint'?: ClientFingerprint
|
|
smux?: boolean
|
|
}
|
|
// vmess
|
|
interface IProxyVmessConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'vmess'
|
|
server?: string
|
|
port?: number
|
|
uuid?: string
|
|
alterId?: number
|
|
cipher?: CipherType
|
|
udp?: boolean
|
|
network?: NetworkType
|
|
tls?: boolean
|
|
alpn?: string[]
|
|
'skip-cert-verify'?: boolean
|
|
fingerprint?: string
|
|
servername?: string
|
|
'reality-opts'?: RealityOptions
|
|
'http-opts'?: HttpOptions
|
|
'h2-opts'?: H2Options
|
|
'grpc-opts'?: GrpcOptions
|
|
'ws-opts'?: WsOptions
|
|
'packet-addr'?: boolean
|
|
xudp?: boolean
|
|
'packet-encoding'?: string
|
|
'global-padding'?: boolean
|
|
'authenticated-length'?: boolean
|
|
'client-fingerprint'?: ClientFingerprint
|
|
smux?: boolean
|
|
}
|
|
interface WireGuardPeerOptions {
|
|
server?: string
|
|
port?: number
|
|
'public-key'?: string
|
|
'pre-shared-key'?: string
|
|
reserved?: number[]
|
|
'allowed-ips'?: string[]
|
|
}
|
|
// wireguard
|
|
interface IProxyWireguardConfig extends IProxyBaseConfig, WireGuardPeerOptions {
|
|
name: string
|
|
type: 'wireguard'
|
|
ip?: string
|
|
ipv6?: string
|
|
'private-key'?: string
|
|
workers?: number
|
|
mtu?: number
|
|
udp?: boolean
|
|
'persistent-keepalive'?: number
|
|
peers?: WireGuardPeerOptions[]
|
|
'remote-dns-resolve'?: boolean
|
|
dns?: string[]
|
|
'refresh-server-ip-interval'?: number
|
|
}
|
|
// hysteria
|
|
interface IProxyHysteriaConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'hysteria'
|
|
server?: string
|
|
port?: number
|
|
ports?: string
|
|
protocol?: string
|
|
'obfs-protocol'?: string
|
|
up?: string
|
|
'up-speed'?: number
|
|
down?: string
|
|
'down-speed'?: number
|
|
auth?: string
|
|
'auth-str'?: string
|
|
obfs?: string
|
|
sni?: string
|
|
'skip-cert-verify'?: boolean
|
|
fingerprint?: string
|
|
alpn?: string[]
|
|
ca?: string
|
|
'ca-str'?: string
|
|
'recv-window-conn'?: number
|
|
'recv-window'?: number
|
|
'disable-mtu-discovery'?: boolean
|
|
'fast-open'?: boolean
|
|
'hop-interval'?: number
|
|
}
|
|
// hysteria2
|
|
interface IProxyHysteria2Config extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'hysteria2'
|
|
server?: string
|
|
port?: number
|
|
ports?: string
|
|
'hop-interval'?: number
|
|
protocol?: string
|
|
'obfs-protocol'?: string
|
|
up?: string
|
|
down?: string
|
|
password?: string
|
|
obfs?: string
|
|
'obfs-password'?: string
|
|
sni?: string
|
|
'skip-cert-verify'?: boolean
|
|
fingerprint?: string
|
|
alpn?: string[]
|
|
ca?: string
|
|
'ca-str'?: string
|
|
cwnd?: number
|
|
'udp-mtu'?: number
|
|
}
|
|
// shadowsocks
|
|
interface IProxyShadowsocksConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'ss'
|
|
server?: string
|
|
port?: number
|
|
password?: string
|
|
cipher?: CipherType
|
|
udp?: boolean
|
|
plugin?: 'obfs' | 'v2ray-plugin' | 'shadow-tls' | 'restls'
|
|
'plugin-opts'?: {
|
|
mode?: string
|
|
host?: string
|
|
password?: string
|
|
path?: string
|
|
tls?: string
|
|
fingerprint?: string
|
|
headers?: {
|
|
[key: string]: string
|
|
}
|
|
'skip-cert-verify'?: boolean
|
|
version?: number
|
|
mux?: boolean
|
|
'v2ray-http-upgrade'?: boolean
|
|
'v2ray-http-upgrade-fast-open'?: boolean
|
|
'version-hint'?: string
|
|
'restls-script'?: string
|
|
}
|
|
'udp-over-tcp'?: boolean
|
|
'udp-over-tcp-version'?: number
|
|
'client-fingerprint'?: ClientFingerprint
|
|
smux?: boolean
|
|
}
|
|
// sudoku
|
|
interface IProxySudokuConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'sudoku'
|
|
server?: string
|
|
port?: number
|
|
key?: string
|
|
'aead-method'?: SudokuAeadMethod
|
|
'padding-min'?: number
|
|
'padding-max'?: number
|
|
'table-type'?: SudokuTableType
|
|
'enable-pure-downlink'?: boolean
|
|
'http-mask'?: boolean
|
|
'http-mask-mode'?: SudokuHttpMaskMode
|
|
'http-mask-tls'?: boolean
|
|
'http-mask-host'?: string
|
|
'http-mask-strategy'?: SudokuHttpMaskStrategy
|
|
'custom-table'?: string
|
|
'custom-tables'?: string[]
|
|
}
|
|
// shadowsocksR
|
|
interface IProxyshadowsocksRConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'ssr'
|
|
server?: string
|
|
port?: number
|
|
password?: string
|
|
cipher?: CipherType
|
|
obfs?: string
|
|
'obfs-param'?: string
|
|
protocol?: string
|
|
'protocol-param'?: string
|
|
udp?: boolean
|
|
}
|
|
// sing-mux
|
|
interface IProxySmuxConfig {
|
|
smux?: {
|
|
enabled?: boolean
|
|
protocol?: 'smux' | 'yamux' | 'h2mux'
|
|
'max-connections'?: number
|
|
'min-streams'?: number
|
|
'max-streams'?: number
|
|
padding?: boolean
|
|
statistic?: boolean
|
|
'only-tcp'?: boolean
|
|
'brutal-opts'?: {
|
|
enabled?: boolean
|
|
up?: string
|
|
down?: string
|
|
}
|
|
}
|
|
}
|
|
// snell
|
|
interface IProxySnellConfig extends IProxyBaseConfig {
|
|
name: string
|
|
type: 'snell'
|
|
server?: string
|
|
port?: number
|
|
psk?: string
|
|
udp?: boolean
|
|
version?: number
|
|
}
|
|
interface IProxyConfig
|
|
extends IProxyBaseConfig,
|
|
IProxyDirectConfig,
|
|
IProxyDnsConfig,
|
|
IProxyHttpConfig,
|
|
IProxySocks5Config,
|
|
IProxySshConfig,
|
|
IProxyTrojanConfig,
|
|
IProxyAnyTLSConfig,
|
|
IProxyTuicConfig,
|
|
IProxyMieruConfig,
|
|
IProxyMasqueConfig,
|
|
IProxyVlessConfig,
|
|
IProxyVmessConfig,
|
|
IProxyWireguardConfig,
|
|
IProxyHysteriaConfig,
|
|
IProxyHysteria2Config,
|
|
IProxyShadowsocksConfig,
|
|
IProxySudokuConfig,
|
|
IProxyshadowsocksRConfig,
|
|
IProxySmuxConfig,
|
|
IProxySnellConfig {
|
|
type:
|
|
| 'ss'
|
|
| 'ssr'
|
|
| 'direct'
|
|
| 'dns'
|
|
| 'snell'
|
|
| 'http'
|
|
| 'trojan'
|
|
| 'anytls'
|
|
| 'hysteria'
|
|
| 'hysteria2'
|
|
| 'tuic'
|
|
| 'wireguard'
|
|
| 'ssh'
|
|
| 'socks5'
|
|
| 'masque'
|
|
| 'vmess'
|
|
| 'vless'
|
|
| 'mieru'
|
|
| 'sudoku'
|
|
}
|
|
|
|
interface IVergeConfig {
|
|
app_log_level?: 'trace' | 'debug' | 'info' | 'warn' | 'error' | string
|
|
app_log_max_size?: number // KB
|
|
app_log_max_count?: number
|
|
language?: string
|
|
tray_event?:
|
|
| 'main_window'
|
|
| 'tray_menu'
|
|
| 'system_proxy'
|
|
| 'tun_mode'
|
|
| string
|
|
env_type?: 'bash' | 'cmd' | 'powershell' | 'fish' | string
|
|
startup_script?: string
|
|
start_page?: string
|
|
clash_core?: string
|
|
theme_mode?: 'light' | 'dark' | 'system'
|
|
traffic_graph?: boolean
|
|
enable_memory_usage?: boolean
|
|
enable_group_icon?: boolean
|
|
pause_render_traffic_stats_on_blur?: boolean
|
|
menu_icon?: 'monochrome' | 'colorful' | 'disable'
|
|
menu_order?: string[]
|
|
notice_position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'
|
|
collapse_navbar?: boolean
|
|
tray_icon?: 'monochrome' | 'colorful'
|
|
common_tray_icon?: boolean
|
|
sysproxy_tray_icon?: boolean
|
|
tun_tray_icon?: boolean
|
|
// enable_tray_speed?: boolean;
|
|
// enable_tray_icon?: boolean;
|
|
tray_proxy_groups_display_mode?: 'default' | 'inline' | 'disable'
|
|
tray_inline_outbound_modes?: boolean
|
|
enable_tun_mode?: boolean
|
|
enable_auto_light_weight_mode?: boolean
|
|
auto_light_weight_minutes?: number
|
|
enable_auto_launch?: boolean
|
|
enable_silent_start?: boolean
|
|
enable_system_proxy?: boolean
|
|
enable_global_hotkey?: boolean
|
|
enable_dns_settings?: boolean
|
|
proxy_auto_config?: boolean
|
|
pac_file_content?: string
|
|
proxy_host?: string
|
|
enable_random_port?: boolean
|
|
verge_mixed_port?: number
|
|
verge_socks_port?: number
|
|
verge_redir_port?: number
|
|
verge_tproxy_port?: number
|
|
verge_port?: number
|
|
verge_redir_enabled?: boolean
|
|
verge_tproxy_enabled?: boolean
|
|
verge_socks_enabled?: boolean
|
|
verge_http_enabled?: boolean
|
|
enable_proxy_guard?: boolean
|
|
enable_bypass_check?: boolean
|
|
use_default_bypass?: boolean
|
|
proxy_guard_duration?: number
|
|
system_proxy_bypass?: string
|
|
web_ui_list?: string[]
|
|
hotkeys?: string[]
|
|
theme_setting?: {
|
|
primary_color?: string
|
|
secondary_color?: string
|
|
primary_text?: string
|
|
secondary_text?: string
|
|
info_color?: string
|
|
error_color?: string
|
|
warning_color?: string
|
|
success_color?: string
|
|
font_family?: string
|
|
css_injection?: string
|
|
background_image?: string
|
|
background_blend_mode?: string
|
|
background_opacity?: number
|
|
}
|
|
auto_close_connection?: boolean
|
|
auto_check_update?: boolean
|
|
default_latency_test?: string
|
|
default_latency_timeout?: number
|
|
enable_auto_delay_detection?: boolean
|
|
auto_delay_detection_interval_minutes?: number
|
|
enable_builtin_enhanced?: boolean
|
|
auto_log_clean?: 0 | 1 | 2 | 3 | 4
|
|
enable_auto_backup_schedule?: boolean
|
|
auto_backup_interval_hours?: number
|
|
auto_backup_on_change?: boolean
|
|
proxy_layout_column?: number
|
|
test_list?: IVergeTestItem[]
|
|
webdav_url?: string
|
|
webdav_username?: string
|
|
webdav_password?: string
|
|
home_cards?: Record<string, boolean>
|
|
enable_hover_jump_navigator?: boolean
|
|
hover_jump_navigator_delay?: number
|
|
enable_external_controller?: boolean
|
|
}
|
|
|
|
interface IWebDavFile {
|
|
filename: string
|
|
href: string
|
|
last_modified: string
|
|
content_length: number
|
|
content_type: string
|
|
tag: string
|
|
}
|
|
|
|
interface ILocalBackupFile {
|
|
filename: string
|
|
path: string
|
|
last_modified: string
|
|
content_length: number
|
|
}
|
|
|
|
interface IWebDavConfig {
|
|
url: string
|
|
username: string
|
|
password: string
|
|
}
|
|
|
|
// Traffic monitor types
|
|
interface ITrafficDataPoint {
|
|
up: number
|
|
down: number
|
|
timestamp: number
|
|
name: string
|
|
}
|
|
|
|
interface ISamplingConfig {
|
|
rawDataMinutes: number
|
|
compressedDataMinutes: number
|
|
compressionRatio: number
|
|
}
|
|
|
|
interface ISamplerStats {
|
|
rawBufferSize: number
|
|
compressedBufferSize: number
|
|
compressionQueueSize: number
|
|
totalMemoryPoints: number
|
|
}
|
|
|
|
interface ITrafficWorkerInitMessage {
|
|
type: 'init'
|
|
config: ISamplingConfig & {
|
|
snapshotIntervalMs: number
|
|
defaultRangeMinutes: number
|
|
}
|
|
}
|
|
|
|
interface ITrafficWorkerAppendMessage {
|
|
type: 'append'
|
|
payload: {
|
|
up: number
|
|
down: number
|
|
timestamp?: number
|
|
}
|
|
}
|
|
|
|
interface ITrafficWorkerClearMessage {
|
|
type: 'clear'
|
|
}
|
|
|
|
interface ITrafficWorkerSetRangeMessage {
|
|
type: 'setRange'
|
|
minutes: number
|
|
}
|
|
|
|
interface ITrafficWorkerRequestSnapshotMessage {
|
|
type: 'requestSnapshot'
|
|
}
|
|
|
|
type TrafficWorkerRequestMessage =
|
|
| ITrafficWorkerInitMessage
|
|
| ITrafficWorkerAppendMessage
|
|
| ITrafficWorkerClearMessage
|
|
| ITrafficWorkerSetRangeMessage
|
|
| ITrafficWorkerRequestSnapshotMessage
|
|
|
|
interface ITrafficWorkerSnapshotMessage {
|
|
type: 'snapshot'
|
|
dataPoints: ITrafficDataPoint[]
|
|
availableDataPoints: ITrafficDataPoint[]
|
|
samplerStats: ISamplerStats
|
|
rangeMinutes: number
|
|
lastTimestamp?: number
|
|
reason:
|
|
| 'init'
|
|
| 'interval'
|
|
| 'range-change'
|
|
| 'request'
|
|
| 'append-throttle'
|
|
| 'clear'
|
|
}
|
|
|
|
interface ITrafficWorkerLogMessage {
|
|
type: 'log'
|
|
message: string
|
|
}
|
|
|
|
type TrafficWorkerResponseMessage =
|
|
| ITrafficWorkerSnapshotMessage
|
|
| ITrafficWorkerLogMessage
|