diff --git a/PasarGuardNodeBridge/common/service.proto b/PasarGuardNodeBridge/common/service.proto index 85e8f68..b5d2dd5 100644 --- a/PasarGuardNodeBridge/common/service.proto +++ b/PasarGuardNodeBridge/common/service.proto @@ -16,6 +16,7 @@ message BaseInfoResponse { enum BackendType { XRAY = 0; WIREGUARD = 1; + MTPROTO = 2; } message Backend { @@ -137,6 +138,16 @@ message Hysteria { string auth = 1; } +message Mtproto { + string secret = 1; + string user_ad_tag = 2; + uint32 max_tcp_conns = 3; + uint32 max_unique_ips = 4; + // Note: data quota and expiry are intentionally omitted. The panel owns + // quota/expiry enforcement (via usage reporting and user sync), the same as + // for the xray and wireguard backends; telemt must not enforce them. +} + message Proxy { Vmess vmess = 1; Vless vless = 2; @@ -144,6 +155,7 @@ message Proxy { Shadowsocks shadowsocks = 4; Wireguard wireguard = 5; Hysteria hysteria = 6; + Mtproto mtproto = 7; } message User { diff --git a/PasarGuardNodeBridge/common/service_pb2.py b/PasarGuardNodeBridge/common/service_pb2.py index 863932c..3cb9533 100644 --- a/PasarGuardNodeBridge/common/service_pb2.py +++ b/PasarGuardNodeBridge/common/service_pb2.py @@ -24,7 +24,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)PasarGuardNodeBridge/common/service.proto\x12\x07service\"\x07\n\x05\x45mpty\"O\n\x10\x42\x61seInfoResponse\x12\x0f\n\x07started\x18\x01 \x01(\x08\x12\x14\n\x0c\x63ore_version\x18\x02 \x01(\t\x12\x14\n\x0cnode_version\x18\x03 \x01(\t\"\x89\x01\n\x07\x42\x61\x63kend\x12\"\n\x04type\x18\x01 \x01(\x0e\x32\x14.service.BackendType\x12\x0e\n\x06\x63onfig\x18\x02 \x01(\t\x12\x1c\n\x05users\x18\x03 \x03(\x0b\x32\r.service.User\x12\x12\n\nkeep_alive\x18\x04 \x01(\x04\x12\x18\n\x10\x65xclude_inbounds\x18\x05 \x03(\t\"\x15\n\x03Log\x12\x0e\n\x06\x64\x65tail\x18\x01 \x01(\t\"?\n\x04Stat\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0c\n\x04link\x18\x03 \x01(\t\x12\r\n\x05value\x18\x04 \x01(\x03\",\n\x0cStatResponse\x12\x1c\n\x05stats\x18\x01 \x03(\x0b\x32\r.service.Stat\"K\n\x0bStatRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05reset\x18\x02 \x01(\x08\x12\x1f\n\x04type\x18\x03 \x01(\x0e\x32\x11.service.StatType\"1\n\x12OnlineStatResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03\"\x8f\x01\n\x19StatsOnlineIpListResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\x03ips\x18\x02 \x03(\x0b\x32+.service.StatsOnlineIpListResponse.IpsEntry\x1a*\n\x08IpsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\"\x82\x01\n\x07Latency\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05\x61live\x18\x02 \x01(\x08\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\x03\x12\x0c\n\x04link\x18\x04 \x01(\t\x12\x16\n\x0elast_seen_time\x18\x05 \x01(\x03\x12\x15\n\rlast_try_time\x18\x06 \x01(\x03\x12\x0e\n\x06source\x18\x07 \x01(\t\"\x1e\n\x0eLatencyRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"6\n\x0fLatencyResponse\x12#\n\tlatencies\x18\x01 \x03(\x0b\x32\x10.service.Latency\"\xcc\x01\n\x14\x42\x61\x63kendStatsResponse\x12\x15\n\rnum_goroutine\x18\x01 \x01(\r\x12\x0e\n\x06num_gc\x18\x02 \x01(\r\x12\r\n\x05\x61lloc\x18\x03 \x01(\x04\x12\x13\n\x0btotal_alloc\x18\x04 \x01(\x04\x12\x0b\n\x03sys\x18\x05 \x01(\x04\x12\x0f\n\x07mallocs\x18\x06 \x01(\x04\x12\r\n\x05\x66rees\x18\x07 \x01(\x04\x12\x14\n\x0clive_objects\x18\x08 \x01(\x04\x12\x16\n\x0epause_total_ns\x18\t \x01(\x04\x12\x0e\n\x06uptime\x18\n \x01(\r\"\xb4\x01\n\x13SystemStatsResponse\x12\x11\n\tmem_total\x18\x01 \x01(\x04\x12\x10\n\x08mem_used\x18\x02 \x01(\x04\x12\x11\n\tcpu_cores\x18\x03 \x01(\x04\x12\x11\n\tcpu_usage\x18\x04 \x01(\x01\x12 \n\x18incoming_bandwidth_speed\x18\x05 \x01(\x04\x12 \n\x18outgoing_bandwidth_speed\x18\x06 \x01(\x04\x12\x0e\n\x06uptime\x18\x07 \x01(\x04\"\x13\n\x05Vmess\x12\n\n\x02id\x18\x01 \x01(\t\"!\n\x05Vless\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04\x66low\x18\x02 \x01(\t\"\x1a\n\x06Trojan\x12\x10\n\x08password\x18\x01 \x01(\t\"/\n\x0bShadowsocks\x12\x10\n\x08password\x18\x01 \x01(\t\x12\x0e\n\x06method\x18\x02 \x01(\t\"1\n\tWireguard\x12\x12\n\npublic_key\x18\x01 \x01(\t\x12\x10\n\x08peer_ips\x18\x02 \x03(\t\"\x18\n\x08Hysteria\x12\x0c\n\x04\x61uth\x18\x01 \x01(\t\"\xdd\x01\n\x05Proxy\x12\x1d\n\x05vmess\x18\x01 \x01(\x0b\x32\x0e.service.Vmess\x12\x1d\n\x05vless\x18\x02 \x01(\x0b\x32\x0e.service.Vless\x12\x1f\n\x06trojan\x18\x03 \x01(\x0b\x32\x0f.service.Trojan\x12)\n\x0bshadowsocks\x18\x04 \x01(\x0b\x32\x14.service.Shadowsocks\x12%\n\twireguard\x18\x05 \x01(\x0b\x32\x12.service.Wireguard\x12#\n\x08hysteria\x18\x06 \x01(\x0b\x32\x11.service.Hysteria\"H\n\x04User\x12\r\n\x05\x65mail\x18\x01 \x01(\t\x12\x1f\n\x07proxies\x18\x02 \x01(\x0b\x32\x0e.service.Proxy\x12\x10\n\x08inbounds\x18\x03 \x03(\t\"%\n\x05Users\x12\x1c\n\x05users\x18\x01 \x03(\x0b\x32\r.service.User\"G\n\nUsersChunk\x12\x1c\n\x05users\x18\x01 \x03(\x0b\x32\r.service.User\x12\r\n\x05index\x18\x02 \x01(\x04\x12\x0c\n\x04last\x18\x03 \x01(\x08*&\n\x0b\x42\x61\x63kendType\x12\x08\n\x04XRAY\x10\x00\x12\r\n\tWIREGUARD\x10\x01*_\n\x08StatType\x12\r\n\tOutbounds\x10\x00\x12\x0c\n\x08Outbound\x10\x01\x12\x0c\n\x08Inbounds\x10\x02\x12\x0b\n\x07Inbound\x10\x03\x12\r\n\tUsersStat\x10\x04\x12\x0c\n\x08UserStat\x10\x05\x32\xa3\x06\n\x0bNodeService\x12\x36\n\x05Start\x12\x10.service.Backend\x1a\x19.service.BaseInfoResponse\"\x00\x12(\n\x04Stop\x12\x0e.service.Empty\x1a\x0e.service.Empty\"\x00\x12:\n\x0bGetBaseInfo\x12\x0e.service.Empty\x1a\x19.service.BaseInfoResponse\"\x00\x12+\n\x07GetLogs\x12\x0e.service.Empty\x1a\x0c.service.Log\"\x00\x30\x01\x12@\n\x0eGetSystemStats\x12\x0e.service.Empty\x1a\x1c.service.SystemStatsResponse\"\x00\x12\x42\n\x0fGetBackendStats\x12\x0e.service.Empty\x1a\x1d.service.BackendStatsResponse\"\x00\x12\x39\n\x08GetStats\x12\x14.service.StatRequest\x1a\x15.service.StatResponse\"\x00\x12J\n\x13GetOutboundsLatency\x12\x17.service.LatencyRequest\x1a\x18.service.LatencyResponse\"\x00\x12I\n\x12GetUserOnlineStats\x12\x14.service.StatRequest\x1a\x1b.service.OnlineStatResponse\"\x00\x12V\n\x18GetUserOnlineIpListStats\x12\x14.service.StatRequest\x1a\".service.StatsOnlineIpListResponse\"\x00\x12-\n\x08SyncUser\x12\r.service.User\x1a\x0e.service.Empty\"\x00(\x01\x12-\n\tSyncUsers\x12\x0e.service.Users\x1a\x0e.service.Empty\"\x00\x12;\n\x10SyncUsersChunked\x12\x13.service.UsersChunk\x1a\x0e.service.Empty\"\x00(\x01\x42#Z!github.com/pasarguard/node/commonb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)PasarGuardNodeBridge/common/service.proto\x12\x07service\"\x07\n\x05\x45mpty\"O\n\x10\x42\x61seInfoResponse\x12\x0f\n\x07started\x18\x01 \x01(\x08\x12\x14\n\x0c\x63ore_version\x18\x02 \x01(\t\x12\x14\n\x0cnode_version\x18\x03 \x01(\t\"\x89\x01\n\x07\x42\x61\x63kend\x12\"\n\x04type\x18\x01 \x01(\x0e\x32\x14.service.BackendType\x12\x0e\n\x06\x63onfig\x18\x02 \x01(\t\x12\x1c\n\x05users\x18\x03 \x03(\x0b\x32\r.service.User\x12\x12\n\nkeep_alive\x18\x04 \x01(\x04\x12\x18\n\x10\x65xclude_inbounds\x18\x05 \x03(\t\"\x15\n\x03Log\x12\x0e\n\x06\x64\x65tail\x18\x01 \x01(\t\"?\n\x04Stat\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0c\n\x04link\x18\x03 \x01(\t\x12\r\n\x05value\x18\x04 \x01(\x03\",\n\x0cStatResponse\x12\x1c\n\x05stats\x18\x01 \x03(\x0b\x32\r.service.Stat\"K\n\x0bStatRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05reset\x18\x02 \x01(\x08\x12\x1f\n\x04type\x18\x03 \x01(\x0e\x32\x11.service.StatType\"1\n\x12OnlineStatResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03\"\x8f\x01\n\x19StatsOnlineIpListResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\x03ips\x18\x02 \x03(\x0b\x32+.service.StatsOnlineIpListResponse.IpsEntry\x1a*\n\x08IpsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\"\x82\x01\n\x07Latency\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05\x61live\x18\x02 \x01(\x08\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\x03\x12\x0c\n\x04link\x18\x04 \x01(\t\x12\x16\n\x0elast_seen_time\x18\x05 \x01(\x03\x12\x15\n\rlast_try_time\x18\x06 \x01(\x03\x12\x0e\n\x06source\x18\x07 \x01(\t\"\x1e\n\x0eLatencyRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"6\n\x0fLatencyResponse\x12#\n\tlatencies\x18\x01 \x03(\x0b\x32\x10.service.Latency\"\xcc\x01\n\x14\x42\x61\x63kendStatsResponse\x12\x15\n\rnum_goroutine\x18\x01 \x01(\r\x12\x0e\n\x06num_gc\x18\x02 \x01(\r\x12\r\n\x05\x61lloc\x18\x03 \x01(\x04\x12\x13\n\x0btotal_alloc\x18\x04 \x01(\x04\x12\x0b\n\x03sys\x18\x05 \x01(\x04\x12\x0f\n\x07mallocs\x18\x06 \x01(\x04\x12\r\n\x05\x66rees\x18\x07 \x01(\x04\x12\x14\n\x0clive_objects\x18\x08 \x01(\x04\x12\x16\n\x0epause_total_ns\x18\t \x01(\x04\x12\x0e\n\x06uptime\x18\n \x01(\r\"\xb4\x01\n\x13SystemStatsResponse\x12\x11\n\tmem_total\x18\x01 \x01(\x04\x12\x10\n\x08mem_used\x18\x02 \x01(\x04\x12\x11\n\tcpu_cores\x18\x03 \x01(\x04\x12\x11\n\tcpu_usage\x18\x04 \x01(\x01\x12 \n\x18incoming_bandwidth_speed\x18\x05 \x01(\x04\x12 \n\x18outgoing_bandwidth_speed\x18\x06 \x01(\x04\x12\x0e\n\x06uptime\x18\x07 \x01(\x04\"\x13\n\x05Vmess\x12\n\n\x02id\x18\x01 \x01(\t\"!\n\x05Vless\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04\x66low\x18\x02 \x01(\t\"\x1a\n\x06Trojan\x12\x10\n\x08password\x18\x01 \x01(\t\"/\n\x0bShadowsocks\x12\x10\n\x08password\x18\x01 \x01(\t\x12\x0e\n\x06method\x18\x02 \x01(\t\"1\n\tWireguard\x12\x12\n\npublic_key\x18\x01 \x01(\t\x12\x10\n\x08peer_ips\x18\x02 \x03(\t\"\x18\n\x08Hysteria\x12\x0c\n\x04\x61uth\x18\x01 \x01(\t\"]\n\x07Mtproto\x12\x0e\n\x06secret\x18\x01 \x01(\t\x12\x13\n\x0buser_ad_tag\x18\x02 \x01(\t\x12\x15\n\rmax_tcp_conns\x18\x03 \x01(\r\x12\x16\n\x0emax_unique_ips\x18\x04 \x01(\r\"\x80\x02\n\x05Proxy\x12\x1d\n\x05vmess\x18\x01 \x01(\x0b\x32\x0e.service.Vmess\x12\x1d\n\x05vless\x18\x02 \x01(\x0b\x32\x0e.service.Vless\x12\x1f\n\x06trojan\x18\x03 \x01(\x0b\x32\x0f.service.Trojan\x12)\n\x0bshadowsocks\x18\x04 \x01(\x0b\x32\x14.service.Shadowsocks\x12%\n\twireguard\x18\x05 \x01(\x0b\x32\x12.service.Wireguard\x12#\n\x08hysteria\x18\x06 \x01(\x0b\x32\x11.service.Hysteria\x12!\n\x07mtproto\x18\x07 \x01(\x0b\x32\x10.service.Mtproto\"H\n\x04User\x12\r\n\x05\x65mail\x18\x01 \x01(\t\x12\x1f\n\x07proxies\x18\x02 \x01(\x0b\x32\x0e.service.Proxy\x12\x10\n\x08inbounds\x18\x03 \x03(\t\"%\n\x05Users\x12\x1c\n\x05users\x18\x01 \x03(\x0b\x32\r.service.User\"G\n\nUsersChunk\x12\x1c\n\x05users\x18\x01 \x03(\x0b\x32\r.service.User\x12\r\n\x05index\x18\x02 \x01(\x04\x12\x0c\n\x04last\x18\x03 \x01(\x08*3\n\x0b\x42\x61\x63kendType\x12\x08\n\x04XRAY\x10\x00\x12\r\n\tWIREGUARD\x10\x01\x12\x0b\n\x07MTPROTO\x10\x02*_\n\x08StatType\x12\r\n\tOutbounds\x10\x00\x12\x0c\n\x08Outbound\x10\x01\x12\x0c\n\x08Inbounds\x10\x02\x12\x0b\n\x07Inbound\x10\x03\x12\r\n\tUsersStat\x10\x04\x12\x0c\n\x08UserStat\x10\x05\x32\xa3\x06\n\x0bNodeService\x12\x36\n\x05Start\x12\x10.service.Backend\x1a\x19.service.BaseInfoResponse\"\x00\x12(\n\x04Stop\x12\x0e.service.Empty\x1a\x0e.service.Empty\"\x00\x12:\n\x0bGetBaseInfo\x12\x0e.service.Empty\x1a\x19.service.BaseInfoResponse\"\x00\x12+\n\x07GetLogs\x12\x0e.service.Empty\x1a\x0c.service.Log\"\x00\x30\x01\x12@\n\x0eGetSystemStats\x12\x0e.service.Empty\x1a\x1c.service.SystemStatsResponse\"\x00\x12\x42\n\x0fGetBackendStats\x12\x0e.service.Empty\x1a\x1d.service.BackendStatsResponse\"\x00\x12\x39\n\x08GetStats\x12\x14.service.StatRequest\x1a\x15.service.StatResponse\"\x00\x12J\n\x13GetOutboundsLatency\x12\x17.service.LatencyRequest\x1a\x18.service.LatencyResponse\"\x00\x12I\n\x12GetUserOnlineStats\x12\x14.service.StatRequest\x1a\x1b.service.OnlineStatResponse\"\x00\x12V\n\x18GetUserOnlineIpListStats\x12\x14.service.StatRequest\x1a\".service.StatsOnlineIpListResponse\"\x00\x12-\n\x08SyncUser\x12\r.service.User\x1a\x0e.service.Empty\"\x00(\x01\x12-\n\tSyncUsers\x12\x0e.service.Users\x1a\x0e.service.Empty\"\x00\x12;\n\x10SyncUsersChunked\x12\x13.service.UsersChunk\x1a\x0e.service.Empty\"\x00(\x01\x42#Z!github.com/pasarguard/node/commonb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -34,10 +34,10 @@ _globals['DESCRIPTOR']._serialized_options = b'Z!github.com/pasarguard/node/common' _globals['_STATSONLINEIPLISTRESPONSE_IPSENTRY']._loaded_options = None _globals['_STATSONLINEIPLISTRESPONSE_IPSENTRY']._serialized_options = b'8\001' - _globals['_BACKENDTYPE']._serialized_start=1923 - _globals['_BACKENDTYPE']._serialized_end=1961 - _globals['_STATTYPE']._serialized_start=1963 - _globals['_STATTYPE']._serialized_end=2058 + _globals['_BACKENDTYPE']._serialized_start=2053 + _globals['_BACKENDTYPE']._serialized_end=2104 + _globals['_STATTYPE']._serialized_start=2106 + _globals['_STATTYPE']._serialized_end=2201 _globals['_EMPTY']._serialized_start=54 _globals['_EMPTY']._serialized_end=61 _globals['_BASEINFORESPONSE']._serialized_start=63 @@ -80,14 +80,16 @@ _globals['_WIREGUARD']._serialized_end=1485 _globals['_HYSTERIA']._serialized_start=1487 _globals['_HYSTERIA']._serialized_end=1511 - _globals['_PROXY']._serialized_start=1514 - _globals['_PROXY']._serialized_end=1735 - _globals['_USER']._serialized_start=1737 - _globals['_USER']._serialized_end=1809 - _globals['_USERS']._serialized_start=1811 - _globals['_USERS']._serialized_end=1848 - _globals['_USERSCHUNK']._serialized_start=1850 - _globals['_USERSCHUNK']._serialized_end=1921 - _globals['_NODESERVICE']._serialized_start=2061 - _globals['_NODESERVICE']._serialized_end=2864 + _globals['_MTPROTO']._serialized_start=1513 + _globals['_MTPROTO']._serialized_end=1606 + _globals['_PROXY']._serialized_start=1609 + _globals['_PROXY']._serialized_end=1865 + _globals['_USER']._serialized_start=1867 + _globals['_USER']._serialized_end=1939 + _globals['_USERS']._serialized_start=1941 + _globals['_USERS']._serialized_end=1978 + _globals['_USERSCHUNK']._serialized_start=1980 + _globals['_USERSCHUNK']._serialized_end=2051 + _globals['_NODESERVICE']._serialized_start=2204 + _globals['_NODESERVICE']._serialized_end=3007 # @@protoc_insertion_point(module_scope) diff --git a/PasarGuardNodeBridge/common/service_pb2.pyi b/PasarGuardNodeBridge/common/service_pb2.pyi index c3c534f..e948868 100644 --- a/PasarGuardNodeBridge/common/service_pb2.pyi +++ b/PasarGuardNodeBridge/common/service_pb2.pyi @@ -11,6 +11,7 @@ class BackendType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () XRAY: _ClassVar[BackendType] WIREGUARD: _ClassVar[BackendType] + MTPROTO: _ClassVar[BackendType] class StatType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () @@ -22,6 +23,7 @@ class StatType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): UserStat: _ClassVar[StatType] XRAY: BackendType WIREGUARD: BackendType +MTPROTO: BackendType Outbounds: StatType Outbound: StatType Inbounds: StatType @@ -228,21 +230,35 @@ class Hysteria(_message.Message): auth: str def __init__(self, auth: _Optional[str] = ...) -> None: ... +class Mtproto(_message.Message): + __slots__ = ("secret", "user_ad_tag", "max_tcp_conns", "max_unique_ips") + SECRET_FIELD_NUMBER: _ClassVar[int] + USER_AD_TAG_FIELD_NUMBER: _ClassVar[int] + MAX_TCP_CONNS_FIELD_NUMBER: _ClassVar[int] + MAX_UNIQUE_IPS_FIELD_NUMBER: _ClassVar[int] + secret: str + user_ad_tag: str + max_tcp_conns: int + max_unique_ips: int + def __init__(self, secret: _Optional[str] = ..., user_ad_tag: _Optional[str] = ..., max_tcp_conns: _Optional[int] = ..., max_unique_ips: _Optional[int] = ...) -> None: ... + class Proxy(_message.Message): - __slots__ = ("vmess", "vless", "trojan", "shadowsocks", "wireguard", "hysteria") + __slots__ = ("vmess", "vless", "trojan", "shadowsocks", "wireguard", "hysteria", "mtproto") VMESS_FIELD_NUMBER: _ClassVar[int] VLESS_FIELD_NUMBER: _ClassVar[int] TROJAN_FIELD_NUMBER: _ClassVar[int] SHADOWSOCKS_FIELD_NUMBER: _ClassVar[int] WIREGUARD_FIELD_NUMBER: _ClassVar[int] HYSTERIA_FIELD_NUMBER: _ClassVar[int] + MTPROTO_FIELD_NUMBER: _ClassVar[int] vmess: Vmess vless: Vless trojan: Trojan shadowsocks: Shadowsocks wireguard: Wireguard hysteria: Hysteria - def __init__(self, vmess: _Optional[_Union[Vmess, _Mapping]] = ..., vless: _Optional[_Union[Vless, _Mapping]] = ..., trojan: _Optional[_Union[Trojan, _Mapping]] = ..., shadowsocks: _Optional[_Union[Shadowsocks, _Mapping]] = ..., wireguard: _Optional[_Union[Wireguard, _Mapping]] = ..., hysteria: _Optional[_Union[Hysteria, _Mapping]] = ...) -> None: ... + mtproto: Mtproto + def __init__(self, vmess: _Optional[_Union[Vmess, _Mapping]] = ..., vless: _Optional[_Union[Vless, _Mapping]] = ..., trojan: _Optional[_Union[Trojan, _Mapping]] = ..., shadowsocks: _Optional[_Union[Shadowsocks, _Mapping]] = ..., wireguard: _Optional[_Union[Wireguard, _Mapping]] = ..., hysteria: _Optional[_Union[Hysteria, _Mapping]] = ..., mtproto: _Optional[_Union[Mtproto, _Mapping]] = ...) -> None: ... class User(_message.Message): __slots__ = ("email", "proxies", "inbounds") diff --git a/PasarGuardNodeBridge/utils.py b/PasarGuardNodeBridge/utils.py index 2f3939b..9a0a8ba 100644 --- a/PasarGuardNodeBridge/utils.py +++ b/PasarGuardNodeBridge/utils.py @@ -5,6 +5,7 @@ from PasarGuardNodeBridge.common.service_pb2 import ( Hysteria, + Mtproto, Proxy, Shadowsocks, Trojan, @@ -29,6 +30,10 @@ def create_proxy( wireguard_public_key: str | None = None, wireguard_peer_ips: list[str] | None = None, hysteria_auth: str | None = None, + mtproto_secret: str | None = None, + mtproto_user_ad_tag: str | None = None, + mtproto_max_tcp_conns: int = 0, + mtproto_max_unique_ips: int = 0, ) -> Proxy: if wireguard_peer_ips is None: wireguard_peer_ips = [] @@ -40,6 +45,12 @@ def create_proxy( shadowsocks=Shadowsocks(password=shadowsocks_password, method=shadowsocks_method), wireguard=Wireguard(public_key=wireguard_public_key, peer_ips=wireguard_peer_ips), hysteria=Hysteria(auth=hysteria_auth), + mtproto=Mtproto( + secret=mtproto_secret, + user_ad_tag=mtproto_user_ad_tag, + max_tcp_conns=mtproto_max_tcp_conns, + max_unique_ips=mtproto_max_unique_ips, + ), )