diff --git a/getstream/chat/rest_client.py b/getstream/chat/rest_client.py index db83b21a..fe8c4e97 100644 --- a/getstream/chat/rest_client.py +++ b/getstream/chat/rest_client.py @@ -1162,7 +1162,7 @@ def cast_poll_vote( json=json, ) - def remove_poll_vote( + def delete_poll_vote( self, message_id: str, poll_id: str, vote_id: str, user_id: Optional[str] = None ) -> StreamResponse[PollVoteResponse]: query_params = build_query_param(user_id=user_id) @@ -1316,249 +1316,6 @@ def unmute_channel( "/api/v2/chat/moderation/unmute/channel", UnmuteResponse, json=json ) - def create_poll( - self, - name: str, - allow_answers: Optional[bool] = None, - allow_user_suggested_options: Optional[bool] = None, - description: Optional[str] = None, - enforce_unique_vote: Optional[bool] = None, - id: Optional[str] = None, - is_closed: Optional[bool] = None, - max_votes_allowed: Optional[int] = None, - user_id: Optional[str] = None, - voting_visibility: Optional[str] = None, - options: Optional[List[PollOptionInput]] = None, - custom: Optional[Dict[str, object]] = None, - user: Optional[UserRequest] = None, - ) -> StreamResponse[PollResponse]: - json = build_body_dict( - name=name, - allow_answers=allow_answers, - allow_user_suggested_options=allow_user_suggested_options, - description=description, - enforce_unique_vote=enforce_unique_vote, - id=id, - is_closed=is_closed, - max_votes_allowed=max_votes_allowed, - user_id=user_id, - voting_visibility=voting_visibility, - options=options, - custom=custom, - user=user, - ) - - return self.post("/api/v2/chat/polls", PollResponse, json=json) - - def update_poll( - self, - id: str, - name: str, - allow_answers: Optional[bool] = None, - allow_user_suggested_options: Optional[bool] = None, - description: Optional[str] = None, - enforce_unique_vote: Optional[bool] = None, - is_closed: Optional[bool] = None, - max_votes_allowed: Optional[int] = None, - user_id: Optional[str] = None, - voting_visibility: Optional[str] = None, - options: Optional[List[PollOptionRequest]] = None, - custom: Optional[Dict[str, object]] = None, - user: Optional[UserRequest] = None, - ) -> StreamResponse[PollResponse]: - json = build_body_dict( - id=id, - name=name, - allow_answers=allow_answers, - allow_user_suggested_options=allow_user_suggested_options, - description=description, - enforce_unique_vote=enforce_unique_vote, - is_closed=is_closed, - max_votes_allowed=max_votes_allowed, - user_id=user_id, - voting_visibility=voting_visibility, - options=options, - custom=custom, - user=user, - ) - - return self.put("/api/v2/chat/polls", PollResponse, json=json) - - def query_polls( - self, - user_id: Optional[str] = None, - limit: Optional[int] = None, - next: Optional[str] = None, - prev: Optional[str] = None, - sort: Optional[List[SortParamRequest]] = None, - filter: Optional[Dict[str, object]] = None, - ) -> StreamResponse[QueryPollsResponse]: - query_params = build_query_param(user_id=user_id) - json = build_body_dict( - limit=limit, next=next, prev=prev, sort=sort, filter=filter - ) - - return self.post( - "/api/v2/chat/polls/query", - QueryPollsResponse, - query_params=query_params, - json=json, - ) - - def delete_poll( - self, poll_id: str, user_id: Optional[str] = None - ) -> StreamResponse[Response]: - query_params = build_query_param(user_id=user_id) - path_params = { - "poll_id": poll_id, - } - - return self.delete( - "/api/v2/chat/polls/{poll_id}", - Response, - query_params=query_params, - path_params=path_params, - ) - - def get_poll( - self, poll_id: str, user_id: Optional[str] = None - ) -> StreamResponse[PollResponse]: - query_params = build_query_param(user_id=user_id) - path_params = { - "poll_id": poll_id, - } - - return self.get( - "/api/v2/chat/polls/{poll_id}", - PollResponse, - query_params=query_params, - path_params=path_params, - ) - - def update_poll_partial( - self, - poll_id: str, - user_id: Optional[str] = None, - unset: Optional[List[str]] = None, - set: Optional[Dict[str, object]] = None, - user: Optional[UserRequest] = None, - ) -> StreamResponse[PollResponse]: - path_params = { - "poll_id": poll_id, - } - json = build_body_dict(user_id=user_id, unset=unset, set=set, user=user) - - return self.patch( - "/api/v2/chat/polls/{poll_id}", - PollResponse, - path_params=path_params, - json=json, - ) - - def create_poll_option( - self, - poll_id: str, - text: str, - position: Optional[int] = None, - user_id: Optional[str] = None, - custom: Optional[Dict[str, object]] = None, - user: Optional[UserRequest] = None, - ) -> StreamResponse[PollOptionResponse]: - path_params = { - "poll_id": poll_id, - } - json = build_body_dict( - text=text, position=position, user_id=user_id, custom=custom, user=user - ) - - return self.post( - "/api/v2/chat/polls/{poll_id}/options", - PollOptionResponse, - path_params=path_params, - json=json, - ) - - def update_poll_option( - self, - poll_id: str, - id: str, - text: str, - user_id: Optional[str] = None, - custom: Optional[Dict[str, object]] = None, - user: Optional[UserRequest] = None, - ) -> StreamResponse[PollOptionResponse]: - path_params = { - "poll_id": poll_id, - } - json = build_body_dict( - id=id, text=text, user_id=user_id, custom=custom, user=user - ) - - return self.put( - "/api/v2/chat/polls/{poll_id}/options", - PollOptionResponse, - path_params=path_params, - json=json, - ) - - def delete_poll_option( - self, poll_id: str, option_id: str, user_id: Optional[str] = None - ) -> StreamResponse[Response]: - query_params = build_query_param(user_id=user_id) - path_params = { - "poll_id": poll_id, - "option_id": option_id, - } - - return self.delete( - "/api/v2/chat/polls/{poll_id}/options/{option_id}", - Response, - query_params=query_params, - path_params=path_params, - ) - - def get_poll_option( - self, poll_id: str, option_id: str, user_id: Optional[str] = None - ) -> StreamResponse[PollOptionResponse]: - query_params = build_query_param(user_id=user_id) - path_params = { - "poll_id": poll_id, - "option_id": option_id, - } - - return self.get( - "/api/v2/chat/polls/{poll_id}/options/{option_id}", - PollOptionResponse, - query_params=query_params, - path_params=path_params, - ) - - def query_poll_votes( - self, - poll_id: str, - user_id: Optional[str] = None, - limit: Optional[int] = None, - next: Optional[str] = None, - prev: Optional[str] = None, - sort: Optional[List[SortParamRequest]] = None, - filter: Optional[Dict[str, object]] = None, - ) -> StreamResponse[PollVotesResponse]: - query_params = build_query_param(user_id=user_id) - path_params = { - "poll_id": poll_id, - } - json = build_body_dict( - limit=limit, next=next, prev=prev, sort=sort, filter=filter - ) - - return self.post( - "/api/v2/chat/polls/{poll_id}/votes", - PollVotesResponse, - query_params=query_params, - path_params=path_params, - json=json, - ) - def update_push_notification_preferences( self, preferences: List[PushPreferenceInput] ) -> StreamResponse[UpsertPushPreferencesResponse]: diff --git a/getstream/common/rest_client.py b/getstream/common/rest_client.py index 6ad2134b..cc895605 100644 --- a/getstream/common/rest_client.py +++ b/getstream/common/rest_client.py @@ -53,6 +53,7 @@ def update_app( sqs_key: Optional[str] = None, sqs_secret: Optional[str] = None, sqs_url: Optional[str] = None, + user_response_time_enabled: Optional[bool] = None, webhook_url: Optional[str] = None, allowed_flag_reasons: Optional[List[str]] = None, event_hooks: Optional[List[EventHook]] = None, @@ -102,6 +103,7 @@ def update_app( sqs_key=sqs_key, sqs_secret=sqs_secret, sqs_url=sqs_url, + user_response_time_enabled=user_response_time_enabled, webhook_url=webhook_url, allowed_flag_reasons=allowed_flag_reasons, event_hooks=event_hooks, @@ -412,6 +414,243 @@ def get_permission(self, id: str) -> StreamResponse[GetCustomPermissionResponse] path_params=path_params, ) + def create_poll( + self, + name: str, + allow_answers: Optional[bool] = None, + allow_user_suggested_options: Optional[bool] = None, + description: Optional[str] = None, + enforce_unique_vote: Optional[bool] = None, + id: Optional[str] = None, + is_closed: Optional[bool] = None, + max_votes_allowed: Optional[int] = None, + user_id: Optional[str] = None, + voting_visibility: Optional[str] = None, + options: Optional[List[PollOptionInput]] = None, + custom: Optional[Dict[str, object]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[PollResponse]: + json = build_body_dict( + name=name, + allow_answers=allow_answers, + allow_user_suggested_options=allow_user_suggested_options, + description=description, + enforce_unique_vote=enforce_unique_vote, + id=id, + is_closed=is_closed, + max_votes_allowed=max_votes_allowed, + user_id=user_id, + voting_visibility=voting_visibility, + options=options, + custom=custom, + user=user, + ) + + return self.post("/api/v2/polls", PollResponse, json=json) + + def update_poll( + self, + id: str, + name: str, + allow_answers: Optional[bool] = None, + allow_user_suggested_options: Optional[bool] = None, + description: Optional[str] = None, + enforce_unique_vote: Optional[bool] = None, + is_closed: Optional[bool] = None, + max_votes_allowed: Optional[int] = None, + user_id: Optional[str] = None, + voting_visibility: Optional[str] = None, + options: Optional[List[PollOptionRequest]] = None, + custom: Optional[Dict[str, object]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[PollResponse]: + json = build_body_dict( + id=id, + name=name, + allow_answers=allow_answers, + allow_user_suggested_options=allow_user_suggested_options, + description=description, + enforce_unique_vote=enforce_unique_vote, + is_closed=is_closed, + max_votes_allowed=max_votes_allowed, + user_id=user_id, + voting_visibility=voting_visibility, + options=options, + custom=custom, + user=user, + ) + + return self.put("/api/v2/polls", PollResponse, json=json) + + def query_polls( + self, + user_id: Optional[str] = None, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[QueryPollsResponse]: + query_params = build_query_param(user_id=user_id) + json = build_body_dict( + limit=limit, next=next, prev=prev, sort=sort, filter=filter + ) + + return self.post( + "/api/v2/polls/query", + QueryPollsResponse, + query_params=query_params, + json=json, + ) + + def delete_poll( + self, poll_id: str, user_id: Optional[str] = None + ) -> StreamResponse[Response]: + query_params = build_query_param(user_id=user_id) + path_params = { + "poll_id": poll_id, + } + + return self.delete( + "/api/v2/polls/{poll_id}", + Response, + query_params=query_params, + path_params=path_params, + ) + + def get_poll( + self, poll_id: str, user_id: Optional[str] = None + ) -> StreamResponse[PollResponse]: + query_params = build_query_param(user_id=user_id) + path_params = { + "poll_id": poll_id, + } + + return self.get( + "/api/v2/polls/{poll_id}", + PollResponse, + query_params=query_params, + path_params=path_params, + ) + + def update_poll_partial( + self, + poll_id: str, + user_id: Optional[str] = None, + unset: Optional[List[str]] = None, + set: Optional[Dict[str, object]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[PollResponse]: + path_params = { + "poll_id": poll_id, + } + json = build_body_dict(user_id=user_id, unset=unset, set=set, user=user) + + return self.patch( + "/api/v2/polls/{poll_id}", PollResponse, path_params=path_params, json=json + ) + + def create_poll_option( + self, + poll_id: str, + text: str, + user_id: Optional[str] = None, + custom: Optional[Dict[str, object]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[PollOptionResponse]: + path_params = { + "poll_id": poll_id, + } + json = build_body_dict(text=text, user_id=user_id, custom=custom, user=user) + + return self.post( + "/api/v2/polls/{poll_id}/options", + PollOptionResponse, + path_params=path_params, + json=json, + ) + + def update_poll_option( + self, + poll_id: str, + id: str, + text: str, + user_id: Optional[str] = None, + custom: Optional[Dict[str, object]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[PollOptionResponse]: + path_params = { + "poll_id": poll_id, + } + json = build_body_dict( + id=id, text=text, user_id=user_id, custom=custom, user=user + ) + + return self.put( + "/api/v2/polls/{poll_id}/options", + PollOptionResponse, + path_params=path_params, + json=json, + ) + + def delete_poll_option( + self, poll_id: str, option_id: str, user_id: Optional[str] = None + ) -> StreamResponse[Response]: + query_params = build_query_param(user_id=user_id) + path_params = { + "poll_id": poll_id, + "option_id": option_id, + } + + return self.delete( + "/api/v2/polls/{poll_id}/options/{option_id}", + Response, + query_params=query_params, + path_params=path_params, + ) + + def get_poll_option( + self, poll_id: str, option_id: str, user_id: Optional[str] = None + ) -> StreamResponse[PollOptionResponse]: + query_params = build_query_param(user_id=user_id) + path_params = { + "poll_id": poll_id, + "option_id": option_id, + } + + return self.get( + "/api/v2/polls/{poll_id}/options/{option_id}", + PollOptionResponse, + query_params=query_params, + path_params=path_params, + ) + + def query_poll_votes( + self, + poll_id: str, + user_id: Optional[str] = None, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[PollVotesResponse]: + query_params = build_query_param(user_id=user_id) + path_params = { + "poll_id": poll_id, + } + json = build_body_dict( + limit=limit, next=next, prev=prev, sort=sort, filter=filter + ) + + return self.post( + "/api/v2/polls/{poll_id}/votes", + PollVotesResponse, + query_params=query_params, + path_params=path_params, + json=json, + ) + def list_push_providers(self) -> StreamResponse[ListPushProvidersResponse]: return self.get("/api/v2/push_providers", ListPushProvidersResponse) @@ -566,6 +805,7 @@ def delete_users( user_ids: List[str], calls: Optional[str] = None, conversations: Optional[str] = None, + files: Optional[bool] = None, messages: Optional[str] = None, new_call_owner_id: Optional[str] = None, new_channel_owner_id: Optional[str] = None, @@ -575,6 +815,7 @@ def delete_users( user_ids=user_ids, calls=calls, conversations=conversations, + files=files, messages=messages, new_call_owner_id=new_call_owner_id, new_channel_owner_id=new_channel_owner_id, @@ -596,7 +837,6 @@ def get_user_live_locations( def update_live_location( self, - created_by_device_id: str, message_id: str, end_at: Optional[datetime] = None, latitude: Optional[float] = None, @@ -605,11 +845,7 @@ def update_live_location( ) -> StreamResponse[SharedLocationResponse]: query_params = build_query_param(user_id=user_id) json = build_body_dict( - created_by_device_id=created_by_device_id, - message_id=message_id, - end_at=end_at, - latitude=latitude, - longitude=longitude, + message_id=message_id, end_at=end_at, latitude=latitude, longitude=longitude ) return self.put( diff --git a/getstream/models/__init__.py b/getstream/models/__init__.py index 9273a7cd..5bbdb324 100644 --- a/getstream/models/__init__.py +++ b/getstream/models/__init__.py @@ -250,6 +250,12 @@ class ActiveCallsMetrics(DataClassJsonMixin): ) +@dataclass +class ActiveCallsResolutionStats(DataClassJsonMixin): + p10: float = dc_field(metadata=dc_config(field_name="p10")) + p50: float = dc_field(metadata=dc_config(field_name="p50")) + + @dataclass class ActiveCallsSummary(DataClassJsonMixin): active_calls: int = dc_field(metadata=dc_config(field_name="active_calls")) @@ -262,6 +268,31 @@ class ActiveCallsSummary(DataClassJsonMixin): participants: int = dc_field(metadata=dc_config(field_name="participants")) +@dataclass +class ActivityMarkedEvent(DataClassJsonMixin): + all_read: bool = dc_field(metadata=dc_config(field_name="all_read")) + all_seen: bool = dc_field(metadata=dc_config(field_name="all_seen")) + created_at: datetime = dc_field( + metadata=dc_config( + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + feed_id: str = dc_field(metadata=dc_config(field_name="feed_id")) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + type: str = dc_field( + default="activity.marked", metadata=dc_config(field_name="type") + ) + marked_read: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="marked_read") + ) + marked_watched: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="marked_watched") + ) + + @dataclass class AnyEvent(DataClassJsonMixin): created_at: datetime = dc_field( @@ -305,6 +336,9 @@ class AppResponseFields(DataClassJsonMixin): image_moderation_enabled: bool = dc_field( metadata=dc_config(field_name="image_moderation_enabled") ) + moderation_bulk_submit_action_enabled: bool = dc_field( + metadata=dc_config(field_name="moderation_bulk_submit_action_enabled") + ) moderation_enabled: bool = dc_field( metadata=dc_config(field_name="moderation_enabled") ) @@ -336,6 +370,9 @@ class AppResponseFields(DataClassJsonMixin): metadata=dc_config(field_name="suspended_explanation") ) use_hook_v2: bool = dc_field(metadata=dc_config(field_name="use_hook_v2")) + user_response_time_enabled: bool = dc_field( + metadata=dc_config(field_name="user_response_time_enabled") + ) webhook_url: str = dc_field(metadata=dc_config(field_name="webhook_url")) event_hooks: "List[EventHook]" = dc_field( metadata=dc_config(field_name="event_hooks") @@ -514,7 +551,8 @@ class AsyncExportErrorEvent(DataClassJsonMixin): task_id: str = dc_field(metadata=dc_config(field_name="task_id")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( - default="export.users.error", metadata=dc_config(field_name="type") + default="export.bulk_image_moderation.error", + metadata=dc_config(field_name="type"), ) received_at: Optional[datetime] = dc_field( default=None, @@ -910,6 +948,14 @@ class BanActionRequest(DataClassJsonMixin): ) +@dataclass +class BanOptions(DataClassJsonMixin): + duration: int = dc_field(metadata=dc_config(field_name="duration")) + ip_ban: bool = dc_field(metadata=dc_config(field_name="ip_ban")) + reason: str = dc_field(metadata=dc_config(field_name="reason")) + shadow_ban: bool = dc_field(metadata=dc_config(field_name="shadow_ban")) + + @dataclass class BanRequest(DataClassJsonMixin): target_user_id: str = dc_field(metadata=dc_config(field_name="target_user_id")) @@ -975,6 +1021,11 @@ class BanResponse(DataClassJsonMixin): ) +@dataclass +class BlockContentOptions(DataClassJsonMixin): + reason: str = dc_field(metadata=dc_config(field_name="reason")) + + @dataclass class BlockListConfig(DataClassJsonMixin): enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) @@ -1828,11 +1879,14 @@ class CallParticipant(DataClassJsonMixin): ) ) online: bool = dc_field(metadata=dc_config(field_name="online")) - role: str = dc_field(metadata=dc_config(field_name="Role")) role: str = dc_field(metadata=dc_config(field_name="role")) + role: str = dc_field(metadata=dc_config(field_name="Role")) user_session_id: str = dc_field(metadata=dc_config(field_name="UserSessionID")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) teams_role: "Dict[str, str]" = dc_field(metadata=dc_config(field_name="teams_role")) + avg_response_time: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="avg_response_time") + ) ban_expires: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -2414,6 +2468,30 @@ class CallSessionEndedEvent(DataClassJsonMixin): ) +@dataclass +class CallSessionParticipantCountsUpdatedEvent(DataClassJsonMixin): + anonymous_participant_count: int = dc_field( + metadata=dc_config(field_name="anonymous_participant_count") + ) + call_cid: str = dc_field(metadata=dc_config(field_name="call_cid")) + created_at: datetime = dc_field( + metadata=dc_config( + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + session_id: str = dc_field(metadata=dc_config(field_name="session_id")) + participants_count_by_role: "Dict[str, int]" = dc_field( + metadata=dc_config(field_name="participants_count_by_role") + ) + type: str = dc_field( + default="call.session_participant_count_updated", + metadata=dc_config(field_name="type"), + ) + + @dataclass class CallSessionParticipantJoinedEvent(DataClassJsonMixin): call_cid: str = dc_field(metadata=dc_config(field_name="call_cid")) @@ -2573,6 +2651,9 @@ class CallSettings(DataClassJsonMixin): geofencing: "Optional[GeofenceSettings]" = dc_field( default=None, metadata=dc_config(field_name="geofencing") ) + ingress: "Optional[IngressSettings]" = dc_field( + default=None, metadata=dc_config(field_name="ingress") + ) limits: "Optional[LimitsSettings]" = dc_field( default=None, metadata=dc_config(field_name="limits") ) @@ -2616,6 +2697,9 @@ class CallSettingsRequest(DataClassJsonMixin): geofencing: "Optional[GeofenceSettingsRequest]" = dc_field( default=None, metadata=dc_config(field_name="geofencing") ) + ingress: "Optional[IngressSettingsRequest]" = dc_field( + default=None, metadata=dc_config(field_name="ingress") + ) limits: "Optional[LimitsSettingsRequest]" = dc_field( default=None, metadata=dc_config(field_name="limits") ) @@ -2675,6 +2759,9 @@ class CallSettingsResponse(DataClassJsonMixin): metadata=dc_config(field_name="transcription") ) video: "VideoSettingsResponse" = dc_field(metadata=dc_config(field_name="video")) + ingress: "Optional[IngressSettingsResponse]" = dc_field( + default=None, metadata=dc_config(field_name="ingress") + ) @dataclass @@ -4613,6 +4700,9 @@ class ConfigResponse(DataClassJsonMixin): block_list_config: "Optional[BlockListConfig]" = dc_field( default=None, metadata=dc_config(field_name="block_list_config") ) + rule_builder_config: "Optional[RuleBuilderConfig]" = dc_field( + default=None, metadata=dc_config(field_name="rule_builder_config") + ) velocity_filter_config: "Optional[VelocityFilterConfig]" = dc_field( default=None, metadata=dc_config(field_name="velocity_filter_config") ) @@ -4621,6 +4711,12 @@ class ConfigResponse(DataClassJsonMixin): ) +@dataclass +class ContentCountRuleParameters(DataClassJsonMixin): + threshold: int = dc_field(metadata=dc_config(field_name="threshold")) + time_window: str = dc_field(metadata=dc_config(field_name="time_window")) + + @dataclass class CountByMinuteResponse(DataClassJsonMixin): count: int = dc_field(metadata=dc_config(field_name="count")) @@ -4963,9 +5059,6 @@ class CreateImportURLResponse(DataClassJsonMixin): @dataclass class CreatePollOptionRequest(DataClassJsonMixin): text: str = dc_field(metadata=dc_config(field_name="text")) - position: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="position") - ) user_id: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="user_id") ) @@ -5354,6 +5447,9 @@ class DeleteUsersRequest(DataClassJsonMixin): conversations: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="conversations") ) + files: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="files") + ) messages: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="messages") ) @@ -5669,6 +5765,9 @@ class EntityCreator(DataClassJsonMixin): role: str = dc_field(metadata=dc_config(field_name="role")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) teams_role: "Dict[str, str]" = dc_field(metadata=dc_config(field_name="teams_role")) + avg_response_time: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="avg_response_time") + ) ban_expires: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -5790,6 +5889,9 @@ class EntityCreatorResponse(DataClassJsonMixin): ) teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="avg_response_time") + ) ban_expires: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -6179,8 +6281,9 @@ class Flag(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - entity_id: str = dc_field(metadata=dc_config(field_name="entity_id")) - entity_type: str = dc_field(metadata=dc_config(field_name="entity_type")) + created_by_automod: bool = dc_field( + metadata=dc_config(field_name="created_by_automod") + ) updated_at: datetime = dc_field( metadata=dc_config( field_name="updated_at", @@ -6189,42 +6292,64 @@ class Flag(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - result: "List[Dict[str, object]]" = dc_field( - metadata=dc_config(field_name="result") - ) - entity_creator_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="entity_creator_id") - ) - is_streamed_content: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="is_streamed_content") - ) - moderation_payload_hash: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="moderation_payload_hash") + approved_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="approved_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), ) reason: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="reason") ) - review_queue_item_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="review_queue_item_id") + rejected_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="rejected_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), ) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - labels: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="labels") + reviewed_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="reviewed_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + reviewed_by: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="reviewed_by") + ) + target_message_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="target_message_id") ) custom: Optional[Dict[str, object]] = dc_field( default=None, metadata=dc_config(field_name="custom") ) - moderation_payload: "Optional[ModerationPayload]" = dc_field( - default=None, metadata=dc_config(field_name="moderation_payload") + details: "Optional[FlagDetails]" = dc_field( + default=None, metadata=dc_config(field_name="details") ) - review_queue_item: "Optional[ReviewQueueItem]" = dc_field( - default=None, metadata=dc_config(field_name="review_queue_item") + target_message: "Optional[Message]" = dc_field( + default=None, metadata=dc_config(field_name="target_message") + ) + target_user: "Optional[User]" = dc_field( + default=None, metadata=dc_config(field_name="target_user") ) user: "Optional[User]" = dc_field( default=None, metadata=dc_config(field_name="user") ) +@dataclass +class FlagContentOptions(DataClassJsonMixin): + reason: str = dc_field(metadata=dc_config(field_name="reason")) + + @dataclass class FlagDetails(DataClassJsonMixin): original_text: str = dc_field(metadata=dc_config(field_name="original_text")) @@ -6326,6 +6451,11 @@ class FlagUpdatedEvent(DataClassJsonMixin): ) +@dataclass +class FlagUserOptions(DataClassJsonMixin): + reason: str = dc_field(metadata=dc_config(field_name="reason")) + + @dataclass class FrameRecordSettings(DataClassJsonMixin): capture_interval_in_seconds: int = dc_field( @@ -6421,6 +6551,9 @@ class FullUserResponse(DataClassJsonMixin): mutes: "List[UserMuteResponse]" = dc_field(metadata=dc_config(field_name="mutes")) teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="avg_response_time") + ) ban_expires: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -7108,6 +7241,13 @@ class HuaweiConfigFields(DataClassJsonMixin): ) +@dataclass +class ImageContentParameters(DataClassJsonMixin): + harm_labels: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="harm_labels") + ) + + @dataclass class ImageData(DataClassJsonMixin): frames: str = dc_field(metadata=dc_config(field_name="frames")) @@ -7117,6 +7257,15 @@ class ImageData(DataClassJsonMixin): width: str = dc_field(metadata=dc_config(field_name="width")) +@dataclass +class ImageRuleParameters(DataClassJsonMixin): + threshold: int = dc_field(metadata=dc_config(field_name="threshold")) + time_window: str = dc_field(metadata=dc_config(field_name="time_window")) + harm_labels: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="harm_labels") + ) + + @dataclass class ImageSize(DataClassJsonMixin): crop: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="crop")) @@ -7215,6 +7364,112 @@ class ImportTaskHistory(DataClassJsonMixin): prev_state: str = dc_field(metadata=dc_config(field_name="prev_state")) +@dataclass +class IngressAudioEncodingOptions(DataClassJsonMixin): + bitrate: int = dc_field(metadata=dc_config(field_name="bitrate")) + channels: int = dc_field(metadata=dc_config(field_name="channels")) + enable_dtx: bool = dc_field(metadata=dc_config(field_name="enable_dtx")) + + +@dataclass +class IngressAudioEncodingOptionsRequest(DataClassJsonMixin): + bitrate: int = dc_field(metadata=dc_config(field_name="bitrate")) + channels: int = dc_field(metadata=dc_config(field_name="channels")) + enable_dtx: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="enable_dtx") + ) + + +@dataclass +class IngressAudioEncodingResponse(DataClassJsonMixin): + bitrate: int = dc_field(metadata=dc_config(field_name="bitrate")) + channels: int = dc_field(metadata=dc_config(field_name="channels")) + enable_dtx: bool = dc_field(metadata=dc_config(field_name="enable_dtx")) + + +@dataclass +class IngressSettings(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + audio_encoding_options: "Optional[IngressAudioEncodingOptions]" = dc_field( + default=None, metadata=dc_config(field_name="audio_encoding_options") + ) + video_encoding_options: "Optional[Dict[str, IngressVideoEncodingOptions]]" = ( + dc_field(default=None, metadata=dc_config(field_name="video_encoding_options")) + ) + + +@dataclass +class IngressSettingsRequest(DataClassJsonMixin): + enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="enabled") + ) + audio_encoding_options: "Optional[IngressAudioEncodingOptionsRequest]" = dc_field( + default=None, metadata=dc_config(field_name="audio_encoding_options") + ) + video_encoding_options: "Optional[Dict[str, IngressVideoEncodingOptionsRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="video_encoding_options") + ) + + +@dataclass +class IngressSettingsResponse(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + audio_encoding_options: "Optional[IngressAudioEncodingResponse]" = dc_field( + default=None, metadata=dc_config(field_name="audio_encoding_options") + ) + video_encoding_options: "Optional[Dict[str, IngressVideoEncodingResponse]]" = ( + dc_field(default=None, metadata=dc_config(field_name="video_encoding_options")) + ) + + +@dataclass +class IngressVideoEncodingOptions(DataClassJsonMixin): + layers: "List[IngressVideoLayer]" = dc_field( + metadata=dc_config(field_name="layers") + ) + + +@dataclass +class IngressVideoEncodingOptionsRequest(DataClassJsonMixin): + layers: "List[IngressVideoLayerRequest]" = dc_field( + metadata=dc_config(field_name="layers") + ) + + +@dataclass +class IngressVideoEncodingResponse(DataClassJsonMixin): + layers: "List[IngressVideoLayerResponse]" = dc_field( + metadata=dc_config(field_name="layers") + ) + + +@dataclass +class IngressVideoLayer(DataClassJsonMixin): + bitrate: int = dc_field(metadata=dc_config(field_name="bitrate")) + codec: str = dc_field(metadata=dc_config(field_name="codec")) + frame_rate: int = dc_field(metadata=dc_config(field_name="frame_rate")) + max_dimension: int = dc_field(metadata=dc_config(field_name="max_dimension")) + min_dimension: int = dc_field(metadata=dc_config(field_name="min_dimension")) + + +@dataclass +class IngressVideoLayerRequest(DataClassJsonMixin): + bitrate: int = dc_field(metadata=dc_config(field_name="bitrate")) + codec: str = dc_field(metadata=dc_config(field_name="codec")) + frame_rate_limit: int = dc_field(metadata=dc_config(field_name="frame_rate_limit")) + max_dimension: int = dc_field(metadata=dc_config(field_name="max_dimension")) + min_dimension: int = dc_field(metadata=dc_config(field_name="min_dimension")) + + +@dataclass +class IngressVideoLayerResponse(DataClassJsonMixin): + bitrate: int = dc_field(metadata=dc_config(field_name="bitrate")) + codec: str = dc_field(metadata=dc_config(field_name="codec")) + frame_rate_limit: int = dc_field(metadata=dc_config(field_name="frame_rate_limit")) + max_dimension: int = dc_field(metadata=dc_config(field_name="max_dimension")) + min_dimension: int = dc_field(metadata=dc_config(field_name="min_dimension")) + + @dataclass class JoinCallAPIMetrics(DataClassJsonMixin): failures: float = dc_field(metadata=dc_config(field_name="failures")) @@ -8614,6 +8869,9 @@ class ModerationCustomActionEvent(DataClassJsonMixin): @dataclass class ModerationDashboardPreferences(DataClassJsonMixin): + flag_user_on_flagged_content: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="flag_user_on_flagged_content") + ) media_queue_blur_enabled: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="media_queue_blur_enabled") ) @@ -8624,9 +8882,9 @@ class ModerationFlagResponse(DataClassJsonMixin): created_at: str = dc_field(metadata=dc_config(field_name="created_at")) entity_id: str = dc_field(metadata=dc_config(field_name="entity_id")) entity_type: str = dc_field(metadata=dc_config(field_name="entity_type")) - id: str = dc_field(metadata=dc_config(field_name="id")) type: str = dc_field(metadata=dc_config(field_name="type")) updated_at: str = dc_field(metadata=dc_config(field_name="updated_at")) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) entity_creator_id: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="entity_creator_id") ) @@ -9021,6 +9279,9 @@ class OwnUser(DataClassJsonMixin): total_unread_count_by_team: "Dict[str, int]" = dc_field( metadata=dc_config(field_name="total_unread_count_by_team") ) + avg_response_time: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="avg_response_time") + ) deactivated_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -9117,6 +9378,9 @@ class OwnUserResponse(DataClassJsonMixin): mutes: "List[UserMuteResponse]" = dc_field(metadata=dc_config(field_name="mutes")) teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="avg_response_time") + ) deactivated_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -9246,6 +9510,44 @@ class ParticipantReportResponse(DataClassJsonMixin): ) +@dataclass +class PendingMessageEvent(DataClassJsonMixin): + created_at: datetime = dc_field( + metadata=dc_config( + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + method: str = dc_field(metadata=dc_config(field_name="method")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="message.pending", metadata=dc_config(field_name="type") + ) + received_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="received_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + channel: "Optional[Channel]" = dc_field( + default=None, metadata=dc_config(field_name="channel") + ) + message: "Optional[Message]" = dc_field( + default=None, metadata=dc_config(field_name="message") + ) + metadata: "Optional[Dict[str, str]]" = dc_field( + default=None, metadata=dc_config(field_name="metadata") + ) + user: "Optional[User]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + @dataclass class PendingMessageResponse(DataClassJsonMixin): channel: "Optional[ChannelResponse]" = dc_field( @@ -9501,7 +9803,7 @@ class PollResponseData(DataClassJsonMixin): own_votes: "List[PollVoteResponseData]" = dc_field( metadata=dc_config(field_name="own_votes") ) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="Custom")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) latest_votes_by_option: "Dict[str, List[PollVoteResponseData]]" = dc_field( metadata=dc_config(field_name="latest_votes_by_option") ) @@ -9667,6 +9969,9 @@ class PublisherVideoMetrics(DataClassJsonMixin): jitter_ms: "Optional[ActiveCallsLatencyStats]" = dc_field( default=None, metadata=dc_config(field_name="jitter_ms") ) + resolution: "Optional[ActiveCallsResolutionStats]" = dc_field( + default=None, metadata=dc_config(field_name="resolution") + ) @dataclass @@ -9717,6 +10022,9 @@ class PushNotificationSettingsResponse(DataClassJsonMixin): @dataclass class PushPreferenceInput(DataClassJsonMixin): + call_level: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="call_level") + ) channel_cid: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="channel_cid") ) @@ -11166,6 +11474,108 @@ class RecordingEgressConfig(DataClassJsonMixin): ) +@dataclass +class ReminderCreatedEvent(DataClassJsonMixin): + cid: str = dc_field(metadata=dc_config(field_name="cid")) + created_at: datetime = dc_field( + metadata=dc_config( + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + message_id: str = dc_field(metadata=dc_config(field_name="message_id")) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="reminder.created", metadata=dc_config(field_name="type") + ) + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") + ) + received_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="received_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + reminder: "Optional[ReminderResponseData]" = dc_field( + default=None, metadata=dc_config(field_name="reminder") + ) + + +@dataclass +class ReminderDeletedEvent(DataClassJsonMixin): + cid: str = dc_field(metadata=dc_config(field_name="cid")) + created_at: datetime = dc_field( + metadata=dc_config( + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + message_id: str = dc_field(metadata=dc_config(field_name="message_id")) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="reminder.deleted", metadata=dc_config(field_name="type") + ) + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") + ) + received_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="received_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + reminder: "Optional[ReminderResponseData]" = dc_field( + default=None, metadata=dc_config(field_name="reminder") + ) + + +@dataclass +class ReminderNotificationEvent(DataClassJsonMixin): + cid: str = dc_field(metadata=dc_config(field_name="cid")) + created_at: datetime = dc_field( + metadata=dc_config( + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + message_id: str = dc_field(metadata=dc_config(field_name="message_id")) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="notification.reminder_due", metadata=dc_config(field_name="type") + ) + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") + ) + received_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="received_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + reminder: "Optional[ReminderResponseData]" = dc_field( + default=None, metadata=dc_config(field_name="reminder") + ) + + @dataclass class ReminderResponseData(DataClassJsonMixin): channel_cid: str = dc_field(metadata=dc_config(field_name="channel_cid")) @@ -11207,6 +11617,40 @@ class ReminderResponseData(DataClassJsonMixin): ) +@dataclass +class ReminderUpdatedEvent(DataClassJsonMixin): + cid: str = dc_field(metadata=dc_config(field_name="cid")) + created_at: datetime = dc_field( + metadata=dc_config( + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + message_id: str = dc_field(metadata=dc_config(field_name="message_id")) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="reminder.updated", metadata=dc_config(field_name="type") + ) + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") + ) + received_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="received_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + reminder: "Optional[ReminderResponseData]" = dc_field( + default=None, metadata=dc_config(field_name="reminder") + ) + + @dataclass class ReportByHistogramBucket(DataClassJsonMixin): category: str = dc_field(metadata=dc_config(field_name="category")) @@ -11286,9 +11730,13 @@ class ReviewQueueItem(DataClassJsonMixin): ) actions: "List[ActionLog]" = dc_field(metadata=dc_config(field_name="actions")) bans: "List[Ban]" = dc_field(metadata=dc_config(field_name="bans")) + flag_labels: List[str] = dc_field(metadata=dc_config(field_name="flag_labels")) + flag_types: List[str] = dc_field(metadata=dc_config(field_name="flag_types")) flags: "List[Flag]" = dc_field(metadata=dc_config(field_name="flags")) languages: List[str] = dc_field(metadata=dc_config(field_name="languages")) + reporter_ids: List[str] = dc_field(metadata=dc_config(field_name="reporter_ids")) teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) + archived_at: "NullTime" = dc_field(metadata=dc_config(field_name="archived_at")) completed_at: "NullTime" = dc_field(metadata=dc_config(field_name="completed_at")) reviewed_at: "NullTime" = dc_field(metadata=dc_config(field_name="reviewed_at")) activity: "Optional[EnrichedActivity]" = dc_field( @@ -11343,7 +11791,7 @@ class ReviewQueueItemNewEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - flags: "Optional[List[FlagResponse]]" = dc_field( + flags: "Optional[List[ModerationFlagResponse]]" = dc_field( default=None, metadata=dc_config(field_name="flags") ) action: "Optional[ActionLogResponse]" = dc_field( @@ -11387,7 +11835,9 @@ class ReviewQueueItemResponse(DataClassJsonMixin): metadata=dc_config(field_name="actions") ) bans: "List[Ban]" = dc_field(metadata=dc_config(field_name="bans")) - flags: "List[FlagResponse]" = dc_field(metadata=dc_config(field_name="flags")) + flags: "List[ModerationFlagResponse]" = dc_field( + metadata=dc_config(field_name="flags") + ) languages: List[str] = dc_field(metadata=dc_config(field_name="languages")) completed_at: Optional[datetime] = dc_field( default=None, @@ -11468,7 +11918,7 @@ class ReviewQueueItemUpdatedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - flags: "Optional[List[FlagResponse]]" = dc_field( + flags: "Optional[List[ModerationFlagResponse]]" = dc_field( default=None, metadata=dc_config(field_name="flags") ) action: "Optional[ActionLogResponse]" = dc_field( @@ -11543,62 +11993,90 @@ class Role(DataClassJsonMixin): @dataclass class RuleBuilderAction(DataClassJsonMixin): - duration: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="duration") + type: str = dc_field(metadata=dc_config(field_name="type")) + ban_options: "Optional[BanOptions]" = dc_field( + default=None, metadata=dc_config(field_name="ban_options") ) - ip_ban: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="ip_ban") + flag_content_options: "Optional[FlagContentOptions]" = dc_field( + default=None, metadata=dc_config(field_name="flag_content_options") ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") + flag_user_options: "Optional[FlagUserOptions]" = dc_field( + default=None, metadata=dc_config(field_name="flag_user_options") ) - shadow_ban: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="shadow_ban") + remove_content_options: "Optional[BlockContentOptions]" = dc_field( + default=None, metadata=dc_config(field_name="remove_content_options") ) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) @dataclass class RuleBuilderCondition(DataClassJsonMixin): - provider: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="provider") + type: str = dc_field(metadata=dc_config(field_name="type")) + confidence: Optional[float] = dc_field( + default=None, metadata=dc_config(field_name="confidence") ) - threshold: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="threshold") + content_count_rule_params: "Optional[ContentCountRuleParameters]" = dc_field( + default=None, metadata=dc_config(field_name="content_count_rule_params") ) - time_window: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="time_window") + image_content_params: "Optional[ImageContentParameters]" = dc_field( + default=None, metadata=dc_config(field_name="image_content_params") ) - labels: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="labels") + image_rule_params: "Optional[ImageRuleParameters]" = dc_field( + default=None, metadata=dc_config(field_name="image_rule_params") + ) + text_content_params: "Optional[TextContentParameters]" = dc_field( + default=None, metadata=dc_config(field_name="text_content_params") + ) + text_rule_params: "Optional[TextRuleParameters]" = dc_field( + default=None, metadata=dc_config(field_name="text_rule_params") + ) + user_created_within_params: "Optional[UserCreatedWithinParameters]" = dc_field( + default=None, metadata=dc_config(field_name="user_created_within_params") + ) + user_rule_params: "Optional[UserRuleParameters]" = dc_field( + default=None, metadata=dc_config(field_name="user_rule_params") + ) + video_content_params: "Optional[VideoContentParameters]" = dc_field( + default=None, metadata=dc_config(field_name="video_content_params") + ) + video_rule_params: "Optional[VideoRuleParameters]" = dc_field( + default=None, metadata=dc_config(field_name="video_rule_params") + ) + + +@dataclass +class RuleBuilderConditionGroup(DataClassJsonMixin): + logic: str = dc_field(metadata=dc_config(field_name="logic")) + conditions: "List[RuleBuilderCondition]" = dc_field( + metadata=dc_config(field_name="conditions") ) @dataclass class RuleBuilderConfig(DataClassJsonMixin): + rules: "List[RuleBuilderRule]" = dc_field(metadata=dc_config(field_name="rules")) _async: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="async") ) - enabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="enabled") - ) - rules: "Optional[List[RuleBuilderRule]]" = dc_field( - default=None, metadata=dc_config(field_name="rules") - ) @dataclass class RuleBuilderRule(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="enabled") + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + id: str = dc_field(metadata=dc_config(field_name="id")) + name: str = dc_field(metadata=dc_config(field_name="name")) + rule_type: str = dc_field(metadata=dc_config(field_name="rule_type")) + action: "RuleBuilderAction" = dc_field(metadata=dc_config(field_name="action")) + cooldown_period: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="cooldown_period") + ) + logic: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="logic") ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) conditions: "Optional[List[RuleBuilderCondition]]" = dc_field( default=None, metadata=dc_config(field_name="conditions") ) - action: "Optional[RuleBuilderAction]" = dc_field( - default=None, metadata=dc_config(field_name="action") + groups: "Optional[List[RuleBuilderConditionGroup]]" = dc_field( + default=None, metadata=dc_config(field_name="groups") ) @@ -12618,6 +13096,40 @@ class TargetResolution(DataClassJsonMixin): width: int = dc_field(metadata=dc_config(field_name="width")) +@dataclass +class TextContentParameters(DataClassJsonMixin): + contains_url: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="contains_url") + ) + severity: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="severity") + ) + blocklist_match: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="blocklist_match") + ) + harm_labels: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="harm_labels") + ) + + +@dataclass +class TextRuleParameters(DataClassJsonMixin): + threshold: int = dc_field(metadata=dc_config(field_name="threshold")) + time_window: str = dc_field(metadata=dc_config(field_name="time_window")) + contains_url: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="contains_url") + ) + severity: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="severity") + ) + blocklist_match: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="blocklist_match") + ) + harm_labels: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="harm_labels") + ) + + @dataclass class ThreadParticipant(DataClassJsonMixin): app_pk: int = dc_field(metadata=dc_config(field_name="app_pk")) @@ -13136,8 +13648,8 @@ class UnreadCountsResponse(DataClassJsonMixin): threads: "List[UnreadCountsThread]" = dc_field( metadata=dc_config(field_name="threads") ) - total_unread_count_by_team: "Dict[str, int]" = dc_field( - metadata=dc_config(field_name="total_unread_count_by_team") + total_unread_count_by_team: "Optional[Dict[str, int]]" = dc_field( + default=None, metadata=dc_config(field_name="total_unread_count_by_team") ) @@ -13249,6 +13761,9 @@ class UpdateAppRequest(DataClassJsonMixin): sqs_url: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="sqs_url") ) + user_response_time_enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="user_response_time_enabled") + ) webhook_url: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="webhook_url") ) @@ -13720,9 +14235,6 @@ class UpdateExternalStorageResponse(DataClassJsonMixin): @dataclass class UpdateLiveLocationRequest(DataClassJsonMixin): - created_by_device_id: str = dc_field( - metadata=dc_config(field_name="created_by_device_id") - ) message_id: str = dc_field(metadata=dc_config(field_name="message_id")) end_at: Optional[datetime] = dc_field( default=None, @@ -14163,6 +14675,9 @@ class User(DataClassJsonMixin): role: str = dc_field(metadata=dc_config(field_name="role")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) teams_role: "Dict[str, str]" = dc_field(metadata=dc_config(field_name="teams_role")) + avg_response_time: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="avg_response_time") + ) ban_expires: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -14283,6 +14798,13 @@ class UserBannedEvent(DataClassJsonMixin): ) +@dataclass +class UserCreatedWithinParameters(DataClassJsonMixin): + max_age: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="max_age") + ) + + @dataclass class UserCustomEventRequest(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) @@ -14387,6 +14909,48 @@ class UserFlaggedEvent(DataClassJsonMixin): ) +@dataclass +class UserMessagesDeletedEvent(DataClassJsonMixin): + created_at: datetime = dc_field( + metadata=dc_config( + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + hard_delete: bool = dc_field(metadata=dc_config(field_name="hard_delete")) + soft_delete: bool = dc_field(metadata=dc_config(field_name="soft_delete")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) + type: str = dc_field( + default="user.messages.deleted", metadata=dc_config(field_name="type") + ) + channel_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="channel_id") + ) + channel_member_count: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="channel_member_count") + ) + channel_type: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="channel_type") + ) + cid: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="cid")) + received_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="received_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + channel_custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="channel_custom") + ) + + @dataclass class UserMute(DataClassJsonMixin): created_at: datetime = dc_field( @@ -14561,6 +15125,9 @@ class UserResponse(DataClassJsonMixin): ) teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="avg_response_time") + ) ban_expires: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -14652,6 +15219,9 @@ class UserResponseCommonFields(DataClassJsonMixin): ) teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="avg_response_time") + ) deactivated_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -14725,6 +15295,9 @@ class UserResponsePrivacyFields(DataClassJsonMixin): ) teams: List[str] = dc_field(metadata=dc_config(field_name="teams")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + avg_response_time: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="avg_response_time") + ) deactivated_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -14776,6 +15349,13 @@ class UserResponsePrivacyFields(DataClassJsonMixin): ) +@dataclass +class UserRuleParameters(DataClassJsonMixin): + max_age: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="max_age") + ) + + @dataclass class UserUnbannedEvent(DataClassJsonMixin): channel_id: str = dc_field(metadata=dc_config(field_name="channel_id")) @@ -14916,6 +15496,13 @@ class VideoCallRuleConfig(DataClassJsonMixin): rules: "Dict[str, HarmConfig]" = dc_field(metadata=dc_config(field_name="rules")) +@dataclass +class VideoContentParameters(DataClassJsonMixin): + harm_labels: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="harm_labels") + ) + + @dataclass class VideoEndCallRequest(DataClassJsonMixin): pass @@ -14948,6 +15535,15 @@ class VideoReactionsResponse(DataClassJsonMixin): ) +@dataclass +class VideoRuleParameters(DataClassJsonMixin): + threshold: int = dc_field(metadata=dc_config(field_name="threshold")) + time_window: str = dc_field(metadata=dc_config(field_name="time_window")) + harm_labels: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="harm_labels") + ) + + @dataclass class VideoSettings(DataClassJsonMixin): access_request_enabled: bool = dc_field( @@ -15005,9 +15601,6 @@ class VoteData(DataClassJsonMixin): option_id: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="option_id") ) - option: "Optional[PollOptionResponseData]" = dc_field( - default=None, metadata=dc_config(field_name="Option") - ) @dataclass @@ -15121,8 +15714,8 @@ class WrappedUnreadCountsResponse(DataClassJsonMixin): threads: "List[UnreadCountsThread]" = dc_field( metadata=dc_config(field_name="threads") ) - total_unread_count_by_team: "Dict[str, int]" = dc_field( - metadata=dc_config(field_name="total_unread_count_by_team") + total_unread_count_by_team: "Optional[Dict[str, int]]" = dc_field( + default=None, metadata=dc_config(field_name="total_unread_count_by_team") ) diff --git a/uv.lock b/uv.lock index e8609520..10aa81b1 100644 --- a/uv.lock +++ b/uv.lock @@ -148,7 +148,7 @@ wheels = [ [[package]] name = "getstream" -version = "2.2.1" +version = "2.2.2" source = { editable = "." } dependencies = [ { name = "dataclasses-json" },