diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b96c7734..0edadce6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ on: jobs: test: name: Tests - environment: ci + environment: feeds-v3-ci runs-on: ubuntu-latest continue-on-error: true strategy: diff --git a/getstream/chat/rest_client.py b/getstream/chat/rest_client.py index fe8c4e97..e4be1d7d 100644 --- a/getstream/chat/rest_client.py +++ b/getstream/chat/rest_client.py @@ -717,6 +717,7 @@ def update_channel_type( blocklist: Optional[str] = None, blocklist_behavior: Optional[str] = None, connect_events: Optional[bool] = None, + count_messages: Optional[bool] = None, custom_events: Optional[bool] = None, mark_messages_pending: Optional[bool] = None, mutes: Optional[bool] = None, @@ -753,6 +754,7 @@ def update_channel_type( blocklist=blocklist, blocklist_behavior=blocklist_behavior, connect_events=connect_events, + count_messages=count_messages, custom_events=custom_events, mark_messages_pending=mark_messages_pending, mutes=mutes, @@ -910,9 +912,15 @@ def query_message_history( ) def delete_message( - self, id: str, hard: Optional[bool] = None, deleted_by: Optional[str] = None + self, + id: str, + hard: Optional[bool] = None, + deleted_by: Optional[str] = None, + delete_for_me: Optional[bool] = None, ) -> StreamResponse[DeleteMessageResponse]: - query_params = build_query_param(hard=hard, deleted_by=deleted_by) + query_params = build_query_param( + hard=hard, deleted_by=deleted_by, delete_for_me=delete_for_me + ) path_params = { "id": id, } diff --git a/getstream/common/rest_client.py b/getstream/common/rest_client.py index cc895605..a99a98a7 100644 --- a/getstream/common/rest_client.py +++ b/getstream/common/rest_client.py @@ -39,6 +39,7 @@ def update_app( feeds_v2_region: Optional[str] = None, guest_user_creation_disabled: Optional[bool] = None, image_moderation_enabled: Optional[bool] = None, + max_aggregated_activities_length: Optional[int] = None, migrate_permissions_to_v2: Optional[bool] = None, moderation_enabled: Optional[bool] = None, moderation_webhook_url: Optional[str] = None, @@ -89,6 +90,7 @@ def update_app( feeds_v2_region=feeds_v2_region, guest_user_creation_disabled=guest_user_creation_disabled, image_moderation_enabled=image_moderation_enabled, + max_aggregated_activities_length=max_aggregated_activities_length, migrate_permissions_to_v2=migrate_permissions_to_v2, moderation_enabled=moderation_enabled, moderation_webhook_url=moderation_webhook_url, diff --git a/getstream/feeds/__init__.py b/getstream/feeds/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/getstream/feeds/feeds.py b/getstream/feeds/feeds.py new file mode 100644 index 00000000..268b55a7 --- /dev/null +++ b/getstream/feeds/feeds.py @@ -0,0 +1,193 @@ +# Code generated by GetStream internal OpenAPI code generator. DO NOT EDIT. +from getstream.models import * +from getstream.stream_response import StreamResponse + + +class Feed: + def __init__(self, client, feed_group: str, feed_id: str, custom_data: Dict = None): + self.id = feed_id + self.feed_group = feed_group + self.client = client + self.custom_data = custom_data or {} + + def _sync_from_response(self, data): + if hasattr(data, "feed") and isinstance(data.feed, FeedResponse): + self.custom_data = data.feed.custom + + def delete( + self, hard_delete: Optional[bool] = None + ) -> StreamResponse[DeleteFeedResponse]: + response = self.client.delete_feed( + feed_group_id=self.feed_group, feed_id=self.id, hard_delete=hard_delete + ) + self._sync_from_response(response.data) + return response + + def get_or_create( + self, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + user_id: Optional[str] = None, + view: Optional[str] = None, + watch: Optional[bool] = None, + activity_selector_options: Optional[Dict[str, object]] = None, + data: Optional[FeedInput] = None, + external_ranking: Optional[Dict[str, object]] = None, + filter: Optional[Dict[str, object]] = None, + followers_pagination: Optional[PagerRequest] = None, + following_pagination: Optional[PagerRequest] = None, + interest_weights: Optional[Dict[str, float]] = None, + member_pagination: Optional[PagerRequest] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[GetOrCreateFeedResponse]: + response = self.client.get_or_create_feed( + feed_group_id=self.feed_group, + feed_id=self.id, + limit=limit, + next=next, + prev=prev, + user_id=user_id, + view=view, + watch=watch, + activity_selector_options=activity_selector_options, + data=data, + external_ranking=external_ranking, + filter=filter, + followers_pagination=followers_pagination, + following_pagination=following_pagination, + interest_weights=interest_weights, + member_pagination=member_pagination, + user=user, + ) + self._sync_from_response(response.data) + return response + + def update( + self, + created_by_id: Optional[str] = None, + custom: Optional[Dict[str, object]] = None, + ) -> StreamResponse[UpdateFeedResponse]: + response = self.client.update_feed( + feed_group_id=self.feed_group, + feed_id=self.id, + created_by_id=created_by_id, + custom=custom, + ) + self._sync_from_response(response.data) + return response + + def mark_activity( + self, + mark_all_read: Optional[bool] = None, + mark_all_seen: Optional[bool] = None, + user_id: Optional[str] = None, + mark_read: Optional[List[str]] = None, + mark_seen: Optional[List[str]] = None, + mark_watched: Optional[List[str]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[Response]: + response = self.client.mark_activity( + feed_group_id=self.feed_group, + feed_id=self.id, + mark_all_read=mark_all_read, + mark_all_seen=mark_all_seen, + user_id=user_id, + mark_read=mark_read, + mark_seen=mark_seen, + mark_watched=mark_watched, + user=user, + ) + self._sync_from_response(response.data) + return response + + def unpin_activity( + self, activity_id: str, user_id: Optional[str] = None + ) -> StreamResponse[UnpinActivityResponse]: + response = self.client.unpin_activity( + feed_group_id=self.feed_group, + feed_id=self.id, + activity_id=activity_id, + user_id=user_id, + ) + self._sync_from_response(response.data) + return response + + def pin_activity( + self, + activity_id: str, + user_id: Optional[str] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[PinActivityResponse]: + response = self.client.pin_activity( + feed_group_id=self.feed_group, + feed_id=self.id, + activity_id=activity_id, + user_id=user_id, + user=user, + ) + self._sync_from_response(response.data) + return response + + def update_feed_members( + self, + operation: str, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + members: Optional[List[FeedMemberRequest]] = None, + ) -> StreamResponse[UpdateFeedMembersResponse]: + response = self.client.update_feed_members( + feed_group_id=self.feed_group, + feed_id=self.id, + operation=operation, + limit=limit, + next=next, + prev=prev, + members=members, + ) + self._sync_from_response(response.data) + return response + + def accept_feed_member_invite( + self, user_id: Optional[str] = None, user: Optional[UserRequest] = None + ) -> StreamResponse[AcceptFeedMemberInviteResponse]: + response = self.client.accept_feed_member_invite( + feed_group_id=self.feed_group, feed_id=self.id, user_id=user_id, user=user + ) + self._sync_from_response(response.data) + return response + + def query_feed_members( + self, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[QueryFeedMembersResponse]: + response = self.client.query_feed_members( + feed_group_id=self.feed_group, + feed_id=self.id, + limit=limit, + next=next, + prev=prev, + sort=sort, + filter=filter, + ) + self._sync_from_response(response.data) + return response + + def reject_feed_member_invite( + self, user_id: Optional[str] = None, user: Optional[UserRequest] = None + ) -> StreamResponse[RejectFeedMemberInviteResponse]: + response = self.client.reject_feed_member_invite( + feed_group_id=self.feed_group, feed_id=self.id, user_id=user_id, user=user + ) + self._sync_from_response(response.data) + return response + + def get_feed_identifier(self): + return self.feed_group + ":" + self.id + + create = get_or_create diff --git a/getstream/feeds/rest_client.py b/getstream/feeds/rest_client.py new file mode 100644 index 00000000..d27f60d5 --- /dev/null +++ b/getstream/feeds/rest_client.py @@ -0,0 +1,1419 @@ +# Code generated by GetStream internal OpenAPI code generator. DO NOT EDIT. +from getstream.base import BaseClient +from getstream.models import * +from getstream.stream_response import StreamResponse +from getstream.utils import build_query_param, build_body_dict +from getstream.feeds.feeds import Feed + + +class FeedsRestClient(BaseClient): + def __init__(self, api_key: str, base_url: str, timeout: float, token: str): + """ + Initializes FeedsClient with BaseClient instance + :param api_key: A string representing the client's API key + :param base_url: A string representing the base uniform resource locator + :param timeout: A number representing the time limit for a request + :param token: A string instance representing the client's token + """ + super().__init__( + api_key=api_key, + base_url=base_url, + timeout=timeout, + token=token, + ) + + def feed( + self, feed_type: str, feed_id: str, custom_data: Optional[Dict] = None + ) -> Feed: + """ + Create a Feed instance for the given feed type and ID. + + :param feed_type: The type of feed (e.g., 'user', 'timeline') + :param feed_id: The unique identifier for the feed + :param custom_data: Optional custom data for the feed + :return: Feed instance + """ + return Feed(self, feed_type, feed_id, custom_data) + + def add_activity( + self, + type: str, + feeds: List[str], + expires_at: Optional[str] = None, + id: Optional[str] = None, + parent_id: Optional[str] = None, + poll_id: Optional[str] = None, + text: Optional[str] = None, + user_id: Optional[str] = None, + visibility: Optional[str] = None, + visibility_tag: Optional[str] = None, + attachments: Optional[List[Attachment]] = None, + filter_tags: Optional[List[str]] = None, + interest_tags: Optional[List[str]] = None, + mentioned_user_ids: Optional[List[str]] = None, + custom: Optional[Dict[str, object]] = None, + location: Optional[ActivityLocation] = None, + search_data: Optional[Dict[str, object]] = None, + ) -> StreamResponse[AddActivityResponse]: + json = build_body_dict( + type=type, + feeds=feeds, + expires_at=expires_at, + id=id, + parent_id=parent_id, + poll_id=poll_id, + text=text, + user_id=user_id, + visibility=visibility, + visibility_tag=visibility_tag, + attachments=attachments, + filter_tags=filter_tags, + interest_tags=interest_tags, + mentioned_user_ids=mentioned_user_ids, + custom=custom, + location=location, + search_data=search_data, + ) + + return self.post("/api/v2/feeds/activities", AddActivityResponse, json=json) + + def upsert_activities( + self, activities: List[ActivityRequest] + ) -> StreamResponse[UpsertActivitiesResponse]: + json = build_body_dict(activities=activities) + + return self.post( + "/api/v2/feeds/activities/batch", UpsertActivitiesResponse, json=json + ) + + def delete_activities( + self, + ids: List[str], + hard_delete: Optional[bool] = None, + user_id: Optional[str] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[DeleteActivitiesResponse]: + json = build_body_dict( + ids=ids, hard_delete=hard_delete, user_id=user_id, user=user + ) + + return self.post( + "/api/v2/feeds/activities/delete", DeleteActivitiesResponse, json=json + ) + + def query_activities( + self, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[QueryActivitiesResponse]: + json = build_body_dict( + limit=limit, next=next, prev=prev, sort=sort, filter=filter + ) + + return self.post( + "/api/v2/feeds/activities/query", QueryActivitiesResponse, json=json + ) + + def delete_bookmark( + self, + activity_id: str, + folder_id: Optional[str] = None, + user_id: Optional[str] = None, + ) -> StreamResponse[DeleteBookmarkResponse]: + query_params = build_query_param(folder_id=folder_id, user_id=user_id) + path_params = { + "activity_id": activity_id, + } + + return self.delete( + "/api/v2/feeds/activities/{activity_id}/bookmarks", + DeleteBookmarkResponse, + query_params=query_params, + path_params=path_params, + ) + + def update_bookmark( + self, + activity_id: str, + folder_id: Optional[str] = None, + new_folder_id: Optional[str] = None, + user_id: Optional[str] = None, + custom: Optional[Dict[str, object]] = None, + new_folder: Optional[AddFolderRequest] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[UpdateBookmarkResponse]: + path_params = { + "activity_id": activity_id, + } + json = build_body_dict( + folder_id=folder_id, + new_folder_id=new_folder_id, + user_id=user_id, + custom=custom, + new_folder=new_folder, + user=user, + ) + + return self.patch( + "/api/v2/feeds/activities/{activity_id}/bookmarks", + UpdateBookmarkResponse, + path_params=path_params, + json=json, + ) + + def add_bookmark( + self, + activity_id: str, + folder_id: Optional[str] = None, + user_id: Optional[str] = None, + custom: Optional[Dict[str, object]] = None, + new_folder: Optional[AddFolderRequest] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[AddBookmarkResponse]: + path_params = { + "activity_id": activity_id, + } + json = build_body_dict( + folder_id=folder_id, + user_id=user_id, + custom=custom, + new_folder=new_folder, + user=user, + ) + + return self.post( + "/api/v2/feeds/activities/{activity_id}/bookmarks", + AddBookmarkResponse, + path_params=path_params, + json=json, + ) + + def activity_feedback( + self, + activity_id: str, + hide: Optional[bool] = None, + mute_user: Optional[bool] = None, + reason: Optional[str] = None, + report: Optional[bool] = None, + show_less: Optional[bool] = None, + user_id: Optional[str] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[ActivityFeedbackResponse]: + path_params = { + "activity_id": activity_id, + } + json = build_body_dict( + hide=hide, + mute_user=mute_user, + reason=reason, + report=report, + show_less=show_less, + user_id=user_id, + user=user, + ) + + return self.post( + "/api/v2/feeds/activities/{activity_id}/feedback", + ActivityFeedbackResponse, + path_params=path_params, + json=json, + ) + + def cast_poll_vote( + self, + activity_id: str, + poll_id: str, + user_id: Optional[str] = None, + user: Optional[UserRequest] = None, + vote: Optional[VoteData] = None, + ) -> StreamResponse[PollVoteResponse]: + path_params = { + "activity_id": activity_id, + "poll_id": poll_id, + } + json = build_body_dict(user_id=user_id, user=user, vote=vote) + + return self.post( + "/api/v2/feeds/activities/{activity_id}/polls/{poll_id}/vote", + PollVoteResponse, + path_params=path_params, + json=json, + ) + + def delete_poll_vote( + self, + activity_id: str, + poll_id: str, + vote_id: str, + user_id: Optional[str] = None, + ) -> StreamResponse[PollVoteResponse]: + query_params = build_query_param(user_id=user_id) + path_params = { + "activity_id": activity_id, + "poll_id": poll_id, + "vote_id": vote_id, + } + + return self.delete( + "/api/v2/feeds/activities/{activity_id}/polls/{poll_id}/vote/{vote_id}", + PollVoteResponse, + query_params=query_params, + path_params=path_params, + ) + + def add_reaction( + self, + activity_id: str, + type: str, + create_notification_activity: Optional[bool] = None, + skip_push: Optional[bool] = None, + user_id: Optional[str] = None, + custom: Optional[Dict[str, object]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[AddReactionResponse]: + path_params = { + "activity_id": activity_id, + } + json = build_body_dict( + type=type, + create_notification_activity=create_notification_activity, + skip_push=skip_push, + user_id=user_id, + custom=custom, + user=user, + ) + + return self.post( + "/api/v2/feeds/activities/{activity_id}/reactions", + AddReactionResponse, + path_params=path_params, + json=json, + ) + + def query_activity_reactions( + self, + activity_id: str, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[QueryActivityReactionsResponse]: + path_params = { + "activity_id": activity_id, + } + json = build_body_dict( + limit=limit, next=next, prev=prev, sort=sort, filter=filter + ) + + return self.post( + "/api/v2/feeds/activities/{activity_id}/reactions/query", + QueryActivityReactionsResponse, + path_params=path_params, + json=json, + ) + + def delete_activity_reaction( + self, activity_id: str, type: str, user_id: Optional[str] = None + ) -> StreamResponse[DeleteActivityReactionResponse]: + query_params = build_query_param(user_id=user_id) + path_params = { + "activity_id": activity_id, + "type": type, + } + + return self.delete( + "/api/v2/feeds/activities/{activity_id}/reactions/{type}", + DeleteActivityReactionResponse, + query_params=query_params, + path_params=path_params, + ) + + def delete_activity( + self, id: str, hard_delete: Optional[bool] = None + ) -> StreamResponse[DeleteActivityResponse]: + query_params = build_query_param(hard_delete=hard_delete) + path_params = { + "id": id, + } + + return self.delete( + "/api/v2/feeds/activities/{id}", + DeleteActivityResponse, + query_params=query_params, + path_params=path_params, + ) + + def get_activity(self, id: str) -> StreamResponse[GetActivityResponse]: + path_params = { + "id": id, + } + + return self.get( + "/api/v2/feeds/activities/{id}", + GetActivityResponse, + path_params=path_params, + ) + + def update_activity_partial( + self, + id: str, + user_id: Optional[str] = None, + unset: Optional[List[str]] = None, + set: Optional[Dict[str, object]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[UpdateActivityPartialResponse]: + path_params = { + "id": id, + } + json = build_body_dict(user_id=user_id, unset=unset, set=set, user=user) + + return self.patch( + "/api/v2/feeds/activities/{id}", + UpdateActivityPartialResponse, + path_params=path_params, + json=json, + ) + + def update_activity( + self, + id: str, + expires_at: Optional[datetime] = None, + poll_id: Optional[str] = None, + text: Optional[str] = None, + user_id: Optional[str] = None, + visibility: Optional[str] = None, + attachments: Optional[List[Attachment]] = None, + filter_tags: Optional[List[str]] = None, + interest_tags: Optional[List[str]] = None, + custom: Optional[Dict[str, object]] = None, + location: Optional[ActivityLocation] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[UpdateActivityResponse]: + path_params = { + "id": id, + } + json = build_body_dict( + expires_at=expires_at, + poll_id=poll_id, + text=text, + user_id=user_id, + visibility=visibility, + attachments=attachments, + filter_tags=filter_tags, + interest_tags=interest_tags, + custom=custom, + location=location, + user=user, + ) + + return self.put( + "/api/v2/feeds/activities/{id}", + UpdateActivityResponse, + path_params=path_params, + json=json, + ) + + def query_bookmark_folders( + self, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[QueryBookmarkFoldersResponse]: + json = build_body_dict( + limit=limit, next=next, prev=prev, sort=sort, filter=filter + ) + + return self.post( + "/api/v2/feeds/bookmark_folders/query", + QueryBookmarkFoldersResponse, + json=json, + ) + + def delete_bookmark_folder( + self, folder_id: str + ) -> StreamResponse[DeleteBookmarkFolderResponse]: + path_params = { + "folder_id": folder_id, + } + + return self.delete( + "/api/v2/feeds/bookmark_folders/{folder_id}", + DeleteBookmarkFolderResponse, + path_params=path_params, + ) + + def update_bookmark_folder( + self, + folder_id: str, + name: Optional[str] = None, + user_id: Optional[str] = None, + custom: Optional[Dict[str, object]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[UpdateBookmarkFolderResponse]: + path_params = { + "folder_id": folder_id, + } + json = build_body_dict(name=name, user_id=user_id, custom=custom, user=user) + + return self.patch( + "/api/v2/feeds/bookmark_folders/{folder_id}", + UpdateBookmarkFolderResponse, + path_params=path_params, + json=json, + ) + + def query_bookmarks( + self, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[QueryBookmarksResponse]: + json = build_body_dict( + limit=limit, next=next, prev=prev, sort=sort, filter=filter + ) + + return self.post( + "/api/v2/feeds/bookmarks/query", QueryBookmarksResponse, json=json + ) + + def get_comments( + self, + object_id: str, + object_type: str, + depth: Optional[int] = None, + sort: Optional[str] = None, + replies_limit: Optional[int] = None, + limit: Optional[int] = None, + prev: Optional[str] = None, + next: Optional[str] = None, + ) -> StreamResponse[GetCommentsResponse]: + query_params = build_query_param( + object_id=object_id, + object_type=object_type, + depth=depth, + sort=sort, + replies_limit=replies_limit, + limit=limit, + prev=prev, + next=next, + ) + + return self.get( + "/api/v2/feeds/comments", GetCommentsResponse, query_params=query_params + ) + + def add_comment( + self, + comment: str, + object_id: str, + object_type: str, + create_notification_activity: Optional[bool] = None, + parent_id: Optional[str] = None, + skip_push: Optional[bool] = None, + user_id: Optional[str] = None, + attachments: Optional[List[Attachment]] = None, + mentioned_user_ids: Optional[List[str]] = None, + custom: Optional[Dict[str, object]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[AddCommentResponse]: + json = build_body_dict( + comment=comment, + object_id=object_id, + object_type=object_type, + create_notification_activity=create_notification_activity, + parent_id=parent_id, + skip_push=skip_push, + user_id=user_id, + attachments=attachments, + mentioned_user_ids=mentioned_user_ids, + custom=custom, + user=user, + ) + + return self.post("/api/v2/feeds/comments", AddCommentResponse, json=json) + + def add_comments_batch( + self, comments: List[AddCommentRequest] + ) -> StreamResponse[AddCommentsBatchResponse]: + json = build_body_dict(comments=comments) + + return self.post( + "/api/v2/feeds/comments/batch", AddCommentsBatchResponse, json=json + ) + + def query_comments( + self, + filter: Dict[str, object], + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[str] = None, + ) -> StreamResponse[QueryCommentsResponse]: + json = build_body_dict( + filter=filter, limit=limit, next=next, prev=prev, sort=sort + ) + + return self.post( + "/api/v2/feeds/comments/query", QueryCommentsResponse, json=json + ) + + def delete_comment( + self, id: str, hard_delete: Optional[bool] = None + ) -> StreamResponse[DeleteCommentResponse]: + query_params = build_query_param(hard_delete=hard_delete) + path_params = { + "id": id, + } + + return self.delete( + "/api/v2/feeds/comments/{id}", + DeleteCommentResponse, + query_params=query_params, + path_params=path_params, + ) + + def get_comment(self, id: str) -> StreamResponse[GetCommentResponse]: + path_params = { + "id": id, + } + + return self.get( + "/api/v2/feeds/comments/{id}", GetCommentResponse, path_params=path_params + ) + + def update_comment( + self, + id: str, + comment: Optional[str] = None, + skip_push: Optional[bool] = None, + custom: Optional[Dict[str, object]] = None, + ) -> StreamResponse[UpdateCommentResponse]: + path_params = { + "id": id, + } + json = build_body_dict(comment=comment, skip_push=skip_push, custom=custom) + + return self.patch( + "/api/v2/feeds/comments/{id}", + UpdateCommentResponse, + path_params=path_params, + json=json, + ) + + def add_comment_reaction( + self, + id: str, + type: str, + create_notification_activity: Optional[bool] = None, + skip_push: Optional[bool] = None, + user_id: Optional[str] = None, + custom: Optional[Dict[str, object]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[AddCommentReactionResponse]: + path_params = { + "id": id, + } + json = build_body_dict( + type=type, + create_notification_activity=create_notification_activity, + skip_push=skip_push, + user_id=user_id, + custom=custom, + user=user, + ) + + return self.post( + "/api/v2/feeds/comments/{id}/reactions", + AddCommentReactionResponse, + path_params=path_params, + json=json, + ) + + def query_comment_reactions( + self, + id: str, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[QueryCommentReactionsResponse]: + path_params = { + "id": id, + } + json = build_body_dict( + limit=limit, next=next, prev=prev, sort=sort, filter=filter + ) + + return self.post( + "/api/v2/feeds/comments/{id}/reactions/query", + QueryCommentReactionsResponse, + path_params=path_params, + json=json, + ) + + def delete_comment_reaction( + self, id: str, type: str, user_id: Optional[str] = None + ) -> StreamResponse[DeleteCommentReactionResponse]: + query_params = build_query_param(user_id=user_id) + path_params = { + "id": id, + "type": type, + } + + return self.delete( + "/api/v2/feeds/comments/{id}/reactions/{type}", + DeleteCommentReactionResponse, + query_params=query_params, + path_params=path_params, + ) + + def get_comment_replies( + self, + id: str, + depth: Optional[int] = None, + sort: Optional[str] = None, + replies_limit: Optional[int] = None, + limit: Optional[int] = None, + prev: Optional[str] = None, + next: Optional[str] = None, + ) -> StreamResponse[GetCommentRepliesResponse]: + query_params = build_query_param( + depth=depth, + sort=sort, + replies_limit=replies_limit, + limit=limit, + prev=prev, + next=next, + ) + path_params = { + "id": id, + } + + return self.get( + "/api/v2/feeds/comments/{id}/replies", + GetCommentRepliesResponse, + query_params=query_params, + path_params=path_params, + ) + + def list_feed_groups(self) -> StreamResponse[ListFeedGroupsResponse]: + return self.get("/api/v2/feeds/feed_groups", ListFeedGroupsResponse) + + def create_feed_group( + self, + id: str, + default_visibility: Optional[str] = None, + activity_processors: Optional[List[ActivityProcessorConfig]] = None, + activity_selectors: Optional[List[ActivitySelectorConfig]] = None, + aggregation: Optional[AggregationConfig] = None, + custom: Optional[Dict[str, object]] = None, + notification: Optional[NotificationConfig] = None, + push_notification: Optional[PushNotificationConfig] = None, + ranking: Optional[RankingConfig] = None, + ) -> StreamResponse[CreateFeedGroupResponse]: + json = build_body_dict( + id=id, + default_visibility=default_visibility, + activity_processors=activity_processors, + activity_selectors=activity_selectors, + aggregation=aggregation, + custom=custom, + notification=notification, + push_notification=push_notification, + ranking=ranking, + ) + + return self.post( + "/api/v2/feeds/feed_groups", CreateFeedGroupResponse, json=json + ) + + def delete_feed( + self, feed_group_id: str, feed_id: str, hard_delete: Optional[bool] = None + ) -> StreamResponse[DeleteFeedResponse]: + query_params = build_query_param(hard_delete=hard_delete) + path_params = { + "feed_group_id": feed_group_id, + "feed_id": feed_id, + } + + return self.delete( + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}", + DeleteFeedResponse, + query_params=query_params, + path_params=path_params, + ) + + def get_or_create_feed( + self, + feed_group_id: str, + feed_id: str, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + user_id: Optional[str] = None, + view: Optional[str] = None, + watch: Optional[bool] = None, + activity_selector_options: Optional[Dict[str, object]] = None, + data: Optional[FeedInput] = None, + external_ranking: Optional[Dict[str, object]] = None, + filter: Optional[Dict[str, object]] = None, + followers_pagination: Optional[PagerRequest] = None, + following_pagination: Optional[PagerRequest] = None, + interest_weights: Optional[Dict[str, float]] = None, + member_pagination: Optional[PagerRequest] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[GetOrCreateFeedResponse]: + path_params = { + "feed_group_id": feed_group_id, + "feed_id": feed_id, + } + json = build_body_dict( + limit=limit, + next=next, + prev=prev, + user_id=user_id, + view=view, + watch=watch, + activity_selector_options=activity_selector_options, + data=data, + external_ranking=external_ranking, + filter=filter, + followers_pagination=followers_pagination, + following_pagination=following_pagination, + interest_weights=interest_weights, + member_pagination=member_pagination, + user=user, + ) + + return self.post( + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}", + GetOrCreateFeedResponse, + path_params=path_params, + json=json, + ) + + def update_feed( + self, + feed_group_id: str, + feed_id: str, + created_by_id: Optional[str] = None, + custom: Optional[Dict[str, object]] = None, + ) -> StreamResponse[UpdateFeedResponse]: + path_params = { + "feed_group_id": feed_group_id, + "feed_id": feed_id, + } + json = build_body_dict(created_by_id=created_by_id, custom=custom) + + return self.put( + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}", + UpdateFeedResponse, + path_params=path_params, + json=json, + ) + + def mark_activity( + self, + feed_group_id: str, + feed_id: str, + mark_all_read: Optional[bool] = None, + mark_all_seen: Optional[bool] = None, + user_id: Optional[str] = None, + mark_read: Optional[List[str]] = None, + mark_seen: Optional[List[str]] = None, + mark_watched: Optional[List[str]] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[Response]: + path_params = { + "feed_group_id": feed_group_id, + "feed_id": feed_id, + } + json = build_body_dict( + mark_all_read=mark_all_read, + mark_all_seen=mark_all_seen, + user_id=user_id, + mark_read=mark_read, + mark_seen=mark_seen, + mark_watched=mark_watched, + user=user, + ) + + return self.post( + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}/activities/mark/batch", + Response, + path_params=path_params, + json=json, + ) + + def unpin_activity( + self, + feed_group_id: str, + feed_id: str, + activity_id: str, + user_id: Optional[str] = None, + ) -> StreamResponse[UnpinActivityResponse]: + query_params = build_query_param(user_id=user_id) + path_params = { + "feed_group_id": feed_group_id, + "feed_id": feed_id, + "activity_id": activity_id, + } + + return self.delete( + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}/activities/{activity_id}/pin", + UnpinActivityResponse, + query_params=query_params, + path_params=path_params, + ) + + def pin_activity( + self, + feed_group_id: str, + feed_id: str, + activity_id: str, + user_id: Optional[str] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[PinActivityResponse]: + path_params = { + "feed_group_id": feed_group_id, + "feed_id": feed_id, + "activity_id": activity_id, + } + json = build_body_dict(user_id=user_id, user=user) + + return self.post( + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}/activities/{activity_id}/pin", + PinActivityResponse, + path_params=path_params, + json=json, + ) + + def update_feed_members( + self, + feed_group_id: str, + feed_id: str, + operation: str, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + members: Optional[List[FeedMemberRequest]] = None, + ) -> StreamResponse[UpdateFeedMembersResponse]: + path_params = { + "feed_group_id": feed_group_id, + "feed_id": feed_id, + } + json = build_body_dict( + operation=operation, limit=limit, next=next, prev=prev, members=members + ) + + return self.patch( + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}/members", + UpdateFeedMembersResponse, + path_params=path_params, + json=json, + ) + + def accept_feed_member_invite( + self, + feed_id: str, + feed_group_id: str, + user_id: Optional[str] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[AcceptFeedMemberInviteResponse]: + path_params = { + "feed_id": feed_id, + "feed_group_id": feed_group_id, + } + json = build_body_dict(user_id=user_id, user=user) + + return self.post( + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}/members/accept", + AcceptFeedMemberInviteResponse, + path_params=path_params, + json=json, + ) + + def query_feed_members( + self, + feed_group_id: str, + feed_id: str, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[QueryFeedMembersResponse]: + path_params = { + "feed_group_id": feed_group_id, + "feed_id": feed_id, + } + json = build_body_dict( + limit=limit, next=next, prev=prev, sort=sort, filter=filter + ) + + return self.post( + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}/members/query", + QueryFeedMembersResponse, + path_params=path_params, + json=json, + ) + + def reject_feed_member_invite( + self, + feed_group_id: str, + feed_id: str, + user_id: Optional[str] = None, + user: Optional[UserRequest] = None, + ) -> StreamResponse[RejectFeedMemberInviteResponse]: + path_params = { + "feed_group_id": feed_group_id, + "feed_id": feed_id, + } + json = build_body_dict(user_id=user_id, user=user) + + return self.post( + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}/members/reject", + RejectFeedMemberInviteResponse, + path_params=path_params, + json=json, + ) + + def get_follow_suggestions( + self, + feed_group_id: str, + limit: Optional[int] = None, + user_id: Optional[str] = None, + ) -> StreamResponse[GetFollowSuggestionsResponse]: + query_params = build_query_param(limit=limit, user_id=user_id) + path_params = { + "feed_group_id": feed_group_id, + } + + return self.get( + "/api/v2/feeds/feed_groups/{feed_group_id}/follow_suggestions", + GetFollowSuggestionsResponse, + query_params=query_params, + path_params=path_params, + ) + + def delete_feed_group( + self, id: str, hard_delete: Optional[bool] = None + ) -> StreamResponse[DeleteFeedGroupResponse]: + query_params = build_query_param(hard_delete=hard_delete) + path_params = { + "id": id, + } + + return self.delete( + "/api/v2/feeds/feed_groups/{id}", + DeleteFeedGroupResponse, + query_params=query_params, + path_params=path_params, + ) + + def get_feed_group(self, id: str) -> StreamResponse[GetFeedGroupResponse]: + path_params = { + "id": id, + } + + return self.get( + "/api/v2/feeds/feed_groups/{id}", + GetFeedGroupResponse, + path_params=path_params, + ) + + def get_or_create_feed_group( + self, + id: str, + default_visibility: Optional[str] = None, + activity_processors: Optional[List[ActivityProcessorConfig]] = None, + activity_selectors: Optional[List[ActivitySelectorConfig]] = None, + aggregation: Optional[AggregationConfig] = None, + custom: Optional[Dict[str, object]] = None, + notification: Optional[NotificationConfig] = None, + push_notification: Optional[PushNotificationConfig] = None, + ranking: Optional[RankingConfig] = None, + ) -> StreamResponse[GetOrCreateFeedGroupResponse]: + path_params = { + "id": id, + } + json = build_body_dict( + default_visibility=default_visibility, + activity_processors=activity_processors, + activity_selectors=activity_selectors, + aggregation=aggregation, + custom=custom, + notification=notification, + push_notification=push_notification, + ranking=ranking, + ) + + return self.post( + "/api/v2/feeds/feed_groups/{id}", + GetOrCreateFeedGroupResponse, + path_params=path_params, + json=json, + ) + + def update_feed_group( + self, + id: str, + activity_processors: Optional[List[ActivityProcessorConfig]] = None, + activity_selectors: Optional[List[ActivitySelectorConfig]] = None, + aggregation: Optional[AggregationConfig] = None, + custom: Optional[Dict[str, object]] = None, + notification: Optional[NotificationConfig] = None, + push_notification: Optional[PushNotificationConfig] = None, + ranking: Optional[RankingConfig] = None, + ) -> StreamResponse[UpdateFeedGroupResponse]: + path_params = { + "id": id, + } + json = build_body_dict( + activity_processors=activity_processors, + activity_selectors=activity_selectors, + aggregation=aggregation, + custom=custom, + notification=notification, + push_notification=push_notification, + ranking=ranking, + ) + + return self.put( + "/api/v2/feeds/feed_groups/{id}", + UpdateFeedGroupResponse, + path_params=path_params, + json=json, + ) + + def list_feed_views(self) -> StreamResponse[ListFeedViewsResponse]: + return self.get("/api/v2/feeds/feed_views", ListFeedViewsResponse) + + def create_feed_view( + self, + id: str, + activity_processors: Optional[List[ActivityProcessorConfig]] = None, + activity_selectors: Optional[List[ActivitySelectorConfig]] = None, + aggregation: Optional[AggregationConfig] = None, + ranking: Optional[RankingConfig] = None, + ) -> StreamResponse[CreateFeedViewResponse]: + json = build_body_dict( + id=id, + activity_processors=activity_processors, + activity_selectors=activity_selectors, + aggregation=aggregation, + ranking=ranking, + ) + + return self.post("/api/v2/feeds/feed_views", CreateFeedViewResponse, json=json) + + def delete_feed_view(self, id: str) -> StreamResponse[DeleteFeedViewResponse]: + path_params = { + "id": id, + } + + return self.delete( + "/api/v2/feeds/feed_views/{id}", + DeleteFeedViewResponse, + path_params=path_params, + ) + + def get_feed_view(self, id: str) -> StreamResponse[GetFeedViewResponse]: + path_params = { + "id": id, + } + + return self.get( + "/api/v2/feeds/feed_views/{id}", + GetFeedViewResponse, + path_params=path_params, + ) + + def get_or_create_feed_view( + self, + id: str, + activity_processors: Optional[List[ActivityProcessorConfig]] = None, + activity_selectors: Optional[List[ActivitySelectorConfig]] = None, + aggregation: Optional[AggregationConfig] = None, + ranking: Optional[RankingConfig] = None, + ) -> StreamResponse[GetOrCreateFeedViewResponse]: + path_params = { + "id": id, + } + json = build_body_dict( + activity_processors=activity_processors, + activity_selectors=activity_selectors, + aggregation=aggregation, + ranking=ranking, + ) + + return self.post( + "/api/v2/feeds/feed_views/{id}", + GetOrCreateFeedViewResponse, + path_params=path_params, + json=json, + ) + + def update_feed_view( + self, + id: str, + activity_processors: Optional[List[ActivityProcessorConfig]] = None, + activity_selectors: Optional[List[ActivitySelectorConfig]] = None, + aggregation: Optional[AggregationConfig] = None, + ranking: Optional[RankingConfig] = None, + ) -> StreamResponse[UpdateFeedViewResponse]: + path_params = { + "id": id, + } + json = build_body_dict( + activity_processors=activity_processors, + activity_selectors=activity_selectors, + aggregation=aggregation, + ranking=ranking, + ) + + return self.put( + "/api/v2/feeds/feed_views/{id}", + UpdateFeedViewResponse, + path_params=path_params, + json=json, + ) + + def create_feeds_batch( + self, feeds: List[FeedRequest] + ) -> StreamResponse[CreateFeedsBatchResponse]: + json = build_body_dict(feeds=feeds) + + return self.post( + "/api/v2/feeds/feeds/batch", CreateFeedsBatchResponse, json=json + ) + + def query_feeds( + self, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + watch: Optional[bool] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[QueryFeedsResponse]: + json = build_body_dict( + limit=limit, next=next, prev=prev, watch=watch, sort=sort, filter=filter + ) + + return self.post("/api/v2/feeds/feeds/query", QueryFeedsResponse, json=json) + + def update_follow( + self, + source: str, + target: str, + create_notification_activity: Optional[bool] = None, + follower_role: Optional[str] = None, + push_preference: Optional[str] = None, + skip_push: Optional[bool] = None, + custom: Optional[Dict[str, object]] = None, + ) -> StreamResponse[UpdateFollowResponse]: + json = build_body_dict( + source=source, + target=target, + create_notification_activity=create_notification_activity, + follower_role=follower_role, + push_preference=push_preference, + skip_push=skip_push, + custom=custom, + ) + + return self.patch("/api/v2/feeds/follows", UpdateFollowResponse, json=json) + + def follow( + self, + source: str, + target: str, + create_notification_activity: Optional[bool] = None, + push_preference: Optional[str] = None, + skip_push: Optional[bool] = None, + custom: Optional[Dict[str, object]] = None, + ) -> StreamResponse[SingleFollowResponse]: + json = build_body_dict( + source=source, + target=target, + create_notification_activity=create_notification_activity, + push_preference=push_preference, + skip_push=skip_push, + custom=custom, + ) + + return self.post("/api/v2/feeds/follows", SingleFollowResponse, json=json) + + def accept_follow( + self, source: str, target: str, follower_role: Optional[str] = None + ) -> StreamResponse[AcceptFollowResponse]: + json = build_body_dict( + source=source, target=target, follower_role=follower_role + ) + + return self.post( + "/api/v2/feeds/follows/accept", AcceptFollowResponse, json=json + ) + + def follow_batch( + self, follows: List[FollowRequest] + ) -> StreamResponse[FollowBatchResponse]: + json = build_body_dict(follows=follows) + + return self.post("/api/v2/feeds/follows/batch", FollowBatchResponse, json=json) + + def query_follows( + self, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[QueryFollowsResponse]: + json = build_body_dict( + limit=limit, next=next, prev=prev, sort=sort, filter=filter + ) + + return self.post("/api/v2/feeds/follows/query", QueryFollowsResponse, json=json) + + def reject_follow( + self, source: str, target: str + ) -> StreamResponse[RejectFollowResponse]: + json = build_body_dict(source=source, target=target) + + return self.post( + "/api/v2/feeds/follows/reject", RejectFollowResponse, json=json + ) + + def unfollow(self, source: str, target: str) -> StreamResponse[UnfollowResponse]: + path_params = { + "source": source, + "target": target, + } + + return self.delete( + "/api/v2/feeds/follows/{source}/{target}", + UnfollowResponse, + path_params=path_params, + ) + + def create_membership_level( + self, + id: str, + name: str, + description: Optional[str] = None, + priority: Optional[int] = None, + tags: Optional[List[str]] = None, + custom: Optional[Dict[str, object]] = None, + ) -> StreamResponse[CreateMembershipLevelResponse]: + json = build_body_dict( + id=id, + name=name, + description=description, + priority=priority, + tags=tags, + custom=custom, + ) + + return self.post( + "/api/v2/feeds/membership_levels", CreateMembershipLevelResponse, json=json + ) + + def query_membership_levels( + self, + limit: Optional[int] = None, + next: Optional[str] = None, + prev: Optional[str] = None, + sort: Optional[List[SortParamRequest]] = None, + filter: Optional[Dict[str, object]] = None, + ) -> StreamResponse[QueryMembershipLevelsResponse]: + json = build_body_dict( + limit=limit, next=next, prev=prev, sort=sort, filter=filter + ) + + return self.post( + "/api/v2/feeds/membership_levels/query", + QueryMembershipLevelsResponse, + json=json, + ) + + def delete_membership_level(self, id: str) -> StreamResponse[Response]: + path_params = { + "id": id, + } + + return self.delete( + "/api/v2/feeds/membership_levels/{id}", Response, path_params=path_params + ) + + def update_membership_level( + self, + id: str, + description: Optional[str] = None, + name: Optional[str] = None, + priority: Optional[int] = None, + tags: Optional[List[str]] = None, + custom: Optional[Dict[str, object]] = None, + ) -> StreamResponse[UpdateMembershipLevelResponse]: + path_params = { + "id": id, + } + json = build_body_dict( + description=description, + name=name, + priority=priority, + tags=tags, + custom=custom, + ) + + return self.patch( + "/api/v2/feeds/membership_levels/{id}", + UpdateMembershipLevelResponse, + path_params=path_params, + json=json, + ) + + def unfollow_batch( + self, follows: List[FollowPair] + ) -> StreamResponse[UnfollowBatchResponse]: + json = build_body_dict(follows=follows) + + return self.post( + "/api/v2/feeds/unfollow/batch", UnfollowBatchResponse, json=json + ) + + def delete_feed_user_data( + self, user_id: str + ) -> StreamResponse[DeleteFeedUserDataResponse]: + path_params = { + "user_id": user_id, + } + + return self.delete( + "/api/v2/feeds/users/{user_id}/delete", + DeleteFeedUserDataResponse, + path_params=path_params, + ) + + def export_feed_user_data( + self, user_id: str + ) -> StreamResponse[ExportFeedUserDataResponse]: + path_params = { + "user_id": user_id, + } + + return self.post( + "/api/v2/feeds/users/{user_id}/export", + ExportFeedUserDataResponse, + path_params=path_params, + ) diff --git a/getstream/models/__init__.py b/getstream/models/__init__.py index f76d7821..1821ce04 100644 --- a/getstream/models/__init__.py +++ b/getstream/models/__init__.py @@ -142,6 +142,37 @@ class AWSRekognitionRule(DataClassJsonMixin): min_confidence: float = dc_field(metadata=dc_config(field_name="min_confidence")) +@dataclass +class AcceptFeedMemberInviteRequest(DataClassJsonMixin): + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class AcceptFeedMemberInviteResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + member: "FeedMemberResponse" = dc_field(metadata=dc_config(field_name="member")) + + +@dataclass +class AcceptFollowRequest(DataClassJsonMixin): + source: str = dc_field(metadata=dc_config(field_name="source")) + target: str = dc_field(metadata=dc_config(field_name="target")) + follower_role: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="follower_role") + ) + + +@dataclass +class AcceptFollowResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) + + @dataclass class Action(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) @@ -275,9 +306,7 @@ class ActiveCallsSummary(DataClassJsonMixin): @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")) +class ActivityAddedEvent(DataClassJsonMixin): created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -286,21 +315,31 @@ class ActivityMarkedEvent(DataClassJsonMixin): 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")) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( - default="activity.marked", metadata=dc_config(field_name="type") + default="feeds.activity.added", metadata=dc_config(field_name="type") ) - marked_read: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="marked_read") + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") ) - marked_watched: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="marked_watched") + 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"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) @dataclass -class AnyEvent(DataClassJsonMixin): +class ActivityDeletedEvent(DataClassJsonMixin): created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -309,139 +348,138 @@ class AnyEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - type: str = dc_field(default="*", metadata=dc_config(field_name="type")) - - -@dataclass -class AppResponseFields(DataClassJsonMixin): - async_url_enrich_enabled: bool = dc_field( - metadata=dc_config(field_name="async_url_enrich_enabled") - ) - auto_translation_enabled: bool = dc_field( - metadata=dc_config(field_name="auto_translation_enabled") - ) - campaign_enabled: bool = dc_field(metadata=dc_config(field_name="campaign_enabled")) - cdn_expiration_seconds: int = dc_field( - metadata=dc_config(field_name="cdn_expiration_seconds") - ) - custom_action_handler_url: str = dc_field( - metadata=dc_config(field_name="custom_action_handler_url") - ) - disable_auth_checks: bool = dc_field( - metadata=dc_config(field_name="disable_auth_checks") - ) - disable_permissions_checks: bool = dc_field( - metadata=dc_config(field_name="disable_permissions_checks") - ) - enforce_unique_usernames: str = dc_field( - metadata=dc_config(field_name="enforce_unique_usernames") - ) - guest_user_creation_disabled: bool = dc_field( - metadata=dc_config(field_name="guest_user_creation_disabled") - ) - 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") - ) - moderation_multitenant_blocklist_enabled: bool = dc_field( - metadata=dc_config(field_name="moderation_multitenant_blocklist_enabled") - ) - moderation_webhook_url: str = dc_field( - metadata=dc_config(field_name="moderation_webhook_url") - ) - multi_tenant_enabled: bool = dc_field( - metadata=dc_config(field_name="multi_tenant_enabled") + fid: str = dc_field(metadata=dc_config(field_name="fid")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.activity.deleted", metadata=dc_config(field_name="type") ) - name: str = dc_field(metadata=dc_config(field_name="name")) - organization: str = dc_field(metadata=dc_config(field_name="organization")) - permission_version: str = dc_field( - metadata=dc_config(field_name="permission_version") + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") ) - reminders_interval: int = dc_field( - metadata=dc_config(field_name="reminders_interval") + 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"), + ), ) - sns_key: str = dc_field(metadata=dc_config(field_name="sns_key")) - sns_secret: str = dc_field(metadata=dc_config(field_name="sns_secret")) - sns_topic_arn: str = dc_field(metadata=dc_config(field_name="sns_topic_arn")) - sqs_key: str = dc_field(metadata=dc_config(field_name="sqs_key")) - sqs_secret: str = dc_field(metadata=dc_config(field_name="sqs_secret")) - sqs_url: str = dc_field(metadata=dc_config(field_name="sqs_url")) - suspended: bool = dc_field(metadata=dc_config(field_name="suspended")) - suspended_explanation: str = dc_field( - metadata=dc_config(field_name="suspended_explanation") + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) - 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") + + +@dataclass +class ActivityFeedbackRequest(DataClassJsonMixin): + hide: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="hide")) + mute_user: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="mute_user") ) - 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") + reason: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="reason") ) - user_search_disallowed_roles: List[str] = dc_field( - metadata=dc_config(field_name="user_search_disallowed_roles") + report: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="report") ) - webhook_events: List[str] = dc_field( - metadata=dc_config(field_name="webhook_events") + show_less: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="show_less") ) - call_types: "Dict[str, Optional[CallType]]" = dc_field( - metadata=dc_config(field_name="call_types") + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") ) - channel_configs: "Dict[str, ChannelConfig]" = dc_field( - metadata=dc_config(field_name="channel_configs") + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) - file_upload_config: "FileUploadConfig" = dc_field( - metadata=dc_config(field_name="file_upload_config") + + +@dataclass +class ActivityFeedbackResponse(DataClassJsonMixin): + activity_id: str = dc_field(metadata=dc_config(field_name="activity_id")) + duration: str = dc_field(metadata=dc_config(field_name="duration")) + + +@dataclass +class ActivityLocation(DataClassJsonMixin): + lat: float = dc_field(metadata=dc_config(field_name="lat")) + lng: float = dc_field(metadata=dc_config(field_name="lng")) + + +@dataclass +class ActivityMarkEvent(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"), + ) ) - grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) - image_upload_config: "FileUploadConfig" = dc_field( - metadata=dc_config(field_name="image_upload_config") + fid: str = dc_field(metadata=dc_config(field_name="fid")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.activity.marked", metadata=dc_config(field_name="type") ) - policies: "Dict[str, List[Policy]]" = dc_field( - metadata=dc_config(field_name="policies") + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") ) - push_notifications: "PushNotificationFields" = dc_field( - metadata=dc_config(field_name="push_notifications") + mark_all_read: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="mark_all_read") ) - before_message_send_hook_url: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="before_message_send_hook_url") + mark_all_seen: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="mark_all_seen") ) - revoke_tokens_issued_before: Optional[datetime] = dc_field( + received_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="revoke_tokens_issued_before", + field_name="received_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ), ) - allowed_flag_reasons: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="allowed_flag_reasons") + mark_read: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="mark_read") ) - geofences: "Optional[List[GeofenceResponse]]" = dc_field( - default=None, metadata=dc_config(field_name="geofences") + mark_seen: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="mark_seen") ) - image_moderation_labels: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="image_moderation_labels") + mark_watched: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="mark_watched") ) - datadog_info: "Optional[DataDogInfo]" = dc_field( - default=None, metadata=dc_config(field_name="datadog_info") + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) - moderation_dashboard_preferences: "Optional[ModerationDashboardPreferences]" = ( - dc_field( - default=None, - metadata=dc_config(field_name="moderation_dashboard_preferences"), + + +@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 AsyncBulkImageModerationEvent(DataClassJsonMixin): +class ActivityPinResponse(DataClassJsonMixin): created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -450,28 +488,39 @@ class AsyncBulkImageModerationEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - finished_at: datetime = dc_field( + feed: str = dc_field(metadata=dc_config(field_name="feed")) + updated_at: datetime = dc_field( metadata=dc_config( - field_name="finished_at", + field_name="updated_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ) ) - started_at: datetime = dc_field( + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + + +@dataclass +class ActivityPinnedEvent(DataClassJsonMixin): + created_at: datetime = dc_field( metadata=dc_config( - field_name="started_at", + field_name="created_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ) ) - task_id: str = dc_field(metadata=dc_config(field_name="task_id")) - url: str = dc_field(metadata=dc_config(field_name="url")) + fid: str = dc_field(metadata=dc_config(field_name="fid")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + pinned_activity: "PinActivityResponse" = dc_field( + metadata=dc_config(field_name="pinned_activity") + ) type: str = dc_field( - default="export.bulk_image_moderation.success", - metadata=dc_config(field_name="type"), + default="feeds.activity.pinned", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") ) received_at: Optional[datetime] = dc_field( default=None, @@ -482,10 +531,18 @@ class AsyncBulkImageModerationEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) @dataclass -class AsyncExportChannelsEvent(DataClassJsonMixin): +class ActivityProcessorConfig(DataClassJsonMixin): + type: str = dc_field(metadata=dc_config(field_name="type")) + + +@dataclass +class ActivityReactionAddedEvent(DataClassJsonMixin): created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -494,27 +551,53 @@ class AsyncExportChannelsEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - finished_at: datetime = dc_field( - metadata=dc_config( - field_name="finished_at", - encoder=encode_datetime, - decoder=datetime_from_unix_ns, - mm_field=fields.DateTime(format="iso"), - ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + reaction: "FeedsReactionResponse" = dc_field( + metadata=dc_config(field_name="reaction") ) - started_at: datetime = dc_field( + type: str = dc_field( + default="feeds.activity.reaction.added", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + received_at: Optional[datetime] = dc_field( + default=None, metadata=dc_config( - field_name="started_at", + field_name="received_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class ActivityReactionDeletedEvent(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"), ) ) - task_id: str = dc_field(metadata=dc_config(field_name="task_id")) - url: str = dc_field(metadata=dc_config(field_name="url")) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + reaction: "FeedsReactionResponse" = dc_field( + metadata=dc_config(field_name="reaction") + ) type: str = dc_field( - default="export.channels.success", metadata=dc_config(field_name="type") + default="feeds.activity.reaction.deleted", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") ) received_at: Optional[datetime] = dc_field( default=None, @@ -525,10 +608,13 @@ class AsyncExportChannelsEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) @dataclass -class AsyncExportErrorEvent(DataClassJsonMixin): +class ActivityReactionUpdatedEvent(DataClassJsonMixin): created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -537,29 +623,52 @@ class AsyncExportErrorEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - error: str = dc_field(metadata=dc_config(field_name="error")) - finished_at: datetime = dc_field( + fid: str = dc_field(metadata=dc_config(field_name="fid")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + reaction: "FeedsReactionResponse" = dc_field( + metadata=dc_config(field_name="reaction") + ) + type: str = dc_field( + default="feeds.activity.reaction.updated", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + received_at: Optional[datetime] = dc_field( + default=None, metadata=dc_config( - field_name="finished_at", + field_name="received_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ) + ), ) - started_at: datetime = dc_field( + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class ActivityRemovedFromFeedEvent(DataClassJsonMixin): + created_at: datetime = dc_field( metadata=dc_config( - field_name="started_at", + field_name="created_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ) ) - task_id: str = dc_field(metadata=dc_config(field_name="task_id")) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( - default="export.bulk_image_moderation.error", + default="feeds.activity.removed_from_feed", metadata=dc_config(field_name="type"), ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) received_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -569,10 +678,62 @@ class AsyncExportErrorEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) @dataclass -class AsyncExportModerationLogsEvent(DataClassJsonMixin): +class ActivityRequest(DataClassJsonMixin): + type: str = dc_field(metadata=dc_config(field_name="type")) + feeds: List[str] = dc_field(metadata=dc_config(field_name="feeds")) + expires_at: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="expires_at") + ) + id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") + ) + poll_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="poll_id") + ) + text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="visibility") + ) + visibility_tag: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="visibility_tag") + ) + attachments: "Optional[List[Attachment]]" = dc_field( + default=None, metadata=dc_config(field_name="attachments") + ) + filter_tags: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="filter_tags") + ) + interest_tags: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="interest_tags") + ) + mentioned_user_ids: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="mentioned_user_ids") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + location: "Optional[ActivityLocation]" = dc_field( + default=None, metadata=dc_config(field_name="location") + ) + search_data: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="search_data") + ) + + +@dataclass +class ActivityResponse(DataClassJsonMixin): + bookmark_count: int = dc_field(metadata=dc_config(field_name="bookmark_count")) + comment_count: int = dc_field(metadata=dc_config(field_name="comment_count")) created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -581,41 +742,129 @@ class AsyncExportModerationLogsEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - finished_at: datetime = dc_field( + id: str = dc_field(metadata=dc_config(field_name="id")) + popularity: int = dc_field(metadata=dc_config(field_name="popularity")) + reaction_count: int = dc_field(metadata=dc_config(field_name="reaction_count")) + score: float = dc_field(metadata=dc_config(field_name="score")) + share_count: int = dc_field(metadata=dc_config(field_name="share_count")) + type: str = dc_field(metadata=dc_config(field_name="type")) + updated_at: datetime = dc_field( metadata=dc_config( - field_name="finished_at", + field_name="updated_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ) ) - started_at: datetime = dc_field( + visibility: str = dc_field(metadata=dc_config(field_name="visibility")) + attachments: "List[Attachment]" = dc_field( + metadata=dc_config(field_name="attachments") + ) + comments: "List[CommentResponse]" = dc_field( + metadata=dc_config(field_name="comments") + ) + feeds: List[str] = dc_field(metadata=dc_config(field_name="feeds")) + filter_tags: List[str] = dc_field(metadata=dc_config(field_name="filter_tags")) + interest_tags: List[str] = dc_field(metadata=dc_config(field_name="interest_tags")) + latest_reactions: "List[FeedsReactionResponse]" = dc_field( + metadata=dc_config(field_name="latest_reactions") + ) + mentioned_users: "List[UserResponse]" = dc_field( + metadata=dc_config(field_name="mentioned_users") + ) + own_bookmarks: "List[BookmarkResponse]" = dc_field( + metadata=dc_config(field_name="own_bookmarks") + ) + own_reactions: "List[FeedsReactionResponse]" = dc_field( + metadata=dc_config(field_name="own_reactions") + ) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + reaction_groups: "Dict[str, Optional[ReactionGroupResponse]]" = dc_field( + metadata=dc_config(field_name="reaction_groups") + ) + search_data: Dict[str, object] = dc_field( + metadata=dc_config(field_name="search_data") + ) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + deleted_at: Optional[datetime] = dc_field( + default=None, metadata=dc_config( - field_name="started_at", + field_name="deleted_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ) + ), ) - task_id: str = dc_field(metadata=dc_config(field_name="task_id")) - url: str = dc_field(metadata=dc_config(field_name="url")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - type: str = dc_field( - default="export.moderation_logs.success", metadata=dc_config(field_name="type") + edited_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="edited_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), ) - received_at: Optional[datetime] = dc_field( + expires_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="received_at", + field_name="expires_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + hidden: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="hidden") + ) + text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + visibility_tag: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="visibility_tag") + ) + current_feed: "Optional[FeedResponse]" = dc_field( + default=None, metadata=dc_config(field_name="current_feed") + ) + location: "Optional[ActivityLocation]" = dc_field( + default=None, metadata=dc_config(field_name="location") + ) + moderation: "Optional[ModerationV2Response]" = dc_field( + default=None, metadata=dc_config(field_name="moderation") + ) + notification_context: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="notification_context") + ) + parent: "Optional[ActivityResponse]" = dc_field( + default=None, metadata=dc_config(field_name="parent") + ) + poll: "Optional[PollResponseData]" = dc_field( + default=None, metadata=dc_config(field_name="poll") + ) + + +@dataclass +class ActivitySelectorConfig(DataClassJsonMixin): + cutoff_time: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="cutoff_time", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ), ) + min_popularity: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="min_popularity") + ) + type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + sort: "Optional[List[SortParam]]" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + filter: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="filter") + ) @dataclass -class AsyncExportUsersEvent(DataClassJsonMixin): +class ActivityUnpinnedEvent(DataClassJsonMixin): created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -624,27 +873,49 @@ class AsyncExportUsersEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - finished_at: datetime = dc_field( + fid: str = dc_field(metadata=dc_config(field_name="fid")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + pinned_activity: "PinActivityResponse" = dc_field( + metadata=dc_config(field_name="pinned_activity") + ) + type: str = dc_field( + default="feeds.activity.unpinned", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + received_at: Optional[datetime] = dc_field( + default=None, metadata=dc_config( - field_name="finished_at", + field_name="received_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ) + ), ) - started_at: datetime = dc_field( + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class ActivityUpdatedEvent(DataClassJsonMixin): + created_at: datetime = dc_field( metadata=dc_config( - field_name="started_at", + field_name="created_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ) ) - task_id: str = dc_field(metadata=dc_config(field_name="task_id")) - url: str = dc_field(metadata=dc_config(field_name="url")) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( - default="export.users.success", metadata=dc_config(field_name="type") + default="feeds.activity.updated", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") ) received_at: Optional[datetime] = dc_field( default=None, @@ -655,251 +926,210 @@ class AsyncExportUsersEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) - - -@dataclass -class AsyncModerationCallbackConfig(DataClassJsonMixin): - mode: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mode")) - server_url: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="server_url") + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) @dataclass -class AsyncModerationConfiguration(DataClassJsonMixin): - timeout_ms: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="timeout_ms") - ) - callback: "Optional[AsyncModerationCallbackConfig]" = dc_field( - default=None, metadata=dc_config(field_name="callback") +class AddActivityRequest(DataClassJsonMixin): + type: str = dc_field(metadata=dc_config(field_name="type")) + feeds: List[str] = dc_field(metadata=dc_config(field_name="feeds")) + expires_at: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="expires_at") ) - - -@dataclass -class Attachment(DataClassJsonMixin): - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - asset_url: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="asset_url") + id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") ) - author_icon: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="author_icon") + poll_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="poll_id") ) - author_link: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="author_link") + text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") ) - author_name: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="author_name") + visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="visibility") ) - color: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="color") + visibility_tag: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="visibility_tag") ) - fallback: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="fallback") + attachments: "Optional[List[Attachment]]" = dc_field( + default=None, metadata=dc_config(field_name="attachments") ) - footer: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="footer") + filter_tags: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="filter_tags") ) - footer_icon: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="footer_icon") + interest_tags: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="interest_tags") ) - image_url: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="image_url") + mentioned_user_ids: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="mentioned_user_ids") ) - og_scrape_url: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="og_scrape_url") + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") ) - original_height: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="original_height") + location: "Optional[ActivityLocation]" = dc_field( + default=None, metadata=dc_config(field_name="location") ) - original_width: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="original_width") + search_data: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="search_data") ) - pretext: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="pretext") + + +@dataclass +class AddActivityResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + + +@dataclass +class AddBookmarkRequest(DataClassJsonMixin): + folder_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="folder_id") ) - text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) - thumb_url: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="thumb_url") - ) - title: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="title") - ) - title_link: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="title_link") + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") ) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - actions: "Optional[List[Action]]" = dc_field( - default=None, metadata=dc_config(field_name="actions") + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") ) - fields: "Optional[List[Field]]" = dc_field( - default=None, metadata=dc_config(field_name="fields") + new_folder: "Optional[AddFolderRequest]" = dc_field( + default=None, metadata=dc_config(field_name="new_folder") ) - giphy: "Optional[Images]" = dc_field( - default=None, metadata=dc_config(field_name="giphy") + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) @dataclass -class AudioSettings(DataClassJsonMixin): - access_request_enabled: bool = dc_field( - metadata=dc_config(field_name="access_request_enabled") - ) - default_device: str = dc_field(metadata=dc_config(field_name="default_device")) - mic_default_on: bool = dc_field(metadata=dc_config(field_name="mic_default_on")) - opus_dtx_enabled: bool = dc_field(metadata=dc_config(field_name="opus_dtx_enabled")) - redundant_coding_enabled: bool = dc_field( - metadata=dc_config(field_name="redundant_coding_enabled") - ) - speaker_default_on: bool = dc_field( - metadata=dc_config(field_name="speaker_default_on") - ) - noise_cancellation: "Optional[NoiseCancellationSettings]" = dc_field( - default=None, metadata=dc_config(field_name="noise_cancellation") - ) +class AddBookmarkResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + bookmark: "BookmarkResponse" = dc_field(metadata=dc_config(field_name="bookmark")) @dataclass -class AudioSettingsRequest(DataClassJsonMixin): - default_device: str = dc_field(metadata=dc_config(field_name="default_device")) - access_request_enabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="access_request_enabled") - ) - mic_default_on: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="mic_default_on") +class AddCommentReactionRequest(DataClassJsonMixin): + type: str = dc_field(metadata=dc_config(field_name="type")) + create_notification_activity: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="create_notification_activity") ) - opus_dtx_enabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="opus_dtx_enabled") + skip_push: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="skip_push") ) - redundant_coding_enabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="redundant_coding_enabled") + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") ) - speaker_default_on: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="speaker_default_on") + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") ) - noise_cancellation: "Optional[NoiseCancellationSettings]" = dc_field( - default=None, metadata=dc_config(field_name="noise_cancellation") + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) @dataclass -class AudioSettingsResponse(DataClassJsonMixin): - access_request_enabled: bool = dc_field( - metadata=dc_config(field_name="access_request_enabled") - ) - default_device: str = dc_field(metadata=dc_config(field_name="default_device")) - mic_default_on: bool = dc_field(metadata=dc_config(field_name="mic_default_on")) - opus_dtx_enabled: bool = dc_field(metadata=dc_config(field_name="opus_dtx_enabled")) - redundant_coding_enabled: bool = dc_field( - metadata=dc_config(field_name="redundant_coding_enabled") - ) - speaker_default_on: bool = dc_field( - metadata=dc_config(field_name="speaker_default_on") - ) - noise_cancellation: "Optional[NoiseCancellationSettings]" = dc_field( - default=None, metadata=dc_config(field_name="noise_cancellation") +class AddCommentReactionResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) + reaction: "FeedsReactionResponse" = dc_field( + metadata=dc_config(field_name="reaction") ) @dataclass -class AutomodDetails(DataClassJsonMixin): - action: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="action") +class AddCommentRequest(DataClassJsonMixin): + comment: str = dc_field(metadata=dc_config(field_name="comment")) + object_id: str = dc_field(metadata=dc_config(field_name="object_id")) + object_type: str = dc_field(metadata=dc_config(field_name="object_type")) + create_notification_activity: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="create_notification_activity") ) - original_message_type: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="original_message_type") + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") ) - image_labels: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="image_labels") + skip_push: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="skip_push") ) - message_details: "Optional[FlagMessageDetails]" = dc_field( - default=None, metadata=dc_config(field_name="message_details") + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") ) - result: "Optional[MessageModerationResult]" = dc_field( - default=None, metadata=dc_config(field_name="result") + attachments: "Optional[List[Attachment]]" = dc_field( + default=None, metadata=dc_config(field_name="attachments") ) - - -@dataclass -class AutomodPlatformCircumventionConfig(DataClassJsonMixin): - enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - rules: "List[AutomodRule]" = dc_field(metadata=dc_config(field_name="rules")) - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") + mentioned_user_ids: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="mentioned_user_ids") ) - - -@dataclass -class AutomodRule(DataClassJsonMixin): - action: str = dc_field(metadata=dc_config(field_name="action")) - label: str = dc_field(metadata=dc_config(field_name="label")) - threshold: float = dc_field(metadata=dc_config(field_name="threshold")) - - -@dataclass -class AutomodSemanticFiltersConfig(DataClassJsonMixin): - enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - rules: "List[AutomodSemanticFiltersRule]" = dc_field( - metadata=dc_config(field_name="rules") + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") ) - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) @dataclass -class AutomodSemanticFiltersRule(DataClassJsonMixin): - action: str = dc_field(metadata=dc_config(field_name="action")) - name: str = dc_field(metadata=dc_config(field_name="name")) - threshold: float = dc_field(metadata=dc_config(field_name="threshold")) +class AddCommentResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) @dataclass -class AutomodToxicityConfig(DataClassJsonMixin): - enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - rules: "List[AutomodRule]" = dc_field(metadata=dc_config(field_name="rules")) - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") +class AddCommentsBatchRequest(DataClassJsonMixin): + comments: "List[AddCommentRequest]" = dc_field( + metadata=dc_config(field_name="comments") ) @dataclass -class AzureRequest(DataClassJsonMixin): - abs_account_name: str = dc_field(metadata=dc_config(field_name="abs_account_name")) - abs_client_id: str = dc_field(metadata=dc_config(field_name="abs_client_id")) - abs_client_secret: str = dc_field( - metadata=dc_config(field_name="abs_client_secret") +class AddCommentsBatchResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + comments: "List[CommentResponse]" = dc_field( + metadata=dc_config(field_name="comments") ) - abs_tenant_id: str = dc_field(metadata=dc_config(field_name="abs_tenant_id")) @dataclass -class BackstageSettings(DataClassJsonMixin): - enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - join_ahead_time_seconds: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="join_ahead_time_seconds") +class AddFolderRequest(DataClassJsonMixin): + name: str = dc_field(metadata=dc_config(field_name="name")) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") ) @dataclass -class BackstageSettingsRequest(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="enabled") +class AddReactionRequest(DataClassJsonMixin): + type: str = dc_field(metadata=dc_config(field_name="type")) + create_notification_activity: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="create_notification_activity") ) - join_ahead_time_seconds: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="join_ahead_time_seconds") + skip_push: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="skip_push") + ) + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) @dataclass -class BackstageSettingsResponse(DataClassJsonMixin): - enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - join_ahead_time_seconds: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="join_ahead_time_seconds") +class AddReactionResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + reaction: "FeedsReactionResponse" = dc_field( + metadata=dc_config(field_name="reaction") ) @dataclass -class Ban(DataClassJsonMixin): +class AggregatedActivityResponse(DataClassJsonMixin): + activity_count: int = dc_field(metadata=dc_config(field_name="activity_count")) created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -908,206 +1138,219 @@ class Ban(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - shadow: bool = dc_field(metadata=dc_config(field_name="shadow")) - expires: Optional[datetime] = dc_field( - default=None, + group: str = dc_field(metadata=dc_config(field_name="group")) + score: float = dc_field(metadata=dc_config(field_name="score")) + updated_at: datetime = dc_field( metadata=dc_config( - field_name="expires", + field_name="updated_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") - ) - channel: "Optional[Channel]" = dc_field( - default=None, metadata=dc_config(field_name="channel") - ) - created_by: "Optional[User]" = dc_field( - default=None, metadata=dc_config(field_name="created_by") + ) ) - target: "Optional[User]" = dc_field( - default=None, metadata=dc_config(field_name="target") + user_count: int = dc_field(metadata=dc_config(field_name="user_count")) + activities: "List[ActivityResponse]" = dc_field( + metadata=dc_config(field_name="activities") ) @dataclass -class BanActionRequest(DataClassJsonMixin): - channel_ban_only: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="channel_ban_only") - ) - delete_messages: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="delete_messages") - ) - ip_ban: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="ip_ban") - ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") - ) - shadow: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="shadow") - ) - timeout: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="timeout") +class AggregationConfig(DataClassJsonMixin): + format: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="format") ) @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")) +class AnyEvent(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"), + ) + ) + type: str = dc_field(default="*", metadata=dc_config(field_name="type")) @dataclass -class BanRequest(DataClassJsonMixin): - target_user_id: str = dc_field(metadata=dc_config(field_name="target_user_id")) - banned_by_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="banned_by_id") +class AppResponseFields(DataClassJsonMixin): + async_url_enrich_enabled: bool = dc_field( + metadata=dc_config(field_name="async_url_enrich_enabled") ) - channel_cid: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="channel_cid") + auto_translation_enabled: bool = dc_field( + metadata=dc_config(field_name="auto_translation_enabled") ) - delete_messages: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="delete_messages") + campaign_enabled: bool = dc_field(metadata=dc_config(field_name="campaign_enabled")) + cdn_expiration_seconds: int = dc_field( + metadata=dc_config(field_name="cdn_expiration_seconds") ) - ip_ban: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="ip_ban") + custom_action_handler_url: str = dc_field( + metadata=dc_config(field_name="custom_action_handler_url") ) - reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="reason") + disable_auth_checks: bool = dc_field( + metadata=dc_config(field_name="disable_auth_checks") ) - shadow: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="shadow") + disable_permissions_checks: bool = dc_field( + metadata=dc_config(field_name="disable_permissions_checks") ) - timeout: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="timeout") + enforce_unique_usernames: str = dc_field( + metadata=dc_config(field_name="enforce_unique_usernames") ) - banned_by: "Optional[UserRequest]" = dc_field( - default=None, metadata=dc_config(field_name="banned_by") + guest_user_creation_disabled: bool = dc_field( + metadata=dc_config(field_name="guest_user_creation_disabled") ) - - -@dataclass -class BanResponse(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"), - ) + image_moderation_enabled: bool = dc_field( + metadata=dc_config(field_name="image_moderation_enabled") ) - expires: Optional[datetime] = dc_field( + 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") + ) + moderation_llm_configurability_enabled: bool = dc_field( + metadata=dc_config(field_name="moderation_llm_configurability_enabled") + ) + moderation_multitenant_blocklist_enabled: bool = dc_field( + metadata=dc_config(field_name="moderation_multitenant_blocklist_enabled") + ) + moderation_webhook_url: str = dc_field( + metadata=dc_config(field_name="moderation_webhook_url") + ) + multi_tenant_enabled: bool = dc_field( + metadata=dc_config(field_name="multi_tenant_enabled") + ) + name: str = dc_field(metadata=dc_config(field_name="name")) + organization: str = dc_field(metadata=dc_config(field_name="organization")) + permission_version: str = dc_field( + metadata=dc_config(field_name="permission_version") + ) + reminders_interval: int = dc_field( + metadata=dc_config(field_name="reminders_interval") + ) + sns_key: str = dc_field(metadata=dc_config(field_name="sns_key")) + sns_secret: str = dc_field(metadata=dc_config(field_name="sns_secret")) + sns_topic_arn: str = dc_field(metadata=dc_config(field_name="sns_topic_arn")) + sqs_key: str = dc_field(metadata=dc_config(field_name="sqs_key")) + sqs_secret: str = dc_field(metadata=dc_config(field_name="sqs_secret")) + sqs_url: str = dc_field(metadata=dc_config(field_name="sqs_url")) + suspended: bool = dc_field(metadata=dc_config(field_name="suspended")) + suspended_explanation: str = dc_field( + 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") + ) + user_search_disallowed_roles: List[str] = dc_field( + metadata=dc_config(field_name="user_search_disallowed_roles") + ) + webhook_events: List[str] = dc_field( + metadata=dc_config(field_name="webhook_events") + ) + call_types: "Dict[str, Optional[CallType]]" = dc_field( + metadata=dc_config(field_name="call_types") + ) + channel_configs: "Dict[str, ChannelConfig]" = dc_field( + metadata=dc_config(field_name="channel_configs") + ) + file_upload_config: "FileUploadConfig" = dc_field( + metadata=dc_config(field_name="file_upload_config") + ) + grants: "Dict[str, List[str]]" = dc_field(metadata=dc_config(field_name="grants")) + image_upload_config: "FileUploadConfig" = dc_field( + metadata=dc_config(field_name="image_upload_config") + ) + policies: "Dict[str, List[Policy]]" = dc_field( + metadata=dc_config(field_name="policies") + ) + push_notifications: "PushNotificationFields" = dc_field( + metadata=dc_config(field_name="push_notifications") + ) + before_message_send_hook_url: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="before_message_send_hook_url") + ) + revoke_tokens_issued_before: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="expires", + field_name="revoke_tokens_issued_before", 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") - ) - shadow: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="shadow") + allowed_flag_reasons: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="allowed_flag_reasons") ) - banned_by: "Optional[UserResponse]" = dc_field( - default=None, metadata=dc_config(field_name="banned_by") + geofences: "Optional[List[GeofenceResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="geofences") ) - channel: "Optional[ChannelResponse]" = dc_field( - default=None, metadata=dc_config(field_name="channel") + image_moderation_labels: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="image_moderation_labels") ) - user: "Optional[UserResponse]" = dc_field( - default=None, metadata=dc_config(field_name="user") + datadog_info: "Optional[DataDogInfo]" = dc_field( + default=None, metadata=dc_config(field_name="datadog_info") ) - - -@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")) - rules: "List[BlockListRule]" = dc_field(metadata=dc_config(field_name="rules")) - _async: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="async") + moderation_dashboard_preferences: "Optional[ModerationDashboardPreferences]" = ( + dc_field( + default=None, + metadata=dc_config(field_name="moderation_dashboard_preferences"), + ) ) @dataclass -class BlockListOptions(DataClassJsonMixin): - behavior: str = dc_field(metadata=dc_config(field_name="behavior")) - blocklist: str = dc_field(metadata=dc_config(field_name="blocklist")) - - -@dataclass -class BlockListResponse(DataClassJsonMixin): - name: str = dc_field(metadata=dc_config(field_name="name")) - type: str = dc_field(metadata=dc_config(field_name="type")) - words: List[str] = dc_field(metadata=dc_config(field_name="words")) - created_at: Optional[datetime] = dc_field( - default=None, +class AsyncBulkImageModerationEvent(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"), - ), + ) ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) - updated_at: Optional[datetime] = dc_field( - default=None, + finished_at: datetime = dc_field( metadata=dc_config( - field_name="updated_at", + field_name="finished_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ), + ) ) - - -@dataclass -class BlockListRule(DataClassJsonMixin): - action: str = dc_field(metadata=dc_config(field_name="action")) - name: str = dc_field(metadata=dc_config(field_name="name")) - team: str = dc_field(metadata=dc_config(field_name="team")) - - -@dataclass -class BlockUserRequest(DataClassJsonMixin): - user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - - -@dataclass -class BlockUserResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) - - -@dataclass -class BlockUsersRequest(DataClassJsonMixin): - blocked_user_id: str = dc_field(metadata=dc_config(field_name="blocked_user_id")) - user_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="user_id") + started_at: datetime = dc_field( + metadata=dc_config( + field_name="started_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) ) - user: "Optional[UserRequest]" = dc_field( - default=None, metadata=dc_config(field_name="user") + task_id: str = dc_field(metadata=dc_config(field_name="task_id")) + url: str = dc_field(metadata=dc_config(field_name="url")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="export.bulk_image_moderation.success", + 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"), + ), ) @dataclass -class BlockUsersResponse(DataClassJsonMixin): - blocked_by_user_id: str = dc_field( - metadata=dc_config(field_name="blocked_by_user_id") - ) - blocked_user_id: str = dc_field(metadata=dc_config(field_name="blocked_user_id")) +class AsyncExportChannelsEvent(DataClassJsonMixin): created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -1116,32 +1359,41 @@ class BlockUsersResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - duration: str = dc_field(metadata=dc_config(field_name="duration")) - - -@dataclass -class BlockedUserEvent(DataClassJsonMixin): - call_cid: str = dc_field(metadata=dc_config(field_name="call_cid")) - created_at: datetime = dc_field( + finished_at: datetime = dc_field( metadata=dc_config( - field_name="created_at", + field_name="finished_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ) ) - user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + started_at: datetime = dc_field( + metadata=dc_config( + field_name="started_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + task_id: str = dc_field(metadata=dc_config(field_name="task_id")) + url: str = dc_field(metadata=dc_config(field_name="url")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( - default="call.blocked_user", metadata=dc_config(field_name="type") + default="export.channels.success", metadata=dc_config(field_name="type") ) - blocked_by_user: "Optional[UserResponse]" = dc_field( - default=None, metadata=dc_config(field_name="blocked_by_user") + 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"), + ), ) @dataclass -class BlockedUserResponse(DataClassJsonMixin): - blocked_user_id: str = dc_field(metadata=dc_config(field_name="blocked_user_id")) +class AsyncExportErrorEvent(DataClassJsonMixin): created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -1150,198 +1402,84 @@ class BlockedUserResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - blocked_user: "UserResponse" = dc_field( - metadata=dc_config(field_name="blocked_user") - ) - user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - - -@dataclass -class BodyguardRule(DataClassJsonMixin): - action: str = dc_field(metadata=dc_config(field_name="action")) - label: str = dc_field(metadata=dc_config(field_name="label")) - severity_rules: "List[BodyguardSeverityRule]" = dc_field( - metadata=dc_config(field_name="severity_rules") - ) - - -@dataclass -class BodyguardSeverityRule(DataClassJsonMixin): - action: str = dc_field(metadata=dc_config(field_name="action")) - severity: str = dc_field(metadata=dc_config(field_name="severity")) - - -@dataclass -class Bound(DataClassJsonMixin): - inclusive: bool = dc_field(metadata=dc_config(field_name="inclusive")) - value: float = dc_field(metadata=dc_config(field_name="value")) - - -@dataclass -class BroadcastSettings(DataClassJsonMixin): - enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - hls: "Optional[HLSSettings]" = dc_field( - default=None, metadata=dc_config(field_name="hls") - ) - rtmp: "Optional[RTMPSettings]" = dc_field( - default=None, metadata=dc_config(field_name="rtmp") - ) - - -@dataclass -class BroadcastSettingsRequest(DataClassJsonMixin): - enabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="enabled") - ) - hls: "Optional[HLSSettingsRequest]" = dc_field( - default=None, metadata=dc_config(field_name="hls") - ) - rtmp: "Optional[RTMPSettingsRequest]" = dc_field( - default=None, metadata=dc_config(field_name="rtmp") - ) - - -@dataclass -class BroadcastSettingsResponse(DataClassJsonMixin): - enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - hls: "HLSSettingsResponse" = dc_field(metadata=dc_config(field_name="hls")) - rtmp: "RTMPSettingsResponse" = dc_field(metadata=dc_config(field_name="rtmp")) - - -@dataclass -class BrowserDataResponse(DataClassJsonMixin): - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - version: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="version") - ) - - -@dataclass -class BulkImageModerationRequest(DataClassJsonMixin): - csv_file: str = dc_field(metadata=dc_config(field_name="csv_file")) - - -@dataclass -class BulkImageModerationResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) - task_id: str = dc_field(metadata=dc_config(field_name="task_id")) - - -@dataclass -class Call(DataClassJsonMixin): - app_pk: int = dc_field(metadata=dc_config(field_name="AppPK")) - backstage: bool = dc_field(metadata=dc_config(field_name="Backstage")) - channel_cid: str = dc_field(metadata=dc_config(field_name="ChannelCID")) - cid: str = dc_field(metadata=dc_config(field_name="CID")) - created_at: datetime = dc_field( + error: str = dc_field(metadata=dc_config(field_name="error")) + finished_at: datetime = dc_field( metadata=dc_config( - field_name="CreatedAt", + field_name="finished_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ) ) - created_by_user_id: str = dc_field(metadata=dc_config(field_name="CreatedByUserID")) - current_session_id: str = dc_field( - metadata=dc_config(field_name="CurrentSessionID") - ) - id: str = dc_field(metadata=dc_config(field_name="ID")) - last_session_id: str = dc_field(metadata=dc_config(field_name="LastSessionID")) - team: str = dc_field(metadata=dc_config(field_name="Team")) - thumbnail_url: str = dc_field(metadata=dc_config(field_name="ThumbnailURL")) - type: str = dc_field(metadata=dc_config(field_name="Type")) - updated_at: datetime = dc_field( + started_at: datetime = dc_field( metadata=dc_config( - field_name="UpdatedAt", + field_name="started_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ) ) - blocked_user_i_ds: List[str] = dc_field( - metadata=dc_config(field_name="BlockedUserIDs") - ) - blocked_users: "List[User]" = dc_field( - metadata=dc_config(field_name="BlockedUsers") + 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.channels.error", metadata=dc_config(field_name="type") ) - egresses: "List[CallEgress]" = dc_field(metadata=dc_config(field_name="Egresses")) - members: "List[CallMember]" = dc_field(metadata=dc_config(field_name="Members")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="Custom")) - deleted_at: Optional[datetime] = dc_field( + received_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="DeletedAt", + field_name="received_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ), ) - egress_updated_at: Optional[datetime] = dc_field( - default=None, + + +@dataclass +class AsyncExportModerationLogsEvent(DataClassJsonMixin): + created_at: datetime = dc_field( metadata=dc_config( - field_name="EgressUpdatedAt", + field_name="created_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ), + ) ) - ended_at: Optional[datetime] = dc_field( - default=None, + finished_at: datetime = dc_field( metadata=dc_config( - field_name="EndedAt", + field_name="finished_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ), - ) - join_ahead_time_seconds: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="JoinAheadTimeSeconds") + ) ) - last_heartbeat_at: Optional[datetime] = dc_field( - default=None, + started_at: datetime = dc_field( metadata=dc_config( - field_name="LastHeartbeatAt", + field_name="started_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ), + ) ) - member_count: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="MemberCount") + task_id: str = dc_field(metadata=dc_config(field_name="task_id")) + url: str = dc_field(metadata=dc_config(field_name="url")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="export.moderation_logs.success", metadata=dc_config(field_name="type") ) - starts_at: Optional[datetime] = dc_field( + received_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="StartsAt", + field_name="received_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ), ) - call_type: "Optional[CallType]" = dc_field( - default=None, metadata=dc_config(field_name="CallType") - ) - created_by: "Optional[User]" = dc_field( - default=None, metadata=dc_config(field_name="CreatedBy") - ) - member_lookup: "Optional[MemberLookup]" = dc_field( - default=None, metadata=dc_config(field_name="MemberLookup") - ) - session: "Optional[CallSession]" = dc_field( - default=None, metadata=dc_config(field_name="Session") - ) - settings: "Optional[CallSettings]" = dc_field( - default=None, metadata=dc_config(field_name="Settings") - ) - settings_overrides: "Optional[CallSettings]" = dc_field( - default=None, metadata=dc_config(field_name="SettingsOverrides") - ) @dataclass -class CallAcceptedEvent(DataClassJsonMixin): - call_cid: str = dc_field(metadata=dc_config(field_name="call_cid")) +class AsyncExportUsersEvent(DataClassJsonMixin): created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -1350,103 +1488,1031 @@ class CallAcceptedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) - user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - type: str = dc_field(default="call.accepted", metadata=dc_config(field_name="type")) - - -@dataclass -class CallClosedCaption(DataClassJsonMixin): - end_time: datetime = dc_field( - metadata=dc_config( - field_name="end_time", - encoder=encode_datetime, - decoder=datetime_from_unix_ns, - mm_field=fields.DateTime(format="iso"), - ) - ) - speaker_id: str = dc_field(metadata=dc_config(field_name="speaker_id")) - start_time: datetime = dc_field( + finished_at: datetime = dc_field( metadata=dc_config( - field_name="start_time", + field_name="finished_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ) ) - text: str = dc_field(metadata=dc_config(field_name="text")) - user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) - - -@dataclass -class CallClosedCaptionsFailedEvent(DataClassJsonMixin): - call_cid: str = dc_field(metadata=dc_config(field_name="call_cid")) - created_at: datetime = dc_field( + started_at: datetime = dc_field( metadata=dc_config( - field_name="created_at", + field_name="started_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ) ) + task_id: str = dc_field(metadata=dc_config(field_name="task_id")) + url: str = dc_field(metadata=dc_config(field_name="url")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) type: str = dc_field( - default="call.closed_captions_failed", metadata=dc_config(field_name="type") + default="export.users.success", metadata=dc_config(field_name="type") ) - - -@dataclass -class CallClosedCaptionsStartedEvent(DataClassJsonMixin): - call_cid: str = dc_field(metadata=dc_config(field_name="call_cid")) - created_at: datetime = dc_field( + received_at: Optional[datetime] = dc_field( + default=None, metadata=dc_config( - field_name="created_at", + field_name="received_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ) - ) - type: str = dc_field( - default="call.closed_captions_started", metadata=dc_config(field_name="type") + ), ) @dataclass -class CallClosedCaptionsStoppedEvent(DataClassJsonMixin): - 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"), - ) - ) - type: str = dc_field( - default="call.closed_captions_stopped", metadata=dc_config(field_name="type") +class AsyncModerationCallbackConfig(DataClassJsonMixin): + mode: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mode")) + server_url: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="server_url") ) @dataclass -class CallCreatedEvent(DataClassJsonMixin): - 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"), - ) +class AsyncModerationConfiguration(DataClassJsonMixin): + timeout_ms: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="timeout_ms") + ) + callback: "Optional[AsyncModerationCallbackConfig]" = dc_field( + default=None, metadata=dc_config(field_name="callback") ) - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) - call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) - type: str = dc_field(default="call.created", metadata=dc_config(field_name="type")) @dataclass -class CallDeletedEvent(DataClassJsonMixin): - call_cid: str = dc_field(metadata=dc_config(field_name="call_cid")) - created_at: datetime = dc_field( - metadata=dc_config( +class Attachment(DataClassJsonMixin): + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + asset_url: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="asset_url") + ) + author_icon: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="author_icon") + ) + author_link: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="author_link") + ) + author_name: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="author_name") + ) + color: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="color") + ) + fallback: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="fallback") + ) + footer: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="footer") + ) + footer_icon: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="footer_icon") + ) + image_url: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="image_url") + ) + og_scrape_url: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="og_scrape_url") + ) + original_height: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="original_height") + ) + original_width: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="original_width") + ) + pretext: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="pretext") + ) + text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + thumb_url: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="thumb_url") + ) + title: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="title") + ) + title_link: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="title_link") + ) + type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + actions: "Optional[List[Action]]" = dc_field( + default=None, metadata=dc_config(field_name="actions") + ) + fields: "Optional[List[Field]]" = dc_field( + default=None, metadata=dc_config(field_name="fields") + ) + giphy: "Optional[Images]" = dc_field( + default=None, metadata=dc_config(field_name="giphy") + ) + + +@dataclass +class AudioSettings(DataClassJsonMixin): + access_request_enabled: bool = dc_field( + metadata=dc_config(field_name="access_request_enabled") + ) + default_device: str = dc_field(metadata=dc_config(field_name="default_device")) + mic_default_on: bool = dc_field(metadata=dc_config(field_name="mic_default_on")) + opus_dtx_enabled: bool = dc_field(metadata=dc_config(field_name="opus_dtx_enabled")) + redundant_coding_enabled: bool = dc_field( + metadata=dc_config(field_name="redundant_coding_enabled") + ) + speaker_default_on: bool = dc_field( + metadata=dc_config(field_name="speaker_default_on") + ) + noise_cancellation: "Optional[NoiseCancellationSettings]" = dc_field( + default=None, metadata=dc_config(field_name="noise_cancellation") + ) + + +@dataclass +class AudioSettingsRequest(DataClassJsonMixin): + default_device: str = dc_field(metadata=dc_config(field_name="default_device")) + access_request_enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="access_request_enabled") + ) + mic_default_on: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="mic_default_on") + ) + opus_dtx_enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="opus_dtx_enabled") + ) + redundant_coding_enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="redundant_coding_enabled") + ) + speaker_default_on: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="speaker_default_on") + ) + noise_cancellation: "Optional[NoiseCancellationSettings]" = dc_field( + default=None, metadata=dc_config(field_name="noise_cancellation") + ) + + +@dataclass +class AudioSettingsResponse(DataClassJsonMixin): + access_request_enabled: bool = dc_field( + metadata=dc_config(field_name="access_request_enabled") + ) + default_device: str = dc_field(metadata=dc_config(field_name="default_device")) + mic_default_on: bool = dc_field(metadata=dc_config(field_name="mic_default_on")) + opus_dtx_enabled: bool = dc_field(metadata=dc_config(field_name="opus_dtx_enabled")) + redundant_coding_enabled: bool = dc_field( + metadata=dc_config(field_name="redundant_coding_enabled") + ) + speaker_default_on: bool = dc_field( + metadata=dc_config(field_name="speaker_default_on") + ) + noise_cancellation: "Optional[NoiseCancellationSettings]" = dc_field( + default=None, metadata=dc_config(field_name="noise_cancellation") + ) + + +@dataclass +class AutomodDetails(DataClassJsonMixin): + action: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="action") + ) + original_message_type: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="original_message_type") + ) + image_labels: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="image_labels") + ) + message_details: "Optional[FlagMessageDetails]" = dc_field( + default=None, metadata=dc_config(field_name="message_details") + ) + result: "Optional[MessageModerationResult]" = dc_field( + default=None, metadata=dc_config(field_name="result") + ) + + +@dataclass +class AutomodPlatformCircumventionConfig(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + rules: "List[AutomodRule]" = dc_field(metadata=dc_config(field_name="rules")) + _async: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="async") + ) + + +@dataclass +class AutomodRule(DataClassJsonMixin): + action: str = dc_field(metadata=dc_config(field_name="action")) + label: str = dc_field(metadata=dc_config(field_name="label")) + threshold: float = dc_field(metadata=dc_config(field_name="threshold")) + + +@dataclass +class AutomodSemanticFiltersConfig(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + rules: "List[AutomodSemanticFiltersRule]" = dc_field( + metadata=dc_config(field_name="rules") + ) + _async: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="async") + ) + + +@dataclass +class AutomodSemanticFiltersRule(DataClassJsonMixin): + action: str = dc_field(metadata=dc_config(field_name="action")) + name: str = dc_field(metadata=dc_config(field_name="name")) + threshold: float = dc_field(metadata=dc_config(field_name="threshold")) + + +@dataclass +class AutomodToxicityConfig(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + rules: "List[AutomodRule]" = dc_field(metadata=dc_config(field_name="rules")) + _async: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="async") + ) + + +@dataclass +class AzureRequest(DataClassJsonMixin): + abs_account_name: str = dc_field(metadata=dc_config(field_name="abs_account_name")) + abs_client_id: str = dc_field(metadata=dc_config(field_name="abs_client_id")) + abs_client_secret: str = dc_field( + metadata=dc_config(field_name="abs_client_secret") + ) + abs_tenant_id: str = dc_field(metadata=dc_config(field_name="abs_tenant_id")) + + +@dataclass +class BackstageSettings(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + join_ahead_time_seconds: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="join_ahead_time_seconds") + ) + + +@dataclass +class BackstageSettingsRequest(DataClassJsonMixin): + enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="enabled") + ) + join_ahead_time_seconds: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="join_ahead_time_seconds") + ) + + +@dataclass +class BackstageSettingsResponse(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + join_ahead_time_seconds: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="join_ahead_time_seconds") + ) + + +@dataclass +class Ban(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"), + ) + ) + shadow: bool = dc_field(metadata=dc_config(field_name="shadow")) + expires: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="expires", + 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") + ) + channel: "Optional[Channel]" = dc_field( + default=None, metadata=dc_config(field_name="channel") + ) + created_by: "Optional[User]" = dc_field( + default=None, metadata=dc_config(field_name="created_by") + ) + target: "Optional[User]" = dc_field( + default=None, metadata=dc_config(field_name="target") + ) + + +@dataclass +class BanActionRequest(DataClassJsonMixin): + channel_ban_only: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="channel_ban_only") + ) + delete_messages: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="delete_messages") + ) + ip_ban: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="ip_ban") + ) + reason: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="reason") + ) + shadow: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="shadow") + ) + timeout: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="timeout") + ) + + +@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")) + banned_by_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="banned_by_id") + ) + channel_cid: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="channel_cid") + ) + delete_messages: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="delete_messages") + ) + ip_ban: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="ip_ban") + ) + reason: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="reason") + ) + shadow: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="shadow") + ) + timeout: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="timeout") + ) + banned_by: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="banned_by") + ) + + +@dataclass +class BanResponse(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"), + ) + ) + expires: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="expires", + 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") + ) + shadow: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="shadow") + ) + banned_by: "Optional[UserResponse]" = dc_field( + default=None, metadata=dc_config(field_name="banned_by") + ) + channel: "Optional[ChannelResponse]" = dc_field( + default=None, metadata=dc_config(field_name="channel") + ) + user: "Optional[UserResponse]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@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")) + rules: "List[BlockListRule]" = dc_field(metadata=dc_config(field_name="rules")) + _async: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="async") + ) + + +@dataclass +class BlockListOptions(DataClassJsonMixin): + behavior: str = dc_field(metadata=dc_config(field_name="behavior")) + blocklist: str = dc_field(metadata=dc_config(field_name="blocklist")) + + +@dataclass +class BlockListResponse(DataClassJsonMixin): + name: str = dc_field(metadata=dc_config(field_name="name")) + type: str = dc_field(metadata=dc_config(field_name="type")) + words: List[str] = dc_field(metadata=dc_config(field_name="words")) + created_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + team: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="team")) + updated_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + + +@dataclass +class BlockListRule(DataClassJsonMixin): + action: str = dc_field(metadata=dc_config(field_name="action")) + name: str = dc_field(metadata=dc_config(field_name="name")) + team: str = dc_field(metadata=dc_config(field_name="team")) + + +@dataclass +class BlockUserRequest(DataClassJsonMixin): + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + + +@dataclass +class BlockUserResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + + +@dataclass +class BlockUsersRequest(DataClassJsonMixin): + blocked_user_id: str = dc_field(metadata=dc_config(field_name="blocked_user_id")) + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class BlockUsersResponse(DataClassJsonMixin): + blocked_by_user_id: str = dc_field( + metadata=dc_config(field_name="blocked_by_user_id") + ) + blocked_user_id: str = dc_field(metadata=dc_config(field_name="blocked_user_id")) + 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"), + ) + ) + duration: str = dc_field(metadata=dc_config(field_name="duration")) + + +@dataclass +class BlockedUserEvent(DataClassJsonMixin): + 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"), + ) + ) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + type: str = dc_field( + default="call.blocked_user", metadata=dc_config(field_name="type") + ) + blocked_by_user: "Optional[UserResponse]" = dc_field( + default=None, metadata=dc_config(field_name="blocked_by_user") + ) + + +@dataclass +class BlockedUserResponse(DataClassJsonMixin): + blocked_user_id: str = dc_field(metadata=dc_config(field_name="blocked_user_id")) + 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"), + ) + ) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + blocked_user: "UserResponse" = dc_field( + metadata=dc_config(field_name="blocked_user") + ) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + + +@dataclass +class BodyguardRule(DataClassJsonMixin): + action: str = dc_field(metadata=dc_config(field_name="action")) + label: str = dc_field(metadata=dc_config(field_name="label")) + severity_rules: "List[BodyguardSeverityRule]" = dc_field( + metadata=dc_config(field_name="severity_rules") + ) + + +@dataclass +class BodyguardSeverityRule(DataClassJsonMixin): + action: str = dc_field(metadata=dc_config(field_name="action")) + severity: str = dc_field(metadata=dc_config(field_name="severity")) + + +@dataclass +class BookmarkAddedEvent(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"), + ) + ) + bookmark: "BookmarkResponse" = dc_field(metadata=dc_config(field_name="bookmark")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.bookmark.added", 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"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class BookmarkDeletedEvent(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"), + ) + ) + bookmark: "BookmarkResponse" = dc_field(metadata=dc_config(field_name="bookmark")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.bookmark.deleted", 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"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class BookmarkFolderDeletedEvent(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"), + ) + ) + bookmark_folder: "BookmarkFolderResponse" = dc_field( + metadata=dc_config(field_name="bookmark_folder") + ) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.bookmark_folder.deleted", 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"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class BookmarkFolderResponse(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"), + ) + ) + id: str = dc_field(metadata=dc_config(field_name="id")) + name: str = dc_field(metadata=dc_config(field_name="name")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + + +@dataclass +class BookmarkFolderUpdatedEvent(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"), + ) + ) + bookmark_folder: "BookmarkFolderResponse" = dc_field( + metadata=dc_config(field_name="bookmark_folder") + ) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.bookmark_folder.updated", 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"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class BookmarkResponse(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"), + ) + ) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + folder: "Optional[BookmarkFolderResponse]" = dc_field( + default=None, metadata=dc_config(field_name="folder") + ) + + +@dataclass +class BookmarkUpdatedEvent(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"), + ) + ) + bookmark: "BookmarkResponse" = dc_field(metadata=dc_config(field_name="bookmark")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.bookmark.updated", 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"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class Bound(DataClassJsonMixin): + inclusive: bool = dc_field(metadata=dc_config(field_name="inclusive")) + value: float = dc_field(metadata=dc_config(field_name="value")) + + +@dataclass +class BroadcastSettings(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + hls: "Optional[HLSSettings]" = dc_field( + default=None, metadata=dc_config(field_name="hls") + ) + rtmp: "Optional[RTMPSettings]" = dc_field( + default=None, metadata=dc_config(field_name="rtmp") + ) + + +@dataclass +class BroadcastSettingsRequest(DataClassJsonMixin): + enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="enabled") + ) + hls: "Optional[HLSSettingsRequest]" = dc_field( + default=None, metadata=dc_config(field_name="hls") + ) + rtmp: "Optional[RTMPSettingsRequest]" = dc_field( + default=None, metadata=dc_config(field_name="rtmp") + ) + + +@dataclass +class BroadcastSettingsResponse(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + hls: "HLSSettingsResponse" = dc_field(metadata=dc_config(field_name="hls")) + rtmp: "RTMPSettingsResponse" = dc_field(metadata=dc_config(field_name="rtmp")) + + +@dataclass +class BrowserDataResponse(DataClassJsonMixin): + name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + version: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="version") + ) + + +@dataclass +class BulkImageModerationRequest(DataClassJsonMixin): + csv_file: str = dc_field(metadata=dc_config(field_name="csv_file")) + + +@dataclass +class BulkImageModerationResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + task_id: str = dc_field(metadata=dc_config(field_name="task_id")) + + +@dataclass +class Call(DataClassJsonMixin): + app_pk: int = dc_field(metadata=dc_config(field_name="AppPK")) + backstage: bool = dc_field(metadata=dc_config(field_name="Backstage")) + channel_cid: str = dc_field(metadata=dc_config(field_name="ChannelCID")) + cid: str = dc_field(metadata=dc_config(field_name="CID")) + created_at: datetime = dc_field( + metadata=dc_config( + field_name="CreatedAt", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + created_by_user_id: str = dc_field(metadata=dc_config(field_name="CreatedByUserID")) + current_session_id: str = dc_field( + metadata=dc_config(field_name="CurrentSessionID") + ) + id: str = dc_field(metadata=dc_config(field_name="ID")) + last_session_id: str = dc_field(metadata=dc_config(field_name="LastSessionID")) + team: str = dc_field(metadata=dc_config(field_name="Team")) + thumbnail_url: str = dc_field(metadata=dc_config(field_name="ThumbnailURL")) + type: str = dc_field(metadata=dc_config(field_name="Type")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="UpdatedAt", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + blocked_user_i_ds: List[str] = dc_field( + metadata=dc_config(field_name="BlockedUserIDs") + ) + blocked_users: "List[User]" = dc_field( + metadata=dc_config(field_name="BlockedUsers") + ) + egresses: "List[CallEgress]" = dc_field(metadata=dc_config(field_name="Egresses")) + members: "List[CallMember]" = dc_field(metadata=dc_config(field_name="Members")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="Custom")) + deleted_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="DeletedAt", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + egress_updated_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="EgressUpdatedAt", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + ended_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="EndedAt", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + join_ahead_time_seconds: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="JoinAheadTimeSeconds") + ) + last_heartbeat_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="LastHeartbeatAt", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + member_count: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="MemberCount") + ) + starts_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="StartsAt", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + call_type: "Optional[CallType]" = dc_field( + default=None, metadata=dc_config(field_name="CallType") + ) + created_by: "Optional[User]" = dc_field( + default=None, metadata=dc_config(field_name="CreatedBy") + ) + member_lookup: "Optional[MemberLookup]" = dc_field( + default=None, metadata=dc_config(field_name="MemberLookup") + ) + session: "Optional[CallSession]" = dc_field( + default=None, metadata=dc_config(field_name="Session") + ) + settings: "Optional[CallSettings]" = dc_field( + default=None, metadata=dc_config(field_name="Settings") + ) + settings_overrides: "Optional[CallSettings]" = dc_field( + default=None, metadata=dc_config(field_name="SettingsOverrides") + ) + + +@dataclass +class CallAcceptedEvent(DataClassJsonMixin): + 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"), + ) + ) + call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + type: str = dc_field(default="call.accepted", metadata=dc_config(field_name="type")) + + +@dataclass +class CallClosedCaption(DataClassJsonMixin): + end_time: datetime = dc_field( + metadata=dc_config( + field_name="end_time", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + speaker_id: str = dc_field(metadata=dc_config(field_name="speaker_id")) + start_time: datetime = dc_field( + metadata=dc_config( + field_name="start_time", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + text: str = dc_field(metadata=dc_config(field_name="text")) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + + +@dataclass +class CallClosedCaptionsFailedEvent(DataClassJsonMixin): + 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"), + ) + ) + type: str = dc_field( + default="call.closed_captions_failed", metadata=dc_config(field_name="type") + ) + + +@dataclass +class CallClosedCaptionsStartedEvent(DataClassJsonMixin): + 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"), + ) + ) + type: str = dc_field( + default="call.closed_captions_started", metadata=dc_config(field_name="type") + ) + + +@dataclass +class CallClosedCaptionsStoppedEvent(DataClassJsonMixin): + 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"), + ) + ) + type: str = dc_field( + default="call.closed_captions_stopped", metadata=dc_config(field_name="type") + ) + + +@dataclass +class CallCreatedEvent(DataClassJsonMixin): + 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"), + ) + ) + members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) + type: str = dc_field(default="call.created", metadata=dc_config(field_name="type")) + + +@dataclass +class CallDeletedEvent(DataClassJsonMixin): + 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, @@ -1885,8 +2951,8 @@ 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")) @@ -3304,6 +4370,18 @@ class Channel(DataClassJsonMixin): member_count: Optional[int] = dc_field( default=None, metadata=dc_config(field_name="member_count") ) + message_count: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="message_count") + ) + message_count_updated_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="message_count_updated_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")) active_live_locations: "Optional[List[SharedLocation]]" = dc_field( default=None, metadata=dc_config(field_name="active_live_locations") @@ -3333,6 +4411,7 @@ class ChannelConfig(DataClassJsonMixin): automod: str = dc_field(metadata=dc_config(field_name="automod")) automod_behavior: str = dc_field(metadata=dc_config(field_name="automod_behavior")) connect_events: bool = dc_field(metadata=dc_config(field_name="connect_events")) + count_messages: bool = dc_field(metadata=dc_config(field_name="count_messages")) created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -3407,6 +4486,7 @@ class ChannelConfigWithInfo(DataClassJsonMixin): automod: str = dc_field(metadata=dc_config(field_name="automod")) automod_behavior: str = dc_field(metadata=dc_config(field_name="automod_behavior")) connect_events: bool = dc_field(metadata=dc_config(field_name="connect_events")) + count_messages: bool = dc_field(metadata=dc_config(field_name="count_messages")) created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -3745,6 +4825,9 @@ class ChannelMember(DataClassJsonMixin): user_id: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="user_id") ) + deleted_messages: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="deleted_messages") + ) user: "Optional[UserResponse]" = dc_field( default=None, metadata=dc_config(field_name="user") ) @@ -4032,6 +5115,9 @@ class ChannelResponse(DataClassJsonMixin): member_count: Optional[int] = dc_field( default=None, metadata=dc_config(field_name="member_count") ) + message_count: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="message_count") + ) mute_expires_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -4102,6 +5188,9 @@ class ChannelStateResponse(DataClassJsonMixin): active_live_locations: "Optional[List[SharedLocationResponseData]]" = dc_field( default=None, metadata=dc_config(field_name="active_live_locations") ) + deleted_messages: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="deleted_messages") + ) pending_messages: "Optional[List[PendingMessageResponse]]" = dc_field( default=None, metadata=dc_config(field_name="pending_messages") ) @@ -4155,6 +5244,9 @@ class ChannelStateResponseFields(DataClassJsonMixin): active_live_locations: "Optional[List[SharedLocationResponseData]]" = dc_field( default=None, metadata=dc_config(field_name="active_live_locations") ) + deleted_messages: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="deleted_messages") + ) pending_messages: "Optional[List[PendingMessageResponse]]" = dc_field( default=None, metadata=dc_config(field_name="pending_messages") ) @@ -4207,6 +5299,7 @@ class ChannelTypeConfig(DataClassJsonMixin): automod: str = dc_field(metadata=dc_config(field_name="automod")) automod_behavior: str = dc_field(metadata=dc_config(field_name="automod_behavior")) connect_events: bool = dc_field(metadata=dc_config(field_name="connect_events")) + count_messages: bool = dc_field(metadata=dc_config(field_name="count_messages")) created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -4600,12 +5693,289 @@ class Command(DataClassJsonMixin): updated_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="updated_at", + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + + +@dataclass +class CommentAddedEvent(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"), + ) + ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.comment.added", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + 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"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class CommentDeletedEvent(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"), + ) + ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.comment.deleted", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + 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"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class CommentReactionAddedEvent(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"), + ) + ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + reaction: "FeedsReactionResponse" = dc_field( + metadata=dc_config(field_name="reaction") + ) + type: str = dc_field( + default="feeds.comment.reaction.added", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + 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"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class CommentReactionDeletedEvent(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"), + ) + ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + reaction: "FeedsReactionResponse" = dc_field( + metadata=dc_config(field_name="reaction") + ) + type: str = dc_field( + default="feeds.comment.reaction.deleted", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + 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"), + ), + ) + + +@dataclass +class CommentReactionUpdatedEvent(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"), + ) + ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + reaction: "FeedsReactionResponse" = dc_field( + metadata=dc_config(field_name="reaction") + ) + type: str = dc_field( + default="feeds.comment.reaction.updated", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + 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"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class CommentResponse(DataClassJsonMixin): + confidence_score: float = dc_field( + metadata=dc_config(field_name="confidence_score") + ) + 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"), + ) + ) + downvote_count: int = dc_field(metadata=dc_config(field_name="downvote_count")) + id: str = dc_field(metadata=dc_config(field_name="id")) + object_id: str = dc_field(metadata=dc_config(field_name="object_id")) + object_type: str = dc_field(metadata=dc_config(field_name="object_type")) + reaction_count: int = dc_field(metadata=dc_config(field_name="reaction_count")) + reply_count: int = dc_field(metadata=dc_config(field_name="reply_count")) + score: int = dc_field(metadata=dc_config(field_name="score")) + status: str = dc_field(metadata=dc_config(field_name="status")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + upvote_count: int = dc_field(metadata=dc_config(field_name="upvote_count")) + mentioned_users: "List[UserResponse]" = dc_field( + metadata=dc_config(field_name="mentioned_users") + ) + own_reactions: "List[FeedsReactionResponse]" = dc_field( + metadata=dc_config(field_name="own_reactions") + ) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + controversy_score: Optional[float] = dc_field( + default=None, metadata=dc_config(field_name="controversy_score") + ) + deleted_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="deleted_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") + ) + text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + attachments: "Optional[List[Attachment]]" = dc_field( + default=None, metadata=dc_config(field_name="attachments") + ) + latest_reactions: "Optional[List[FeedsReactionResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="latest_reactions") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + moderation: "Optional[ModerationV2Response]" = dc_field( + default=None, metadata=dc_config(field_name="moderation") + ) + reaction_groups: "Optional[Dict[str, Optional[ReactionGroupResponse]]]" = dc_field( + default=None, metadata=dc_config(field_name="reaction_groups") + ) + + +@dataclass +class CommentUpdatedEvent(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"), + ) + ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.comment.updated", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + 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"), ), ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) @dataclass @@ -4631,6 +6001,9 @@ class ConfigOverrides(DataClassJsonMixin): blocklist_behavior: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="blocklist_behavior") ) + count_messages: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="count_messages") + ) max_message_length: Optional[int] = dc_field( default=None, metadata=dc_config(field_name="max_message_length") ) @@ -4706,6 +6079,9 @@ class ConfigResponse(DataClassJsonMixin): block_list_config: "Optional[BlockListConfig]" = dc_field( default=None, metadata=dc_config(field_name="block_list_config") ) + llm_config: "Optional[LLMConfig]" = dc_field( + default=None, metadata=dc_config(field_name="llm_config") + ) rule_builder_config: "Optional[RuleBuilderConfig]" = dc_field( default=None, metadata=dc_config(field_name="rule_builder_config") ) @@ -4892,6 +6268,7 @@ class CreateChannelTypeResponse(DataClassJsonMixin): automod: str = dc_field(metadata=dc_config(field_name="automod")) automod_behavior: str = dc_field(metadata=dc_config(field_name="automod_behavior")) connect_events: bool = dc_field(metadata=dc_config(field_name="connect_events")) + count_messages: bool = dc_field(metadata=dc_config(field_name="count_messages")) created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -5022,6 +6399,77 @@ class CreateExternalStorageResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) +@dataclass +class CreateFeedGroupRequest(DataClassJsonMixin): + id: str = dc_field(metadata=dc_config(field_name="id")) + default_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="default_visibility") + ) + activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_processors") + ) + activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_selectors") + ) + aggregation: "Optional[AggregationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="aggregation") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + notification: "Optional[NotificationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="notification") + ) + push_notification: "Optional[PushNotificationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="push_notification") + ) + ranking: "Optional[RankingConfig]" = dc_field( + default=None, metadata=dc_config(field_name="ranking") + ) + + +@dataclass +class CreateFeedGroupResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feed_group: "FeedGroupResponse" = dc_field( + metadata=dc_config(field_name="feed_group") + ) + + +@dataclass +class CreateFeedViewRequest(DataClassJsonMixin): + id: str = dc_field(metadata=dc_config(field_name="id")) + activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_processors") + ) + activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_selectors") + ) + aggregation: "Optional[AggregationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="aggregation") + ) + ranking: "Optional[RankingConfig]" = dc_field( + default=None, metadata=dc_config(field_name="ranking") + ) + + +@dataclass +class CreateFeedViewResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feed_view: "FeedViewResponse" = dc_field(metadata=dc_config(field_name="feed_view")) + + +@dataclass +class CreateFeedsBatchRequest(DataClassJsonMixin): + feeds: "List[FeedRequest]" = dc_field(metadata=dc_config(field_name="feeds")) + + +@dataclass +class CreateFeedsBatchResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feeds: "List[FeedResponse]" = dc_field(metadata=dc_config(field_name="feeds")) + + @dataclass class CreateGuestRequest(DataClassJsonMixin): user: "UserRequest" = dc_field(metadata=dc_config(field_name="user")) @@ -5062,6 +6510,32 @@ class CreateImportURLResponse(DataClassJsonMixin): upload_url: str = dc_field(metadata=dc_config(field_name="upload_url")) +@dataclass +class CreateMembershipLevelRequest(DataClassJsonMixin): + id: str = dc_field(metadata=dc_config(field_name="id")) + name: str = dc_field(metadata=dc_config(field_name="name")) + description: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="description") + ) + priority: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="priority") + ) + tags: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="tags") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + + +@dataclass +class CreateMembershipLevelResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + membership_level: "MembershipLevelResponse" = dc_field( + metadata=dc_config(field_name="membership_level") + ) + + @dataclass class CreatePollOptionRequest(DataClassJsonMixin): text: str = dc_field(metadata=dc_config(field_name="text")) @@ -5219,263 +6693,760 @@ class DailyAggregateCallDurationReportResponse(DataClassJsonMixin): @dataclass -class DailyAggregateCallParticipantCountReportResponse(DataClassJsonMixin): - date: str = dc_field(metadata=dc_config(field_name="date")) - report: "CallParticipantCountReport" = dc_field( - metadata=dc_config(field_name="report") +class DailyAggregateCallParticipantCountReportResponse(DataClassJsonMixin): + date: str = dc_field(metadata=dc_config(field_name="date")) + report: "CallParticipantCountReport" = dc_field( + metadata=dc_config(field_name="report") + ) + + +@dataclass +class DailyAggregateCallsPerDayReportResponse(DataClassJsonMixin): + date: str = dc_field(metadata=dc_config(field_name="date")) + report: "CallsPerDayReport" = dc_field(metadata=dc_config(field_name="report")) + + +@dataclass +class DailyAggregateQualityScoreReportResponse(DataClassJsonMixin): + date: str = dc_field(metadata=dc_config(field_name="date")) + report: "QualityScoreReport" = dc_field(metadata=dc_config(field_name="report")) + + +@dataclass +class DailyAggregateSDKUsageReportResponse(DataClassJsonMixin): + date: str = dc_field(metadata=dc_config(field_name="date")) + report: "SDKUsageReport" = dc_field(metadata=dc_config(field_name="report")) + + +@dataclass +class DailyAggregateUserFeedbackReportResponse(DataClassJsonMixin): + date: str = dc_field(metadata=dc_config(field_name="date")) + report: "UserFeedbackReport" = dc_field(metadata=dc_config(field_name="report")) + + +@dataclass +class Data(DataClassJsonMixin): + id: str = dc_field(metadata=dc_config(field_name="id")) + + +@dataclass +class DataDogInfo(DataClassJsonMixin): + api_key: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="api_key") + ) + enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="enabled") + ) + site: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="site")) + + +@dataclass +class DeactivateUserRequest(DataClassJsonMixin): + created_by_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="created_by_id") + ) + mark_messages_deleted: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="mark_messages_deleted") + ) + + +@dataclass +class DeactivateUserResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + user: "Optional[UserResponse]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class DeactivateUsersRequest(DataClassJsonMixin): + user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) + created_by_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="created_by_id") + ) + mark_channels_deleted: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="mark_channels_deleted") + ) + mark_messages_deleted: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="mark_messages_deleted") + ) + + +@dataclass +class DeactivateUsersResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + task_id: str = dc_field(metadata=dc_config(field_name="task_id")) + + +@dataclass +class DecayFunctionConfig(DataClassJsonMixin): + base: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="base")) + decay: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="decay") + ) + direction: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="direction") + ) + offset: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="offset") + ) + origin: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="origin") + ) + scale: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="scale") + ) + + +@dataclass +class DeleteActivitiesRequest(DataClassJsonMixin): + ids: List[str] = dc_field(metadata=dc_config(field_name="ids")) + hard_delete: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="hard_delete") + ) + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class DeleteActivitiesResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + deleted_ids: List[str] = dc_field(metadata=dc_config(field_name="deleted_ids")) + + +@dataclass +class DeleteActivityReactionResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + reaction: "FeedsReactionResponse" = dc_field( + metadata=dc_config(field_name="reaction") + ) + + +@dataclass +class DeleteActivityRequest(DataClassJsonMixin): + hard_delete: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="hard_delete") + ) + + +@dataclass +class DeleteActivityResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + + +@dataclass +class DeleteBookmarkFolderResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + + +@dataclass +class DeleteBookmarkResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + bookmark: "BookmarkResponse" = dc_field(metadata=dc_config(field_name="bookmark")) + + +@dataclass +class DeleteCallRequest(DataClassJsonMixin): + hard: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="hard")) + + +@dataclass +class DeleteCallResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) + task_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="task_id") + ) + + +@dataclass +class DeleteChannelResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + channel: "Optional[ChannelResponse]" = dc_field( + default=None, metadata=dc_config(field_name="channel") + ) + + +@dataclass +class DeleteChannelsRequest(DataClassJsonMixin): + cids: List[str] = dc_field(metadata=dc_config(field_name="cids")) + hard_delete: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="hard_delete") + ) + + +@dataclass +class DeleteChannelsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + task_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="task_id") + ) + result: "Optional[Dict[str, Optional[DeleteChannelsResultResponse]]]" = dc_field( + default=None, metadata=dc_config(field_name="result") + ) + + +@dataclass +class DeleteChannelsResultResponse(DataClassJsonMixin): + status: str = dc_field(metadata=dc_config(field_name="status")) + error: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="error") + ) + + +@dataclass +class DeleteCommandResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + name: str = dc_field(metadata=dc_config(field_name="name")) + + +@dataclass +class DeleteCommentReactionResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) + reaction: "FeedsReactionResponse" = dc_field( + metadata=dc_config(field_name="reaction") ) @dataclass -class DailyAggregateCallsPerDayReportResponse(DataClassJsonMixin): - date: str = dc_field(metadata=dc_config(field_name="date")) - report: "CallsPerDayReport" = dc_field(metadata=dc_config(field_name="report")) +class DeleteCommentResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) @dataclass -class DailyAggregateQualityScoreReportResponse(DataClassJsonMixin): - date: str = dc_field(metadata=dc_config(field_name="date")) - report: "QualityScoreReport" = dc_field(metadata=dc_config(field_name="report")) +class DeleteExternalStorageResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) @dataclass -class DailyAggregateSDKUsageReportResponse(DataClassJsonMixin): - date: str = dc_field(metadata=dc_config(field_name="date")) - report: "SDKUsageReport" = dc_field(metadata=dc_config(field_name="report")) +class DeleteFeedGroupResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) @dataclass -class DailyAggregateUserFeedbackReportResponse(DataClassJsonMixin): - date: str = dc_field(metadata=dc_config(field_name="date")) - report: "UserFeedbackReport" = dc_field(metadata=dc_config(field_name="report")) +class DeleteFeedResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) @dataclass -class Data(DataClassJsonMixin): - id: str = dc_field(metadata=dc_config(field_name="id")) +class DeleteFeedUserDataResponse(DataClassJsonMixin): + deleted_activities: int = dc_field( + metadata=dc_config(field_name="deleted_activities") + ) + deleted_bookmarks: int = dc_field( + metadata=dc_config(field_name="deleted_bookmarks") + ) + deleted_comments: int = dc_field(metadata=dc_config(field_name="deleted_comments")) + deleted_reactions: int = dc_field( + metadata=dc_config(field_name="deleted_reactions") + ) + duration: str = dc_field(metadata=dc_config(field_name="duration")) @dataclass -class DataDogInfo(DataClassJsonMixin): - api_key: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="api_key") - ) - enabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="enabled") - ) - site: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="site")) +class DeleteFeedViewResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) @dataclass -class DeactivateUserRequest(DataClassJsonMixin): - created_by_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="created_by_id") - ) - mark_messages_deleted: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="mark_messages_deleted") +class DeleteMessageRequest(DataClassJsonMixin): + hard_delete: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="hard_delete") ) @dataclass -class DeactivateUserResponse(DataClassJsonMixin): +class DeleteMessageResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - user: "Optional[UserResponse]" = dc_field( - default=None, metadata=dc_config(field_name="user") - ) + message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) @dataclass -class DeactivateUsersRequest(DataClassJsonMixin): - user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) - created_by_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="created_by_id") - ) - mark_channels_deleted: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="mark_channels_deleted") - ) - mark_messages_deleted: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="mark_messages_deleted") - ) +class DeleteModerationConfigResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) @dataclass -class DeactivateUsersResponse(DataClassJsonMixin): +class DeleteModerationTemplateResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - task_id: str = dc_field(metadata=dc_config(field_name="task_id")) @dataclass -class DeleteActivityRequest(DataClassJsonMixin): +class DeleteReactionRequest(DataClassJsonMixin): hard_delete: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) @dataclass -class DeleteCallRequest(DataClassJsonMixin): - hard: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="hard")) +class DeleteReactionResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) + reaction: "ReactionResponse" = dc_field(metadata=dc_config(field_name="reaction")) @dataclass -class DeleteCallResponse(DataClassJsonMixin): +class DeleteRecordingResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) - task_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="task_id") - ) @dataclass -class DeleteChannelResponse(DataClassJsonMixin): +class DeleteReminderResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - channel: "Optional[ChannelResponse]" = dc_field( - default=None, metadata=dc_config(field_name="channel") - ) @dataclass -class DeleteChannelsRequest(DataClassJsonMixin): - cids: List[str] = dc_field(metadata=dc_config(field_name="cids")) +class DeleteSegmentTargetsRequest(DataClassJsonMixin): + target_ids: List[str] = dc_field(metadata=dc_config(field_name="target_ids")) + + +@dataclass +class DeleteTranscriptionResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + + +@dataclass +class DeleteUserRequest(DataClassJsonMixin): + delete_conversation_channels: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="delete_conversation_channels") + ) + delete_feeds_content: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="delete_feeds_content") + ) hard_delete: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="hard_delete") ) + mark_messages_deleted: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="mark_messages_deleted") + ) @dataclass -class DeleteChannelsResponse(DataClassJsonMixin): +class DeleteUsersRequest(DataClassJsonMixin): + user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) + calls: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="calls") + ) + 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") + ) + new_call_owner_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="new_call_owner_id") + ) + new_channel_owner_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="new_channel_owner_id") + ) + user: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="user")) + + +@dataclass +class DeleteUsersResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - task_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="task_id") + task_id: str = dc_field(metadata=dc_config(field_name="task_id")) + + +@dataclass +class Device(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"), + ) ) - result: "Optional[Dict[str, Optional[DeleteChannelsResultResponse]]]" = dc_field( - default=None, metadata=dc_config(field_name="result") + id: str = dc_field(metadata=dc_config(field_name="id")) + push_provider: str = dc_field(metadata=dc_config(field_name="push_provider")) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + disabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="disabled") + ) + disabled_reason: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="disabled_reason") + ) + push_provider_name: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="push_provider_name") ) + voip: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="voip")) @dataclass -class DeleteChannelsResultResponse(DataClassJsonMixin): - status: str = dc_field(metadata=dc_config(field_name="status")) - error: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="error") +class DeviceDataResponse(DataClassJsonMixin): + name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + version: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="version") ) @dataclass -class DeleteCommandResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) - name: str = dc_field(metadata=dc_config(field_name="name")) +class DeviceErrorInfo(DataClassJsonMixin): + error_message: str = dc_field(metadata=dc_config(field_name="error_message")) + provider: str = dc_field(metadata=dc_config(field_name="provider")) + provider_name: str = dc_field(metadata=dc_config(field_name="provider_name")) @dataclass -class DeleteExternalStorageResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) +class DeviceResponse(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"), + ) + ) + id: str = dc_field(metadata=dc_config(field_name="id")) + push_provider: str = dc_field(metadata=dc_config(field_name="push_provider")) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + disabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="disabled") + ) + disabled_reason: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="disabled_reason") + ) + push_provider_name: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="push_provider_name") + ) + voip: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="voip")) @dataclass -class DeleteMessageRequest(DataClassJsonMixin): - hard_delete: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="hard_delete") +class DraftPayloadResponse(DataClassJsonMixin): + id: str = dc_field(metadata=dc_config(field_name="id")) + text: str = dc_field(metadata=dc_config(field_name="text")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + html: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="html")) + mml: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mml")) + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") + ) + poll_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="poll_id") + ) + quoted_message_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="quoted_message_id") + ) + show_in_channel: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="show_in_channel") + ) + silent: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="silent") + ) + type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + attachments: "Optional[List[Attachment]]" = dc_field( + default=None, metadata=dc_config(field_name="attachments") + ) + mentioned_users: "Optional[List[UserResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="mentioned_users") + ) + + +@dataclass +class DraftResponse(DataClassJsonMixin): + channel_cid: str = dc_field(metadata=dc_config(field_name="channel_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: "DraftPayloadResponse" = dc_field(metadata=dc_config(field_name="message")) + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") + ) + channel: "Optional[ChannelResponse]" = dc_field( + default=None, metadata=dc_config(field_name="channel") + ) + parent_message: "Optional[MessageResponse]" = dc_field( + default=None, metadata=dc_config(field_name="parent_message") + ) + quoted_message: "Optional[MessageResponse]" = dc_field( + default=None, metadata=dc_config(field_name="quoted_message") ) @dataclass -class DeleteMessageResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) - message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) +class EdgeResponse(DataClassJsonMixin): + continent_code: str = dc_field(metadata=dc_config(field_name="continent_code")) + country_iso_code: str = dc_field(metadata=dc_config(field_name="country_iso_code")) + green: int = dc_field(metadata=dc_config(field_name="green")) + id: str = dc_field(metadata=dc_config(field_name="id")) + latency_test_url: str = dc_field(metadata=dc_config(field_name="latency_test_url")) + latitude: float = dc_field(metadata=dc_config(field_name="latitude")) + longitude: float = dc_field(metadata=dc_config(field_name="longitude")) + red: int = dc_field(metadata=dc_config(field_name="red")) + subdivision_iso_code: str = dc_field( + metadata=dc_config(field_name="subdivision_iso_code") + ) + yellow: int = dc_field(metadata=dc_config(field_name="yellow")) @dataclass -class DeleteModerationConfigResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) +class EgressHLSResponse(DataClassJsonMixin): + playlist_url: str = dc_field(metadata=dc_config(field_name="playlist_url")) + status: str = dc_field(metadata=dc_config(field_name="status")) @dataclass -class DeleteModerationTemplateResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) +class EgressRTMPResponse(DataClassJsonMixin): + name: str = dc_field(metadata=dc_config(field_name="name")) + started_at: datetime = dc_field( + metadata=dc_config( + field_name="started_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + stream_key: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="stream_key") + ) + stream_url: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="stream_url") + ) @dataclass -class DeleteReactionRequest(DataClassJsonMixin): - hard_delete: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="hard_delete") +class EgressResponse(DataClassJsonMixin): + broadcasting: bool = dc_field(metadata=dc_config(field_name="broadcasting")) + rtmps: "List[EgressRTMPResponse]" = dc_field(metadata=dc_config(field_name="rtmps")) + frame_recording: "Optional[FrameRecordingResponse]" = dc_field( + default=None, metadata=dc_config(field_name="frame_recording") + ) + hls: "Optional[EgressHLSResponse]" = dc_field( + default=None, metadata=dc_config(field_name="hls") ) @dataclass -class DeleteReactionResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) - message: "MessageResponse" = dc_field(metadata=dc_config(field_name="message")) - reaction: "ReactionResponse" = dc_field(metadata=dc_config(field_name="reaction")) +class EgressTaskConfig(DataClassJsonMixin): + egress_user: "Optional[EgressUser]" = dc_field( + default=None, metadata=dc_config(field_name="egress_user") + ) + frame_recording_egress_config: "Optional[FrameRecordingEgressConfig]" = dc_field( + default=None, metadata=dc_config(field_name="frame_recording_egress_config") + ) + hls_egress_config: "Optional[HLSEgressConfig]" = dc_field( + default=None, metadata=dc_config(field_name="hls_egress_config") + ) + recording_egress_config: "Optional[RecordingEgressConfig]" = dc_field( + default=None, metadata=dc_config(field_name="recording_egress_config") + ) + rtmp_egress_config: "Optional[RTMPEgressConfig]" = dc_field( + default=None, metadata=dc_config(field_name="rtmp_egress_config") + ) + stt_egress_config: "Optional[STTEgressConfig]" = dc_field( + default=None, metadata=dc_config(field_name="stt_egress_config") + ) @dataclass -class DeleteRecordingResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) +class EgressUser(DataClassJsonMixin): + token: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="token") + ) @dataclass -class DeleteReminderResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) +class EndCallRequest(DataClassJsonMixin): + pass @dataclass -class DeleteSegmentTargetsRequest(DataClassJsonMixin): - target_ids: List[str] = dc_field(metadata=dc_config(field_name="target_ids")) +class EndCallResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) @dataclass -class DeleteTranscriptionResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) +class EnrichedActivity(DataClassJsonMixin): + foreign_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="foreign_id") + ) + id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + score: Optional[float] = dc_field( + default=None, metadata=dc_config(field_name="score") + ) + verb: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="verb")) + to: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="to") + ) + actor: "Optional[Data]" = dc_field( + default=None, metadata=dc_config(field_name="actor") + ) + latest_reactions: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( + default=None, metadata=dc_config(field_name="latest_reactions") + ) + object: "Optional[Data]" = dc_field( + default=None, metadata=dc_config(field_name="object") + ) + origin: "Optional[Data]" = dc_field( + default=None, metadata=dc_config(field_name="origin") + ) + own_reactions: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( + default=None, metadata=dc_config(field_name="own_reactions") + ) + reaction_counts: "Optional[Dict[str, int]]" = dc_field( + default=None, metadata=dc_config(field_name="reaction_counts") + ) + target: "Optional[Data]" = dc_field( + default=None, metadata=dc_config(field_name="target") + ) @dataclass -class DeleteUserRequest(DataClassJsonMixin): - delete_conversation_channels: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="delete_conversation_channels") +class EnrichedReaction(DataClassJsonMixin): + activity_id: str = dc_field(metadata=dc_config(field_name="activity_id")) + kind: str = dc_field(metadata=dc_config(field_name="kind")) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + parent: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent") ) - delete_feeds_content: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="delete_feeds_content") + target_feeds: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="target_feeds") ) - hard_delete: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="hard_delete") + children_counts: "Optional[Dict[str, int]]" = dc_field( + default=None, metadata=dc_config(field_name="children_counts") ) - mark_messages_deleted: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="mark_messages_deleted") + created_at: "Optional[Time]" = dc_field( + default=None, metadata=dc_config(field_name="created_at") + ) + data: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="data") + ) + latest_children: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( + default=None, metadata=dc_config(field_name="latest_children") + ) + own_children: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( + default=None, metadata=dc_config(field_name="own_children") + ) + updated_at: "Optional[Time]" = dc_field( + default=None, metadata=dc_config(field_name="updated_at") + ) + user: "Optional[Data]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) @dataclass -class DeleteUsersRequest(DataClassJsonMixin): - user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) - calls: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="calls") +class EntityCreator(DataClassJsonMixin): + ban_count: int = dc_field(metadata=dc_config(field_name="ban_count")) + banned: bool = dc_field(metadata=dc_config(field_name="banned")) + deleted_content_count: int = dc_field( + metadata=dc_config(field_name="deleted_content_count") ) - conversations: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="conversations") + id: str = dc_field(metadata=dc_config(field_name="id")) + online: bool = dc_field(metadata=dc_config(field_name="online")) + 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") ) - files: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="files") + ban_expires: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="ban_expires", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), ) - messages: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="messages") + created_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + deactivated_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="deactivated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + deleted_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="deleted_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + invisible: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="invisible") + ) + language: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="language") + ) + last_active: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="last_active", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + last_engaged_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="last_engaged_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + revoke_tokens_issued_before: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="revoke_tokens_issued_before", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + updated_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), ) - new_call_owner_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="new_call_owner_id") + teams: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="teams") ) - new_channel_owner_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="new_channel_owner_id") + privacy_settings: "Optional[PrivacySettings]" = dc_field( + default=None, metadata=dc_config(field_name="privacy_settings") ) - user: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="user")) - - -@dataclass -class DeleteUsersResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) - task_id: str = dc_field(metadata=dc_config(field_name="task_id")) @dataclass -class Device(DataClassJsonMixin): +class EntityCreatorResponse(DataClassJsonMixin): + ban_count: int = dc_field(metadata=dc_config(field_name="ban_count")) + banned: bool = dc_field(metadata=dc_config(field_name="banned")) created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -5484,386 +7455,534 @@ class Device(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) + deleted_content_count: int = dc_field( + metadata=dc_config(field_name="deleted_content_count") + ) + flagged_count: int = dc_field(metadata=dc_config(field_name="flagged_count")) id: str = dc_field(metadata=dc_config(field_name="id")) - push_provider: str = dc_field(metadata=dc_config(field_name="push_provider")) - user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - disabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="disabled") + invisible: bool = dc_field(metadata=dc_config(field_name="invisible")) + language: str = dc_field(metadata=dc_config(field_name="language")) + online: bool = dc_field(metadata=dc_config(field_name="online")) + role: str = dc_field(metadata=dc_config(field_name="role")) + shadow_banned: bool = dc_field(metadata=dc_config(field_name="shadow_banned")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) ) - disabled_reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="disabled_reason") + blocked_user_ids: List[str] = dc_field( + metadata=dc_config(field_name="blocked_user_ids") ) - push_provider_name: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="push_provider_name") + 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( + field_name="ban_expires", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + deactivated_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="deactivated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + deleted_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="deleted_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + image: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="image") + ) + last_active: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="last_active", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + revoke_tokens_issued_before: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="revoke_tokens_issued_before", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + devices: "Optional[List[DeviceResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="devices") + ) + privacy_settings: "Optional[PrivacySettingsResponse]" = dc_field( + default=None, metadata=dc_config(field_name="privacy_settings") + ) + push_notifications: "Optional[PushNotificationSettingsResponse]" = dc_field( + default=None, metadata=dc_config(field_name="push_notifications") + ) + teams_role: "Optional[Dict[str, str]]" = dc_field( + default=None, metadata=dc_config(field_name="teams_role") ) - voip: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="voip")) @dataclass -class DeviceDataResponse(DataClassJsonMixin): - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) +class ErrorResult(DataClassJsonMixin): + type: str = dc_field(metadata=dc_config(field_name="type")) + stacktrace: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="stacktrace") + ) version: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="version") ) @dataclass -class DeviceErrorInfo(DataClassJsonMixin): - error_message: str = dc_field(metadata=dc_config(field_name="error_message")) - provider: str = dc_field(metadata=dc_config(field_name="provider")) - provider_name: str = dc_field(metadata=dc_config(field_name="provider_name")) - - -@dataclass -class DeviceResponse(DataClassJsonMixin): - created_at: datetime = dc_field( +class EventHook(DataClassJsonMixin): + created_at: Optional[datetime] = dc_field( + default=None, metadata=dc_config( field_name="created_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ) + ), ) - id: str = dc_field(metadata=dc_config(field_name="id")) - push_provider: str = dc_field(metadata=dc_config(field_name="push_provider")) - user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - disabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="disabled") + enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="enabled") ) - disabled_reason: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="disabled_reason") + hook_type: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="hook_type") ) - push_provider_name: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="push_provider_name") + id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) + sns_auth_type: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sns_auth_type") ) - voip: Optional[bool] = dc_field(default=None, metadata=dc_config(field_name="voip")) - - -@dataclass -class DraftPayloadResponse(DataClassJsonMixin): - id: str = dc_field(metadata=dc_config(field_name="id")) - text: str = dc_field(metadata=dc_config(field_name="text")) - custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) - html: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="html")) - mml: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="mml")) - parent_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="parent_id") + sns_key: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sns_key") ) - poll_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="poll_id") + sns_region: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sns_region") ) - quoted_message_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="quoted_message_id") + sns_role_arn: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sns_role_arn") ) - show_in_channel: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="show_in_channel") + sns_secret: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sns_secret") ) - silent: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="silent") + sns_topic_arn: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sns_topic_arn") ) - type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) - attachments: "Optional[List[Attachment]]" = dc_field( - default=None, metadata=dc_config(field_name="attachments") + sqs_auth_type: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sqs_auth_type") ) - mentioned_users: "Optional[List[UserResponse]]" = dc_field( - default=None, metadata=dc_config(field_name="mentioned_users") + sqs_key: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sqs_key") ) - - -@dataclass -class DraftResponse(DataClassJsonMixin): - channel_cid: str = dc_field(metadata=dc_config(field_name="channel_cid")) - created_at: datetime = dc_field( + sqs_queue_url: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sqs_queue_url") + ) + sqs_region: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sqs_region") + ) + sqs_role_arn: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sqs_role_arn") + ) + sqs_secret: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="sqs_secret") + ) + timeout_ms: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="timeout_ms") + ) + updated_at: Optional[datetime] = dc_field( + default=None, metadata=dc_config( - field_name="created_at", + field_name="updated_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ) - ) - message: "DraftPayloadResponse" = dc_field(metadata=dc_config(field_name="message")) - parent_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="parent_id") - ) - channel: "Optional[ChannelResponse]" = dc_field( - default=None, metadata=dc_config(field_name="channel") + ), ) - parent_message: "Optional[MessageResponse]" = dc_field( - default=None, metadata=dc_config(field_name="parent_message") + webhook_url: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="webhook_url") ) - quoted_message: "Optional[MessageResponse]" = dc_field( - default=None, metadata=dc_config(field_name="quoted_message") + event_types: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="event_types") ) - - -@dataclass -class EdgeResponse(DataClassJsonMixin): - continent_code: str = dc_field(metadata=dc_config(field_name="continent_code")) - country_iso_code: str = dc_field(metadata=dc_config(field_name="country_iso_code")) - green: int = dc_field(metadata=dc_config(field_name="green")) - id: str = dc_field(metadata=dc_config(field_name="id")) - latency_test_url: str = dc_field(metadata=dc_config(field_name="latency_test_url")) - latitude: float = dc_field(metadata=dc_config(field_name="latitude")) - longitude: float = dc_field(metadata=dc_config(field_name="longitude")) - red: int = dc_field(metadata=dc_config(field_name="red")) - subdivision_iso_code: str = dc_field( - metadata=dc_config(field_name="subdivision_iso_code") + callback: "Optional[AsyncModerationCallbackConfig]" = dc_field( + default=None, metadata=dc_config(field_name="callback") ) - yellow: int = dc_field(metadata=dc_config(field_name="yellow")) @dataclass -class EgressHLSResponse(DataClassJsonMixin): - playlist_url: str = dc_field(metadata=dc_config(field_name="playlist_url")) - status: str = dc_field(metadata=dc_config(field_name="status")) +class EventNotificationSettings(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + apns: "APNS" = dc_field(metadata=dc_config(field_name="apns")) + fcm: "FCM" = dc_field(metadata=dc_config(field_name="fcm")) @dataclass -class EgressRTMPResponse(DataClassJsonMixin): - name: str = dc_field(metadata=dc_config(field_name="name")) - started_at: datetime = dc_field( - metadata=dc_config( - field_name="started_at", - encoder=encode_datetime, - decoder=datetime_from_unix_ns, - mm_field=fields.DateTime(format="iso"), - ) +class EventRequest(DataClassJsonMixin): + type: str = dc_field(metadata=dc_config(field_name="type")) + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") ) - stream_key: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="stream_key") + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") ) - stream_url: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="stream_url") + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) @dataclass -class EgressResponse(DataClassJsonMixin): - broadcasting: bool = dc_field(metadata=dc_config(field_name="broadcasting")) - rtmps: "List[EgressRTMPResponse]" = dc_field(metadata=dc_config(field_name="rtmps")) - frame_recording: "Optional[FrameRecordingResponse]" = dc_field( - default=None, metadata=dc_config(field_name="frame_recording") - ) - hls: "Optional[EgressHLSResponse]" = dc_field( - default=None, metadata=dc_config(field_name="hls") - ) +class EventResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + event: "WSEvent" = dc_field(metadata=dc_config(field_name="event")) @dataclass -class EgressTaskConfig(DataClassJsonMixin): - egress_user: "Optional[EgressUser]" = dc_field( - default=None, metadata=dc_config(field_name="egress_user") +class ExportChannelsRequest(DataClassJsonMixin): + channels: "List[ChannelExport]" = dc_field( + metadata=dc_config(field_name="channels") ) - frame_recording_egress_config: "Optional[FrameRecordingEgressConfig]" = dc_field( - default=None, metadata=dc_config(field_name="frame_recording_egress_config") + clear_deleted_message_text: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="clear_deleted_message_text") ) - hls_egress_config: "Optional[HLSEgressConfig]" = dc_field( - default=None, metadata=dc_config(field_name="hls_egress_config") + export_users: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="export_users") ) - recording_egress_config: "Optional[RecordingEgressConfig]" = dc_field( - default=None, metadata=dc_config(field_name="recording_egress_config") + include_soft_deleted_channels: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="include_soft_deleted_channels") ) - rtmp_egress_config: "Optional[RTMPEgressConfig]" = dc_field( - default=None, metadata=dc_config(field_name="rtmp_egress_config") + include_truncated_messages: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="include_truncated_messages") ) - stt_egress_config: "Optional[STTEgressConfig]" = dc_field( - default=None, metadata=dc_config(field_name="stt_egress_config") + version: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="version") ) @dataclass -class EgressUser(DataClassJsonMixin): - token: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="token") - ) +class ExportChannelsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + task_id: str = dc_field(metadata=dc_config(field_name="task_id")) @dataclass -class EndCallRequest(DataClassJsonMixin): +class ExportFeedUserDataRequest(DataClassJsonMixin): pass @dataclass -class EndCallResponse(DataClassJsonMixin): +class ExportFeedUserDataResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) + task_id: str = dc_field(metadata=dc_config(field_name="task_id")) @dataclass -class EnrichedActivity(DataClassJsonMixin): - foreign_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="foreign_id") +class ExportUserResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + messages: "Optional[List[MessageResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="messages") ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - score: Optional[float] = dc_field( - default=None, metadata=dc_config(field_name="score") + reactions: "Optional[List[ReactionResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="reactions") ) - verb: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="verb")) - to: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="to") + user: "Optional[UserResponse]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) - actor: "Optional[Data]" = dc_field( - default=None, metadata=dc_config(field_name="actor") + + +@dataclass +class ExportUsersRequest(DataClassJsonMixin): + user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) + + +@dataclass +class ExportUsersResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + task_id: str = dc_field(metadata=dc_config(field_name="task_id")) + + +@dataclass +class ExternalStorage(DataClassJsonMixin): + abs_account_name: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="abs_account_name") ) - latest_reactions: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( - default=None, metadata=dc_config(field_name="latest_reactions") + abs_client_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="abs_client_id") ) - object: "Optional[Data]" = dc_field( - default=None, metadata=dc_config(field_name="object") + abs_client_secret: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="abs_client_secret") ) - origin: "Optional[Data]" = dc_field( - default=None, metadata=dc_config(field_name="origin") + abs_tenant_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="abs_tenant_id") ) - own_reactions: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( - default=None, metadata=dc_config(field_name="own_reactions") + bucket: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="bucket") ) - reaction_counts: "Optional[Dict[str, int]]" = dc_field( - default=None, metadata=dc_config(field_name="reaction_counts") + gcs_credentials: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="gcs_credentials") ) - target: "Optional[Data]" = dc_field( - default=None, metadata=dc_config(field_name="target") + path: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="path")) + s3_api_key: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="s3_api_key") ) - - -@dataclass -class EnrichedReaction(DataClassJsonMixin): - activity_id: str = dc_field(metadata=dc_config(field_name="activity_id")) - kind: str = dc_field(metadata=dc_config(field_name="kind")) - user_id: str = dc_field(metadata=dc_config(field_name="user_id")) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - parent: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="parent") + s3_custom_endpoint: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="s3_custom_endpoint") ) - target_feeds: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="target_feeds") + s3_region: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="s3_region") ) - children_counts: "Optional[Dict[str, int]]" = dc_field( - default=None, metadata=dc_config(field_name="children_counts") + s3_secret_key: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="s3_secret_key") ) - created_at: "Optional[Time]" = dc_field( - default=None, metadata=dc_config(field_name="created_at") + storage_name: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="storage_name") + ) + storage_type: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="storage_type") ) + + +@dataclass +class ExternalStorageResponse(DataClassJsonMixin): + bucket: str = dc_field(metadata=dc_config(field_name="bucket")) + name: str = dc_field(metadata=dc_config(field_name="name")) + path: str = dc_field(metadata=dc_config(field_name="path")) + type: str = dc_field(metadata=dc_config(field_name="type")) + + +@dataclass +class FCM(DataClassJsonMixin): data: Optional[Dict[str, object]] = dc_field( default=None, metadata=dc_config(field_name="data") ) - latest_children: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( - default=None, metadata=dc_config(field_name="latest_children") + + +@dataclass +class FeedCreatedEvent(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"), + ) ) - own_children: "Optional[Dict[str, List[EnrichedReaction]]]" = dc_field( - default=None, metadata=dc_config(field_name="own_children") + fid: str = dc_field(metadata=dc_config(field_name="fid")) + members: "List[FeedMemberResponse]" = dc_field( + metadata=dc_config(field_name="members") ) - updated_at: "Optional[Time]" = dc_field( - default=None, metadata=dc_config(field_name="updated_at") + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + feed: "FeedResponse" = dc_field(metadata=dc_config(field_name="feed")) + user: "UserResponseCommonFields" = dc_field(metadata=dc_config(field_name="user")) + type: str = dc_field( + default="feeds.feed.created", metadata=dc_config(field_name="type") ) - user: "Optional[Data]" = dc_field( - default=None, metadata=dc_config(field_name="user") + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + 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"), + ), ) @dataclass -class EntityCreator(DataClassJsonMixin): - ban_count: int = dc_field(metadata=dc_config(field_name="ban_count")) - banned: bool = dc_field(metadata=dc_config(field_name="banned")) - deleted_content_count: int = dc_field( - metadata=dc_config(field_name="deleted_content_count") +class FeedDeletedEvent(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"), + ) ) - id: str = dc_field(metadata=dc_config(field_name="id")) - online: bool = dc_field(metadata=dc_config(field_name="online")) - role: str = dc_field(metadata=dc_config(field_name="role")) + fid: str = dc_field(metadata=dc_config(field_name="fid")) 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") + type: str = dc_field( + default="feeds.feed.deleted", metadata=dc_config(field_name="type") ) - ban_expires: Optional[datetime] = dc_field( + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + received_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="ban_expires", + field_name="received_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ), ) - created_at: Optional[datetime] = dc_field( - default=None, + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class FeedGroup(DataClassJsonMixin): + aggregation_version: int = dc_field( + metadata=dc_config(field_name="AggregationVersion") + ) + app_pk: int = dc_field(metadata=dc_config(field_name="AppPK")) + 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"), - ), + ) ) - deactivated_at: Optional[datetime] = dc_field( + default_visibility: str = dc_field( + metadata=dc_config(field_name="DefaultVisibility") + ) + id: str = dc_field(metadata=dc_config(field_name="ID")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + activity_processors: "List[ActivityProcessorConfig]" = dc_field( + metadata=dc_config(field_name="ActivityProcessors") + ) + activity_selectors: "List[ActivitySelectorConfig]" = dc_field( + metadata=dc_config(field_name="ActivitySelectors") + ) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="Custom")) + deleted_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="deactivated_at", + field_name="DeletedAt", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ), ) - deleted_at: Optional[datetime] = dc_field( + last_feed_get_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="deleted_at", + field_name="LastFeedGetAt", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ), ) - invisible: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="invisible") + aggregation: "Optional[AggregationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="Aggregation") ) - language: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="language") + notification: "Optional[NotificationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="Notification") ) - last_active: Optional[datetime] = dc_field( - default=None, + push_notification: "Optional[PushNotificationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="PushNotification") + ) + ranking: "Optional[RankingConfig]" = dc_field( + default=None, metadata=dc_config(field_name="Ranking") + ) + stories: "Optional[StoriesConfig]" = dc_field( + default=None, metadata=dc_config(field_name="Stories") + ) + + +@dataclass +class FeedGroupChangedEvent(DataClassJsonMixin): + created_at: datetime = dc_field( metadata=dc_config( - field_name="last_active", + field_name="created_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ), + ) ) - last_engaged_at: Optional[datetime] = dc_field( + fid: str = dc_field(metadata=dc_config(field_name="fid")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.feed_group.changed", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + received_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="last_engaged_at", + field_name="received_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ), ) - revoke_tokens_issued_before: Optional[datetime] = dc_field( - default=None, + feed_group: "Optional[FeedGroup]" = dc_field( + default=None, metadata=dc_config(field_name="feed_group") + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class FeedGroupDeletedEvent(DataClassJsonMixin): + created_at: datetime = dc_field( metadata=dc_config( - field_name="revoke_tokens_issued_before", + field_name="created_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ), + ) ) - updated_at: Optional[datetime] = dc_field( + fid: str = dc_field(metadata=dc_config(field_name="fid")) + group_id: str = dc_field(metadata=dc_config(field_name="group_id")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.feed_group.deleted", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + received_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="updated_at", + field_name="received_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ), ) - teams: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="teams") - ) - privacy_settings: "Optional[PrivacySettings]" = dc_field( - default=None, metadata=dc_config(field_name="privacy_settings") - ) @dataclass -class EntityCreatorResponse(DataClassJsonMixin): - ban_count: int = dc_field(metadata=dc_config(field_name="ban_count")) - banned: bool = dc_field(metadata=dc_config(field_name="banned")) +class FeedGroupResponse(DataClassJsonMixin): created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -5872,16 +7991,7 @@ class EntityCreatorResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - deleted_content_count: int = dc_field( - metadata=dc_config(field_name="deleted_content_count") - ) - flagged_count: int = dc_field(metadata=dc_config(field_name="flagged_count")) id: str = dc_field(metadata=dc_config(field_name="id")) - invisible: bool = dc_field(metadata=dc_config(field_name="invisible")) - language: str = dc_field(metadata=dc_config(field_name="language")) - online: bool = dc_field(metadata=dc_config(field_name="online")) - role: str = dc_field(metadata=dc_config(field_name="role")) - shadow_banned: bool = dc_field(metadata=dc_config(field_name="shadow_banned")) updated_at: datetime = dc_field( metadata=dc_config( field_name="updated_at", @@ -5890,308 +8000,452 @@ class EntityCreatorResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - blocked_user_ids: List[str] = dc_field( - metadata=dc_config(field_name="blocked_user_ids") + default_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="default_visibility") ) - 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") + activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_processors") ) - ban_expires: Optional[datetime] = dc_field( - default=None, - metadata=dc_config( - field_name="ban_expires", - encoder=encode_datetime, - decoder=datetime_from_unix_ns, - mm_field=fields.DateTime(format="iso"), - ), + activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_selectors") ) - deactivated_at: Optional[datetime] = dc_field( - default=None, + aggregation: "Optional[AggregationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="aggregation") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + notification: "Optional[NotificationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="notification") + ) + push_notification: "Optional[PushNotificationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="push_notification") + ) + ranking: "Optional[RankingConfig]" = dc_field( + default=None, metadata=dc_config(field_name="ranking") + ) + stories: "Optional[StoriesConfig]" = dc_field( + default=None, metadata=dc_config(field_name="stories") + ) + + +@dataclass +class FeedInput(DataClassJsonMixin): + description: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="description") + ) + name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="visibility") + ) + filter_tags: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="filter_tags") + ) + members: "Optional[List[FeedMemberRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="members") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + + +@dataclass +class FeedMemberAddedEvent(DataClassJsonMixin): + created_at: datetime = dc_field( metadata=dc_config( - field_name="deactivated_at", + field_name="created_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ), + ) ) - deleted_at: Optional[datetime] = dc_field( + fid: str = dc_field(metadata=dc_config(field_name="fid")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + member: "FeedMemberResponse" = dc_field(metadata=dc_config(field_name="member")) + type: str = dc_field( + default="feeds.feed_member.added", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + received_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="deleted_at", + field_name="received_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ), ) - image: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="image") + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) - last_active: Optional[datetime] = dc_field( - default=None, + + +@dataclass +class FeedMemberRemovedEvent(DataClassJsonMixin): + created_at: datetime = dc_field( metadata=dc_config( - field_name="last_active", + field_name="created_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ), + ) ) - name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) - revoke_tokens_issued_before: Optional[datetime] = dc_field( + fid: str = dc_field(metadata=dc_config(field_name="fid")) + member_id: str = dc_field(metadata=dc_config(field_name="member_id")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.feed_member.removed", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + received_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( - field_name="revoke_tokens_issued_before", + field_name="received_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), ), ) - devices: "Optional[List[DeviceResponse]]" = dc_field( - default=None, metadata=dc_config(field_name="devices") - ) - privacy_settings: "Optional[PrivacySettingsResponse]" = dc_field( - default=None, metadata=dc_config(field_name="privacy_settings") - ) - push_notifications: "Optional[PushNotificationSettingsResponse]" = dc_field( - default=None, metadata=dc_config(field_name="push_notifications") - ) - teams_role: "Optional[Dict[str, str]]" = dc_field( - default=None, metadata=dc_config(field_name="teams_role") + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) @dataclass -class ErrorResult(DataClassJsonMixin): - type: str = dc_field(metadata=dc_config(field_name="type")) - stacktrace: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="stacktrace") +class FeedMemberRequest(DataClassJsonMixin): + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + invite: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="invite") ) - version: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="version") + membership_level: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="membership_level") + ) + role: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="role")) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") ) @dataclass -class EventHook(DataClassJsonMixin): - created_at: Optional[datetime] = dc_field( - default=None, +class FeedMemberResponse(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"), + ) + ) + role: str = dc_field(metadata=dc_config(field_name="role")) + status: str = dc_field(metadata=dc_config(field_name="status")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + invite_accepted_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="invite_accepted_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), ), ) - enabled: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="enabled") + invite_rejected_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="invite_rejected_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), ) - hook_type: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="hook_type") + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") ) - id: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="id")) - sns_auth_type: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sns_auth_type") + membership_level: "Optional[MembershipLevelResponse]" = dc_field( + default=None, metadata=dc_config(field_name="membership_level") ) - sns_key: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sns_key") + + +@dataclass +class FeedMemberUpdatedEvent(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"), + ) ) - sns_region: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sns_region") + fid: str = dc_field(metadata=dc_config(field_name="fid")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + member: "FeedMemberResponse" = dc_field(metadata=dc_config(field_name="member")) + type: str = dc_field( + default="feeds.feed_member.updated", metadata=dc_config(field_name="type") ) - sns_role_arn: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sns_role_arn") + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") ) - sns_secret: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sns_secret") + 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"), + ), ) - sns_topic_arn: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sns_topic_arn") + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") ) - sqs_auth_type: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sqs_auth_type") + + +FeedOwnCapabilityType = NewType("FeedOwnCapabilityType", str) + + +class FeedOwnCapability: + ADD_ACTIVITY: Final[FeedOwnCapabilityType] = "add-activity" + ADD_ACTIVITY_REACTION: Final[FeedOwnCapabilityType] = "add-activity-reaction" + ADD_COMMENT: Final[FeedOwnCapabilityType] = "add-comment" + ADD_COMMENT_REACTION: Final[FeedOwnCapabilityType] = "add-comment-reaction" + BOOKMARK_ACTIVITY: Final[FeedOwnCapabilityType] = "bookmark-activity" + CREATE_FEED: Final[FeedOwnCapabilityType] = "create-feed" + DELETE_BOOKMARK: Final[FeedOwnCapabilityType] = "delete-bookmark" + DELETE_COMMENT: Final[FeedOwnCapabilityType] = "delete-comment" + DELETE_FEED: Final[FeedOwnCapabilityType] = "delete-feed" + EDIT_BOOKMARK: Final[FeedOwnCapabilityType] = "edit-bookmark" + FOLLOW: Final[FeedOwnCapabilityType] = "follow" + INVITE_FEED: Final[FeedOwnCapabilityType] = "invite-feed" + JOIN_FEED: Final[FeedOwnCapabilityType] = "join-feed" + LEAVE_FEED: Final[FeedOwnCapabilityType] = "leave-feed" + MANAGE_FEED_GROUP: Final[FeedOwnCapabilityType] = "manage-feed-group" + MARK_ACTIVITY: Final[FeedOwnCapabilityType] = "mark-activity" + PIN_ACTIVITY: Final[FeedOwnCapabilityType] = "pin-activity" + QUERY_FEED_MEMBERS: Final[FeedOwnCapabilityType] = "query-feed-members" + QUERY_FOLLOWS: Final[FeedOwnCapabilityType] = "query-follows" + READ_ACTIVITIES: Final[FeedOwnCapabilityType] = "read-activities" + READ_FEED: Final[FeedOwnCapabilityType] = "read-feed" + REMOVE_ACTIVITY: Final[FeedOwnCapabilityType] = "remove-activity" + REMOVE_ACTIVITY_REACTION: Final[FeedOwnCapabilityType] = "remove-activity-reaction" + REMOVE_COMMENT_REACTION: Final[FeedOwnCapabilityType] = "remove-comment-reaction" + UNFOLLOW: Final[FeedOwnCapabilityType] = "unfollow" + UPDATE_ACTIVITY: Final[FeedOwnCapabilityType] = "update-activity" + UPDATE_COMMENT: Final[FeedOwnCapabilityType] = "update-comment" + UPDATE_FEED: Final[FeedOwnCapabilityType] = "update-feed" + UPDATE_FEED_FOLLOWERS: Final[FeedOwnCapabilityType] = "update-feed-followers" + UPDATE_FEED_MEMBERS: Final[FeedOwnCapabilityType] = "update-feed-members" + + +@dataclass +class FeedRequest(DataClassJsonMixin): + feed_group_id: str = dc_field(metadata=dc_config(field_name="feed_group_id")) + feed_id: str = dc_field(metadata=dc_config(field_name="feed_id")) + created_by_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="created_by_id") ) - sqs_key: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sqs_key") + description: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="description") ) - sqs_queue_url: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sqs_queue_url") + name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="visibility") ) - sqs_region: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sqs_region") + filter_tags: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="filter_tags") ) - sqs_role_arn: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sqs_role_arn") + members: "Optional[List[FeedMemberRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="members") ) - sqs_secret: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="sqs_secret") + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") ) - timeout_ms: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="timeout_ms") + + +@dataclass +class FeedResponse(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"), + ) ) - updated_at: Optional[datetime] = dc_field( - default=None, + description: str = dc_field(metadata=dc_config(field_name="description")) + feed: str = dc_field(metadata=dc_config(field_name="feed")) + follower_count: int = dc_field(metadata=dc_config(field_name="follower_count")) + following_count: int = dc_field(metadata=dc_config(field_name="following_count")) + group_id: str = dc_field(metadata=dc_config(field_name="group_id")) + id: str = dc_field(metadata=dc_config(field_name="id")) + member_count: int = dc_field(metadata=dc_config(field_name="member_count")) + name: str = dc_field(metadata=dc_config(field_name="name")) + pin_count: int = dc_field(metadata=dc_config(field_name="pin_count")) + updated_at: datetime = dc_field( metadata=dc_config( field_name="updated_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), + ) + ) + created_by: "UserResponse" = dc_field(metadata=dc_config(field_name="created_by")) + deleted_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="deleted_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), ), ) - webhook_url: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="webhook_url") + visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="visibility") ) - event_types: Optional[List[str]] = dc_field( - default=None, metadata=dc_config(field_name="event_types") + filter_tags: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="filter_tags") ) - callback: "Optional[AsyncModerationCallbackConfig]" = dc_field( - default=None, metadata=dc_config(field_name="callback") + own_follows: "Optional[List[FollowResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="own_follows") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") ) @dataclass -class EventNotificationSettings(DataClassJsonMixin): - enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) - apns: "APNS" = dc_field(metadata=dc_config(field_name="apns")) - fcm: "FCM" = dc_field(metadata=dc_config(field_name="fcm")) - - -@dataclass -class EventRequest(DataClassJsonMixin): - type: str = dc_field(metadata=dc_config(field_name="type")) - parent_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="parent_id") +class FeedUpdatedEvent(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"), + ) ) - user_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="user_id") + fid: str = dc_field(metadata=dc_config(field_name="fid")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + feed: "FeedResponse" = dc_field(metadata=dc_config(field_name="feed")) + type: str = dc_field( + default="feeds.feed.updated", metadata=dc_config(field_name="type") ) - custom: Optional[Dict[str, object]] = dc_field( - default=None, metadata=dc_config(field_name="custom") + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") ) - user: "Optional[UserRequest]" = dc_field( + 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"), + ), + ) + user: "Optional[UserResponseCommonFields]" = dc_field( default=None, metadata=dc_config(field_name="user") ) @dataclass -class EventResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) - event: "WSEvent" = dc_field(metadata=dc_config(field_name="event")) - - -@dataclass -class ExportChannelsRequest(DataClassJsonMixin): - channels: "List[ChannelExport]" = dc_field( - metadata=dc_config(field_name="channels") - ) - clear_deleted_message_text: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="clear_deleted_message_text") +class FeedViewResponse(DataClassJsonMixin): + id: str = dc_field(metadata=dc_config(field_name="id")) + last_used_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="last_used_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), ) - export_users: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="export_users") + activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_processors") ) - include_soft_deleted_channels: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="include_soft_deleted_channels") + activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_selectors") ) - include_truncated_messages: Optional[bool] = dc_field( - default=None, metadata=dc_config(field_name="include_truncated_messages") + aggregation: "Optional[AggregationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="aggregation") ) - version: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="version") + ranking: "Optional[RankingConfig]" = dc_field( + default=None, metadata=dc_config(field_name="ranking") ) @dataclass -class ExportChannelsResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) - task_id: str = dc_field(metadata=dc_config(field_name="task_id")) - - -@dataclass -class ExportUserResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) - messages: "Optional[List[MessageResponse]]" = dc_field( - default=None, metadata=dc_config(field_name="messages") +class FeedsEventPreferences(DataClassJsonMixin): + comments: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="comments") ) - reactions: "Optional[List[ReactionResponse]]" = dc_field( - default=None, metadata=dc_config(field_name="reactions") + mentions: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="mentions") ) - user: "Optional[UserResponse]" = dc_field( - default=None, metadata=dc_config(field_name="user") + new_followers: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="new_followers") + ) + reactions: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="reactions") ) @dataclass -class ExportUsersRequest(DataClassJsonMixin): - user_ids: List[str] = dc_field(metadata=dc_config(field_name="user_ids")) - - -@dataclass -class ExportUsersResponse(DataClassJsonMixin): - duration: str = dc_field(metadata=dc_config(field_name="duration")) - task_id: str = dc_field(metadata=dc_config(field_name="task_id")) - - -@dataclass -class ExternalStorage(DataClassJsonMixin): - abs_account_name: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="abs_account_name") - ) - abs_client_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="abs_client_id") - ) - abs_client_secret: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="abs_client_secret") - ) - abs_tenant_id: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="abs_tenant_id") - ) - bucket: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="bucket") - ) - gcs_credentials: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="gcs_credentials") - ) - path: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="path")) - s3_api_key: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="s3_api_key") - ) - s3_custom_endpoint: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="s3_custom_endpoint") +class FeedsEventPreferencesInput(DataClassJsonMixin): + comments: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="comments") ) - s3_region: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="s3_region") - ) - s3_secret_key: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="s3_secret_key") + mentions: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="mentions") ) - storage_name: Optional[str] = dc_field( - default=None, metadata=dc_config(field_name="storage_name") + new_followers: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="new_followers") ) - storage_type: Optional[int] = dc_field( - default=None, metadata=dc_config(field_name="storage_type") + reactions: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="reactions") ) @dataclass -class ExternalStorageResponse(DataClassJsonMixin): - bucket: str = dc_field(metadata=dc_config(field_name="bucket")) - name: str = dc_field(metadata=dc_config(field_name="name")) - path: str = dc_field(metadata=dc_config(field_name="path")) - type: str = dc_field(metadata=dc_config(field_name="type")) +class FeedsModerationTemplateConfig(DataClassJsonMixin): + config_key: str = dc_field(metadata=dc_config(field_name="config_key")) + data_types: "Dict[str, str]" = dc_field(metadata=dc_config(field_name="data_types")) @dataclass -class FCM(DataClassJsonMixin): - data: Optional[Dict[str, object]] = dc_field( - default=None, metadata=dc_config(field_name="data") +class FeedsReactionResponse(DataClassJsonMixin): + activity_id: str = dc_field(metadata=dc_config(field_name="activity_id")) + 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"), + ) + ) + type: str = dc_field(metadata=dc_config(field_name="type")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + comment_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="comment_id") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") ) - - -@dataclass -class FeedsModerationTemplateConfig(DataClassJsonMixin): - config_key: str = dc_field(metadata=dc_config(field_name="config_key")) - data_types: "Dict[str, str]" = dc_field(metadata=dc_config(field_name="data_types")) @dataclass @@ -6287,8 +8541,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", @@ -6297,36 +8552,53 @@ 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") + ) + target_message: "Optional[Message]" = dc_field( + default=None, metadata=dc_config(field_name="target_message") ) - review_queue_item: "Optional[ReviewQueueItem]" = dc_field( - default=None, metadata=dc_config(field_name="review_queue_item") + 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") @@ -6444,6 +8716,177 @@ class FlagUserOptions(DataClassJsonMixin): reason: str = dc_field(metadata=dc_config(field_name="reason")) +@dataclass +class FollowBatchRequest(DataClassJsonMixin): + follows: "List[FollowRequest]" = dc_field(metadata=dc_config(field_name="follows")) + + +@dataclass +class FollowBatchResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + follows: "List[FollowResponse]" = dc_field(metadata=dc_config(field_name="follows")) + + +@dataclass +class FollowCreatedEvent(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"), + ) + ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) + type: str = dc_field( + default="feeds.follow.created", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + 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"), + ), + ) + + +@dataclass +class FollowDeletedEvent(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"), + ) + ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) + type: str = dc_field( + default="feeds.follow.deleted", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + 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"), + ), + ) + + +@dataclass +class FollowPair(DataClassJsonMixin): + source: str = dc_field(metadata=dc_config(field_name="source")) + target: str = dc_field(metadata=dc_config(field_name="target")) + + +@dataclass +class FollowRequest(DataClassJsonMixin): + source: str = dc_field(metadata=dc_config(field_name="source")) + target: str = dc_field(metadata=dc_config(field_name="target")) + create_notification_activity: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="create_notification_activity") + ) + push_preference: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="push_preference") + ) + skip_push: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="skip_push") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + + +@dataclass +class FollowResponse(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"), + ) + ) + follower_role: str = dc_field(metadata=dc_config(field_name="follower_role")) + push_preference: str = dc_field(metadata=dc_config(field_name="push_preference")) + status: str = dc_field(metadata=dc_config(field_name="status")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + source_feed: "FeedResponse" = dc_field(metadata=dc_config(field_name="source_feed")) + target_feed: "FeedResponse" = dc_field(metadata=dc_config(field_name="target_feed")) + request_accepted_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="request_accepted_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + request_rejected_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="request_rejected_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + + +@dataclass +class FollowUpdatedEvent(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"), + ) + ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) + type: str = dc_field( + default="feeds.follow.updated", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + 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"), + ), + ) + + @dataclass class FrameRecordSettings(DataClassJsonMixin): capture_interval_in_seconds: int = dc_field( @@ -6658,6 +9101,12 @@ class GetActiveCallsStatusResponse(DataClassJsonMixin): ) +@dataclass +class GetActivityResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + + @dataclass class GetApplicationResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) @@ -6751,6 +9200,7 @@ class GetChannelTypeResponse(DataClassJsonMixin): automod: str = dc_field(metadata=dc_config(field_name="automod")) automod_behavior: str = dc_field(metadata=dc_config(field_name="automod_behavior")) connect_events: bool = dc_field(metadata=dc_config(field_name="connect_events")) + count_messages: bool = dc_field(metadata=dc_config(field_name="count_messages")) created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -6852,6 +9302,32 @@ class GetCommandResponse(DataClassJsonMixin): ) +@dataclass +class GetCommentRepliesResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + comments: "List[ThreadedCommentResponse]" = dc_field( + metadata=dc_config(field_name="comments") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + +@dataclass +class GetCommentResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) + + +@dataclass +class GetCommentsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + comments: "List[ThreadedCommentResponse]" = dc_field( + metadata=dc_config(field_name="comments") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + @dataclass class GetConfigResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) @@ -6878,6 +9354,28 @@ class GetEdgesResponse(DataClassJsonMixin): edges: "List[EdgeResponse]" = dc_field(metadata=dc_config(field_name="edges")) +@dataclass +class GetFeedGroupResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feed_group: "FeedGroupResponse" = dc_field( + metadata=dc_config(field_name="feed_group") + ) + + +@dataclass +class GetFeedViewResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feed_view: "FeedViewResponse" = dc_field(metadata=dc_config(field_name="feed_view")) + + +@dataclass +class GetFollowSuggestionsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + suggestions: "List[FeedResponse]" = dc_field( + metadata=dc_config(field_name="suggestions") + ) + + @dataclass class GetImportResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) @@ -6988,14 +9486,165 @@ class GetOrCreateCallRequest(DataClassJsonMixin): @dataclass -class GetOrCreateCallResponse(DataClassJsonMixin): - created: bool = dc_field(metadata=dc_config(field_name="created")) +class GetOrCreateCallResponse(DataClassJsonMixin): + created: bool = dc_field(metadata=dc_config(field_name="created")) + duration: str = dc_field(metadata=dc_config(field_name="duration")) + members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) + own_capabilities: "List[OwnCapability]" = dc_field( + metadata=dc_config(field_name="own_capabilities") + ) + call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) + + +@dataclass +class GetOrCreateFeedGroupRequest(DataClassJsonMixin): + default_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="default_visibility") + ) + activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_processors") + ) + activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_selectors") + ) + aggregation: "Optional[AggregationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="aggregation") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + notification: "Optional[NotificationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="notification") + ) + push_notification: "Optional[PushNotificationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="push_notification") + ) + ranking: "Optional[RankingConfig]" = dc_field( + default=None, metadata=dc_config(field_name="ranking") + ) + + +@dataclass +class GetOrCreateFeedGroupResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + was_created: bool = dc_field(metadata=dc_config(field_name="was_created")) + feed_group: "FeedGroupResponse" = dc_field( + metadata=dc_config(field_name="feed_group") + ) + + +@dataclass +class GetOrCreateFeedRequest(DataClassJsonMixin): + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + view: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="view")) + watch: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="watch") + ) + activity_selector_options: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="activity_selector_options") + ) + data: "Optional[FeedInput]" = dc_field( + default=None, metadata=dc_config(field_name="data") + ) + external_ranking: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="external_ranking") + ) + filter: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="filter") + ) + followers_pagination: "Optional[PagerRequest]" = dc_field( + default=None, metadata=dc_config(field_name="followers_pagination") + ) + following_pagination: "Optional[PagerRequest]" = dc_field( + default=None, metadata=dc_config(field_name="following_pagination") + ) + interest_weights: "Optional[Dict[str, float]]" = dc_field( + default=None, metadata=dc_config(field_name="interest_weights") + ) + member_pagination: "Optional[PagerRequest]" = dc_field( + default=None, metadata=dc_config(field_name="member_pagination") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class GetOrCreateFeedResponse(DataClassJsonMixin): + created: bool = dc_field(metadata=dc_config(field_name="created")) + duration: str = dc_field(metadata=dc_config(field_name="duration")) + activities: "List[ActivityResponse]" = dc_field( + metadata=dc_config(field_name="activities") + ) + aggregated_activities: "List[AggregatedActivityResponse]" = dc_field( + metadata=dc_config(field_name="aggregated_activities") + ) + followers: "List[FollowResponse]" = dc_field( + metadata=dc_config(field_name="followers") + ) + following: "List[FollowResponse]" = dc_field( + metadata=dc_config(field_name="following") + ) + members: "List[FeedMemberResponse]" = dc_field( + metadata=dc_config(field_name="members") + ) + own_capabilities: "List[FeedOwnCapability]" = dc_field( + metadata=dc_config(field_name="own_capabilities") + ) + pinned_activities: "List[ActivityPinResponse]" = dc_field( + metadata=dc_config(field_name="pinned_activities") + ) + feed: "FeedResponse" = dc_field(metadata=dc_config(field_name="feed")) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + own_follows: "Optional[List[FollowResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="own_follows") + ) + followers_pagination: "Optional[PagerResponse]" = dc_field( + default=None, metadata=dc_config(field_name="followers_pagination") + ) + following_pagination: "Optional[PagerResponse]" = dc_field( + default=None, metadata=dc_config(field_name="following_pagination") + ) + member_pagination: "Optional[PagerResponse]" = dc_field( + default=None, metadata=dc_config(field_name="member_pagination") + ) + notification_status: "Optional[NotificationStatusResponse]" = dc_field( + default=None, metadata=dc_config(field_name="notification_status") + ) + own_membership: "Optional[FeedMemberResponse]" = dc_field( + default=None, metadata=dc_config(field_name="own_membership") + ) + + +@dataclass +class GetOrCreateFeedViewRequest(DataClassJsonMixin): + activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_processors") + ) + activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_selectors") + ) + aggregation: "Optional[AggregationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="aggregation") + ) + ranking: "Optional[RankingConfig]" = dc_field( + default=None, metadata=dc_config(field_name="ranking") + ) + + +@dataclass +class GetOrCreateFeedViewResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) - members: "List[MemberResponse]" = dc_field(metadata=dc_config(field_name="members")) - own_capabilities: "List[OwnCapability]" = dc_field( - metadata=dc_config(field_name="own_capabilities") - ) - call: "CallResponse" = dc_field(metadata=dc_config(field_name="call")) + was_created: bool = dc_field(metadata=dc_config(field_name="was_created")) + feed_view: "FeedViewResponse" = dc_field(metadata=dc_config(field_name="feed_view")) @dataclass @@ -7467,6 +10116,67 @@ class JoinCallAPIMetrics(DataClassJsonMixin): ) +@dataclass +class KickUserRequest(DataClassJsonMixin): + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + block: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="block") + ) + kicked_by_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="kicked_by_id") + ) + kicked_by: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="kicked_by") + ) + + +@dataclass +class KickUserResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + + +@dataclass +class KickedUserEvent(DataClassJsonMixin): + 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"), + ) + ) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + type: str = dc_field( + default="call.kicked_user", metadata=dc_config(field_name="type") + ) + kicked_by_user: "Optional[UserResponse]" = dc_field( + default=None, metadata=dc_config(field_name="kicked_by_user") + ) + + +@dataclass +class LLMConfig(DataClassJsonMixin): + enabled: bool = dc_field(metadata=dc_config(field_name="enabled")) + rules: "List[LLMRule]" = dc_field(metadata=dc_config(field_name="rules")) + _async: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="async") + ) + severity_descriptions: "Optional[Dict[str, str]]" = dc_field( + default=None, metadata=dc_config(field_name="severity_descriptions") + ) + + +@dataclass +class LLMRule(DataClassJsonMixin): + action: str = dc_field(metadata=dc_config(field_name="action")) + description: str = dc_field(metadata=dc_config(field_name="description")) + label: str = dc_field(metadata=dc_config(field_name="label")) + severity_rules: "List[BodyguardSeverityRule]" = dc_field( + metadata=dc_config(field_name="severity_rules") + ) + + @dataclass class Label(DataClassJsonMixin): name: str = dc_field(metadata=dc_config(field_name="name")) @@ -7630,6 +10340,22 @@ class ListExternalStorageResponse(DataClassJsonMixin): ) +@dataclass +class ListFeedGroupsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + groups: "Dict[str, FeedGroupResponse]" = dc_field( + metadata=dc_config(field_name="groups") + ) + + +@dataclass +class ListFeedViewsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + views: "Dict[str, FeedViewResponse]" = dc_field( + metadata=dc_config(field_name="views") + ) + + @dataclass class ListImportsResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) @@ -7676,6 +10402,31 @@ class ListTranscriptionsResponse(DataClassJsonMixin): ) +@dataclass +class MarkActivityRequest(DataClassJsonMixin): + mark_all_read: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="mark_all_read") + ) + mark_all_seen: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="mark_all_seen") + ) + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + mark_read: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="mark_read") + ) + mark_seen: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="mark_seen") + ) + mark_watched: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="mark_watched") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + @dataclass class MarkChannelsReadRequest(DataClassJsonMixin): user_id: Optional[str] = dc_field( @@ -7865,6 +10616,36 @@ class MembersResponse(DataClassJsonMixin): members: "List[ChannelMember]" = dc_field(metadata=dc_config(field_name="members")) +@dataclass +class MembershipLevelResponse(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"), + ) + ) + id: str = dc_field(metadata=dc_config(field_name="id")) + name: str = dc_field(metadata=dc_config(field_name="name")) + priority: int = dc_field(metadata=dc_config(field_name="priority")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + tags: List[str] = dc_field(metadata=dc_config(field_name="tags")) + description: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="description") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + + @dataclass class Message(DataClassJsonMixin): cid: str = dc_field(metadata=dc_config(field_name="cid")) @@ -7935,6 +10716,9 @@ class Message(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) + deleted_for_me: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="deleted_for_me") + ) message_text_updated_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -8474,6 +11258,9 @@ class MessageResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) + deleted_for_me: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="deleted_for_me") + ) message_text_updated_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -8713,6 +11500,9 @@ class MessageWithChannelResponse(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) + deleted_for_me: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="deleted_for_me") + ) message_text_updated_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -8867,11 +11657,25 @@ class ModerationDashboardPreferences(DataClassJsonMixin): @dataclass class ModerationFlagResponse(DataClassJsonMixin): - created_at: str = dc_field(metadata=dc_config(field_name="created_at")) + 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"), + ) + ) entity_id: str = dc_field(metadata=dc_config(field_name="entity_id")) entity_type: str = dc_field(metadata=dc_config(field_name="entity_type")) type: str = dc_field(metadata=dc_config(field_name="type")) - updated_at: str = dc_field(metadata=dc_config(field_name="updated_at")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) user_id: str = dc_field(metadata=dc_config(field_name="user_id")) result: "List[Dict[str, object]]" = dc_field( metadata=dc_config(field_name="result") @@ -9105,6 +11909,54 @@ class NoiseCancellationSettings(DataClassJsonMixin): mode: str = dc_field(metadata=dc_config(field_name="mode")) +@dataclass +class NotificationConfig(DataClassJsonMixin): + track_read: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="track_read") + ) + track_seen: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="track_seen") + ) + + +@dataclass +class NotificationFeedUpdatedEvent(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"), + ) + ) + fid: str = dc_field(metadata=dc_config(field_name="fid")) + custom: Dict[str, object] = dc_field(metadata=dc_config(field_name="custom")) + type: str = dc_field( + default="feeds.notification_feed.updated", metadata=dc_config(field_name="type") + ) + feed_visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feed_visibility") + ) + 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"), + ), + ) + aggregated_activities: "Optional[List[AggregatedActivityResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="aggregated_activities") + ) + notification_status: "Optional[NotificationStatusResponse]" = dc_field( + default=None, metadata=dc_config(field_name="notification_status") + ) + user: "Optional[UserResponseCommonFields]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + @dataclass class NotificationMarkUnreadEvent(DataClassJsonMixin): channel_id: str = dc_field(metadata=dc_config(field_name="channel_id")) @@ -9177,6 +12029,36 @@ class NotificationSettings(DataClassJsonMixin): ) +@dataclass +class NotificationStatusResponse(DataClassJsonMixin): + unread: int = dc_field(metadata=dc_config(field_name="unread")) + unseen: int = dc_field(metadata=dc_config(field_name="unseen")) + last_read_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="last_read_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + last_seen_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="last_seen_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + read_activities: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="read_activities") + ) + seen_activities: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="seen_activities") + ) + + @dataclass class NullTime(DataClassJsonMixin): pass @@ -9206,6 +12088,7 @@ class OwnCapability: JOIN_BACKSTAGE: Final[OwnCapabilityType] = "join-backstage" JOIN_CALL: Final[OwnCapabilityType] = "join-call" JOIN_ENDED_CALL: Final[OwnCapabilityType] = "join-ended-call" + KICK_USER: Final[OwnCapabilityType] = "kick-user" MUTE_USERS: Final[OwnCapabilityType] = "mute-users" PIN_FOR_EVERYONE: Final[OwnCapabilityType] = "pin-for-everyone" READ_CALL: Final[OwnCapabilityType] = "read-call" @@ -9429,6 +12312,15 @@ class OwnUserResponse(DataClassJsonMixin): ) +@dataclass +class PagerRequest(DataClassJsonMixin): + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + @dataclass class PagerResponse(DataClassJsonMixin): next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) @@ -9592,6 +12484,32 @@ class PermissionRequestEvent(DataClassJsonMixin): ) +@dataclass +class PinActivityRequest(DataClassJsonMixin): + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class PinActivityResponse(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"), + ) + ) + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feed: str = dc_field(metadata=dc_config(field_name="feed")) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + + @dataclass class PinRequest(DataClassJsonMixin): session_id: str = dc_field(metadata=dc_config(field_name="session_id")) @@ -9980,6 +12898,16 @@ class PushConfig(DataClassJsonMixin): ) +@dataclass +class PushNotificationConfig(DataClassJsonMixin): + enabled: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="enabled") + ) + activity_types: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="activity_types") + ) + + @dataclass class PushNotificationFields(DataClassJsonMixin): offline_only: bool = dc_field(metadata=dc_config(field_name="offline_only")) @@ -10031,12 +12959,18 @@ class PushPreferenceInput(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) + feeds_level: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feeds_level") + ) remove_disable: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="remove_disable") ) user_id: Optional[str] = dc_field( default=None, metadata=dc_config(field_name="user_id") ) + feeds_events: "Optional[FeedsEventPreferencesInput]" = dc_field( + default=None, metadata=dc_config(field_name="feeds_events") + ) @dataclass @@ -10056,6 +12990,12 @@ class PushPreferences(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) + feeds_level: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="feeds_level") + ) + feeds_events: "Optional[FeedsEventPreferences]" = dc_field( + default=None, metadata=dc_config(field_name="feeds_events") + ) @dataclass @@ -10314,6 +13254,56 @@ class QualityScoreReportResponse(DataClassJsonMixin): ) +@dataclass +class QueryActivitiesRequest(DataClassJsonMixin): + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "Optional[List[SortParamRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + filter: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="filter") + ) + + +@dataclass +class QueryActivitiesResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + activities: "List[ActivityResponse]" = dc_field( + metadata=dc_config(field_name="activities") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + +@dataclass +class QueryActivityReactionsRequest(DataClassJsonMixin): + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "Optional[List[SortParamRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + filter: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="filter") + ) + + +@dataclass +class QueryActivityReactionsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + reactions: "List[FeedsReactionResponse]" = dc_field( + metadata=dc_config(field_name="reactions") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + @dataclass class QueryAggregateCallStatsRequest(DataClassJsonMixin): _from: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="from")) @@ -10382,6 +13372,56 @@ class QueryBannedUsersResponse(DataClassJsonMixin): bans: "List[BanResponse]" = dc_field(metadata=dc_config(field_name="bans")) +@dataclass +class QueryBookmarkFoldersRequest(DataClassJsonMixin): + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "Optional[List[SortParamRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + filter: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="filter") + ) + + +@dataclass +class QueryBookmarkFoldersResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + bookmark_folders: "List[BookmarkFolderResponse]" = dc_field( + metadata=dc_config(field_name="bookmark_folders") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + +@dataclass +class QueryBookmarksRequest(DataClassJsonMixin): + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "Optional[List[SortParamRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + filter: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="filter") + ) + + +@dataclass +class QueryBookmarksResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + bookmarks: "List[BookmarkResponse]" = dc_field( + metadata=dc_config(field_name="bookmarks") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + @dataclass class QueryCallMembersRequest(DataClassJsonMixin): id: str = dc_field(metadata=dc_config(field_name="id")) @@ -10547,6 +13587,52 @@ class QueryChannelsResponse(DataClassJsonMixin): ) +@dataclass +class QueryCommentReactionsRequest(DataClassJsonMixin): + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "Optional[List[SortParamRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + filter: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="filter") + ) + + +@dataclass +class QueryCommentReactionsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + reactions: "List[FeedsReactionResponse]" = dc_field( + metadata=dc_config(field_name="reactions") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + +@dataclass +class QueryCommentsRequest(DataClassJsonMixin): + filter: Dict[str, object] = dc_field(metadata=dc_config(field_name="filter")) + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="sort")) + + +@dataclass +class QueryCommentsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + comments: "List[CommentResponse]" = dc_field( + metadata=dc_config(field_name="comments") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + @dataclass class QueryDraftsRequest(DataClassJsonMixin): limit: Optional[int] = dc_field( @@ -10576,6 +13662,31 @@ class QueryDraftsResponse(DataClassJsonMixin): prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) +@dataclass +class QueryFeedMembersRequest(DataClassJsonMixin): + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "Optional[List[SortParamRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + filter: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="filter") + ) + + +@dataclass +class QueryFeedMembersResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + members: "List[FeedMemberResponse]" = dc_field( + metadata=dc_config(field_name="members") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + @dataclass class QueryFeedModerationTemplate(DataClassJsonMixin): created_at: datetime = dc_field( @@ -10608,6 +13719,55 @@ class QueryFeedModerationTemplatesResponse(DataClassJsonMixin): ) +@dataclass +class QueryFeedsRequest(DataClassJsonMixin): + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + watch: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="watch") + ) + sort: "Optional[List[SortParamRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + filter: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="filter") + ) + + +@dataclass +class QueryFeedsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feeds: "List[FeedResponse]" = dc_field(metadata=dc_config(field_name="feeds")) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + +@dataclass +class QueryFollowsRequest(DataClassJsonMixin): + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "Optional[List[SortParamRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + filter: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="filter") + ) + + +@dataclass +class QueryFollowsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + follows: "List[FollowResponse]" = dc_field(metadata=dc_config(field_name="follows")) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + @dataclass class QueryMembersPayload(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) @@ -10635,6 +13795,31 @@ class QueryMembersPayload(DataClassJsonMixin): ) +@dataclass +class QueryMembershipLevelsRequest(DataClassJsonMixin): + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + sort: "Optional[List[SortParamRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="sort") + ) + filter: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="filter") + ) + + +@dataclass +class QueryMembershipLevelsResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + membership_levels: "List[MembershipLevelResponse]" = dc_field( + metadata=dc_config(field_name="membership_levels") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + + @dataclass class QueryMessageFlagsPayload(DataClassJsonMixin): limit: Optional[int] = dc_field( @@ -11142,6 +14327,20 @@ class RTMPSettingsResponse(DataClassJsonMixin): layout: "LayoutSettingsResponse" = dc_field(metadata=dc_config(field_name="layout")) +@dataclass +class RankingConfig(DataClassJsonMixin): + score: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="score") + ) + type: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="type")) + defaults: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="defaults") + ) + functions: "Optional[Dict[str, DecayFunctionConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="functions") + ) + + @dataclass class Reaction(DataClassJsonMixin): created_at: datetime = dc_field( @@ -11465,6 +14664,34 @@ class RecordingEgressConfig(DataClassJsonMixin): ) +@dataclass +class RejectFeedMemberInviteRequest(DataClassJsonMixin): + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class RejectFeedMemberInviteResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + member: "FeedMemberResponse" = dc_field(metadata=dc_config(field_name="member")) + + +@dataclass +class RejectFollowRequest(DataClassJsonMixin): + source: str = dc_field(metadata=dc_config(field_name="source")) + target: str = dc_field(metadata=dc_config(field_name="target")) + + +@dataclass +class RejectFollowResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) + + @dataclass class ReminderCreatedEvent(DataClassJsonMixin): cid: str = dc_field(metadata=dc_config(field_name="cid")) @@ -11642,6 +14869,16 @@ class ReminderUpdatedEvent(DataClassJsonMixin): ) +@dataclass +class RepliesMeta(DataClassJsonMixin): + depth_truncated: bool = dc_field(metadata=dc_config(field_name="depth_truncated")) + has_more: bool = dc_field(metadata=dc_config(field_name="has_more")) + remaining: int = dc_field(metadata=dc_config(field_name="remaining")) + next_cursor: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="next_cursor") + ) + + @dataclass class ReportByHistogramBucket(DataClassJsonMixin): category: str = dc_field(metadata=dc_config(field_name="category")) @@ -12289,6 +15526,9 @@ class SearchResultMessage(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ), ) + deleted_for_me: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="deleted_for_me") + ) message_text_updated_at: Optional[datetime] = dc_field( default=None, metadata=dc_config( @@ -12741,6 +15981,12 @@ class ShowChannelResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) +@dataclass +class SingleFollowResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) + + @dataclass class SortParam(DataClassJsonMixin): direction: Optional[int] = dc_field( @@ -12981,6 +16227,16 @@ class StopTranscriptionResponse(DataClassJsonMixin): duration: str = dc_field(metadata=dc_config(field_name="duration")) +@dataclass +class StoriesConfig(DataClassJsonMixin): + expiration_behaviour: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="expiration_behaviour") + ) + skip_watched: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="skip_watched") + ) + + @dataclass class SubmitActionRequest(DataClassJsonMixin): action_type: str = dc_field(metadata=dc_config(field_name="action_type")) @@ -13323,20 +16579,96 @@ class ThreadUpdatedEvent(DataClassJsonMixin): cid: str = dc_field(metadata=dc_config(field_name="cid")) created_at: datetime = dc_field( metadata=dc_config( - field_name="created_at", + field_name="created_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + type: str = dc_field( + default="thread.updated", metadata=dc_config(field_name="type") + ) + thread: "Optional[ThreadResponse]" = dc_field( + default=None, metadata=dc_config(field_name="thread") + ) + user: "Optional[User]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class ThreadedCommentResponse(DataClassJsonMixin): + confidence_score: float = dc_field( + metadata=dc_config(field_name="confidence_score") + ) + 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"), + ) + ) + downvote_count: int = dc_field(metadata=dc_config(field_name="downvote_count")) + id: str = dc_field(metadata=dc_config(field_name="id")) + object_id: str = dc_field(metadata=dc_config(field_name="object_id")) + object_type: str = dc_field(metadata=dc_config(field_name="object_type")) + reaction_count: int = dc_field(metadata=dc_config(field_name="reaction_count")) + reply_count: int = dc_field(metadata=dc_config(field_name="reply_count")) + score: int = dc_field(metadata=dc_config(field_name="score")) + status: str = dc_field(metadata=dc_config(field_name="status")) + updated_at: datetime = dc_field( + metadata=dc_config( + field_name="updated_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ) + ) + upvote_count: int = dc_field(metadata=dc_config(field_name="upvote_count")) + mentioned_users: "List[UserResponse]" = dc_field( + metadata=dc_config(field_name="mentioned_users") + ) + own_reactions: "List[FeedsReactionResponse]" = dc_field( + metadata=dc_config(field_name="own_reactions") + ) + user: "UserResponse" = dc_field(metadata=dc_config(field_name="user")) + controversy_score: Optional[float] = dc_field( + default=None, metadata=dc_config(field_name="controversy_score") + ) + deleted_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="deleted_at", encoder=encode_datetime, decoder=datetime_from_unix_ns, mm_field=fields.DateTime(format="iso"), - ) + ), ) - type: str = dc_field( - default="thread.updated", metadata=dc_config(field_name="type") + parent_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="parent_id") ) - thread: "Optional[ThreadResponse]" = dc_field( - default=None, metadata=dc_config(field_name="thread") + text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + attachments: "Optional[List[Attachment]]" = dc_field( + default=None, metadata=dc_config(field_name="attachments") ) - user: "Optional[User]" = dc_field( - default=None, metadata=dc_config(field_name="user") + latest_reactions: "Optional[List[FeedsReactionResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="latest_reactions") + ) + replies: "Optional[List[ThreadedCommentResponse]]" = dc_field( + default=None, metadata=dc_config(field_name="replies") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + meta: "Optional[RepliesMeta]" = dc_field( + default=None, metadata=dc_config(field_name="meta") + ) + moderation: "Optional[ModerationV2Response]" = dc_field( + default=None, metadata=dc_config(field_name="moderation") + ) + reaction_groups: "Optional[Dict[str, Optional[ReactionGroupResponse]]]" = dc_field( + default=None, metadata=dc_config(field_name="reaction_groups") ) @@ -13542,6 +16874,23 @@ class UnblockedUserEvent(DataClassJsonMixin): ) +@dataclass +class UnfollowBatchRequest(DataClassJsonMixin): + follows: "List[FollowPair]" = dc_field(metadata=dc_config(field_name="follows")) + + +@dataclass +class UnfollowBatchResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + follows: "List[FollowResponse]" = dc_field(metadata=dc_config(field_name="follows")) + + +@dataclass +class UnfollowResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) + + @dataclass class UnmuteChannelRequest(DataClassJsonMixin): expiration: Optional[int] = dc_field( @@ -13577,6 +16926,14 @@ class UnmuteResponse(DataClassJsonMixin): ) +@dataclass +class UnpinActivityResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feed: str = dc_field(metadata=dc_config(field_name="feed")) + user_id: str = dc_field(metadata=dc_config(field_name="user_id")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + + @dataclass class UnpinRequest(DataClassJsonMixin): session_id: str = dc_field(metadata=dc_config(field_name="session_id")) @@ -13663,6 +17020,75 @@ class UnreadCountsThread(DataClassJsonMixin): unread_count: int = dc_field(metadata=dc_config(field_name="unread_count")) +@dataclass +class UpdateActivityPartialRequest(DataClassJsonMixin): + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + unset: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="unset") + ) + set: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="set") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class UpdateActivityPartialResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + + +@dataclass +class UpdateActivityRequest(DataClassJsonMixin): + expires_at: Optional[datetime] = dc_field( + default=None, + metadata=dc_config( + field_name="expires_at", + encoder=encode_datetime, + decoder=datetime_from_unix_ns, + mm_field=fields.DateTime(format="iso"), + ), + ) + poll_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="poll_id") + ) + text: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="text")) + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + visibility: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="visibility") + ) + attachments: "Optional[List[Attachment]]" = dc_field( + default=None, metadata=dc_config(field_name="attachments") + ) + filter_tags: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="filter_tags") + ) + interest_tags: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="interest_tags") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + location: "Optional[ActivityLocation]" = dc_field( + default=None, metadata=dc_config(field_name="location") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class UpdateActivityResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + activity: "ActivityResponse" = dc_field(metadata=dc_config(field_name="activity")) + + @dataclass class UpdateAppRequest(DataClassJsonMixin): async_url_enrich_enabled: Optional[bool] = dc_field( @@ -13704,6 +17130,9 @@ class UpdateAppRequest(DataClassJsonMixin): image_moderation_enabled: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="image_moderation_enabled") ) + max_aggregated_activities_length: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="max_aggregated_activities_length") + ) migrate_permissions_to_v2: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="migrate_permissions_to_v2") ) @@ -13830,6 +17259,56 @@ class UpdateBlockListResponse(DataClassJsonMixin): ) +@dataclass +class UpdateBookmarkFolderRequest(DataClassJsonMixin): + name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class UpdateBookmarkFolderResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + bookmark_folder: "BookmarkFolderResponse" = dc_field( + metadata=dc_config(field_name="bookmark_folder") + ) + + +@dataclass +class UpdateBookmarkRequest(DataClassJsonMixin): + folder_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="folder_id") + ) + new_folder_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="new_folder_id") + ) + user_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="user_id") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + new_folder: "Optional[AddFolderRequest]" = dc_field( + default=None, metadata=dc_config(field_name="new_folder") + ) + user: "Optional[UserRequest]" = dc_field( + default=None, metadata=dc_config(field_name="user") + ) + + +@dataclass +class UpdateBookmarkResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + bookmark: "BookmarkResponse" = dc_field(metadata=dc_config(field_name="bookmark")) + + @dataclass class UpdateCallMembersRequest(DataClassJsonMixin): remove_members: Optional[List[str]] = dc_field( @@ -14027,6 +17506,9 @@ class UpdateChannelTypeRequest(DataClassJsonMixin): connect_events: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="connect_events") ) + count_messages: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="count_messages") + ) custom_events: Optional[bool] = dc_field( default=None, metadata=dc_config(field_name="custom_events") ) @@ -14110,6 +17592,7 @@ class UpdateChannelTypeResponse(DataClassJsonMixin): automod: str = dc_field(metadata=dc_config(field_name="automod")) automod_behavior: str = dc_field(metadata=dc_config(field_name="automod_behavior")) connect_events: bool = dc_field(metadata=dc_config(field_name="connect_events")) + count_messages: bool = dc_field(metadata=dc_config(field_name="count_messages")) created_at: datetime = dc_field( metadata=dc_config( field_name="created_at", @@ -14199,6 +17682,25 @@ class UpdateCommandResponse(DataClassJsonMixin): ) +@dataclass +class UpdateCommentRequest(DataClassJsonMixin): + comment: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="comment") + ) + skip_push: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="skip_push") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + + +@dataclass +class UpdateCommentResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + comment: "CommentResponse" = dc_field(metadata=dc_config(field_name="comment")) + + @dataclass class UpdateExternalStorageRequest(DataClassJsonMixin): bucket: str = dc_field(metadata=dc_config(field_name="bucket")) @@ -14224,6 +17726,127 @@ class UpdateExternalStorageResponse(DataClassJsonMixin): type: str = dc_field(metadata=dc_config(field_name="type")) +@dataclass +class UpdateFeedGroupRequest(DataClassJsonMixin): + activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_processors") + ) + activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_selectors") + ) + aggregation: "Optional[AggregationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="aggregation") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + notification: "Optional[NotificationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="notification") + ) + push_notification: "Optional[PushNotificationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="push_notification") + ) + ranking: "Optional[RankingConfig]" = dc_field( + default=None, metadata=dc_config(field_name="ranking") + ) + + +@dataclass +class UpdateFeedGroupResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feed_group: "FeedGroupResponse" = dc_field( + metadata=dc_config(field_name="feed_group") + ) + + +@dataclass +class UpdateFeedMembersRequest(DataClassJsonMixin): + operation: str = dc_field(metadata=dc_config(field_name="operation")) + limit: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="limit") + ) + next: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="next")) + prev: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="prev")) + members: "Optional[List[FeedMemberRequest]]" = dc_field( + default=None, metadata=dc_config(field_name="members") + ) + + +@dataclass +class UpdateFeedMembersResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + added: "List[FeedMemberResponse]" = dc_field(metadata=dc_config(field_name="added")) + removed_ids: List[str] = dc_field(metadata=dc_config(field_name="removed_ids")) + updated: "List[FeedMemberResponse]" = dc_field( + metadata=dc_config(field_name="updated") + ) + + +@dataclass +class UpdateFeedRequest(DataClassJsonMixin): + created_by_id: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="created_by_id") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + + +@dataclass +class UpdateFeedResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feed: "FeedResponse" = dc_field(metadata=dc_config(field_name="feed")) + + +@dataclass +class UpdateFeedViewRequest(DataClassJsonMixin): + activity_processors: "Optional[List[ActivityProcessorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_processors") + ) + activity_selectors: "Optional[List[ActivitySelectorConfig]]" = dc_field( + default=None, metadata=dc_config(field_name="activity_selectors") + ) + aggregation: "Optional[AggregationConfig]" = dc_field( + default=None, metadata=dc_config(field_name="aggregation") + ) + ranking: "Optional[RankingConfig]" = dc_field( + default=None, metadata=dc_config(field_name="ranking") + ) + + +@dataclass +class UpdateFeedViewResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + feed_view: "FeedViewResponse" = dc_field(metadata=dc_config(field_name="feed_view")) + + +@dataclass +class UpdateFollowRequest(DataClassJsonMixin): + source: str = dc_field(metadata=dc_config(field_name="source")) + target: str = dc_field(metadata=dc_config(field_name="target")) + create_notification_activity: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="create_notification_activity") + ) + follower_role: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="follower_role") + ) + push_preference: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="push_preference") + ) + skip_push: Optional[bool] = dc_field( + default=None, metadata=dc_config(field_name="skip_push") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + + +@dataclass +class UpdateFollowResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + follow: "FollowResponse" = dc_field(metadata=dc_config(field_name="follow")) + + @dataclass class UpdateLiveLocationRequest(DataClassJsonMixin): message_id: str = dc_field(metadata=dc_config(field_name="message_id")) @@ -14262,6 +17885,31 @@ class UpdateMemberPartialResponse(DataClassJsonMixin): ) +@dataclass +class UpdateMembershipLevelRequest(DataClassJsonMixin): + description: Optional[str] = dc_field( + default=None, metadata=dc_config(field_name="description") + ) + name: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="name")) + priority: Optional[int] = dc_field( + default=None, metadata=dc_config(field_name="priority") + ) + tags: Optional[List[str]] = dc_field( + default=None, metadata=dc_config(field_name="tags") + ) + custom: Optional[Dict[str, object]] = dc_field( + default=None, metadata=dc_config(field_name="custom") + ) + + +@dataclass +class UpdateMembershipLevelResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + membership_level: "MembershipLevelResponse" = dc_field( + metadata=dc_config(field_name="membership_level") + ) + + @dataclass class UpdateMessagePartialRequest(DataClassJsonMixin): skip_enrich_url: Optional[bool] = dc_field( @@ -14501,6 +18149,21 @@ class UpdatedCallPermissionsEvent(DataClassJsonMixin): ) +@dataclass +class UpsertActivitiesRequest(DataClassJsonMixin): + activities: "List[ActivityRequest]" = dc_field( + metadata=dc_config(field_name="activities") + ) + + +@dataclass +class UpsertActivitiesResponse(DataClassJsonMixin): + duration: str = dc_field(metadata=dc_config(field_name="duration")) + activities: "List[ActivityResponse]" = dc_field( + metadata=dc_config(field_name="activities") + ) + + @dataclass class UpsertConfigRequest(DataClassJsonMixin): key: str = dc_field(metadata=dc_config(field_name="key")) @@ -14545,6 +18208,9 @@ class UpsertConfigRequest(DataClassJsonMixin): google_vision_config: "Optional[GoogleVisionConfig]" = dc_field( default=None, metadata=dc_config(field_name="google_vision_config") ) + llm_config: "Optional[LLMConfig]" = dc_field( + default=None, metadata=dc_config(field_name="llm_config") + ) rule_builder_config: "Optional[RuleBuilderConfig]" = dc_field( default=None, metadata=dc_config(field_name="rule_builder_config") ) @@ -14910,7 +18576,6 @@ class UserMessagesDeletedEvent(DataClassJsonMixin): mm_field=fields.DateTime(format="iso"), ) ) - 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( diff --git a/getstream/moderation/__init__.py b/getstream/moderation/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/getstream/moderation/rest_client.py b/getstream/moderation/rest_client.py index c51448f7..f1f56dc9 100644 --- a/getstream/moderation/rest_client.py +++ b/getstream/moderation/rest_client.py @@ -104,6 +104,7 @@ def upsert_config( block_list_config: Optional[BlockListConfig] = None, bodyguard_config: Optional[AITextConfig] = None, google_vision_config: Optional[GoogleVisionConfig] = None, + llm_config: Optional[LLMConfig] = None, rule_builder_config: Optional[RuleBuilderConfig] = None, user: Optional[UserRequest] = None, velocity_filter_config: Optional[VelocityFilterConfig] = None, @@ -124,6 +125,7 @@ def upsert_config( block_list_config=block_list_config, bodyguard_config=bodyguard_config, google_vision_config=google_vision_config, + llm_config=llm_config, rule_builder_config=rule_builder_config, user=user, velocity_filter_config=velocity_filter_config, diff --git a/getstream/stream.py b/getstream/stream.py index 713733bf..e09f631c 100644 --- a/getstream/stream.py +++ b/getstream/stream.py @@ -5,6 +5,7 @@ from getstream.chat.client import ChatClient from getstream.common.client import CommonClient +from getstream.feeds.rest_client import FeedsRestClient from getstream.models import UserRequest from getstream.utils import validate_and_clean_url from getstream.video.client import VideoClient @@ -85,6 +86,19 @@ def moderation(self): stream=self, ) + @cached_property + def feeds(self): + """ + Feeds stream client. + + """ + return FeedsRestClient( + api_key=self.api_key, + base_url=self.base_url, + token=self.token, + timeout=self.timeout, + ) + def upsert_users(self, *users: UserRequest): """ Creates or updates users. This method performs an "upsert" operation, diff --git a/getstream/video/call.py b/getstream/video/call.py index 33bc2fb5..c866d537 100644 --- a/getstream/video/call.py +++ b/getstream/video/call.py @@ -162,6 +162,24 @@ def go_live( self._sync_from_response(response.data) return response + def kick_user( + self, + user_id: str, + block: Optional[bool] = None, + kicked_by_id: Optional[str] = None, + kicked_by: Optional[UserRequest] = None, + ) -> StreamResponse[KickUserResponse]: + response = self.client.kick_user( + type=self.call_type, + id=self.id, + user_id=user_id, + block=block, + kicked_by_id=kicked_by_id, + kicked_by=kicked_by, + ) + self._sync_from_response(response.data) + return response + def end(self) -> StreamResponse[EndCallResponse]: response = self.client.end_call(type=self.call_type, id=self.id) self._sync_from_response(response.data) diff --git a/getstream/video/rest_client.py b/getstream/video/rest_client.py index 775743e4..6f4a1497 100644 --- a/getstream/video/rest_client.py +++ b/getstream/video/rest_client.py @@ -284,6 +284,30 @@ def go_live( json=json, ) + def kick_user( + self, + type: str, + id: str, + user_id: str, + block: Optional[bool] = None, + kicked_by_id: Optional[str] = None, + kicked_by: Optional[UserRequest] = None, + ) -> StreamResponse[KickUserResponse]: + path_params = { + "type": type, + "id": id, + } + json = build_body_dict( + user_id=user_id, block=block, kicked_by_id=kicked_by_id, kicked_by=kicked_by + ) + + return self.post( + "/api/v2/video/call/{type}/{id}/kick", + KickUserResponse, + path_params=path_params, + json=json, + ) + def end_call(self, type: str, id: str) -> StreamResponse[EndCallResponse]: path_params = { "type": type, diff --git a/tests/conftest.py b/tests/conftest.py index 685c8ea6..8c98b91d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,9 +1,9 @@ import pytest import os from dotenv import load_dotenv -from tests.fixtures import client, call, get_user, shared_call +from tests.fixtures import client, call, get_user, shared_call, test_feed, get_feed -__all__ = ["client", "call", "get_user", "shared_call"] +__all__ = ["client", "call", "get_user", "shared_call", "test_feed", "get_feed"] @pytest.fixture(scope="session", autouse=True) diff --git a/tests/fixtures.py b/tests/fixtures.py index c9c25013..ddcdb332 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -6,6 +6,7 @@ from getstream import Stream from getstream.models import UserRequest, FullUserResponse +from getstream.feeds.feeds import Feed def _client(): @@ -52,3 +53,24 @@ def inner( ).data.users[id] return inner + + +@pytest.fixture +def test_feed(client: Stream): + """Create a test feed for integration testing""" + user_id = f"test-user-{uuid.uuid4()}" + return client.feeds.feed("user", user_id) + + +@pytest.fixture +def get_feed(client: Stream): + """Factory fixture for creating feeds""" + + def inner( + feed_type: str = "user", feed_id: str = None, custom_data: Dict = None + ) -> Feed: + if feed_id is None: + feed_id = f"test-{feed_type}-{uuid.uuid4()}" + return client.feeds.feed(feed_type, feed_id, custom_data) + + return inner diff --git a/tests/test_feed_integration.py b/tests/test_feed_integration.py new file mode 100644 index 00000000..9231a68b --- /dev/null +++ b/tests/test_feed_integration.py @@ -0,0 +1,1608 @@ +""" +Systematic Integration tests for Feed operations +These tests follow a logical flow: setup → create → operate → cleanup + +Test order: +1. Environment Setup (user, feed creation) +2. Activity Operations (create, read, update, delete) +3. Reaction Operations (add, query, delete) +4. Comment Operations (add, read, update, delete) +5. Bookmark Operations (add, query, update, delete) +6. Follow Operations (follow, query, unfollow) +7. Batch Operations +8. Advanced Operations (polls, pins, etc.) +9. Cleanup +""" + +import os +import uuid +import pytest +from datetime import datetime, timedelta +from typing import List + +from getstream import Stream +from getstream.models import ( + UserRequest, + Attachment, + AddFolderRequest, + VoteData, + SortParamRequest, + ActivityRequest, + RankingConfig, + ActivityProcessorConfig, + AggregationConfig +) +from getstream.stream_response import StreamResponse + + +class TestFeedIntegration: + """ + Systematic Integration tests for Feed operations + """ + + USER_FEED_TYPE = "user" + POLL_QUESTION = "What's your favorite programming language?" + + def setup_method(self): + """Setup for each test method""" + self.client = Stream( + api_key=os.environ.get("STREAM_API_KEY"), + api_secret=os.environ.get("STREAM_API_SECRET"), + base_url=os.environ.get( + "STREAM_BASE_URL", "https://chat.stream-io-api.com" + ), + ) + + self.test_user_id = f"test-user-{uuid.uuid4()}" + self.test_user_id_2 = f"test-user-2-{uuid.uuid4()}" + self.test_feed = self.client.feeds.feed(self.USER_FEED_TYPE, self.test_user_id) + self.test_feed_2 = self.client.feeds.feed( + self.USER_FEED_TYPE, self.test_user_id_2 + ) + + # Track created resources for cleanup + self.created_activity_ids: List[str] = [] + self.created_comment_ids: List[str] = [] + self.test_activity_id = "" + self.test_comment_id = "" + + # Setup environment for each test + self._setup_environment() + + def teardown_method(self): + """Cleanup after each test method""" + self._cleanup_resources() + + def _setup_environment(self): + """Setup test environment with users and feeds""" + try: + # Create test users + # snippet-start: CreateUsers + users = { + self.test_user_id: UserRequest( + id=self.test_user_id, name="Test User 1", role="user" + ), + self.test_user_id_2: UserRequest( + id=self.test_user_id_2, name="Test User 2", role="user" + ), + } + response = self.client.update_users(users=users) + # snippet-end: CreateUsers + + if response.status_code() >= 400: + raise Exception(f"Failed to create users: {response.status_code()}") + + # Create feeds + # snippet-start: GetOrCreateFeed + + feed_response_1 = self.test_feed.get_or_create(user_id=self.test_user_id) + feed_response_2 = self.test_feed_2.get_or_create( + user_id=self.test_user_id_2 + ) + # snippet-end: GetOrCreateFeed + + if feed_response_1.status_code() >= 400: + raise Exception( + f"Failed to create feed 1: {feed_response_1.status_code()}" + ) + if feed_response_2.status_code() >= 400: + raise Exception( + f"Failed to create feed 2: {feed_response_2.status_code()}" + ) + + except Exception as e: + print(f"⚠️ Setup failed: {e}") + # Stop everything + exit(1) + + def _cleanup_resources(self): + """Cleanup created resources in reverse order""" + print("\n🧹 Cleaning up test resources...") + + # Delete any remaining activities + if self.created_activity_ids: + for activity_id in self.created_activity_ids: + try: + self.client.feeds.delete_activity(activity_id, hard_delete=True) + except Exception as e: + print(f"Warning: Failed to cleanup activity {activity_id}: {e}") + + # Delete any remaining comments + if self.created_comment_ids: + for comment_id in self.created_comment_ids: + try: + self.client.feeds.delete_comment(comment_id, hard_delete=True) + except Exception as e: + print(f"Warning: Failed to cleanup comment {comment_id}: {e}") + + print("✅ Cleanup completed") + + def _assert_response_success(self, response: StreamResponse, operation: str): + """Assert that a response is successful""" + if hasattr(response, "status_code"): + if response.status_code() >= 400: + pytest.fail(f"Failed to {operation}. Status: {response.status_code()}") + else: + # For generated model responses, just assert they exist + assert response is not None, f"Failed to {operation}. Response is null." + + # ================================================================= + # 1. ENVIRONMENT SETUP TEST (demonstrates the setup process) + # ================================================================= + + def test_01_setup_environment_demo(self): + """Demonstrate environment setup""" + print("\n🔧 Demonstrating environment setup...") + print("✅ Users and feeds are automatically created in setup_method()") + print(f" Test User 1: {self.test_user_id}") + print(f" Test User 2: {self.test_user_id_2}") + + # Just a demo test - verify setup completed + assert self.test_user_id is not None + + # ================================================================= + # 2. ACTIVITY OPERATIONS + # ================================================================= + + def test_02_create_activity(self): + """Test activity creation""" + print("\n📝 Testing activity creation...") + + # snippet-start: AddActivity + response = self.client.feeds.add_activity( + type="post", + feeds=[self.test_feed.get_feed_identifier()], + text="This is a test activity from Python SDK", + user_id=self.test_user_id, + custom={ + "test_field": "test_value", + "timestamp": int(datetime.now().timestamp()), + }, + ) + # snippet-end: AddActivity + + self._assert_response_success(response, "add activity") + + # Access the typed response data directly + activity_response = response.data + assert activity_response.activity is not None + assert activity_response.activity.id is not None + assert activity_response.activity.text is not None + + # Compare text + assert ( + activity_response.activity.text == "This is a test activity from Python SDK" + ) + + self.test_activity_id = activity_response.activity.id + self.created_activity_ids.append(self.test_activity_id) + + print(f"✅ Created activity with ID: {self.test_activity_id}") + + def test_02b_create_activity_with_attachments(self): + """Test activity creation with image attachments""" + print("\n🖼️ Testing activity creation with image attachments...") + + # snippet-start: AddActivityWithImageAttachment + response = self.client.feeds.add_activity( + type="post", + feeds=[self.test_feed.get_feed_identifier()], + text="Look at this amazing view of NYC!", + user_id=self.test_user_id, + attachments=[ + Attachment( + custom={}, + image_url="https://example.com/nyc-skyline.jpg", + type="image", + title="NYC Skyline", + ) + ], + custom={"location": "New York City", "camera": "iPhone 15 Pro"}, + ) + # snippet-end: AddActivityWithImageAttachment + + self._assert_response_success(response, "add activity with image attachment") + + data = response.data + activity_id = data.activity.id + self.created_activity_ids.append(activity_id) + + print(f"✅ Created activity with image attachment: {activity_id}") + + def test_02c_create_video_activity(self): + """Test video activity creation""" + print("\n🎥 Testing video activity creation...") + + # snippet-start: AddVideoActivity + response = self.client.feeds.add_activity( + type="video", + feeds=[self.test_feed.get_feed_identifier()], + text="Check out this amazing video!", + user_id=self.test_user_id, + attachments=[ + Attachment( + custom={"duration": 120}, + asset_url="https://example.com/amazing-video.mp4", + type="video", + title="Amazing Video", + ) + ], + custom={"video_quality": "4K", "duration_seconds": 120}, + ) + # snippet-end: AddVideoActivity + + self._assert_response_success(response, "add video activity") + + data = response.data + activity_id = data.activity.id + self.created_activity_ids.append(activity_id) + + print(f"✅ Created video activity: {activity_id}") + + def test_02d_create_story_activity_with_expiration(self): + """Test story activity with expiration""" + print("\n📖 Testing story activity with expiration...") + + # snippet-start: AddStoryActivityWithExpiration + tomorrow = datetime.now() + timedelta(days=1) + response = self.client.feeds.add_activity( + type="story", + feeds=[self.test_feed.get_feed_identifier()], + text="My daily story - expires tomorrow!", + user_id=self.test_user_id, + expires_at=tomorrow.strftime("%Y-%m-%dT%H:%M:%SZ"), + attachments=[ + Attachment( + custom={}, + image_url="https://example.com/story-image.jpg", + type="image", + ), + Attachment( + custom={"duration": 15}, + asset_url="https://example.com/story-video.mp4", + type="video", + ), + ], + custom={"story_type": "daily", "auto_expire": True}, + ) + # snippet-end: AddStoryActivityWithExpiration + + self._assert_response_success(response, "add story activity with expiration") + + data = response.data + activity_id = data.activity.id + self.created_activity_ids.append(activity_id) + + print(f"✅ Created story activity with expiration: {activity_id}") + + def test_02e_create_activity_multiple_feeds(self): + """Test activity creation to multiple feeds""" + print("\n📡 Testing activity creation to multiple feeds...") + + # snippet-start: AddActivityToMultipleFeeds + response = self.client.feeds.add_activity( + type="post", + feeds=[ + self.test_feed.get_feed_identifier(), + self.test_feed_2.get_feed_identifier(), + ], + text="This post appears in multiple feeds!", + user_id=self.test_user_id, + custom={"cross_posted": True, "target_feeds": 2}, + ) + # snippet-end: AddActivityToMultipleFeeds + + self._assert_response_success(response, "add activity to multiple feeds") + + data = response.data + activity_id = data.activity.id + self.created_activity_ids.append(activity_id) + + print(f"✅ Created activity in multiple feeds: {activity_id}") + + def test_03_query_activities(self): + """Test activity querying""" + print("\n🔍 Testing activity querying...") + + # snippet-start: QueryActivities + response = self.client.feeds.query_activities( + limit=10, filter={"activity_type": "post"} + ) + # snippet-end: QueryActivities + + self._assert_response_success(response, "query activities") + + data = response.data + assert data.activities is not None + print("✅ Queried activities successfully") + + def test_04_get_single_activity(self): + """Test single activity retrieval""" + print("\n📄 Testing single activity retrieval...") + + # First create an activity to retrieve + create_response = self.client.feeds.add_activity( + type="post", + text="Activity for retrieval test", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, "create activity for retrieval test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # snippet-start: GetActivity + response = self.client.feeds.get_activity(activity_id) + # snippet-end: GetActivity + + self._assert_response_success(response, "get activity") + + data = response.data + assert data.activity is not None + assert data.activity.id == activity_id + print("✅ Retrieved single activity") + + def test_05_update_activity(self): + """Test activity update""" + print("\n✏️ Testing activity update...") + + # First create an activity to update + create_response = self.client.feeds.add_activity( + type="post", + text="Activity for update test", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, "create activity for update test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # snippet-start: UpdateActivity + response = self.client.feeds.update_activity( + activity_id, + text="Updated activity text from Python SDK", + user_id=self.test_user_id, # Required for server-side auth + custom={"updated": True, "update_time": int(datetime.now().timestamp())}, + ) + # snippet-end: UpdateActivity + + self._assert_response_success(response, "update activity") + print("✅ Updated activity") + + # ================================================================= + # 3. REACTION OPERATIONS + # ================================================================= + + def test_06_add_reaction(self): + """Test reaction addition""" + print("\n👍 Testing reaction addition...") + + # First create an activity to react to + create_response = self.client.feeds.add_activity( + type="post", + text="Activity for reaction test", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, "create activity for reaction test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # snippet-start: AddReaction + response = self.client.feeds.add_reaction( + activity_id, type="like", user_id=self.test_user_id + ) + # snippet-end: AddReaction + + self._assert_response_success(response, "add reaction") + print("✅ Added like reaction") + + def test_07_query_reactions(self): + """Test reaction querying""" + print("\n🔍 Testing reaction querying...") + + # Create an activity and add a reaction to it + create_response = self.client.feeds.add_activity( + type="post", + text="Activity for query reactions test", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, "create activity for query reactions test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # Add a reaction first + reaction_response = self.client.feeds.add_reaction( + activity_id, type="like", user_id=self.test_user_id + ) + self._assert_response_success(reaction_response, "add reaction for query test") + + try: + # snippet-start: QueryActivityReactions + response = self.client.feeds.query_activity_reactions( + activity_id, limit=10, filter={"type": "like"} + ) + # snippet-end: QueryActivityReactions + + self._assert_response_success(response, "query reactions") + print("✅ Queried reactions") + except Exception as e: + print(f"Query reactions skipped: {e}") + + # ================================================================= + # 4. COMMENT OPERATIONS + # ================================================================= + + def test_08_add_comment(self): + """Test comment addition""" + print("\n💬 Testing comment addition...") + + # First create an activity to comment on + create_response = self.client.feeds.add_activity( + type="post", + feeds=[self.test_feed.get_feed_identifier()], + text="Activity for comment test", + user_id=self.test_user_id, + ) + self._assert_response_success( + create_response, "create activity for comment test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # snippet-start: AddComment + response = self.client.feeds.add_comment( + comment="This is a test comment from Python SDK", + object_id=activity_id, + object_type="activity", + user_id=self.test_user_id, + ) + # snippet-end: AddComment + + self._assert_response_success(response, "add comment") + + data = response.data + if data.comment and data.comment.id: + self.test_comment_id = data.comment.id + self.created_comment_ids.append(self.test_comment_id) + print(f"✅ Added comment with ID: {self.test_comment_id}") + else: + print("✅ Added comment (no ID returned)") + + def test_09_query_comments(self): + """Test comment querying""" + print("\n🔍 Testing comment querying...") + + # Create an activity and add a comment to it + create_response = self.client.feeds.add_activity( + type="post", + text="Activity for query comments test", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, "create activity for query comments test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # Add a comment first + comment_response = self.client.feeds.add_comment( + comment="Comment for query test", + object_id=activity_id, + object_type="activity", + user_id=self.test_user_id, + ) + self._assert_response_success(comment_response, "add comment for query test") + + # snippet-start: QueryComments + response = self.client.feeds.query_comments( + filter={"object_id": activity_id}, limit=10 + ) + # snippet-end: QueryComments + + self._assert_response_success(response, "query comments") + print("✅ Queried comments") + + def test_10_update_comment(self): + """Test comment update""" + print("\n✏️ Testing comment update...") + + # Create an activity and add a comment to update + create_response = self.client.feeds.add_activity( + type="post", + text="Activity for update comment test", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, "create activity for update comment test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # Add a comment to update + comment_response = self.client.feeds.add_comment( + comment="Comment to be updated", + object_id=activity_id, + object_type="activity", + user_id=self.test_user_id, + ) + self._assert_response_success(comment_response, "add comment for update test") + + comment_response_data = comment_response.data + comment_id = ( + comment_response_data.comment.id + if comment_response_data.comment.id + else f"comment-{uuid.uuid4()}" + ) + + # snippet-start: UpdateComment + response = self.client.feeds.update_comment( + comment_id, comment="Updated comment text from Python SDK" + ) + # snippet-end: UpdateComment + + self._assert_response_success(response, "update comment") + print("✅ Updated comment") + + # ================================================================= + # 5. BOOKMARK OPERATIONS + # ================================================================= + + def test_11_add_bookmark(self): + """Test bookmark addition""" + print("\n🔖 Testing bookmark addition...") + + # Create an activity to bookmark + create_response = self.client.feeds.add_activity( + type="post", + text="Activity for bookmark test", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, "create activity for bookmark test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + try: + # snippet-start: AddBookmark + response = self.client.feeds.add_bookmark( + activity_id, + user_id=self.test_user_id, + new_folder=AddFolderRequest(name="test-bookmarks1"), + ) + # snippet-end: AddBookmark + + print(f"Bookmark response status: {response.status_code}") + print(f"Bookmark response body: {response.raw_body}") + self._assert_response_success(response, "add bookmark") + except Exception as e: + print(f"Add bookmark failed: {e}") + print("✅ Added bookmark") + + def test_12_query_bookmarks(self): + """Test bookmark querying""" + print("\n🔍 Testing bookmark querying...") + + # snippet-start: QueryBookmarks + response = self.client.feeds.query_bookmarks( + limit=10, filter={"user_id": self.test_user_id} + ) + # snippet-end: QueryBookmarks + + assert isinstance(response, StreamResponse) + self._assert_response_success(response, "query bookmarks") + print("✅ Queried bookmarks") + + def test_13_update_bookmark(self): + """Test bookmark update""" + print("\n✏️ Testing bookmark update...") + + # Create an activity and bookmark it first + create_response = self.client.feeds.add_activity( + type="post", + feeds=[self.test_feed.get_feed_identifier()], + text="Activity for update bookmark test", + user_id=self.test_user_id, + ) + self._assert_response_success( + create_response, "create activity for update bookmark test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # Add a bookmark first + bookmark_response = self.client.feeds.add_bookmark( + activity_id, + new_folder=AddFolderRequest(name="test-bookmarks1"), + user_id=self.test_user_id, + ) + self._assert_response_success(bookmark_response, "add bookmark for update test") + + # snippet-start: UpdateBookmark + bookmark_data = bookmark_response.data + folder_id = bookmark_data.bookmark.folder.id + response = self.client.feeds.update_bookmark( + activity_id, folder_id=folder_id, user_id=self.test_user_id + ) + # snippet-end: UpdateBookmark + + self._assert_response_success(response, "update bookmark") + print("✅ Updated bookmark") + + # ================================================================= + # 6. FOLLOW OPERATIONS + # ================================================================= + + def test_14_follow_user(self): + """Test follow operation""" + print("\n👥 Testing follow operation...") + + try: + # snippet-start: Follow + response = self.client.feeds.follow( + source=f"{self.USER_FEED_TYPE}:{self.test_user_id}", + target=f"{self.USER_FEED_TYPE}:{self.test_user_id_2}", + ) + # snippet-end: Follow + + self._assert_response_success(response, "follow user") + except Exception as e: + print(f"Follow failed: {e}") + print(f"✅ Followed user: {self.test_user_id_2}") + + def test_15_query_follows(self): + """Test follow querying""" + print("\n🔍 Testing follow querying...") + + # snippet-start: QueryFollows + response = self.client.feeds.query_follows(limit=10) + # snippet-end: QueryFollows + + assert isinstance(response, StreamResponse) + self._assert_response_success(response, "query follows") + print("✅ Queried follows") + + # ================================================================= + # 7. BATCH OPERATIONS + # ================================================================= + + def test_16_upsert_activities(self): + """Test batch activity upsert""" + print("\n📝 Testing batch activity upsert...") + + # snippet-start: UpsertActivities + activities = [ + ActivityRequest( + type="post", + text="Batch activity 1", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ), + ActivityRequest( + type="post", + text="Batch activity 2", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ), + ] + + response = self.client.feeds.upsert_activities(activities=activities) + # snippet-end: UpsertActivities + + assert isinstance(response, StreamResponse) + self._assert_response_success(response, "upsert activities") + + # Track created activities for cleanup + data = response.data + if hasattr(data, "activities") and data.activities: + for activity in data.activities: + if hasattr(activity, "id") and activity.id: + self.created_activity_ids.append(activity.id) + + print("✅ Upserted batch activities") + + # ================================================================= + # 8. ADVANCED OPERATIONS + # ================================================================= + + def test_17_pin_activity(self): + """Test activity pinning""" + print("\n📌 Testing activity pinning...") + + # Create an activity to pin + create_response = self.client.feeds.add_activity( + type="post", + feeds=[self.test_feed.get_feed_identifier()], + text="Activity for pin test", + user_id=self.test_user_id, + ) + self._assert_response_success(create_response, "create activity for pin test") + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # snippet-start: PinActivity + response = self.test_feed.pin_activity(activity_id, user_id=self.test_user_id) + # snippet-end: PinActivity + + self._assert_response_success(response, "pin activity") + print("✅ Pinned activity") + + def test_18_unpin_activity(self): + """Test activity unpinning""" + print("\n📌 Testing activity unpinning...") + + # Create an activity, pin it, then unpin it + create_response = self.client.feeds.add_activity( + type="post", + feeds=[self.test_feed.get_feed_identifier()], + text="Activity for unpin test", + user_id=self.test_user_id, + ) + self._assert_response_success(create_response, "create activity for unpin test") + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # Pin it first + pin_response = self.test_feed.pin_activity( + activity_id, user_id=self.test_user_id + ) + self._assert_response_success(pin_response, "pin activity for unpin test") + + # snippet-start: UnpinActivity + response = self.test_feed.unpin_activity(activity_id, self.test_user_id) + # snippet-end: UnpinActivity + + self._assert_response_success(response, "unpin activity") + print("✅ Unpinned activity") + + # ================================================================= + # 9. CLEANUP OPERATIONS (in reverse order) + # ================================================================= + + def test_19_delete_bookmark(self): + """Test bookmark deletion""" + print("\n🗑️ Testing bookmark deletion...") + + # Create an activity and bookmark it first + create_response = self.client.feeds.add_activity( + type="post", + text="Activity for delete bookmark test", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, "create activity for delete bookmark test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # Add a bookmark first + bookmark_response = self.client.feeds.add_bookmark( + activity_id, + new_folder=AddFolderRequest(name="test-bookmarks1"), + user_id=self.test_user_id, + ) + self._assert_response_success(bookmark_response, "add bookmark for delete test") + + # snippet-start: DeleteBookmark + bookmark_data = bookmark_response.data + folder_id = bookmark_data.bookmark.folder.id + response = self.client.feeds.delete_bookmark( + activity_id, folder_id, self.test_user_id + ) + # snippet-end: DeleteBookmark + + self._assert_response_success(response, "delete bookmark") + print("✅ Deleted bookmark") + + def test_20_delete_reaction(self): + """Test reaction deletion""" + print("\n🗑️ Testing reaction deletion...") + + # Create an activity and add a reaction first + create_response = self.client.feeds.add_activity( + type="post", + text="Activity for delete reaction test", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, "create activity for delete reaction test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # Add a reaction first + reaction_response = self.client.feeds.add_reaction( + activity_id, type="like", user_id=self.test_user_id + ) + self._assert_response_success(reaction_response, "add reaction for delete test") + + # snippet-start: DeleteActivityReaction + response = self.client.feeds.delete_activity_reaction( + activity_id, "like", self.test_user_id + ) + # snippet-end: DeleteActivityReaction + + self._assert_response_success(response, "delete reaction") + print("✅ Deleted reaction") + + def test_21_delete_comment(self): + """Test comment deletion""" + print("\n🗑️ Testing comment deletion...") + + # Create an activity and add a comment first + create_response = self.client.feeds.add_activity( + type="post", + text="Activity for delete comment test", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, "create activity for delete comment test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # Add a comment first + comment_response = self.client.feeds.add_comment( + comment="Comment to be deleted", + object_id=activity_id, + object_type="activity", + user_id=self.test_user_id, + ) + self._assert_response_success(comment_response, "add comment for delete test") + + comment_response_data = comment_response.data + comment_id = ( + comment_response_data.comment.id + if comment_response_data.comment.id + else f"comment-{uuid.uuid4()}" + ) + + # snippet-start: DeleteComment + response = self.client.feeds.delete_comment( + comment_id, hard_delete=False + ) # soft delete + # snippet-end: DeleteComment + + self._assert_response_success(response, "delete comment") + print("✅ Deleted comment") + + def test_22_unfollow_user(self): + """Test unfollow operation""" + print("\n👥 Testing unfollow operation...") + + try: + # First establish a follow relationship + follow_response = self.client.feeds.follow( + source=f"{self.USER_FEED_TYPE}:{self.test_user_id}", + target=f"{self.USER_FEED_TYPE}:{self.test_user_id_2}", + ) + self._assert_response_success( + follow_response, "establish follow relationship for unfollow test" + ) + + # snippet-start: Unfollow + response = self.client.feeds.unfollow( + f"{self.USER_FEED_TYPE}:{self.test_user_id}", + f"{self.USER_FEED_TYPE}:{self.test_user_id_2}", + ) + # snippet-end: Unfollow + + assert isinstance(response, StreamResponse) + self._assert_response_success(response, "unfollow operation") + print(f"✅ Unfollowed user: {self.test_user_id_2}") + except Exception as e: + print(f"Unfollow operation skipped: {e}") + + def test_23_delete_activities(self): + """Test activity deletion""" + print("\n🗑️ Testing activity deletion...") + + # Create some activities to delete + activities_to_delete = [] + for i in range(1, 3): + create_response = self.client.feeds.add_activity( + type="post", + text=f"Activity {i} for delete test", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, f"create activity {i} for delete test" + ) + + create_data = create_response.data + activity_id = create_data.activity.id + activities_to_delete.append(activity_id) + self.created_activity_ids.append(activity_id) + + for activity_id in activities_to_delete: + # snippet-start: DeleteActivity + response = self.client.feeds.delete_activity( + activity_id, hard_delete=False + ) # soft delete + # snippet-end: DeleteActivity + + self._assert_response_success(response, "delete activity") + + print(f"✅ Deleted {len(activities_to_delete)} activities") + self.created_activity_ids = [] + + # ================================================================= + # 10. ADDITIONAL COMPREHENSIVE TESTS + # ================================================================= + + def test_24_create_poll(self): + """Test poll creation""" + print("\n🗳️ Testing poll creation...") + + try: + # snippet-start: CreatePoll + poll = { + "name": "Poll", + "description": self.POLL_QUESTION, + "user_id": self.test_user_id, + "options": ["Red", "Blue"], + } + poll_response = self.client.create_poll(**poll) + poll_data = poll_response.data + poll_id = poll_data.get("id", f"poll-{uuid.uuid4()}") + + poll_activity_response = self.client.feeds.add_activity( + type="poll", + feeds=[self.test_feed.get_feed_identifier()], + poll_id=poll_id, + text=self.POLL_QUESTION, + user_id=self.test_user_id, + custom={ + "poll_name": self.POLL_QUESTION, + "poll_description": "Choose your favorite programming language from the options below", + "poll_options": ["PHP", "Python", "JavaScript", "Go"], + "allow_user_suggested_options": False, + "max_votes_allowed": 1, + }, + ) + # snippet-end: CreatePoll + + self._assert_response_success(poll_activity_response, "create poll") + + data = poll_activity_response.data + activity_id = data.activity.id + self.created_activity_ids.append(activity_id) + + print(f"✅ Created poll activity: {activity_id}") + except Exception as e: + print(f"Poll creation skipped: {e}") + + def test_25_vote_poll(self): + """Test poll voting""" + print("\n✅ Testing poll voting...") + + try: + # Create a poll first using the proper API + poll = { + "name": "Favorite Color Poll", + "description": "What is your favorite color?", + "user_id": self.test_user_id, + "options": ["Red", "Blue", "Green"], + } + poll_response = self.client.create_poll(**poll) + poll_data = poll_response.data + poll_id = poll_data.get("id", f"poll-{uuid.uuid4()}") + + # Create activity with the poll + create_response = self.client.feeds.add_activity( + type="poll", + feeds=[self.test_feed.get_feed_identifier()], + text="Vote for your favorite color", + user_id=self.test_user_id, + poll_id=poll_id, + custom={ + "poll_name": "What is your favorite color?", + "poll_description": "Choose your favorite color from the options below", + "poll_options": ["Red", "Blue", "Green"], + "allow_user_suggested_options": False, + }, + ) + + self._assert_response_success(create_response, "create poll for voting") + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + # Get poll options from the poll response + poll_options = poll_data.get("options", []) + + if poll_options: + # Use the first option ID from the poll creation response + option_id = poll_options[0].get("id", poll_options[0]) + + try: + # snippet-start: VotePoll + vote_response = self.client.feeds.cast_poll_vote( + activity_id, + poll_id, + user_id=self.test_user_id, + vote=VoteData(option_id=option_id), + ) + # snippet-end: VotePoll + + self._assert_response_success(vote_response, "vote on poll") + print(f"✅ Voted on poll: {activity_id}") + except Exception as e: + print(f"Poll voting skipped: {e}") + else: + print("⚠️ Poll options not found in poll response") + except Exception as e: + print(f"Poll voting skipped: {e}") + + def test_26_moderate_activity(self): + """Test activity moderation""" + print("\n🛡️ Testing activity moderation...") + + # Create an activity to moderate + create_response = self.client.feeds.add_activity( + type="post", + text="This content might need moderation", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success(create_response, "create activity for moderation") + + create_data = create_response.data + activity_id = create_data.activity.id + self.created_activity_ids.append(activity_id) + + try: + # snippet-start: ModerateActivity + moderation_response = self.client.feeds.activity_feedback( + activity_id, + report=True, + reason="inappropriate_content", + user_id=self.test_user_id_2, # Different user reporting + ) + # snippet-end: ModerateActivity + + self._assert_response_success(moderation_response, "moderate activity") + print(f"✅ Flagged activity for moderation: {activity_id}") + except Exception as e: + print(f"Activity moderation skipped: {e}") + + def test_27_device_management(self): + """Test device management""" + print("\n📱 Testing device management...") + + device_token = f"test-device-token-{uuid.uuid4()}" + + try: + # snippet-start: AddDevice + add_device_response = self.client.create_device( + id=device_token, push_provider="apn", user_id=self.test_user_id + ) + # snippet-end: AddDevice + + self._assert_response_success(add_device_response, "add device") + print(f"✅ Added device: {device_token}") + + # snippet-start: RemoveDevice + remove_device_response = self.client.delete_device( + device_token, self.test_user_id + ) + # snippet-end: RemoveDevice + + self._assert_response_success(remove_device_response, "remove device") + print(f"✅ Removed device: {device_token}") + except Exception as e: + print(f"Device management skipped: {e}") + + def test_28_query_activities_with_filters(self): + """Test activity queries with advanced filters""" + print("\n🔍 Testing activity queries with advanced filters...") + + # Create activities with different types and metadata + activity_types = ["post", "photo", "video", "story"] + + for activity_type in activity_types: + create_response = self.client.feeds.add_activity( + type=activity_type, + text=f"Test {activity_type} activity for filtering", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + custom={ + "category": activity_type, + "priority": 3, # Random priority between 1-5 + "tags": [activity_type, "test", "filter"], + }, + ) + self._assert_response_success( + create_response, f"create {activity_type} activity for filtering" + ) + + create_data = create_response.data + self.created_activity_ids.append(create_data.activity.id) + + try: + # Query with type filter + # snippet-start: QueryActivitiesWithTypeFilter + response = self.client.feeds.query_activities( + limit=10, + filter={"activity_type": "post", "user_id": self.test_user_id}, + sort=[ + SortParamRequest(field="created_at", direction=-1) + ], # newest first + ) + # snippet-end: QueryActivitiesWithTypeFilter + + self._assert_response_success(response, "query activities with type filter") + except Exception as e: + print(f"Query activities with type filter skipped: {e}") + + try: + # Query with custom field filter + # snippet-start: QueryActivitiesWithCustomFilter + custom_filter_response = self.client.feeds.query_activities( + limit=10, + filter={ + "custom.priority": {"$gte": 3}, # priority >= 3 + "user_id": self.test_user_id, + }, + ) + # snippet-end: QueryActivitiesWithCustomFilter + + self._assert_response_success( + custom_filter_response, "query activities with custom filter" + ) + except Exception as e: + print(f"Query activities with custom filter skipped: {e}") + + print("✅ Queried activities with advanced filters") + + def test_29_get_feed_activities_with_pagination(self): + """Test feed activities with pagination""" + print("\n📄 Testing feed activities with pagination...") + + # Create multiple activities for pagination test + for i in range(1, 8): + create_response = self.client.feeds.add_activity( + type="post", + text=f"Pagination test activity {i}", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + self._assert_response_success( + create_response, f"create pagination activity {i}" + ) + + create_data = create_response.data + self.created_activity_ids.append(create_data.activity.id) + + # Get first page + # snippet-start: GetFeedActivitiesWithPagination + first_page_response = self.client.feeds.query_activities( + limit=3, filter={"user_id": self.test_user_id} + ) + # snippet-end: GetFeedActivitiesWithPagination + + self._assert_response_success( + first_page_response, "get first page of feed activities" + ) + + first_page_data = first_page_response.data + assert first_page_data.activities is not None + assert len(first_page_data.activities) <= 3 + + # Get second page using next token if available + # snippet-start: GetFeedActivitiesSecondPage + next_token = getattr(first_page_data, "next", None) + if next_token: + second_page_response = self.client.feeds.query_activities( + limit=3, next=next_token, filter={"user_id": self.test_user_id} + ) + self._assert_response_success( + second_page_response, "get second page of feed activities" + ) + else: + print("⚠️ No next page available") + # snippet-end: GetFeedActivitiesSecondPage + + print("✅ Retrieved feed activities with pagination") + + def test_30_error_handling_scenarios(self): + """Test comprehensive error handling scenarios""" + print("\n⚠️ Testing error handling scenarios...") + + # Test 1: Invalid activity ID + try: + # snippet-start: HandleInvalidActivityId + response = self.client.feeds.get_activity("invalid-activity-id-12345") + # snippet-end: HandleInvalidActivityId + + if not response.is_successful(): + print("✅ Correctly handled invalid activity ID error") + except Exception as e: + print(f"✅ Caught expected error for invalid activity ID: {e}") + + # Test 2: Empty activity text + try: + # snippet-start: HandleEmptyActivityText + response = self.client.feeds.add_activity( + type="post", + text="", # Empty text + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + # snippet-end: HandleEmptyActivityText + + if not response.is_successful(): + print("✅ Correctly handled empty activity text") + except Exception as e: + print(f"✅ Caught expected error for empty activity text: {e}") + + # Test 3: Invalid user ID + try: + # snippet-start: HandleInvalidUserId + response = self.client.feeds.add_activity( + type="post", + text="Test with invalid user", + user_id="", # Empty user ID + feeds=[self.test_feed.get_feed_identifier()], + ) + # snippet-end: HandleInvalidUserId + + if not response.is_successful(): + print("✅ Correctly handled invalid user ID") + except Exception as e: + print(f"✅ Caught expected error for invalid user ID: {e}") + + # Test passes if we reach here without exceptions + assert self.test_user_id is not None + + def test_31_authentication_scenarios(self): + """Test authentication and authorization scenarios""" + print("\n🔐 Testing authentication scenarios...") + + # Test with valid user authentication + # snippet-start: ValidUserAuthentication + response = self.client.feeds.add_activity( + type="post", + text="Activity with proper authentication", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + ) + # snippet-end: ValidUserAuthentication + + self._assert_response_success(response, "activity with valid authentication") + + data = response.data + activity_id = data.activity.id + self.created_activity_ids.append(activity_id) + + print(f"✅ Successfully authenticated and created activity: {activity_id}") + + # Test user permissions for updating activity + # snippet-start: UserPermissionUpdate + update_response = self.client.feeds.update_activity( + activity_id, + text="Updated with proper user permissions", + user_id=self.test_user_id, # Same user can update + ) + # snippet-end: UserPermissionUpdate + + self._assert_response_success( + update_response, "update activity with proper permissions" + ) + print("✅ Successfully updated activity with proper user permissions") + + def test_32_real_world_usage_demo(self): + """Comprehensive test demonstrating real-world usage patterns""" + print("\n🌍 Testing real-world usage patterns...") + + # Scenario: User posts content, gets reactions and comments + # snippet-start: RealWorldScenario + + # 1. User creates a post with image + post_response = self.client.feeds.add_activity( + type="post", + text="Just visited the most amazing coffee shop! ☕️", + user_id=self.test_user_id, + feeds=[self.test_feed.get_feed_identifier()], + attachments=[ + Attachment( + custom={}, + image_url="https://example.com/coffee-shop.jpg", + type="image", + title="Amazing Coffee Shop", + ) + ], + custom={ + "location": "Downtown Coffee Co.", + "rating": 5, + "tags": ["coffee", "food", "downtown"], + }, + ) + self._assert_response_success(post_response, "create real-world post") + + post_data = post_response.data + post_id = post_data.activity.id + self.created_activity_ids.append(post_id) + + # 2. Other users react to the post + reaction_types = ["like", "love", "wow"] + for reaction_type in reaction_types: + reaction_response = self.client.feeds.add_reaction( + post_id, type=reaction_type, user_id=self.test_user_id_2 + ) + self._assert_response_success( + reaction_response, f"add {reaction_type} reaction" + ) + + # 3. Users comment on the post + comments = [ + "That place looks amazing! What did you order?", + "I love their espresso! Great choice 😍", + "Adding this to my must-visit list!", + ] + + for comment_text in comments: + comment_response = self.client.feeds.add_comment( + comment=comment_text, + object_id=post_id, + object_type="activity", + user_id=self.test_user_id_2, + ) + self._assert_response_success(comment_response, "add comment to post") + + # 4. User bookmarks the post + try: + bookmark_response = self.client.feeds.add_bookmark( + post_id, + user_id=self.test_user_id_2, + new_folder=AddFolderRequest(name="favorite-places"), + ) + self._assert_response_success(bookmark_response, "bookmark the post") + except Exception as e: + print(f"Bookmark operation skipped: {e}") + + # 5. Query the activity with all its interactions + enriched_response = self.client.feeds.get_activity(post_id) + self._assert_response_success(enriched_response, "get enriched activity") + + # snippet-end: RealWorldScenario + + print("✅ Completed real-world usage scenario demonstration") + + def test33_feed_group_crud(self): + """Test 33: Feed Group CRUD Operations""" + print("\n📁 Testing Feed Group CRUD operations...") + + feed_group_id = f"test-feed-group-{uuid.uuid4().hex[:8]}" + + # Test 1: List Feed Groups + print("\n📋 Testing list feed groups...") + # snippet-start: ListFeedGroups + list_response = self.client.feeds.list_feed_groups() + # snippet-end: ListFeedGroups + + self._assert_response_success(list_response, "list feed groups") + print(f"✅ Listed {len(list_response.data.groups)} existing feed groups") + + # Test 2: Create Feed Group + print("\n➕ Testing create feed group...") + # snippet-start: CreateFeedGroup + create_response = self.client.feeds.create_feed_group( + id= feed_group_id, + default_visibility= "public", + ) + # snippet-end: CreateFeedGroup + + self._assert_response_success(create_response, "create feed group") + assert create_response.data.feed_group.id == feed_group_id + print(f"✅ Created feed group: {feed_group_id}") + + # Test 3: Get Feed Group + print("\n🔍 Testing get feed group...") + # snippet-start: GetFeedGroup + get_response = self.client.feeds.get_feed_group("feed_group_id") + # snippet-end: GetFeedGroup + + self._assert_response_success(get_response, "get feed group") + assert get_response.data.feed_group.id == "feed_group_id" + print(f"✅ Retrieved feed group: {feed_group_id}") + + # Test 4: Update Feed Group + print("\n✏️ Testing update feed group...") + # snippet-start: UpdateFeedGroup + update_response = self.client.feeds.update_feed_group(id= "feed_group_id") + # snippet-end: UpdateFeedGroup + + self._assert_response_success(update_response, "update feed group") + print(f"✅ Updated feed group: {feed_group_id}") + + # Test 5: Get or Create Feed Group (should get existing) + print("\n🔄 Testing get or create feed group (existing)...") + + # Test 6: Delete Feed Group + print("\n🗑️ Testing delete feed group...") + # snippet-start: DeleteFeedGroup + # self.client.feeds.delete_feed_group("groupID-123", { + # "hard_delete": False # soft delete + # }) + # snippet-end: DeleteFeedGroup + + print("✅ Completed Feed Group CRUD operations") + + # Additional Feed Group Creation Examples + feed_group_id = f"test-feed-group-{uuid.uuid4().hex[:8]}" + + print("\n📊 Testing create feed group with aggregation...") + # snippet-start: CreateFeedGroupWithAggregation + self.client.feeds.create_feed_group( + id = feed_group_id, + default_visibility="public", + activity_processors=[ + ActivityProcessorConfig(type="default") + ], + aggregation=AggregationConfig( + format="{{ type }}-{{ time.strftime(\"%Y-%m-%d\") }}" + ) + ) + # snippet-end: CreateFeedGroupWithAggregation + + feed_group_id = f"test-feed-group-{uuid.uuid4().hex[:8]}" + + print("\n🏆 Testing create feed group with ranking...") + # snippet-start: CreateFeedGroupWithRanking + self.client.feeds.create_feed_group( + id=feed_group_id, + default_visibility="public", + ranking=RankingConfig( + type="default", + score="decay_linear(time) * popularity" + ) + ) + # snippet-end: CreateFeedGroupWithRanking + + def test34_feed_view_crud(self): + """Test 34: Feed View CRUD Operations""" + print("\n👁️ Testing Feed View CRUD operations...") + + feed_view_id = f"test-feed-view-{uuid.uuid4().hex[:8]}" + + # Test 1: List Feed Views + print("\n📋 Testing list feed views...") + # snippet-start: ListFeedViews + list_response = self.client.feeds.list_feed_views() + # snippet-end: ListFeedViews + + self._assert_response_success(list_response, "list feed views") + print(f"✅ Listed {len(list_response.data.views)} existing feed views") + + # Test 2: Create Feed View + print("\n➕ Testing create feed view...") + # snippet-start: CreateFeedView + create_response = self.client.feeds.create_feed_view( + id = feed_view_id, + activity_selectors= [ + { + "type": "recent" + } + ], + ) + # snippet-end: CreateFeedView + + self._assert_response_success(create_response, "create feed view") + assert create_response.data.feed_view.id == feed_view_id + print(f"✅ Created feed view: {feed_view_id}") + + # Test 3: Get Feed View + print("\n🔍 Testing get feed view...") + # snippet-start: GetFeedView + get_response = self.client.feeds.get_feed_view("feedViewID") + # snippet-end: GetFeedView + + self._assert_response_success(get_response, "get feed view") + assert get_response.data.feed_view.id == "feedViewID" + print(f"✅ Retrieved feed view: {feed_view_id}") + + # Test 4: Update Feed View + print("\n✏️ Testing update feed view...") + # snippet-start: UpdateFeedView + update_response = self.client.feeds.update_feed_view( + id="feedViewID", + activity_selectors= [ + { + "type": "popular", + "min_popularity": 10 + } + ] + ) + # snippet-end: UpdateFeedView + + self._assert_response_success(update_response, "update feed view") + print(f"✅ Updated feed view: {feed_view_id}") + + # Test 5: Get or Create Feed View (should get existing) + print("\n🔄 Testing get or create feed view (existing)...") + # snippet-start: GetOrCreateFeedViewExisting + get_or_create_response = self.client.feeds.get_or_create_feed_view( + id=feed_view_id, + activity_selectors= [ + {"type": "recent"} + ] + ) + # snippet-end: GetOrCreateFeedViewExisting + + self._assert_response_success(get_or_create_response, "get or create existing feed view") + print(f"✅ Got existing feed view: {feed_view_id}") + + # Test 6: Delete Feed View + print("\n🗑️ Testing delete feed view...") + # snippet-start: DeleteFeedView + # self.client.feeds.delete_feed_view("viewID-123") + # snippet-end: DeleteFeedView + + print("✅ Completed Feed View CRUD operations")