From 2b29f740871290a76fc4a5a396264409383b484d Mon Sep 17 00:00:00 2001 From: Artem Date: Tue, 29 Apr 2025 23:51:20 +0200 Subject: [PATCH] feat: Update user models with new fields and types; add support for hwidDeviceLimit and HappCrypto --- .gitignore | 3 ++- pyproject.toml | 4 +++- remnawave_api/models/users.py | 16 ++++++++++++++-- remnawave_api/models/users_bulk_actions.py | 3 ++- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 0a166c9..dfb63b8 100644 --- a/.gitignore +++ b/.gitignore @@ -175,4 +175,5 @@ cython_debug/ .pypirc test.py .DS_Store -docs/ \ No newline at end of file +docs/ +openapi/ diff --git a/pyproject.toml b/pyproject.toml index aff2ec7..dbb9578 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "remnawave-api" -version = "1.0.7" +version = "1.0.8" description = "A Python SDK for interacting with the Remnawave API." authors = [ {name = "Artem",email = "sm1ky@forestsnet.com"} @@ -12,6 +12,8 @@ dependencies = [ "rapid-api-client (==0.6.0)", "orjson (>=3.10.15,<4.0.0)", "httpx (>=0.27.2,<0.28.0)", + "pydantic-core (==2.33.1)", + "pydantic[email]", ] keywords = ["remnawave", "api", "sdk", "proxy", "httpx", "async", "xray"] classifiers = [ diff --git a/remnawave_api/models/users.py b/remnawave_api/models/users.py index 2f2bde4..67e86b1 100644 --- a/remnawave_api/models/users.py +++ b/remnawave_api/models/users.py @@ -21,6 +21,8 @@ class UserLastConnectedNodeDto(BaseModel): connected_at: datetime = Field(alias="connectedAt") node_name: str = Field(alias="nodeName") +class HappCrypto(BaseModel): + cryptoLink: str class CreateUserRequestDto(BaseModel): username: Annotated[ @@ -55,6 +57,9 @@ class CreateUserRequestDto(BaseModel): description: Optional[str] = None telegram_id: Optional[int] = Field(None, serialization_alias="telegramId") email: Optional[str] = None + hwidDeviceLimit: Optional[int] = Field( + None, serialization_alias="hwidDeviceLimit", strict=True, ge=0 + ) activate_all_inbounds: Optional[bool] = Field( None, serialization_alias="activateAllInbounds" ) @@ -79,6 +84,9 @@ class UpdateUserRequestDto(BaseModel): description: Optional[str] = None telegram_id: Optional[int] = Field(None, serialization_alias="telegramId") email: Optional[str] = None + hwidDeviceLimit: Optional[int] = Field( + None, serialization_alias="hwidDeviceLimit", strict=True, ge=0 + ) class UserResponseDto(BaseModel): @@ -103,15 +111,19 @@ class UserResponseDto(BaseModel): description: Optional[str] = None telegram_id: Optional[int] = Field(None, alias="telegramId") email: Optional[str] = None - created_at: datetime = Field(alias="createdAt") - updated_at: datetime = Field(alias="updatedAt") + hwidDeviceLimit: Optional[int] = Field( + None, serialization_alias="hwidDeviceLimit", strict=True, ge=0 + ) active_user_inbounds: List[UserActiveInboundsDto] = Field( alias="activeUserInbounds" ) + created_at: datetime = Field(alias="createdAt") + updated_at: datetime = Field(alias="updatedAt") subscription_url: str = Field(alias="subscriptionUrl") last_connected_node: Optional[UserLastConnectedNodeDto] = Field( None, alias="lastConnectedNode" ) + happ: Optional[HappCrypto] = Field(None, alias="happ") class EmailUserResponseDto(BaseModel): diff --git a/remnawave_api/models/users_bulk_actions.py b/remnawave_api/models/users_bulk_actions.py index c59c17a..b1f2c3a 100644 --- a/remnawave_api/models/users_bulk_actions.py +++ b/remnawave_api/models/users_bulk_actions.py @@ -5,6 +5,7 @@ from uuid import UUID from pydantic import BaseModel, Field from remnawave_api.enums import UserStatus +from remnawave_api.enums.users import TrafficLimitStrategy class BulkUpdateUsersInboundsRequestDto(BaseModel): @@ -17,7 +18,7 @@ class UpdateUserFields(BaseModel): traffic_limit_bytes: Optional[int] = Field( None, serialization_alias="trafficLimitBytes", strict=True, ge=0 ) - traffic_limit_strategy: Optional[str] = Field( + traffic_limit_strategy: Optional[TrafficLimitStrategy] = Field( None, serialization_alias="trafficLimitStrategy" ) expire_at: Optional[datetime] = Field(None, serialization_alias="expireAt")