11from datetime import datetime
22from typing import Any , Dict , List , Optional
3+ from uuid import UUID
34
45from pydantic import BaseModel , Field
56
@@ -25,7 +26,6 @@ class UserSubscription(BaseModel):
2526 user_status : UserStatus = Field (alias = "userStatus" )
2627 is_active : bool = Field (alias = "isActive" )
2728
28-
2929class SubscriptionInfoData (BaseModel ):
3030 is_found : bool = Field (alias = "isFound" )
3131 user : UserSubscription
@@ -43,6 +43,63 @@ class GetSubscriptionInfoResponseDto(BaseModel):
4343 subscription_url : str = Field (alias = "subscriptionUrl" )
4444 happ : HappCrypto
4545
46+ class UserLastConnectedNodeDto (BaseModel ):
47+ connected_at : datetime = Field (alias = "connectedAt" )
48+ node_name : str = Field (alias = "nodeName" )
49+ country_code : Optional [str ] = Field (None , alias = "countryCode" ) # новое поле
50+
51+ class ActiveInternalSquadDto (BaseModel ):
52+ uuid : UUID
53+ name : str
54+
55+ class HappCrypto (BaseModel ):
56+ crypto_link : str = Field (alias = "cryptoLink" )
57+
58+ class UserResponseDto (BaseModel ):
59+ uuid : UUID
60+ short_uuid : str = Field (alias = "shortUuid" )
61+ username : str
62+ status : str
63+ used_traffic_bytes : float = Field (alias = "usedTrafficBytes" )
64+ lifetime_used_traffic_bytes : float = Field (alias = "lifetimeUsedTrafficBytes" )
65+ traffic_limit_bytes : int = Field (alias = "trafficLimitBytes" )
66+ traffic_limit_strategy : str = Field (alias = "trafficLimitStrategy" )
67+ sub_last_user_agent : Optional [str ] = Field (None , alias = "subLastUserAgent" )
68+ sub_last_opened_at : Optional [datetime ] = Field (None , alias = "subLastOpenedAt" )
69+ expire_at : datetime = Field (alias = "expireAt" )
70+ online_at : Optional [datetime ] = Field (None , alias = "onlineAt" )
71+ sub_revoked_at : Optional [datetime ] = Field (None , alias = "subRevokedAt" )
72+ last_traffic_reset_at : Optional [datetime ] = Field (None , alias = "lastTrafficResetAt" )
73+ trojan_password : str = Field (alias = "trojanPassword" )
74+ vless_uuid : UUID = Field (alias = "vlessUuid" )
75+ ss_password : str = Field (alias = "ssPassword" )
76+ description : Optional [str ] = None
77+ tag : Optional [str ] = None
78+ telegram_id : Optional [int ] = Field (None , alias = "telegramId" )
79+ email : Optional [str ] = None
80+ hwidDeviceLimit : Optional [int ] = Field (None , alias = "hwidDeviceLimit" )
81+ first_connected_at : Optional [datetime ] = Field (None , alias = "firstConnectedAt" )
82+ last_triggered_threshold : int = Field (alias = "lastTriggeredThreshold" )
83+ created_at : datetime = Field (alias = "createdAt" )
84+ updated_at : datetime = Field (alias = "updatedAt" )
85+ active_internal_squads : List [ActiveInternalSquadDto ] = Field (alias = "activeInternalSquads" )
86+ subscription_url : str = Field (alias = "subscriptionUrl" )
87+ last_connected_node : Optional [UserLastConnectedNodeDto ] = Field (None , alias = "lastConnectedNode" )
88+ happ : Optional [HappCrypto ] = Field (None , alias = "happ" )
89+
90+ class ConvertedUserInfo (BaseModel ):
91+ days_left : int = Field (alias = "daysLeft" )
92+ traffic_limit : str = Field (alias = "trafficLimit" )
93+ traffic_used : str = Field (alias = "trafficUsed" )
94+ lifetime_traffic_used : str = Field (alias = "lifetimeTrafficUsed" )
95+ is_hwid_limited : bool = Field (alias = "isHwidLimited" )
96+
97+ class Passwords (BaseModel ):
98+ ss_password : Optional [str ] = Field (None , alias = "ssPassword" )
99+ trojan_password : Optional [str ] = Field (None , alias = "trojanPassword" )
100+ vless_password : Optional [str ] = Field (None , alias = "vlessPassword" )
101+
102+
46103
47104class RawHostAdditionalParams (BaseModel ):
48105 mode : Optional [str ] = None
@@ -68,14 +125,13 @@ class RawHostDbData(BaseModel):
68125 is_hidden : bool = Field (alias = "isHidden" )
69126 tag : Optional [str ] = None
70127
71-
72128class RawHost (BaseModel ):
73129 address : Optional [str ] = None
74130 alpn : Optional [str ] = None
75131 fingerprint : Optional [str ] = None
76132 host : Optional [str ] = None
77133 network : Optional [str ] = None
78- password : Optional [str ] = None
134+ password : Optional [Passwords ] = None
79135 path : Optional [str ] = None
80136 public_key : Optional [str ] = Field (None , alias = "publicKey" )
81137 port : Optional [int ] = None
@@ -95,14 +151,11 @@ class RawHost(BaseModel):
95151 protocol_options : Optional [RawHostProtocolOptions ] = Field (None , alias = "protocolOptions" )
96152 db_data : RawHostDbData = Field (alias = "dbData" )
97153
98-
99154class RawSubscriptionResponse (BaseModel ):
100- user : UserSubscription
101- subscription_url : str = Field (alias = "subscriptionUrl" )
102- raw_hosts : List [RawHost ] = Field (alias = "rawHosts" )
155+ user : UserResponseDto
156+ converted_user_info : ConvertedUserInfo = Field (alias = "convertedUserInfo" )
103157 headers : Dict [str , str ]
104- is_hwid_limited : bool = Field (alias = "isHwidLimited" )
105-
158+ raw_hosts : List [RawHost ] = Field (alias = "rawHosts" )
106159
107160class GetRawSubscriptionByShortUuidResponseDto (RawSubscriptionResponse ):
108161 pass
0 commit comments