diff --git a/hyperbrowser/client/managers/async_manager/session.py b/hyperbrowser/client/managers/async_manager/session.py index 690b840..4fcfc3c 100644 --- a/hyperbrowser/client/managers/async_manager/session.py +++ b/hyperbrowser/client/managers/async_manager/session.py @@ -13,6 +13,8 @@ SessionEventLogListParams, SessionEventLogListResponse, SessionEventLog, + SessionConsoleLogListParams, + SessionConsoleLogListResponse, ) @@ -32,10 +34,27 @@ async def list( return SessionEventLogListResponse(**response.data) +class SessionConsoleLogsManager: + def __init__(self, client): + self._client = client + + async def list( + self, + session_id: str, + params: SessionConsoleLogListParams = SessionConsoleLogListParams(), + ) -> SessionConsoleLogListResponse: + response = await self._client.transport.get( + self._client._build_url(f"/session/{session_id}/console"), + params=params.model_dump(exclude_none=True, by_alias=True), + ) + return SessionConsoleLogListResponse(**response.data) + + class SessionManager: def __init__(self, client): self._client = client self.event_logs = SessionEventLogsManager(client) + self.console_logs = SessionConsoleLogsManager(client) async def create(self, params: CreateSessionParams = None) -> SessionDetail: response = await self._client.transport.post( diff --git a/hyperbrowser/client/managers/sync_manager/session.py b/hyperbrowser/client/managers/sync_manager/session.py index 9e1ad94..e197d41 100644 --- a/hyperbrowser/client/managers/sync_manager/session.py +++ b/hyperbrowser/client/managers/sync_manager/session.py @@ -13,6 +13,8 @@ SessionEventLogListParams, SessionEventLogListResponse, SessionEventLog, + SessionConsoleLogListParams, + SessionConsoleLogListResponse, ) @@ -32,10 +34,27 @@ def list( return SessionEventLogListResponse(**response.data) +class SessionConsoleLogsManager: + def __init__(self, client): + self._client = client + + def list( + self, + session_id: str, + params: SessionConsoleLogListParams = SessionConsoleLogListParams(), + ) -> SessionConsoleLogListResponse: + response = self._client.transport.get( + self._client._build_url(f"/session/{session_id}/console"), + params=params.model_dump(exclude_none=True, by_alias=True), + ) + return SessionConsoleLogListResponse(**response.data) + + class SessionManager: def __init__(self, client): self._client = client self.event_logs = SessionEventLogsManager(client) + self.console_logs = SessionConsoleLogsManager(client) def create(self, params: CreateSessionParams = None) -> SessionDetail: response = self._client.transport.post( diff --git a/hyperbrowser/models/__init__.py b/hyperbrowser/models/__init__.py index 9527c95..018c862 100644 --- a/hyperbrowser/models/__init__.py +++ b/hyperbrowser/models/__init__.py @@ -166,6 +166,11 @@ SessionEventLog, SessionEventLogListParams, SessionEventLogListResponse, + SessionConsoleLog, + SessionConsoleLogListParams, + SessionConsoleLogListResponse, + SessionConsoleLogLevel, + SessionConsolePage, SessionProfile, SessionLaunchState, UploadFileResponse, @@ -312,6 +317,11 @@ "SessionEventLog", "SessionEventLogListParams", "SessionEventLogListResponse", + "SessionConsoleLog", + "SessionConsoleLogListParams", + "SessionConsoleLogListResponse", + "SessionConsoleLogLevel", + "SessionConsolePage", "SessionProfile", "SessionLaunchState", "UploadFileResponse", diff --git a/hyperbrowser/models/session.py b/hyperbrowser/models/session.py index edeaaa5..8f2f1d1 100644 --- a/hyperbrowser/models/session.py +++ b/hyperbrowser/models/session.py @@ -395,3 +395,64 @@ class SessionEventLogListResponse(BaseModel): total_count: int = Field(alias="totalCount") page: int = Field(alias="page") per_page: int = Field(alias="perPage") + + +SessionConsoleLogLevel = Literal["log", "debug", "info", "error", "warning"] + + +class SessionConsoleLog(BaseModel): + model_config = ConfigDict( + populate_by_alias=True, + ) + + id: str = Field(alias="id") + session_id: str = Field(alias="sessionId") + team_id: str = Field(alias="teamId") + log: str = Field(alias="log") + page_id: str = Field(alias="pageId") + log_level: SessionConsoleLogLevel = Field(alias="logLevel") + timestamp: int = Field(alias="timestamp") + created_at: datetime = Field(alias="createdAt") + updated_at: datetime = Field(alias="updatedAt") + + +class SessionConsolePage(BaseModel): + model_config = ConfigDict( + populate_by_alias=True, + ) + + id: str = Field(alias="id") + session_id: str = Field(alias="sessionId") + team_id: str = Field(alias="teamId") + url: str = Field(alias="url") + timestamp: int = Field(alias="timestamp") + created_at: datetime = Field(alias="createdAt") + updated_at: datetime = Field(alias="updatedAt") + + +class SessionConsoleLogListParams(BaseModel): + model_config = ConfigDict( + populate_by_alias=True, + ) + + log_levels: Optional[List[SessionConsoleLogLevel]] = Field( + default=None, serialization_alias="logLevels" + ) + search: Optional[str] = Field(default=None, serialization_alias="search") + after_timestamp: Optional[int] = Field( + default=None, serialization_alias="afterTimestamp" + ) + before_timestamp: Optional[int] = Field( + default=None, serialization_alias="beforeTimestamp" + ) + order: Literal["asc", "desc"] = Field(default="desc", serialization_alias="order") + limit: int = Field(default=1000, serialization_alias="limit") + + +class SessionConsoleLogListResponse(BaseModel): + model_config = ConfigDict( + populate_by_alias=True, + ) + + console_logs: List[SessionConsoleLog] = Field(alias="consoleLogs") + pages: List[SessionConsolePage] = Field(alias="pages") diff --git a/pyproject.toml b/pyproject.toml index 2624726..fdf50b8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "hyperbrowser" -version = "0.75.0" +version = "0.76.0" description = "Python SDK for hyperbrowser" authors = ["Nikhil Shahi "] license = "MIT"