From 73b2199d4f3c967bd7c8b73e7f4615e37545f7c8 Mon Sep 17 00:00:00 2001 From: rainbus Date: Fri, 7 Mar 2025 22:52:21 +0800 Subject: [PATCH] Temp --- src/main/kotlin/conf/Clash.kt | 1132 ++++++++++++++++++++++++--------- 1 file changed, 826 insertions(+), 306 deletions(-) diff --git a/src/main/kotlin/conf/Clash.kt b/src/main/kotlin/conf/Clash.kt index 7c62f52..bced979 100644 --- a/src/main/kotlin/conf/Clash.kt +++ b/src/main/kotlin/conf/Clash.kt @@ -102,23 +102,17 @@ data class Clash( @Serializable data class GeoXUrl( - val geoip: String? = null, - val geosite: String? = null, - val mmdb: String? = null, - val asn: String? = null + 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? = null + val certificate: String? = null, val privateKey: String? = null, val customCertifactes: List? = null ) @Serializable data class ExternalControllerCors( - val allowOrigins: List? = null, - val allowPrivateNetwork: Boolean? = null + val allowOrigins: List? = null, val allowPrivateNetwork: Boolean? = null ) @Serializable @@ -128,8 +122,7 @@ data class Experimental( @Serializable data class Profile( - val storeSelected: Boolean? = null, - val storeFakeIp: Boolean? = null + val storeSelected: Boolean? = null, val storeFakeIp: Boolean? = null ) @Serializable @@ -185,9 +178,7 @@ data class Sniffer( @Serializable data class Sniff( - val QUIC: SniffQUIC? = null, - val TLS: SniffTLS? = null, - val HTTP: SniffHTTP? = null + val QUIC: SniffQUIC? = null, val TLS: SniffTLS? = null, val HTTP: SniffHTTP? = null ) @Serializable @@ -202,18 +193,14 @@ data class SniffTLS( @Serializable data class SniffHTTP( - val ports: List? = null, - val overrideDestination: Boolean? = null + val ports: List? = 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 + val network: String? = null, val address: String? = null, val target: String? = null, val proxy: String? = null ) : Tunnel() @Serializable @@ -259,81 +246,648 @@ data class FallbackFilter( val domain: List? = 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? = 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? = null +// ) +// +// @Serializable +// data class H2Opts( +// val host: List? = 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? = 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? = 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? = null +// ) : Proxy() { +// @Serializable +// data class Peer( +// val server: String? = null, +// val port: Int? = null, +// val publicKey: String? = null, +// val allowedIps: List? = 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 - data class Socks5Proxy( + @SerialName("direct") + data class DirectProxy( 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 + 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? = null, - val port: Int? = null, + val server: String, + val port: Int, val username: String? = null, val password: String? = null, val tls: Boolean? = null, - val skipCertVerify: Boolean? = null, val sni: String? = null, + val skipCertVerify: Boolean? = null, val fingerprint: String? = null, - val ipVersion: String? = null + val headers: Map? = 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? = 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? = 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? = 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, - val obfsOpts: ObfsOpts? = null - ) : Proxy() { - @Serializable - data class ObfsOpts( - val mode: String? = null, - val host: String? = null - ) - } + // TODO: +// val obfsOpts: Map? = 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 ShadowsocksProxy( + @SerialName("socks5") + data class Socks5Proxy( val name: String? = null, val server: String? = null, val port: Int? = null, - val cipher: String? = null, + val userName: String? = null, val password: String? = null, + val tls: Boolean? = 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? = null, - val clientFingerprint: String? = null, - val version: Int? = null, - val password: String? = null, - val restlsScript: String? = 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? = null, + val hostKeyAlgorithms: List? = 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? = 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? = 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? = 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? = 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, @@ -342,192 +896,168 @@ sealed class Proxy { val alterId: Int? = null, val cipher: String? = null, val udp: Boolean? = null, + val network: String? = null, val tls: Boolean? = null, + val alpn: List? = null, + val skipCertVerify: 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? = null - ) - - @Serializable - data class H2Opts( - val host: List? = 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 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, - 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? = 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? = 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 + 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 WireguardProxy( + @SerialName("wireguard") + 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 workers: Int? = null, + val mtu: Int? = null, val udp: Boolean? = null, - val reserved: String? = null, - val peers: List? = null - ) : Proxy() { - @Serializable - data class Peer( - val server: String? = null, - val port: Int? = null, - val publicKey: String? = null, - val allowedIps: List? = null, - val reserved: String? = null - ) - } + val persistentKeepalive: Int? = null, + val amneziaWGOption: AmneziaWGOption? = null, + val peers: List? = null, + val remoteDnsResolve: Boolean? = null, + val dns: List? = null, + val refreshServerIPInterval: Int? = 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 + 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 ShadowsocksRProxy( - val name: String? = null, + 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? = null, + val headers: Map>? = null, + ) + + @Serializable + data class HTTP2Options( + val host: List? = null, + val path: String? = null, + ) + + @Serializable + data class WSOptions( + val path: String? = null, + val headers: Map? = 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 cipher: String? = null, - val password: String? = null, - val obfs: String? = null, + val publicKey: String? = null, + val preSharedKey: String? = null, + val reserved: List? = null, + val allowedIPs: List? = 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 udp: Boolean? = null - ) : Proxy() + 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 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() + data class BrutalOption( + val enabled: Boolean? = null, + val up: String? = null, + val down: String? = null, + ) +} - @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 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 DNSProxy( - val name: String? = null - ) : Proxy() + 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? = null, - val type: String? = null + val name: String? = null, val proxies: List? = null, val type: String? = null ) : ProxyGroup() @Serializable @@ -604,16 +1134,12 @@ sealed class ProxyProvider { @Serializable data class InlineProxyProvider( - val type: String? = null, - val dialerProxy: String? = null, - val payload: List? = null + val type: String? = null, val dialerProxy: String? = null, val payload: List? = null ) : ProxyProvider() @Serializable data class FileProxyProvider( - val type: String? = null, - val path: String? = null, - val healthCheck: HealthCheck? = null + val type: String? = null, val path: String? = null, val healthCheck: HealthCheck? = null ) : ProxyProvider() } @@ -632,10 +1158,7 @@ sealed class RuleProvider { @Serializable data class FileRuleProvider( - val behavior: String? = null, - val interval: Int? = null, - val path: String? = null, - val type: String? = null + val behavior: String? = null, val interval: Int? = null, val path: String? = null, val type: String? = null ) : RuleProvider() @Serializable @@ -649,17 +1172,13 @@ sealed class RuleProvider { @Serializable data class InlineRuleProvider( - val type: String? = null, - val behavior: String? = null, - val payload: List? = null + val type: String? = null, val behavior: String? = null, val payload: List? = null ) : RuleProvider() } @Serializable data class Header( - val userAgent: List? = null, - val accept: List? = null, - val authorization: List? = null + val userAgent: List? = null, val accept: List? = null, val authorization: List? = null ) @Serializable @@ -688,8 +1207,7 @@ data class Override( @Serializable data class ProxyName( - val pattern: String? = null, - val target: String? = null + val pattern: String? = null, val target: String? = null ) @Serializable @@ -704,14 +1222,20 @@ data class Payload( @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( - val name: String? = null, - val port: Int? = null, - val listen: String? = null, - val rule: String? = null, - val proxy: String? = null, + 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? = null, val certificate: String? = null, val privateKey: String? = null @@ -720,11 +1244,11 @@ sealed class Listener { @Serializable @SerialName("socks") data class SocksListener( - val name: String? = null, - val port: Int? = null, - val listen: String? = null, - val rule: String? = null, - val proxy: String? = null, + 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? = null, val certificate: String? = null, @@ -734,11 +1258,11 @@ sealed class Listener { @Serializable @SerialName("mixed") data class MixedListener( - val name: String? = null, - val port: Int? = null, - val listen: String? = null, - val rule: String? = null, - val proxy: String? = null, + 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? = null, val certificate: String? = null, @@ -748,34 +1272,36 @@ sealed class Listener { @Serializable @SerialName("redir") data class RedirListener( - val name: String? = null, - val port: Int? = null, - val listen: String? = null, - val rule: String? = null, - val proxy: String? = null + 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( - val name: String? = null, - val port: Int? = null, - val listen: String? = null, - val rule: String? = null, - val proxy: String? = null, - val udp: Boolean? = null, + 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( - val name: String? = null, + 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? = null, val inet4Address: List? = null, val inet6Address: List? = null, - val rule: String? = null, - val proxy: String? = null, val autoDetectInterface: Boolean? = null, val autoRoute: Boolean? = null, val mtu: Int? = null, @@ -795,11 +1321,11 @@ sealed class Listener { @Serializable @SerialName("shadowsocks") data class ShadowsocksListener( - val name: String? = null, - val port: Int? = null, - val listen: String? = null, - val rule: String? = null, - val proxy: String? = null, + 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 @@ -808,15 +1334,14 @@ sealed class Listener { @Serializable @SerialName("vmess") data class VmessListener( - val name: String? = null, - val port: Int? = null, - val listen: String? = null, - val rule: String? = null, - val proxy: String? = null, + 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? = null, val privateKey: String? = null, val certificate: String? = null, - // Follows are from mihomo config yaml val wsPath: String? = null, val realityConfig: RealityConfig? = null ) : Listener() @@ -824,11 +1349,11 @@ sealed class Listener { @Serializable @SerialName("tuic") data class TuicListener( - val name: String? = null, - val port: Int? = null, - val listen: String? = null, - val rule: String? = null, - val proxy: String? = null, + 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? = null, val users: Map? = null, val certificate: String? = null, @@ -843,11 +1368,11 @@ sealed class Listener { @Serializable @SerialName("hysteria2") data class Hysteria2Listener( - val name: String? = null, - val port: Int? = null, - val listen: String? = null, - val rule: String? = null, - val proxy: String? = null, + 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? = null, val up: Int? = null, val down: Int? = null, @@ -857,17 +1382,17 @@ sealed class Listener { val masquerade: String? = null, val alpn: List? = null, val certificate: String? = null, - val privateKey: String? = null, + val privateKey: String? = null ) : Listener() @Serializable @SerialName("tunnel") data class TunnelListener( - val name: String? = null, - val port: Int? = null, - val listen: String? = null, - val rule: String? = null, - val proxy: String? = null, + 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? = null, val target: String? = null ) : Listener() @@ -875,11 +1400,11 @@ sealed class Listener { @Serializable @SerialName("vless") data class VlessListener( - val name: String? = null, - val port: Int? = null, - val listen: String? = null, - val rule: String? = null, - val proxy: String? = null, + 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? = null, val wsPath: String? = null, val certificate: String? = null, @@ -890,22 +1415,17 @@ sealed class Listener { @Serializable data class User( - val username: String? = null, - val password: String? = null + val username: String? = null, val password: String? = null ) @Serializable data class VmessUser( - val username: String? = null, - val uuid: String? = null, - val alterId: Int? = null + 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 + val username: String? = null, val uuid: String? = null, val flow: String? = null ) @Serializable