export const subscribeSchema = { SiteName: { type: 'string', description: 'Site name' }, SubscribeName: { type: 'string', description: 'Subscribe name' }, Proxies: { type: 'array', description: 'Array of proxy nodes', items: { type: 'object', properties: { Name: { type: 'string', description: 'Node name' }, Server: { type: 'string', description: 'Server host' }, Port: { type: 'number', description: 'Server port' }, Type: { type: 'string', description: 'Proxy type' }, Tags: { type: 'array', description: 'Node tags', items: { type: 'string' }, }, Sort: { type: 'number', description: 'Node sort order' }, // Security Options Security: { type: 'string', description: 'Security protocol', }, SNI: { type: 'string', description: 'Server Name Indication for TLS', }, AllowInsecure: { type: 'boolean', description: 'Allow insecure connections (skip certificate verification)', }, Fingerprint: { type: 'string', description: 'Client fingerprint for TLS connections', }, RealityServerAddr: { type: 'string', description: 'Reality server address', }, RealityServerPort: { type: 'number', description: 'Reality server port', }, RealityPrivateKey: { type: 'string', description: 'Reality private key for authentication', }, RealityPublicKey: { type: 'string', description: 'Reality public key for authentication', }, RealityShortId: { type: 'string', description: 'Reality short ID for authentication', }, // Transport Options Transport: { type: 'string', description: 'Transport protocol (e.g., ws, http, grpc)', }, Host: { type: 'string', description: 'For WebSocket/HTTP/HTTPS', }, Path: { type: 'string', description: 'For HTTP/HTTPS' }, ServiceName: { type: 'string', description: 'For gRPC', }, // Shadowsocks Options Method: { type: 'string', description: 'Encryption method' }, ServerKey: { type: 'string', description: 'For Shadowsocks 2022', }, // Vmess/Vless/Trojan Options Flow: { type: 'string', description: 'Flow for Vmess/Vless/Trojan', }, // Hysteria2 Options HopPorts: { type: 'string', description: 'Comma-separated list of hop ports', }, HopInterval: { type: 'number', description: 'Interval for hop ports in seconds', }, ObfsPassword: { type: 'string', description: 'Obfuscation password for Hysteria2', }, // Tuic Options DisableSNI: { type: 'boolean', description: 'Disable SNI', }, ReduceRtt: { type: 'boolean', description: 'Reduce RTT', }, UDPRelayMode: { type: 'string', description: 'UDP relay mode (e.g., "full", "partial")', }, CongestionController: { type: 'string', description: 'Congestion controller (e.g., "cubic", "bbr")', }, // Hysteria2 additional options UpMbps: { type: 'number', description: 'Upload bandwidth in Mbps', }, DownMbps: { type: 'number', description: 'Download bandwidth in Mbps', }, // VLESS encryption options Encryption: { type: 'string', description: 'Encryption type for VLESS', }, EncryptionMode: { type: 'string', description: 'Encryption mode (e.g., "native", "xorpub", "random")', }, EncryptionRtt: { type: 'string', description: 'Encryption RTT (e.g., "0rtt", "1rtt")', }, EncryptionTicket: { type: 'string', description: 'Encryption ticket', }, EncryptionServerPadding: { type: 'string', description: 'Server padding for encryption', }, EncryptionClientPadding: { type: 'string', description: 'Client padding for encryption', }, EncryptionPassword: { type: 'string', description: 'Encryption password', }, EncryptionPrivateKey: { type: 'string', description: 'Private key for encryption', }, // XHTTP options XhttpMode: { type: 'string', description: 'XHTTP mode (e.g., "auto", "packet-up", "stream-up", "stream-one")', }, XhttpExtra: { type: 'string', description: 'XHTTP extra parameters', }, // Shadowsocks obfs options (combined with Hysteria2 obfs) ObfsHost: { type: 'string', description: 'Obfuscation host', }, ObfsPath: { type: 'string', description: 'Obfuscation path', }, // Shadowsocks cipher Cipher: { type: 'string', description: 'Shadowsocks cipher method', }, // AnyTLS options PaddingScheme: { type: 'string', description: 'Padding scheme for AnyTLS', }, // Mieru options Multiplex: { type: 'string', description: 'Multiplex level (e.g., "none", "low", "middle", "high")', }, // General protocol field Enable: { type: 'boolean', description: 'Whether this protocol is enabled', }, // UUID for vmess/vless UUID: { type: 'string', description: 'User UUID for vmess/vless protocols', }, // Alternative ID for vmess AlterId: { type: 'number', description: 'Alternative ID for vmess (deprecated)', }, // Password for trojan/tuic Password: { type: 'string', description: 'Password for authentication', }, }, }, }, UserInfo: { type: 'object', description: 'User information', properties: { Password: { type: 'string', description: 'User password' }, ExpiredAt: { type: 'string', description: 'Expiration date' }, Download: { type: 'number', description: 'Downloaded bytes' }, Upload: { type: 'number', description: 'Uploaded bytes' }, Traffic: { type: 'number', description: 'Total traffic bytes' }, SubscribeURL: { type: 'string', description: 'Subscription URL', }, }, }, };