package main import ( "encoding/json" "github.com/metacubex/mihomo/adapter/provider" P "github.com/metacubex/mihomo/component/process" "github.com/metacubex/mihomo/config" "github.com/metacubex/mihomo/constant" "github.com/metacubex/mihomo/log" "github.com/metacubex/mihomo/tunnel" "net/netip" "time" ) type InitParams struct { HomeDir string `json:"home-dir"` Version int `json:"version"` } type SetupParams struct { Config *config.RawConfig `json:"config"` SelectedMap map[string]string `json:"selected-map"` TestURL string `json:"test-url"` } type UpdateParams struct { Tun *tunSchema `json:"tun"` AllowLan *bool `json:"allow-lan"` MixedPort *int `json:"mixed-port"` FindProcessMode *P.FindProcessMode `json:"find-process-mode"` Mode *tunnel.TunnelMode `json:"mode"` LogLevel *log.LogLevel `json:"log-level"` IPv6 *bool `json:"ipv6"` Sniffing *bool `json:"sniffing"` TCPConcurrent *bool `json:"tcp-concurrent"` ExternalController *string `json:"external-controller"` Interface *string `json:"interface-name"` UnifiedDelay *bool `json:"unified-delay"` } type tunSchema struct { Enable bool `yaml:"enable" json:"enable"` Device *string `yaml:"device" json:"device"` Stack *constant.TUNStack `yaml:"stack" json:"stack"` DNSHijack *[]string `yaml:"dns-hijack" json:"dns-hijack"` AutoRoute *bool `yaml:"auto-route" json:"auto-route"` RouteAddress *[]netip.Prefix `yaml:"route-address" json:"route-address,omitempty"` } type ChangeProxyParams struct { GroupName *string `json:"group-name"` ProxyName *string `json:"proxy-name"` } type TestDelayParams struct { ProxyName string `json:"proxy-name"` TestUrl string `json:"test-url"` Timeout int64 `json:"timeout"` } type ExternalProvider struct { Name string `json:"name"` Type string `json:"type"` VehicleType string `json:"vehicle-type"` Count int `json:"count"` Path string `json:"path"` UpdateAt time.Time `json:"update-at"` SubscriptionInfo *provider.SubscriptionInfo `json:"subscription-info"` } const ( messageMethod Method = "message" initClashMethod Method = "initClash" getIsInitMethod Method = "getIsInit" forceGcMethod Method = "forceGc" shutdownMethod Method = "shutdown" validateConfigMethod Method = "validateConfig" updateConfigMethod Method = "updateConfig" getProxiesMethod Method = "getProxies" changeProxyMethod Method = "changeProxy" getTrafficMethod Method = "getTraffic" getTotalTrafficMethod Method = "getTotalTraffic" resetTrafficMethod Method = "resetTraffic" asyncTestDelayMethod Method = "asyncTestDelay" getConnectionsMethod Method = "getConnections" closeConnectionsMethod Method = "closeConnections" resetConnectionsMethod Method = "resetConnectionsMethod" closeConnectionMethod Method = "closeConnection" getExternalProvidersMethod Method = "getExternalProviders" getExternalProviderMethod Method = "getExternalProvider" getCountryCodeMethod Method = "getCountryCode" getMemoryMethod Method = "getMemory" updateGeoDataMethod Method = "updateGeoData" updateExternalProviderMethod Method = "updateExternalProvider" sideLoadExternalProviderMethod Method = "sideLoadExternalProvider" startLogMethod Method = "startLog" stopLogMethod Method = "stopLog" startListenerMethod Method = "startListener" stopListenerMethod Method = "stopListener" updateDnsMethod Method = "updateDns" setStateMethod Method = "setState" getAndroidVpnOptionsMethod Method = "getAndroidVpnOptions" getRunTimeMethod Method = "getRunTime" getCurrentProfileNameMethod Method = "getCurrentProfileName" crashMethod Method = "crash" setupConfigMethod Method = "setupConfig" getConfigMethod Method = "getConfig" ) type Method string type MessageType string type Delay struct { Url string `json:"url"` Name string `json:"name"` Value int32 `json:"value"` } type Message struct { Type MessageType `json:"type"` Data interface{} `json:"data"` } const ( LogMessage MessageType = "log" DelayMessage MessageType = "delay" RequestMessage MessageType = "request" LoadedMessage MessageType = "loaded" ) func (message *Message) Json() (string, error) { data, err := json.Marshal(message) return string(data), err }