Files
subconverter4j/src/main/kotlin/conf/Clash.kt
2025-03-07 22:52:21 +08:00

1452 lines
45 KiB
Kotlin

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Clash(
/*------------------------------------------- *General configuration* -------------------------------------------*/
// Allow LAN
val allowLan: Boolean? = null,
val bindAddress: String? = null,
val lanAllowedIps: List<String>? = null,
val lanDisallowedIps: List<String>? = null,
val authentication: List<String>? = null,
val skipAuthPrefixes: List<String>? = null,
// Operation Mode
val mode: String? = null,
// Log Level
val logLevel: String? = null,
// TCP Keep Alive Settings
val keepAliveInterval: Int? = null,
val keepAliveIdle: Int? = null,
val disableKeepAlive: Boolean? = null,
// Process Matching Mode
val findProcessMode: String? = null,
// External Control (API)
val externalController: String? = null,
val externalControllerTls: String? = null,
val externalControllerCors: ExternalControllerCors? = null,
val externalControllerUnix: String? = null,
val externalControllerPipe: String? = null,
val secret: String? = null,
val externalDohServer: String? = null,
// External User Interface
val externalUi: String? = null,
val externalUiName: String? = null,
val externalUiUrl: String? = null,
// Cache
val profile: Profile? = null,
// Unified Delay
val unifiedDelay: Boolean? = null,
// TCP Concurrency
val tcpConcurrent: Boolean? = null,
// Outbound Interface
val interfaceName: String? = null,
// Routing Mark
val routingMark: Int? = null,
// TLS
val tls: TLS? = null,
// GEO Data Configuration
val geoxUrl: GeoXUrl? = null,
val geoAutoUpdate: Boolean? = null,
val geoUpdateInterval: Int? = null,
// Global Client Fingerprint
val globalClientFingerprint: String? = null,
// Custom Global UA
val globalUa: String? = null,
// ETag Support
val etagSupport: Boolean? = null,
/*------------------------------------------------ *DNS* ------------------------------------------------*/
val hosts: List<String>? = null,
// TODO:
val dns: DNS? = null,
val sniffer: Sniffer? = null,
/*------------------------------------------------ *Inbounds* ------------------------------------------------*/
// Proxy Port
val port: Int? = null,
val socksPort: Int? = null,
val mixedPort: Int? = null,
val redirPort: Int? = null,
val tproxyPort: Int? = null,
val tun: Tun? = null,
val listeners: List<Listener>? = null,
// 未在文档中提到的属性
val experimental: Experimental? = null,
val tunnels: List<Tunnel>? = null,
val proxies: List<Proxy>? = null,
val proxyGroups: List<ProxyGroup>? = null,
val proxyProviders: Map<String, ProxyProvider>? = null,
val ruleProviders: Map<String, RuleProvider>? = null,
val rules: List<String>? = null,
val subRules: Map<String, List<String>>? = null,
)
@Serializable
data class GeoXUrl(
val geoip: String? = null, val geosite: String? = null, val mmdb: String? = null, val asn: String? = null
)
@Serializable
data class TLS(
val certificate: String? = null, val privateKey: String? = null, val customCertifactes: List<String>? = null
)
@Serializable
data class ExternalControllerCors(
val allowOrigins: List<String>? = null, val allowPrivateNetwork: Boolean? = null
)
@Serializable
data class Experimental(
val quicGoDisableGso: Boolean? = null
)
@Serializable
data class Profile(
val storeSelected: Boolean? = null, val storeFakeIp: Boolean? = null
)
@Serializable
data class Tun(
val enable: Boolean? = null,
val stack: String? = null,
val autoRoute: Boolean? = null,
val autoRedirect: Boolean? = null,
val autoDetectInterface: Boolean? = null,
val dnsHijack: List<String>? = null,
val device: String? = null,
val mtu: Int? = null,
val strictRoute: Boolean? = null,
val gso: Boolean? = null,
val gsoMaxSize: Int? = null,
val udpTimeout: Int? = null,
val iproute2TableIndex: Int? = null,
val iproute2RuleIndex: Int? = null,
val endpointIndependentNat: Boolean? = null,
val routeAddressSet: List<String>? = null,
val routeExcludeAddressSet: List<String>? = null,
val routeAddress: List<String>? = null,
val routeExcludeAddress: List<String>? = null,
val includeInterface: List<String>? = null,
val excludeInterface: List<String>? = null,
val includeUid: List<Int>? = null,
val includeUidRange: List<Pair<Int, Int>>? = null,
val excludeUid: List<Int>? = null,
val excludeUidRange: List<Pair<Int, Int>>? = null,
val includeAndroidUser: List<Int>? = null,
val includePackage: List<String>? = null,
val excludePackage: List<String>? = null,
@Deprecated("") val inet4RouteAddress: List<String>? = null,
@Deprecated("") val inet6RouteAddress: List<String>? = null,
@Deprecated("") val inet4RouteExcludeAddress: List<String>? = null,
@Deprecated("") val inet6RouteExcludeAddress: List<String>? = null
)
@Serializable
data class Sniffer(
val enable: Boolean? = null,
val forceDnsMapping: Boolean? = null,
val parsePureIp: Boolean? = null,
val overrideDestination: Boolean? = null,
val sniff: Sniff? = null,
val forceDomain: List<String>? = null,
val skipDomain: List<String>? = null,
val skipSrcAddress: List<String>? = null,
val skipDstAddress: List<String>? = null,
@Deprecated("") val sniffing: List<String>? = null,
@Deprecated("") val portWhitelist: List<String>? = null
)
@Serializable
data class Sniff(
val QUIC: SniffQUIC? = null, val TLS: SniffTLS? = null, val HTTP: SniffHTTP? = null
)
@Serializable
data class SniffQUIC(
val ports: List<Int>? = null
)
@Serializable
data class SniffTLS(
val ports: List<Int>? = null
)
@Serializable
data class SniffHTTP(
val ports: List<Int>? = null, val overrideDestination: Boolean? = null
)
@Serializable
sealed class Tunnel {
@Serializable
data class InlineTunnel(
val network: String? = null, val address: String? = null, val target: String? = null, val proxy: String? = null
) : Tunnel()
@Serializable
data class FullTunnel(
val network: List<String>? = null,
val address: String? = null,
val target: String? = null,
val proxy: String? = null
) : Tunnel()
}
@Serializable
data class DNS(
val cacheAlgorithm: String? = null,
val enable: Boolean? = null,
val preferH3: Boolean? = null,
val listen: String? = null,
val ipv6: Boolean? = null,
val ipv6Timeout: Int? = null,
val defaultNameserver: List<String>? = null,
val enhancedMode: String? = null,
val fakeIpRange: String? = null,
val fakeIpFilter: List<String>? = null,
val fakeIpFilterMode: String? = null,
val useHosts: Boolean? = null,
val useSystemHosts: Boolean? = null,
val respectRules: Boolean? = null,
val nameserver: List<String>? = null,
val fallback: List<String>? = null,
val proxyServerNameserver: List<String>? = null,
val directNameserver: List<String>? = null,
val directNameserverFollowPolicy: Boolean? = null,
val fallbackFilter: FallbackFilter? = null,
val nameserverPolicy: Map<String, List<String>>? = null
)
@Serializable
data class FallbackFilter(
val geoip: Boolean? = null,
val geoipCode: String? = null,
val geosite: List<String>? = null,
val ipcidr: List<String>? = null,
val domain: List<String>? = null
)
//@Serializable
//sealed class Proxy {
// @Serializable
// data class Socks5Proxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val username: String? = null,
// val password: String? = null,
// val tls: Boolean? = null,
// val fingerprint: String? = null,
// val skipCertVerify: Boolean? = null,
// val udp: Boolean? = null,
// val ipVersion: String? = null
// ) : Proxy()
//
// @Serializable
// data class HttpProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val username: String? = null,
// val password: String? = null,
// val tls: Boolean? = null,
// val skipCertVerify: Boolean? = null,
// val sni: String? = null,
// val fingerprint: String? = null,
// val ipVersion: String? = null
// ) : Proxy()
//
// @Serializable
// data class SnellProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val psk: String? = null,
// val version: Int? = null,
// val obfsOpts: ObfsOpts? = null
// ) : Proxy() {
// @Serializable
// data class ObfsOpts(
// val mode: String? = null,
// val host: String? = null
// )
// }
//
// @Serializable
// data class ShadowsocksProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val cipher: String? = null,
// val password: String? = null,
// val udp: Boolean? = null,
// val ipVersion: String? = null,
// val plugin: String? = null,
// val pluginOpts: PluginOpts? = null
// ) : Proxy() {
// @Serializable
// data class PluginOpts(
// val mode: String? = null,
// val host: String? = null,
// val tls: Boolean? = null,
// val skipCertVerify: Boolean? = null,
// val fingerprint: String? = null,
// val path: String? = null,
// val headers: Map<String, String>? = null,
// val clientFingerprint: String? = null,
// val version: Int? = null,
// val password: String? = null,
// val restlsScript: String? = null
// )
// }
//
// @Serializable
// data class VmessProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val uuid: String? = null,
// val alterId: Int? = null,
// val cipher: String? = null,
// val udp: Boolean? = null,
// val tls: Boolean? = null,
// val fingerprint: String? = null,
// val skipCertVerify: Boolean? = null,
// val servername: String? = null,
// val network: String? = null,
// val wsOpts: WsOpts? = null,
// val h2Opts: H2Opts? = null,
// val grpcOpts: GrpcOpts? = null
// ) : Proxy() {
// @Serializable
// data class WsOpts(
// val path: String? = null,
// val headers: Map<String, String>? = null
// )
//
// @Serializable
// data class H2Opts(
// val host: List<String>? = null,
// val path: String? = null
// )
//
// @Serializable
// data class GrpcOpts(
// val grpcServiceName: String? = null
// )
// }
//
// @Serializable
// data class VlessProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val uuid: String? = null,
// val network: String? = null,
// val tls: Boolean? = null,
// val udp: Boolean? = null,
// val flow: String? = null,
// val clientFingerprint: String? = null,
// val servername: String? = null,
// val realityOpts: RealityOpts? = null,
// val grpcOpts: GrpcOpts? = null,
// val wsOpts: WsOpts? = null
// ) : Proxy() {
// @Serializable
// data class RealityOpts(
// val publicKey: String? = null,
// val shortId: String? = null
// )
//
// @Serializable
// data class GrpcOpts(
// val grpcServiceName: String? = null
// )
//
// @Serializable
// data class WsOpts(
// val path: String? = null,
// val headers: Map<String, String>? = null
// )
// }
//
// @Serializable
// data class TrojanProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val password: String? = null,
// val clientFingerprint: String? = null,
// val udp: Boolean? = null,
// val sni: String? = null,
// val skipCertVerify: Boolean? = null,
// val flow: String? = null,
// val grpcOpts: GrpcOpts? = null,
// val wsOpts: WsOpts? = null
// ) : Proxy() {
// @Serializable
// data class GrpcOpts(
// val grpcServiceName: String? = null
// )
//
// @Serializable
// data class WsOpts(
// val path: String? = null,
// val headers: Map<String, String>? = null
// )
// }
//
// @Serializable
// @SerialName("hysteria2")
// data class HysteriaProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val authStr: String? = null,
// val obfs: String? = null,
// val protocol: String? = null,
// val up: String? = null,
// val down: String? = null,
// val sni: String? = null,
// val skipCertVerify: Boolean? = null,
// val fingerprint: String? = null
// ) : Proxy()
//
// @Serializable
// data class WireguardProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val ip: String? = null,
// val ipv6: String? = null,
// val publicKey: String? = null,
// val privateKey: String? = null,
// val udp: Boolean? = null,
// val reserved: String? = null,
// val peers: List<Peer>? = null
// ) : Proxy() {
// @Serializable
// data class Peer(
// val server: String? = null,
// val port: Int? = null,
// val publicKey: String? = null,
// val allowedIps: List<String>? = null,
// val reserved: String? = null
// )
// }
//
// @Serializable
// data class TuicProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val token: String? = null,
// val uuid: String? = null,
// val password: String? = null,
// val udpRelayMode: String? = null,
// val congestionController: String? = null,
// val skipCertVerify: Boolean? = null,
// val sni: String? = null
// ) : Proxy()
//
// @Serializable
// data class ShadowsocksRProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val cipher: String? = null,
// val password: String? = null,
// val obfs: String? = null,
// val protocol: String? = null,
// val udp: Boolean? = null
// ) : Proxy()
//
// @Serializable
// data class SSHProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val username: String? = null,
// val password: String? = null,
// val privateKey: String? = null
// ) : Proxy()
//
// @Serializable
// data class MieruProxy(
// val name: String? = null,
// val server: String? = null,
// val port: Int? = null,
// val transport: String? = null,
// val username: String? = null,
// val password: String? = null,
// val multiplexing: String? = null
// ) : Proxy()
//
// @Serializable
// data class DNSProxy(
// val name: String? = null
// ) : Proxy()
//}
@Serializable
sealed class Proxy {
abstract val tfo: Boolean?
abstract val mptcp: Boolean?
abstract val interfaceName: String?
abstract val routingMark: Int?
abstract val ipVersion: String?
abstract val dialerProxy: String?
abstract val smux: SingMuxOption?
@Serializable
@SerialName("direct")
data class DirectProxy(
val name: String? = null,
override val tfo: Boolean?,
override val mptcp: Boolean?,
override val interfaceName: String?,
override val routingMark: Int?,
override val ipVersion: String?,
override val dialerProxy: String?,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("reject")
data class RejectProxy(
val name: String? = null,
)
@Serializable
@SerialName("dns")
data class DnsProxy(
val name: String? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("http")
data class HttpProxy(
val name: String? = null,
val server: String,
val port: Int,
val username: String? = null,
val password: String? = null,
val tls: Boolean? = null,
val sni: String? = null,
val skipCertVerify: Boolean? = null,
val fingerprint: String? = null,
val headers: Map<String, String>? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("hysteria")
data class HysteriaProxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val ports: String? = null,
val protocol: String? = null,
val obfsProtocol: String? = null, // compatible with Stash
val up: String? = null,
val upSpeed: Int? = null, // compatible with Stash
val down: String? = null,
val downSpeed: Int? = null, // compatible with Stash
val auth: String? = null,
val authString: String? = null,
val obfs: String? = null,
val sni: String? = null,
val skipCertVerify: Boolean? = null,
val fingerprint: String? = null,
val alpn: List<String>? = null,
val customCA: String? = null,
val customCAString: String? = null,
val receiveWindowConn: Int? = null,
val receiveWindow: Int? = null,
val disableMTUDiscovery: Boolean? = null,
val fastOpen: Boolean? = null,
val hopInterval: Int? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("hysteria2")
data class Hysteria2Proxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val ports: String? = null,
val hopInterval: Int? = null,
val up: String? = null,
val down: String? = null,
val password: String? = null,
val obfs: String? = null,
val obfsPassword: String? = null,
val sni: String? = null,
val skipCertVerify: Boolean? = null,
val fingerprint: String? = null,
val alpn: List<String>? = null,
val customCA: String? = null,
val customCAString: String? = null,
val cwnd: Int? = null,
val udpMTU: Int? = null,
// quic-go special config
val initialStreamReceiveWindow: ULong? = null,
val maxStreamReceiveWindow: ULong? = null,
val initialConnectionReceiveWindow: ULong? = null,
val maxConnectionReceiveWindow: ULong? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("mieru")
data class MieruProxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val portRange: String? = null,
val transport: String? = null,
val userName: String? = null,
val password: String? = null,
val multiplexing: String? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("ss")
data class ShadowSocksProxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val password: String? = null,
val cipher: String? = null,
val udp: Boolean? = null,
val plugin: String? = null,
// TODO:
// val pluginOpts: Map<String, @Contextual Any>? = null,
val udpOverTCP: Boolean? = null,
val udpOverTCPVersion: Int? = null,
val clientFingerprint: String? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("ssr")
data class ShadowSocksRProxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val password: String? = null,
val cipher: String? = null,
val obfs: String? = null,
val obfsParam: String? = null,
val protocol: String? = null,
val protocolParam: String? = null,
val udp: Boolean? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("snell")
data class SnellProxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val psk: String? = null,
val udp: Boolean? = null,
val version: Int? = null,
// TODO:
// val obfsOpts: Map<String, @Contextual Any>? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("socks5")
data class Socks5Proxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val userName: String? = null,
val password: String? = null,
val tls: Boolean? = null,
val udp: Boolean? = null,
val skipCertVerify: Boolean? = null,
val fingerprint: String? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("ssh")
data class SshProxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val userName: String? = null,
val password: String? = null,
val privateKey: String? = null,
val privateKeyPassphrase: String? = null,
val hostKey: List<String>? = null,
val hostKeyAlgorithms: List<String>? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("trojan")
data class TrojanProxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val password: String? = null,
val alpn: List<String>? = null,
val sni: String? = null,
val skipCertVerify: Boolean? = null,
val fingerprint: String? = null,
val udp: Boolean? = null,
val network: String? = null,
val realityOpts: RealityOptions? = null,
val grpcOpts: GrpcOptions? = null,
val wsOpts: WSOptions? = null,
val ssOpts: TrojanSSOption? = null,
val clientFingerprint: String? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("tuic")
data class TuicProxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val token: String? = null,
val uuid: String? = null,
val password: String? = null,
val ip: String? = null,
val heartbeatInterval: Int? = null,
val alpn: List<String>? = null,
val reduceRtt: Boolean? = null,
val requestTimeout: Int? = null,
val udpRelayMode: String? = null,
val congestionController: String? = null,
val disableSni: Boolean? = null,
val maxUdpRelayPacketSize: Int? = null,
val fastOpen: Boolean? = null,
val maxOpenStreams: Int? = null,
val cwnd: Int? = null,
val skipCertVerify: Boolean? = null,
val fingerprint: String? = null,
val customCA: String? = null,
val customCAString: String? = null,
val receiveWindowConn: Int? = null,
val receiveWindow: Int? = null,
val disableMTUDiscovery: Boolean? = null,
val maxDatagramFrameSize: Int? = null,
val sni: String? = null,
val udpOverStream: Boolean? = null,
val udpOverStreamVersion: Int? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("vless")
data class VlessProxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val uuid: String? = null,
val flow: String? = null,
val tls: Boolean? = null,
val alpn: List<String>? = null,
val udp: Boolean? = null,
val packetAddr: Boolean? = null,
val xudp: Boolean? = null,
val packetEncoding: String? = null,
val network: String? = null,
val realityOpts: RealityOptions? = null,
val httpOpts: HTTPOptions? = null,
val http2Opts: HTTP2Options? = null,
val grpcOpts: GrpcOptions? = null,
val wsOpts: WSOptions? = null,
val wsPath: String? = null,
val wsHeaders: Map<String, String>? = null,
val skipCertVerify: Boolean? = null,
val fingerprint: String? = null,
val serverName: String? = null,
val clientFingerprint: String? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("vmess")
data class VmessProxy(
val name: String? = null,
val server: String? = null,
val port: Int? = null,
val uuid: String? = null,
val alterId: Int? = null,
val cipher: String? = null,
val udp: Boolean? = null,
val network: String? = null,
val tls: Boolean? = null,
val alpn: List<String>? = null,
val skipCertVerify: Boolean? = null,
val fingerprint: String? = null,
val serverName: String? = null,
val realityOpts: RealityOptions? = null,
val httpOpts: HTTPOptions? = null,
val http2Opts: HTTP2Options? = null,
val grpcOpts: GrpcOptions? = null,
val wsOpts: WSOptions? = null,
val packetAddr: Boolean? = null,
val xudp: Boolean? = null,
val packetEncoding: String? = null,
val globalPadding: Boolean? = null,
val authenticatedLength: Boolean? = null,
val clientFingerprint: String? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
@SerialName("wireguard")
data class WireGuardProxy(
val name: String? = null,
val ip: String? = null,
val ipv6: String? = null,
val privateKey: String? = null,
val workers: Int? = null,
val mtu: Int? = null,
val udp: Boolean? = null,
val persistentKeepalive: Int? = null,
val amneziaWGOption: AmneziaWGOption? = null,
val peers: List<WireGuardPeerOption>? = null,
val remoteDnsResolve: Boolean? = null,
val dns: List<String>? = null,
val refreshServerIPInterval: Int? = null,
override val tfo: Boolean? = null,
override val mptcp: Boolean? = null,
override val interfaceName: String? = null,
override val routingMark: Int? = null,
override val ipVersion: String? = null,
override val dialerProxy: String? = null,
override val smux: SingMuxOption?,
) : Proxy()
@Serializable
data class RealityOptions(
val publicKey: String? = null,
val shortID: String? = null,
)
@Serializable
data class GrpcOptions(
val grpcServiceName: String? = null,
)
@Serializable
data class HTTPOptions(
val method: String? = null,
val path: List<String>? = null,
val headers: Map<String, List<String>>? = null,
)
@Serializable
data class HTTP2Options(
val host: List<String>? = null,
val path: String? = null,
)
@Serializable
data class WSOptions(
val path: String? = null,
val headers: Map<String, String>? = null,
val maxEarlyData: Int? = null,
val earlyDataHeaderName: String? = null,
val v2rayHttpUpgrade: Boolean? = null,
val v2rayHttpUpgradeFastOpen: Boolean? = null,
)
@Serializable
data class TrojanSSOption(
val enabled: Boolean? = null,
val method: String? = null,
val password: String? = null,
)
@Serializable
data class WireGuardPeerOption(
val server: String? = null,
val port: Int? = null,
val publicKey: String? = null,
val preSharedKey: String? = null,
val reserved: List<Byte>? = null,
val allowedIPs: List<String>? = null,
)
@Serializable
data class AmneziaWGOption(
val jc: Int? = null,
val jMin: Int? = null,
val jMax: Int? = null,
val s1: Int? = null,
val s2: Int? = null,
val h1: UInt? = null,
val h2: UInt? = null,
val h3: UInt? = null,
val h4: UInt? = null,
)
@Serializable
data class SingMuxOption(
val enabled: Boolean? = null,
val protocol: String? = null,
val maxConnections: Int? = null,
val minStreams: Int? = null,
val maxStreams: Int? = null,
val padding: Boolean? = null,
val statistic: Boolean? = null,
val onlyTcp: Boolean? = null,
val brutalOpts: BrutalOption? = null,
)
@Serializable
data class BrutalOption(
val enabled: Boolean? = null,
val up: String? = null,
val down: String? = null,
)
}
@Serializable
data class SmuxConfig(
val enabled: Boolean? = null,
val protocol: String? = null,
val maxConnections: Int? = null,
val minStreams: Int? = null,
val maxStreams: Int? = null,
val statistic: Boolean? = null,
val onlyTcp: Boolean? = null,
val padding: Boolean? = null,
val brutalOpts: BruteOpts? = null
) {
@Serializable
data class BruteOpts(
val enabled: Boolean? = null, val up: Int? = null, val down: Int? = null
)
}
@Serializable
sealed class ProxyGroup {
@Serializable
data class RelayGroup(
val name: String? = null, val proxies: List<String>? = null, val type: String? = null
) : ProxyGroup()
@Serializable
data class UrlTestGroup(
val name: String? = null,
val proxies: List<String>? = null,
val url: String? = null,
val interval: Int? = null,
val tolerance: Int? = null,
val lazy: Boolean? = null,
val expectedStatus: Int? = null,
val type: String? = null
) : ProxyGroup()
@Serializable
data class FallbackGroup(
val name: String? = null,
val proxies: List<String>? = null,
val url: String? = null,
val interval: Int? = null,
val type: String? = null
) : ProxyGroup()
@Serializable
data class LoadBalanceGroup(
val name: String? = null,
val proxies: List<String>? = null,
val url: String? = null,
val interval: Int? = null,
val strategy: String? = null,
val type: String? = null
) : ProxyGroup()
@Serializable
data class SelectGroup(
val name: String? = null,
val proxies: List<String>? = null,
val disableUdp: Boolean? = null,
val type: String? = null
) : ProxyGroup()
@Serializable
data class InterfaceGroup(
val name: String? = null,
val interfaceName: String? = null,
val routingMark: Int? = null,
val proxies: List<String>? = null,
val type: String? = null
) : ProxyGroup()
@Serializable
data class UseProviderGroup(
val name: String? = null,
val filter: String? = null,
val use: List<String>? = null,
val proxies: List<String>? = null,
val type: String? = null
) : ProxyGroup()
}
@Serializable
sealed class ProxyProvider {
@Serializable
data class HttpProxyProvider(
val type: String? = null,
val url: String? = null,
val interval: Int? = null,
val path: String? = null,
val proxy: String? = null,
val header: Header? = null,
val healthCheck: HealthCheck? = null,
val override: Override? = null
) : ProxyProvider()
@Serializable
data class InlineProxyProvider(
val type: String? = null, val dialerProxy: String? = null, val payload: List<Payload>? = null
) : ProxyProvider()
@Serializable
data class FileProxyProvider(
val type: String? = null, val path: String? = null, val healthCheck: HealthCheck? = null
) : ProxyProvider()
}
@Serializable
sealed class RuleProvider {
@Serializable
data class HttpRuleProvider(
val behavior: String? = null,
val interval: Int? = null,
val path: String? = null,
val type: String? = null,
val url: String? = null,
val proxy: String? = null,
val sizeLimit: Int? = null
) : RuleProvider()
@Serializable
data class FileRuleProvider(
val behavior: String? = null, val interval: Int? = null, val path: String? = null, val type: String? = null
) : RuleProvider()
@Serializable
data class MrsRuleProvider(
val type: String? = null,
val url: String? = null,
val format: String? = null,
val behavior: String? = null,
val path: String? = null
) : RuleProvider()
@Serializable
data class InlineRuleProvider(
val type: String? = null, val behavior: String? = null, val payload: List<String>? = null
) : RuleProvider()
}
@Serializable
data class Header(
val userAgent: List<String>? = null, val accept: List<String>? = null, val authorization: List<String>? = null
)
@Serializable
data class HealthCheck(
val enable: Boolean? = null,
val interval: Int? = null,
val lazy: Boolean? = null,
val url: String? = null,
val expectedStatus: Int? = null
)
@Serializable
data class Override(
val skipCertVerify: Boolean? = null,
val udp: Boolean? = null,
val down: String? = null,
val up: String? = null,
val dialerProxy: String? = null,
val interfaceName: String? = null,
val routingMark: Int? = null,
val ipVersion: String? = null,
val additionalPrefix: String? = null,
val additionalSuffix: String? = null,
val proxyName: List<ProxyName>? = null
)
@Serializable
data class ProxyName(
val pattern: String? = null, val target: String? = null
)
@Serializable
data class Payload(
val name: String? = null,
val type: String? = null,
val server: String? = null,
val port: Int? = null,
val cipher: String? = null,
val password: String? = null
)
@Serializable
sealed class Listener {
abstract val name: String?
abstract val port: Int?
abstract val listen: String?
abstract val rule: String?
abstract val proxy: String?
@Serializable
@SerialName("http")
data class HttpListener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null,
val users: List<User>? = null,
val certificate: String? = null,
val privateKey: String? = null
) : Listener()
@Serializable
@SerialName("socks")
data class SocksListener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null,
val udp: Boolean? = null,
val users: List<User>? = null,
val certificate: String? = null,
val privateKey: String? = null
) : Listener()
@Serializable
@SerialName("mixed")
data class MixedListener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null,
val udp: Boolean? = null,
val users: List<User>? = null,
val certificate: String? = null,
val privateKey: String? = null
) : Listener()
@Serializable
@SerialName("redir")
data class RedirListener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null
) : Listener()
@Serializable
@SerialName("tproxy")
data class TProxyListener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null,
val udp: Boolean? = null
) : Listener()
@Serializable
@SerialName("tun")
data class TunListener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null,
val stack: String? = null,
val dnsHijack: List<String>? = null,
val inet4Address: List<String>? = null,
val inet6Address: List<String>? = null,
val autoDetectInterface: Boolean? = null,
val autoRoute: Boolean? = null,
val mtu: Int? = null,
val strictRoute: Boolean? = null,
val inet4RouteAddress: List<String>? = null,
val inet6RouteAddress: List<String>? = null,
val endpointIndependentNat: Boolean? = null,
val includeUid: List<Int>? = null,
val includeUidRange: List<String>? = null,
val excludeUid: List<Int>? = null,
val excludeUidRange: List<String>? = null,
val includeAndroidUser: List<Int>? = null,
val includePackage: List<String>? = null,
val excludePackage: List<String>? = null
) : Listener()
@Serializable
@SerialName("shadowsocks")
data class ShadowsocksListener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null,
val password: String? = null,
val cipher: String? = null,
val udp: Boolean? = null
) : Listener()
@Serializable
@SerialName("vmess")
data class VmessListener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null,
val users: List<VmessUser>? = null,
val privateKey: String? = null,
val certificate: String? = null,
val wsPath: String? = null,
val realityConfig: RealityConfig? = null
) : Listener()
@Serializable
@SerialName("tuic")
data class TuicListener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null,
val token: List<String>? = null,
val users: Map<String, String>? = null,
val certificate: String? = null,
val privateKey: String? = null,
val congestionController: String? = null,
val maxIdleTime: Int? = null,
val authenticationTimeout: Int? = null,
val alpn: List<String>? = null,
val maxUdpRelayPacketSize: Int? = null
) : Listener()
@Serializable
@SerialName("hysteria2")
data class Hysteria2Listener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null,
val users: Map<String, String>? = null,
val up: Int? = null,
val down: Int? = null,
val ignoreClientBandwidth: Boolean? = null,
val obfs: String? = null,
val obfsPassword: String? = null,
val masquerade: String? = null,
val alpn: List<String>? = null,
val certificate: String? = null,
val privateKey: String? = null
) : Listener()
@Serializable
@SerialName("tunnel")
data class TunnelListener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null,
val network: List<String>? = null,
val target: String? = null
) : Listener()
@Serializable
@SerialName("vless")
data class VlessListener(
override val name: String? = null,
override val port: Int? = null,
override val listen: String? = null,
override val rule: String? = null,
override val proxy: String? = null,
val users: List<VlessUser>? = null,
val wsPath: String? = null,
val certificate: String? = null,
val privateKey: String? = null,
val realityConfig: RealityConfig? = null
) : Listener()
}
@Serializable
data class User(
val username: String? = null, val password: String? = null
)
@Serializable
data class VmessUser(
val username: String? = null, val uuid: String? = null, val alterId: Int? = null
)
@Serializable
data class VlessUser(
val username: String? = null, val uuid: String? = null, val flow: String? = null
)
@Serializable
data class RealityConfig(
val dest: String? = null,
val privateKey: String? = null,
val shortId: List<String>? = null,
val serverNames: List<String>? = null
)
@Serializable
data class TuicServer(
val enable: Boolean? = null,
val listen: String? = null,
val token: List<String>? = null,
val users: Map<String, String>? = null,
val certificate: String? = null,
val privateKey: String? = null,
val congestionController: String? = null,
val maxIdleTime: Int? = null,
val authenticationTimeout: Int? = null,
val alpn: List<String>? = null,
val maxUdpRelayPacketSize: Int? = null
)