From d1a4ac7db7bad19bbff55c6e9d78bce2304ce0ea Mon Sep 17 00:00:00 2001 From: nijeeshjoshy Date: Thu, 15 Oct 2026 01:18:00 +0200 Subject: [PATCH 1/2] feat!: [CHA-5933] add scheduled messages Regenerate from chat master 39c07c8b1ce1a145a754e883721796c66467f313, add the MultipartRequest marker interface the generator now emits, and cover the scheduled message endpoints with an integration test. BREAKING CHANGE: getActivity gained $skipOwnFollowings before $userID, so positional callers bind to different parameters; AIVideoConfig::$provider is gone. Co-Authored-By: Claude Opus 5.5 --- src/Generated/ChatTrait.php | 92 ++++++++++- src/Generated/CommonTrait.php | 20 ++- src/Generated/FeedsTrait.php | 144 +++++++++++++++++- src/Generated/VideoTrait.php | 14 ++ src/Generated/Webhook.php | 41 +++++ src/GeneratedModels/AIAudioConfigRequest.php | 6 +- src/GeneratedModels/AIAudioConfigResponse.php | 8 +- src/GeneratedModels/AIVideoConfig.php | 1 - src/GeneratedModels/APIError.php | 1 + src/GeneratedModels/ActivityResponse.php | 1 + .../ActivitySelectorConfig.php | 2 + .../ActivitySelectorConfigResponse.php | 2 + src/GeneratedModels/AddActivityRequest.php | 1 + src/GeneratedModels/AddActivityResponse.php | 1 + .../AddCommentReactionResponse.php | 3 + src/GeneratedModels/AddReactionResponse.php | 3 + src/GeneratedModels/AggregationConfig.php | 1 + src/GeneratedModels/AnalyzeRequest.php | 1 + src/GeneratedModels/AnalyzeResponse.php | 2 + src/GeneratedModels/AppDefaults.php | 19 +++ src/GeneratedModels/AppResponseFields.php | 11 +- src/GeneratedModels/AppealItemResponse.php | 4 +- src/GeneratedModels/AppealRequest.php | 1 + .../AsyncExportLabelResultsEvent.php | 22 +++ src/GeneratedModels/AsyncImportErrorEvent.php | 24 +++ .../AsyncImportSuccessEvent.php | 23 +++ src/GeneratedModels/BanRequest.php | 2 + src/GeneratedModels/BlockListResponse.php | 2 +- .../BulkActionAppealsRequest.php | 3 +- src/GeneratedModels/CallRingEvent.php | 1 + src/GeneratedModels/CallRingSettledEvent.php | 31 ++++ src/GeneratedModels/CallSettingsRequest.php | 1 + src/GeneratedModels/CallSettingsResponse.php | 1 + src/GeneratedModels/CastPollVoteRequest.php | 2 + src/GeneratedModels/ChannelBanResponse.php | 19 +++ .../ChannelBanScopeResponse.php | 19 +++ .../ChannelBansScopeTotals.php | 16 ++ .../ChannelBatchUpdateRequest.php | 1 + .../ChannelBatchUpdateResponse.php | 8 +- src/GeneratedModels/ChannelConfig.php | 2 +- src/GeneratedModels/ChannelConfigWithInfo.php | 2 +- src/GeneratedModels/ChannelOwnCapability.php | 2 +- .../ChannelPushPreferencesResponse.php | 7 +- src/GeneratedModels/ChannelStateResponse.php | 26 ++-- .../ChannelStateResponseFields.php | 3 +- src/GeneratedModels/ChannelTypeConfig.php | 2 +- src/GeneratedModels/CheckGCPPubSubRequest.php | 17 +++ .../CheckGCPPubSubResponse.php | 18 +++ src/GeneratedModels/CheckPushRequest.php | 2 +- src/GeneratedModels/CheckRequest.php | 1 + src/GeneratedModels/CheckResponse.php | 6 + src/GeneratedModels/ClientEvent.php | 3 + src/GeneratedModels/CommentFeedbackEvent.php | 23 +++ .../CommentFeedbackEventPayload.php | 19 +++ .../CommentFeedbackRequest.php | 20 +++ .../CommentFeedbackResponse.php | 20 +++ src/GeneratedModels/CommentResponse.php | 1 + .../ConfigOverridesRequest.php | 2 +- src/GeneratedModels/ConfigResponse.php | 1 + .../ContentCountryCodeParameters.php | 16 ++ .../CreateBlockListRequest.php | 2 +- .../CreateChannelTypeResponse.php | 7 +- .../CreatePollOptionRequest.php | 2 + src/GeneratedModels/CreatePollRequest.php | 5 +- src/GeneratedModels/CreateReminderRequest.php | 1 + .../DeleteFeedsRetentionPolicyRequest.php | 15 ++ .../DeleteFeedsRetentionPolicyResponse.php | 18 +++ .../DeletePollAnswerRequestPayload.php | 18 +++ .../DeletePollOptionRequestPayload.php | 19 +++ .../DeletePollRequestPayload.php | 18 +++ .../DeleteScheduledMessageResponse.php | 16 ++ .../DeleteUserInterestsResponse.php | 21 +++ .../DeliveryReceiptsResponse.php | 3 + src/GeneratedModels/DeviceResponse.php | 6 +- src/GeneratedModels/EnrichmentOptions.php | 1 + src/GeneratedModels/EntityCreatorResponse.php | 2 +- src/GeneratedModels/EventHook.php | 5 + .../FeedsNotificationComment.php | 1 + src/GeneratedModels/FeedsPolicyConfig.php | 16 ++ src/GeneratedModels/FeedsRetentionPolicy.php | 18 +++ .../FeedsRetentionRunResponse.php | 18 +++ .../FeedsV3CommentResponse.php | 1 + src/GeneratedModels/FileUploadRequest.php | 2 +- src/GeneratedModels/FilterConfigResponse.php | 2 + .../FloodIdenticalRuleParameters.php | 2 + .../FloodSimilarRuleParameters.php | 1 + src/GeneratedModels/FollowBatchRequest.php | 1 + src/GeneratedModels/FollowBatchResponse.php | 1 + src/GeneratedModels/FullUserResponse.php | 5 +- .../GetApplicationResponse.php | 2 +- .../GetChannelTypeResponse.php | 2 +- src/GeneratedModels/GetCommentsResponse.php | 2 + .../GetFeedsRetentionPolicyResponse.php | 22 +++ .../GetFeedsRetentionPolicyRunsRequest.php | 21 +++ .../GetFeedsRetentionPolicyRunsResponse.php | 23 +++ .../GetOrCreateChannelDefaults.php | 19 +++ .../GetOrCreateFeedRequest.php | 4 +- .../GetOrCreateFeedResponse.php | 5 +- .../GetUserInterestsResponse.php | 4 +- src/GeneratedModels/GroupedChannelsBucket.php | 2 +- .../GroupedChannelsGroupRequest.php | 7 +- .../GroupedQueryChannelsRequest.php | 5 +- .../GroupedQueryChannelsResponse.php | 2 +- src/GeneratedModels/ImageUploadRequest.php | 2 +- src/GeneratedModels/IntentConditionInfo.php | 18 +++ src/GeneratedModels/IntentConfigRequest.php | 17 +++ src/GeneratedModels/IntentConfigResponse.php | 17 +++ src/GeneratedModels/IntentEvaluationInfo.php | 21 +++ src/GeneratedModels/IntentRuleParameters.php | 19 +++ src/GeneratedModels/IntentScoreResponse.php | 16 ++ src/GeneratedModels/IntentTopicRequest.php | 16 ++ src/GeneratedModels/IntentTopicResponse.php | 16 ++ src/GeneratedModels/InterestTagResponse.php | 6 +- src/GeneratedModels/LabelsRequest.php | 2 +- .../LifecycleSettingsRequest.php | 15 ++ .../LifecycleSettingsResponse.php | 18 +++ src/GeneratedModels/MemberUserRequest.php | 2 +- .../MessageModerationResult.php | 2 +- .../ModerationDashboardPreferences.php | 1 + src/GeneratedModels/ModerationPayload.php | 1 + src/GeneratedModels/ModerationResponse.php | 11 +- .../ModerationRulesTriggeredEvent.php | 1 + src/GeneratedModels/MultipartRequest.php | 17 +++ src/GeneratedModels/NotificationComment.php | 9 +- src/GeneratedModels/OwnUserResponse.php | 7 +- src/GeneratedModels/PagerDefaults.php | 18 +++ src/GeneratedModels/PollClosedEvent.php | 25 +++ src/GeneratedModels/PollDeletedEvent.php | 25 +++ .../PollOptionResponseData.php | 1 + src/GeneratedModels/PollResponseData.php | 2 + src/GeneratedModels/PollUpdatedEvent.php | 25 +++ src/GeneratedModels/PollVoteCastedEvent.php | 26 ++++ src/GeneratedModels/PollVoteChangedEvent.php | 26 ++++ src/GeneratedModels/PollVoteRemovedEvent.php | 26 ++++ src/GeneratedModels/PollVoteResponseData.php | 1 + .../PrivacySettingsResponse.php | 9 +- .../PushPreferencesResponse.php | 7 +- .../QueryActivitiesRequest.php | 3 +- .../QueryCallRingAttemptsRequest.php | 17 +++ .../QueryCallRingAttemptsResponse.php | 25 +++ .../QueryChannelBansRequest.php | 22 +++ .../QueryChannelBansResponse.php | 22 +++ src/GeneratedModels/QueryChannelsDefaults.php | 21 +++ src/GeneratedModels/QueryCommentsRequest.php | 1 + src/GeneratedModels/QueryFollowsRequest.php | 1 + src/GeneratedModels/QueryFollowsResponse.php | 1 + .../QueryPinnedActivitiesRequest.php | 5 + .../QueryReviewQueueRequest.php | 2 +- .../QueryScheduledMessagesRequest.php | 22 +++ .../QueryScheduledMessagesResponse.php | 19 +++ src/GeneratedModels/RankingConfig.php | 1 + src/GeneratedModels/ReadReceiptsResponse.php | 3 + src/GeneratedModels/ReminderResponseData.php | 1 + .../ReviewQueueItemResponse.php | 2 + src/GeneratedModels/RingAttemptResponse.php | 34 +++++ src/GeneratedModels/RingCallRequest.php | 1 + src/GeneratedModels/RingCallResponse.php | 1 + src/GeneratedModels/RingDeliveryResponse.php | 24 +++ src/GeneratedModels/RingSettledTarget.php | 17 +++ src/GeneratedModels/RingTargetResponse.php | 23 +++ src/GeneratedModels/RuleBuilderCondition.php | 5 + .../ScheduledMessageChannelResponse.php | 22 +++ .../ScheduledMessageContentResponse.php | 39 +++++ .../ScheduledMessageFailedEvent.php | 24 +++ .../ScheduledMessageLocation.php | 21 +++ .../ScheduledMessageResponse.php | 27 ++++ .../ScheduledMessageSentEvent.php | 25 +++ .../ScheduledMessagesFilter.php | 19 +++ src/GeneratedModels/SendMessageRequest.php | 1 + src/GeneratedModels/SendMessageResponse.php | 1 + .../SendScheduledMessageNowRequest.php | 14 ++ .../SendScheduledMessageNowResponse.php | 16 ++ .../SetFeedsRetentionPolicyRequest.php | 18 +++ .../SetFeedsRetentionPolicyResponse.php | 20 +++ .../SharedLocationResponseData.php | 18 +-- src/GeneratedModels/SubmitActionRequest.php | 8 +- .../ThreadedCommentResponse.php | 1 + .../TypingIndicatorsResponse.php | 3 + src/GeneratedModels/UnbanRequest.php | 1 + .../UnblockActionRequestPayload.php | 2 +- src/GeneratedModels/UnfollowBatchRequest.php | 1 + src/GeneratedModels/UnfollowBatchResponse.php | 1 + src/GeneratedModels/UnreadCountsChannel.php | 9 +- .../UnreadCountsChannelType.php | 9 +- src/GeneratedModels/UnreadCountsThread.php | 11 +- .../UpdateChannelTypeRequest.php | 2 +- .../UpdateChannelTypeResponse.php | 7 +- .../UpdatePollOptionRequest.php | 2 + .../UpdatePollPartialRequest.php | 2 + src/GeneratedModels/UpdatePollRequest.php | 2 + src/GeneratedModels/UpdateReminderRequest.php | 1 + .../UpdateScheduledMessageRequest.php | 16 ++ .../UpdateScheduledMessageResponse.php | 16 ++ src/GeneratedModels/UpdateUsersResponse.php | 2 +- .../UploadChannelFileRequest.php | 2 +- src/GeneratedModels/UploadChannelRequest.php | 2 +- .../UpsertActivitiesRequest.php | 1 + .../UpsertActivitiesResponse.php | 1 + src/GeneratedModels/UpsertConfigRequest.php | 1 + .../UpsertUserInterestsRequest.php | 20 +++ .../UpsertUserInterestsResponse.php | 21 +++ .../UserChannelBanCountRuleParameters.php | 17 +++ .../UserChannelCountRuleParameters.php | 16 ++ .../UserIdenticalImageCountParameters.php | 18 +++ src/GeneratedModels/UserInterestRequest.php | 19 +++ .../UserReactionCountRuleParameters.php | 1 + src/GeneratedModels/UserRequest.php | 2 +- src/GeneratedModels/UserResponse.php | 2 +- .../UserResponsePrivacyFields.php | 2 +- src/GeneratedModels/WSEvent.php | 2 +- .../WrappedUnreadCountsResponse.php | 14 +- .../ChatScheduledMessagesIntegrationTest.php | 126 +++++++++++++++ tests/WebhookTest.php | 14 ++ 213 files changed, 2296 insertions(+), 138 deletions(-) create mode 100644 src/GeneratedModels/AppDefaults.php create mode 100644 src/GeneratedModels/AsyncExportLabelResultsEvent.php create mode 100644 src/GeneratedModels/AsyncImportErrorEvent.php create mode 100644 src/GeneratedModels/AsyncImportSuccessEvent.php create mode 100644 src/GeneratedModels/CallRingSettledEvent.php create mode 100644 src/GeneratedModels/ChannelBanResponse.php create mode 100644 src/GeneratedModels/ChannelBanScopeResponse.php create mode 100644 src/GeneratedModels/ChannelBansScopeTotals.php create mode 100644 src/GeneratedModels/CheckGCPPubSubRequest.php create mode 100644 src/GeneratedModels/CheckGCPPubSubResponse.php create mode 100644 src/GeneratedModels/CommentFeedbackEvent.php create mode 100644 src/GeneratedModels/CommentFeedbackEventPayload.php create mode 100644 src/GeneratedModels/CommentFeedbackRequest.php create mode 100644 src/GeneratedModels/CommentFeedbackResponse.php create mode 100644 src/GeneratedModels/ContentCountryCodeParameters.php create mode 100644 src/GeneratedModels/DeleteFeedsRetentionPolicyRequest.php create mode 100644 src/GeneratedModels/DeleteFeedsRetentionPolicyResponse.php create mode 100644 src/GeneratedModels/DeletePollAnswerRequestPayload.php create mode 100644 src/GeneratedModels/DeletePollOptionRequestPayload.php create mode 100644 src/GeneratedModels/DeletePollRequestPayload.php create mode 100644 src/GeneratedModels/DeleteScheduledMessageResponse.php create mode 100644 src/GeneratedModels/DeleteUserInterestsResponse.php create mode 100644 src/GeneratedModels/FeedsPolicyConfig.php create mode 100644 src/GeneratedModels/FeedsRetentionPolicy.php create mode 100644 src/GeneratedModels/FeedsRetentionRunResponse.php create mode 100644 src/GeneratedModels/GetFeedsRetentionPolicyResponse.php create mode 100644 src/GeneratedModels/GetFeedsRetentionPolicyRunsRequest.php create mode 100644 src/GeneratedModels/GetFeedsRetentionPolicyRunsResponse.php create mode 100644 src/GeneratedModels/GetOrCreateChannelDefaults.php create mode 100644 src/GeneratedModels/IntentConditionInfo.php create mode 100644 src/GeneratedModels/IntentConfigRequest.php create mode 100644 src/GeneratedModels/IntentConfigResponse.php create mode 100644 src/GeneratedModels/IntentEvaluationInfo.php create mode 100644 src/GeneratedModels/IntentRuleParameters.php create mode 100644 src/GeneratedModels/IntentScoreResponse.php create mode 100644 src/GeneratedModels/IntentTopicRequest.php create mode 100644 src/GeneratedModels/IntentTopicResponse.php create mode 100644 src/GeneratedModels/LifecycleSettingsRequest.php create mode 100644 src/GeneratedModels/LifecycleSettingsResponse.php create mode 100644 src/GeneratedModels/MultipartRequest.php create mode 100644 src/GeneratedModels/PagerDefaults.php create mode 100644 src/GeneratedModels/PollClosedEvent.php create mode 100644 src/GeneratedModels/PollDeletedEvent.php create mode 100644 src/GeneratedModels/PollUpdatedEvent.php create mode 100644 src/GeneratedModels/PollVoteCastedEvent.php create mode 100644 src/GeneratedModels/PollVoteChangedEvent.php create mode 100644 src/GeneratedModels/PollVoteRemovedEvent.php create mode 100644 src/GeneratedModels/QueryCallRingAttemptsRequest.php create mode 100644 src/GeneratedModels/QueryCallRingAttemptsResponse.php create mode 100644 src/GeneratedModels/QueryChannelBansRequest.php create mode 100644 src/GeneratedModels/QueryChannelBansResponse.php create mode 100644 src/GeneratedModels/QueryChannelsDefaults.php create mode 100644 src/GeneratedModels/QueryScheduledMessagesRequest.php create mode 100644 src/GeneratedModels/QueryScheduledMessagesResponse.php create mode 100644 src/GeneratedModels/RingAttemptResponse.php create mode 100644 src/GeneratedModels/RingDeliveryResponse.php create mode 100644 src/GeneratedModels/RingSettledTarget.php create mode 100644 src/GeneratedModels/RingTargetResponse.php create mode 100644 src/GeneratedModels/ScheduledMessageChannelResponse.php create mode 100644 src/GeneratedModels/ScheduledMessageContentResponse.php create mode 100644 src/GeneratedModels/ScheduledMessageFailedEvent.php create mode 100644 src/GeneratedModels/ScheduledMessageLocation.php create mode 100644 src/GeneratedModels/ScheduledMessageResponse.php create mode 100644 src/GeneratedModels/ScheduledMessageSentEvent.php create mode 100644 src/GeneratedModels/ScheduledMessagesFilter.php create mode 100644 src/GeneratedModels/SendScheduledMessageNowRequest.php create mode 100644 src/GeneratedModels/SendScheduledMessageNowResponse.php create mode 100644 src/GeneratedModels/SetFeedsRetentionPolicyRequest.php create mode 100644 src/GeneratedModels/SetFeedsRetentionPolicyResponse.php create mode 100644 src/GeneratedModels/UpdateScheduledMessageRequest.php create mode 100644 src/GeneratedModels/UpdateScheduledMessageResponse.php create mode 100644 src/GeneratedModels/UpsertUserInterestsRequest.php create mode 100644 src/GeneratedModels/UpsertUserInterestsResponse.php create mode 100644 src/GeneratedModels/UserChannelBanCountRuleParameters.php create mode 100644 src/GeneratedModels/UserChannelCountRuleParameters.php create mode 100644 src/GeneratedModels/UserIdenticalImageCountParameters.php create mode 100644 src/GeneratedModels/UserInterestRequest.php create mode 100644 tests/Integration/ChatScheduledMessagesIntegrationTest.php diff --git a/src/Generated/ChatTrait.php b/src/Generated/ChatTrait.php index c8a8b64f..4e69cf24 100644 --- a/src/Generated/ChatTrait.php +++ b/src/Generated/ChatTrait.php @@ -147,7 +147,7 @@ public function queryChannels(GeneratedModels\QueryChannelsRequest $requestData) return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\QueryChannelsResponse::class); } /** - * Update channels in batch + * Update channels in batch. By default returns task_id for an asynchronous task. With synchronous: true, updateData accepts at most 100 explicit CIDs and returns a positive success_channels_count of channels selected for update after the database write completes, without task_id. Always poll a returned task_id, including when an older node ignores synchronous. * Sends events: * - channel.frozen * - channel.hidden @@ -383,6 +383,24 @@ public function updateChannel(string $type, string $id, GeneratedModels\UpdateCh // Use the provided request data array directly return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\UpdateChannelResponse::class); } + /** + * Lists the users banned from a channel, by a ban on the channel or by a future channel ban issued by the channel's creator, with one entry per user + * + * @param string $type + * @param string $id + * @param GeneratedModels\QueryChannelBansRequest $requestData + * @return StreamResponse + * @throws StreamException + */ + public function queryChannelBans(string $type, string $id, GeneratedModels\QueryChannelBansRequest $requestData): StreamResponse { + $path = '/api/v2/chat/channels/{type}/{id}/bans/query'; + $path = str_replace('{type}', (string) $type, $path); + $path = str_replace('{id}', (string) $id, $path); + + $queryParams = []; + // Use the provided request data array directly + return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\QueryChannelBansResponse::class); + } /** * Deletes a draft * Sends events: @@ -578,6 +596,7 @@ public function updateMemberPartial(string $type, string $id, GeneratedModels\Up * - channel.visible * - message.new * - message.updated + * - scheduled_message.created * * @param string $type * @param string $id @@ -1336,7 +1355,7 @@ public function deleteReminder(string $messageID, ?string $userID = null): Strea return StreamResponse::fromJson($this->makeRequest('DELETE', $path, $queryParams, $requestData), GeneratedModels\DeleteReminderResponse::class); } /** - * Updates an existing reminder + * Updates an existing reminder. remind_at and expires_at are both replaced on every call: omitting either one clears it * Sends events: * - reminder.updated * @@ -1354,7 +1373,7 @@ public function updateReminder(string $messageID, GeneratedModels\UpdateReminder return StreamResponse::fromJson($this->makeRequest('PATCH', $path, $queryParams, $requestData), GeneratedModels\UpdateReminderResponse::class); } /** - * Creates a new reminder + * Creates a new reminder. An optional expires_at hides the reminder from every read once it passes and stops it counting against the per-user reminder cap * Sends events: * - reminder.created * @@ -1663,6 +1682,73 @@ public function getRetentionPolicyRuns(GeneratedModels\GetRetentionPolicyRunsReq // Use the provided request data array directly return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\GetRetentionPolicyRunsResponse::class); } + /** + * Lists the scheduled messages of one user across channels: pending ones first, then failed ones, each by scheduled_at. Client-side requests return the caller's own; server-side requests require user_id + * + * @param GeneratedModels\QueryScheduledMessagesRequest $requestData + * @return StreamResponse + * @throws StreamException + */ + public function queryScheduledMessages(GeneratedModels\QueryScheduledMessagesRequest $requestData): StreamResponse { + $path = '/api/v2/chat/scheduled_messages/query'; + + $queryParams = []; + // Use the provided request data array directly + return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\QueryScheduledMessagesResponse::class); + } + /** + * Cancels a scheduled message so it is never sent, or removes a failed one. Returns 409 while the message is being sent + * Sends events: + * - scheduled_message.deleted + * + * @param string $id + * @return StreamResponse + * @throws StreamException + */ + public function deleteScheduledMessage(string $id): StreamResponse { + $path = '/api/v2/chat/scheduled_messages/{id}'; + $path = str_replace('{id}', (string) $id, $path); + + $queryParams = []; + $requestData = null; + return StreamResponse::fromJson($this->makeRequest('DELETE', $path, $queryParams, $requestData), GeneratedModels\DeleteScheduledMessageResponse::class); + } + /** + * Replaces the message and/or the send time of a scheduled message. The scheduling checks run again, and the message is then sent, under the caller's auth mode. A request that changes only scheduled_at keeps the auth mode the message was scheduled with. Returns 409 while the message is being sent + * Sends events: + * - scheduled_message.updated + * + * @param string $id + * @param GeneratedModels\UpdateScheduledMessageRequest $requestData + * @return StreamResponse + * @throws StreamException + */ + public function updateScheduledMessage(string $id, GeneratedModels\UpdateScheduledMessageRequest $requestData): StreamResponse { + $path = '/api/v2/chat/scheduled_messages/{id}'; + $path = str_replace('{id}', (string) $id, $path); + + $queryParams = []; + // Use the provided request data array directly + return StreamResponse::fromJson($this->makeRequest('PATCH', $path, $queryParams, $requestData), GeneratedModels\UpdateScheduledMessageResponse::class); + } + /** + * Moves the send time of a scheduled message to now and queues the send. Every send check runs when it is sent. Returns 409 while the message is being sent + * Sends events: + * - scheduled_message.updated + * + * @param string $id + * @param GeneratedModels\SendScheduledMessageNowRequest $requestData + * @return StreamResponse + * @throws StreamException + */ + public function sendScheduledMessageNow(string $id, GeneratedModels\SendScheduledMessageNowRequest $requestData): StreamResponse { + $path = '/api/v2/chat/scheduled_messages/{id}/send_now'; + $path = str_replace('{id}', (string) $id, $path); + + $queryParams = []; + // Use the provided request data array directly + return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\SendScheduledMessageNowResponse::class); + } /** * Search messages across channels * diff --git a/src/Generated/CommonTrait.php b/src/Generated/CommonTrait.php index e03a0eff..ec8d2cce 100644 --- a/src/Generated/CommonTrait.php +++ b/src/Generated/CommonTrait.php @@ -158,6 +158,20 @@ public function updateBlockList(string $name, GeneratedModels\UpdateBlockListReq // Use the provided request data array directly return StreamResponse::fromJson($this->makeRequest('PUT', $path, $queryParams, $requestData), GeneratedModels\UpdateBlockListResponse::class); } + /** + * Validates that Stream can publish to a customer-owned GCP Pub/Sub topic + * + * @param GeneratedModels\CheckGCPPubSubRequest $requestData + * @return StreamResponse + * @throws StreamException + */ + public function checkGCPPubSub(GeneratedModels\CheckGCPPubSubRequest $requestData): StreamResponse { + $path = '/api/v2/check_gcp_pubsub'; + + $queryParams = []; + // Use the provided request data array directly + return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\CheckGCPPubSubResponse::class); + } /** * Sends a test message via push, this is a test endpoint to verify your push settings * @@ -805,15 +819,19 @@ public function deletePollOption(string $pollID, string $optionID, ?string $user * * @param string $pollID * @param string $optionID + * @param ?string $userID * @return StreamResponse * @throws StreamException */ - public function getPollOption(string $pollID, string $optionID): StreamResponse { + public function getPollOption(string $pollID, string $optionID, ?string $userID = null): StreamResponse { $path = '/api/v2/polls/{poll_id}/options/{option_id}'; $path = str_replace('{poll_id}', (string) $pollID, $path); $path = str_replace('{option_id}', (string) $optionID, $path); $queryParams = []; + if ($userID !== null) { + $queryParams['user_id'] = $userID; + } $requestData = null; return StreamResponse::fromJson($this->makeRequest('GET', $path, $queryParams, $requestData), GeneratedModels\PollOptionResponse::class); } diff --git a/src/Generated/FeedsTrait.php b/src/Generated/FeedsTrait.php index 7606e824..06826e57 100644 --- a/src/Generated/FeedsTrait.php +++ b/src/Generated/FeedsTrait.php @@ -357,13 +357,17 @@ public function deleteActivity(string $id, ?bool $hardDelete = null, ?bool $dele * @param string $id * @param ?string $commentSort * @param ?int $commentLimit + * @param ?bool $skipOwnFollowings * @param ?string $userID * @param ?string $language * @param ?bool $translateText + * @param ?bool $includeTopLevelCommentCount + * @param ?bool $includeSoftDeletedActivities + * @param ?bool $includeModeratedActivities * @return StreamResponse * @throws StreamException */ - public function getActivity(string $id, ?string $commentSort = null, ?int $commentLimit = null, ?string $userID = null, ?string $language = null, ?bool $translateText = null): StreamResponse { + public function getActivity(string $id, ?string $commentSort = null, ?int $commentLimit = null, ?bool $skipOwnFollowings = null, ?string $userID = null, ?string $language = null, ?bool $translateText = null, ?bool $includeTopLevelCommentCount = null, ?bool $includeSoftDeletedActivities = null, ?bool $includeModeratedActivities = null): StreamResponse { $path = '/api/v2/feeds/activities/{id}'; $path = str_replace('{id}', (string) $id, $path); @@ -374,6 +378,9 @@ public function getActivity(string $id, ?string $commentSort = null, ?int $comme if ($commentLimit !== null) { $queryParams['comment_limit'] = $commentLimit; } + if ($skipOwnFollowings !== null) { + $queryParams['skip_own_followings'] = $skipOwnFollowings; + } if ($userID !== null) { $queryParams['user_id'] = $userID; } @@ -383,11 +390,20 @@ public function getActivity(string $id, ?string $commentSort = null, ?int $comme if ($translateText !== null) { $queryParams['translate_text'] = $translateText; } + if ($includeTopLevelCommentCount !== null) { + $queryParams['include_top_level_comment_count'] = $includeTopLevelCommentCount; + } + if ($includeSoftDeletedActivities !== null) { + $queryParams['include_soft_deleted_activities'] = $includeSoftDeletedActivities; + } + if ($includeModeratedActivities !== null) { + $queryParams['include_moderated_activities'] = $includeModeratedActivities; + } $requestData = null; return StreamResponse::fromJson($this->makeRequest('GET', $path, $queryParams, $requestData), GeneratedModels\GetActivityResponse::class); } /** - * Updates certain fields of the activity. Use 'set' to update specific fields and 'unset' to remove fields. This allows you to update only the fields you need without replacing the entire activity. Useful for updating reply restrictions ('restrict_replies'), mentioned users, or custom data. + * Updates certain fields of the activity. Use 'set' to update specific fields and 'unset' to remove fields. This allows you to update only the fields you need without replacing the entire activity. Useful for updating reply restrictions ('restrict_replies'), mentioned users, or custom data. Changing `feeds` is a placement change (add/delete on those feeds), not an activity content update. * Sends events: * - feeds.activity.updated * @@ -405,7 +421,7 @@ public function updateActivityPartial(string $id, GeneratedModels\UpdateActivity return StreamResponse::fromJson($this->makeRequest('PATCH', $path, $queryParams, $requestData), GeneratedModels\UpdateActivityPartialResponse::class); } /** - * Replaces an activity with the provided data. Use this to update text, attachments, reply restrictions ('restrict_replies'), mentioned users, and other activity fields. Note: This is a full update - any fields not provided will be cleared. + * Replaces an activity with the provided data. Use this to update text, attachments, reply restrictions ('restrict_replies'), mentioned users, and other activity fields. Note: This is a full update - any fields not provided will be cleared. Changing `feeds` is a placement change (add/delete on those feeds), not an activity content update. * Sends events: * - feeds.activity.updated * @@ -531,16 +547,20 @@ public function queryBookmarks(GeneratedModels\QueryBookmarksRequest $requestDat * Delete collections in a batch operation. Users can only delete their own collections. * * @param array $collectionRefs + * @param ?bool $hardDelete * @return StreamResponse * @throws StreamException */ - public function deleteCollections(array $collectionRefs): StreamResponse { + public function deleteCollections(array $collectionRefs, ?bool $hardDelete = null): StreamResponse { $path = '/api/v2/feeds/collections'; $queryParams = []; if ($collectionRefs !== null) { $queryParams['collection_refs'] = $collectionRefs; } + if ($hardDelete !== null) { + $queryParams['hard_delete'] = $hardDelete; + } $requestData = null; return StreamResponse::fromJson($this->makeRequest('DELETE', $path, $queryParams, $requestData), GeneratedModels\DeleteCollectionsResponse::class); } @@ -636,10 +656,11 @@ public function queryCollections(GeneratedModels\QueryCollectionsRequest $reques * @param ?int $limit * @param ?string $prev * @param ?string $next + * @param ?bool $includeTopLevelCommentCount * @return StreamResponse * @throws StreamException */ - public function getComments(string $objectID, string $objectType, ?int $depth = null, ?string $sort = null, ?int $repliesLimit = null, ?string $idAround = null, ?string $language = null, ?bool $translateText = null, ?string $userID = null, ?int $limit = null, ?string $prev = null, ?string $next = null): StreamResponse { + public function getComments(string $objectID, string $objectType, ?int $depth = null, ?string $sort = null, ?int $repliesLimit = null, ?string $idAround = null, ?string $language = null, ?bool $translateText = null, ?string $userID = null, ?int $limit = null, ?string $prev = null, ?string $next = null, ?bool $includeTopLevelCommentCount = null): StreamResponse { $path = '/api/v2/feeds/comments'; $queryParams = []; @@ -679,6 +700,9 @@ public function getComments(string $objectID, string $objectType, ?int $depth = if ($next !== null) { $queryParams['next'] = $next; } + if ($includeTopLevelCommentCount !== null) { + $queryParams['include_top_level_comment_count'] = $includeTopLevelCommentCount; + } $requestData = null; return StreamResponse::fromJson($this->makeRequest('GET', $path, $queryParams, $requestData), GeneratedModels\GetCommentsResponse::class); } @@ -867,6 +891,22 @@ public function updateComment(string $id, GeneratedModels\UpdateCommentRequest $ // Use the provided request data array directly return StreamResponse::fromJson($this->makeRequest('PATCH', $path, $queryParams, $requestData), GeneratedModels\UpdateCommentResponse::class); } + /** + * Hide or unhide a comment for the current user + * + * @param string $id + * @param GeneratedModels\CommentFeedbackRequest $requestData + * @return StreamResponse + * @throws StreamException + */ + public function commentFeedback(string $id, GeneratedModels\CommentFeedbackRequest $requestData): StreamResponse { + $path = '/api/v2/feeds/comments/{id}/feedback'; + $path = str_replace('{id}', (string) $id, $path); + + $queryParams = []; + // Use the provided request data array directly + return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\CommentFeedbackResponse::class); + } /** * Updates certain fields of the comment. Use 'set' to update specific fields and 'unset' to remove fields. * Sends events: @@ -1744,7 +1784,7 @@ public function getOrCreateFollows(GeneratedModels\FollowBatchRequest $requestDa return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\FollowBatchResponse::class); } /** - * Query follows based on filters with pagination and sorting options + * Query follows based on filters with pagination and sorting options. Server-side callers may set include_group_counts to also receive accepted following counts keyed by followed feed group. Requires exactly one source_feed / source_fid string equality. HTTP 400 if target_feed appears, if two source FIDs are given, or if $in / $or / $nor mentions those keys. * * @param GeneratedModels\QueryFollowsRequest $requestData * @return StreamResponse @@ -1873,6 +1913,61 @@ public function updateMembershipLevel(string $id, GeneratedModels\UpdateMembersh // Use the provided request data array directly return StreamResponse::fromJson($this->makeRequest('PATCH', $path, $queryParams, $requestData), GeneratedModels\UpdateMembershipLevelResponse::class); } + /** + * Returns the feeds retention policies configured for the app. Server-side only. + * + * @return StreamResponse + * @throws StreamException + */ + public function feedsGetRetentionPolicy(): StreamResponse { + $path = '/api/v2/feeds/retention_policy'; + + $queryParams = []; + $requestData = null; + return StreamResponse::fromJson($this->makeRequest('GET', $path, $queryParams, $requestData), GeneratedModels\GetFeedsRetentionPolicyResponse::class); + } + /** + * Creates or updates a feeds retention policy for the app (an app may have multiple, each scoped to feed groups). Server-side only. + * + * @param GeneratedModels\SetFeedsRetentionPolicyRequest $requestData + * @return StreamResponse + * @throws StreamException + */ + public function feedsSetRetentionPolicy(GeneratedModels\SetFeedsRetentionPolicyRequest $requestData): StreamResponse { + $path = '/api/v2/feeds/retention_policy'; + + $queryParams = []; + // Use the provided request data array directly + return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\SetFeedsRetentionPolicyResponse::class); + } + /** + * Removes the named feeds retention policy for the app (an app may hold several). Server-side only. + * + * @param GeneratedModels\DeleteFeedsRetentionPolicyRequest $requestData + * @return StreamResponse + * @throws StreamException + */ + public function feedsDeleteRetentionPolicy(GeneratedModels\DeleteFeedsRetentionPolicyRequest $requestData): StreamResponse { + $path = '/api/v2/feeds/retention_policy/delete'; + + $queryParams = []; + // Use the provided request data array directly + return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\DeleteFeedsRetentionPolicyResponse::class); + } + /** + * Returns filtered and sorted feeds retention cleanup run history for the app. Supports filter_conditions on 'policy' and 'date' fields. Server-side only. + * + * @param GeneratedModels\GetFeedsRetentionPolicyRunsRequest $requestData + * @return StreamResponse + * @throws StreamException + */ + public function feedsGetRetentionPolicyRuns(GeneratedModels\GetFeedsRetentionPolicyRunsRequest $requestData): StreamResponse { + $path = '/api/v2/feeds/retention_policy/runs'; + + $queryParams = []; + // Use the provided request data array directly + return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\GetFeedsRetentionPolicyRunsResponse::class); + } /** * Queries revision history for activities and comments * @@ -1977,7 +2072,26 @@ public function exportFeedUserData(string $userID): StreamResponse { return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\ExportFeedUserDataResponse::class); } /** - * Returns the user's most common interest tags ranked by the number of distinct activities they reacted to that carried each tag. Client-side callers may only read their own interests; server-side callers may fetch any user. Results are sorted by descending count, then alphabetically by tag. + * Removes the given interest tags from a user, whether they were set manually or computed from reactions. A removed computed tag returns on the next recomputation if the user's reactions still support it; to keep a tag out of ranking for good, set it with a weight of 0 or below instead. Client-side callers may only manage their own interests; server-side callers may manage any user. Returns the user's remaining interests. + * + * @param string $userID + * @param array $tags + * @return StreamResponse + * @throws StreamException + */ + public function deleteUserInterests(string $userID, array $tags): StreamResponse { + $path = '/api/v2/feeds/users/{user_id}/interests'; + $path = str_replace('{user_id}', (string) $userID, $path); + + $queryParams = []; + if ($tags !== null) { + $queryParams['tags'] = $tags; + } + $requestData = null; + return StreamResponse::fromJson($this->makeRequest('DELETE', $path, $queryParams, $requestData), GeneratedModels\DeleteUserInterestsResponse::class); + } + /** + * Returns the user's interest tags with their ranking weights: tags computed from the activities the user reacted to and tags set manually through the API. Client-side callers may only read their own interests; server-side callers may fetch any user. Results are sorted by descending weight, then manually set tags before computed ones, then descending count, then alphabetically by tag. * * @param string $userID * @param ?int $limit @@ -1995,4 +2109,20 @@ public function getUserInterests(string $userID, ?int $limit = null): StreamResp $requestData = null; return StreamResponse::fromJson($this->makeRequest('GET', $path, $queryParams, $requestData), GeneratedModels\GetUserInterestsResponse::class); } + /** + * Adds or updates interest tags on a user with explicit ranking weights. Tags set this way rank above the tags computed from the user's reactions at equal weight and are never overwritten by them. Client-side callers may only manage their own interests; server-side callers may manage any user. Returns the user's full interest list after the write. + * + * @param string $userID + * @param GeneratedModels\UpsertUserInterestsRequest $requestData + * @return StreamResponse + * @throws StreamException + */ + public function upsertUserInterests(string $userID, GeneratedModels\UpsertUserInterestsRequest $requestData): StreamResponse { + $path = '/api/v2/feeds/users/{user_id}/interests'; + $path = str_replace('{user_id}', (string) $userID, $path); + + $queryParams = []; + // Use the provided request data array directly + return StreamResponse::fromJson($this->makeRequest('PUT', $path, $queryParams, $requestData), GeneratedModels\UpsertUserInterestsResponse::class); + } } diff --git a/src/Generated/VideoTrait.php b/src/Generated/VideoTrait.php index a53b00ae..f22f60c6 100644 --- a/src/Generated/VideoTrait.php +++ b/src/Generated/VideoTrait.php @@ -58,6 +58,20 @@ public function queryCallMembers(GeneratedModels\QueryCallMembersRequest $reques // Use the provided request data array directly return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\QueryCallMembersResponse::class); } + /** + * Returns a call's ring attempts, newest first. A session can be rung more than once, and the session-level accepted_by / rejected_by / missed_by maps flatten every ring together; an attempt says which ring a user acted on, which devices it reached, and who settled it and why. Pass call_session_id to limit the read to one session. + * + * @param GeneratedModels\QueryCallRingAttemptsRequest $requestData + * @return StreamResponse + * @throws StreamException + */ + public function queryCallRingAttempts(GeneratedModels\QueryCallRingAttemptsRequest $requestData): StreamResponse { + $path = '/api/v2/video/call/ring_attempts'; + + $queryParams = []; + // Use the provided request data array directly + return StreamResponse::fromJson($this->makeRequest('POST', $path, $queryParams, $requestData), GeneratedModels\QueryCallRingAttemptsResponse::class); + } /** * * @param GeneratedModels\QueryCallStatsRequest $requestData diff --git a/src/Generated/Webhook.php b/src/Generated/Webhook.php index f72aa436..7acc0245 100644 --- a/src/Generated/Webhook.php +++ b/src/Generated/Webhook.php @@ -23,9 +23,12 @@ use GetStream\GeneratedModels\AsyncBulkImageModerationEvent; use GetStream\GeneratedModels\AsyncExportChannelsEvent; use GetStream\GeneratedModels\AsyncExportErrorEvent; +use GetStream\GeneratedModels\AsyncExportLabelResultsEvent; use GetStream\GeneratedModels\AsyncExportModerationLogsEvent; use GetStream\GeneratedModels\AsyncExportReviewQueueEvent; use GetStream\GeneratedModels\AsyncExportUsersEvent; +use GetStream\GeneratedModels\AsyncImportErrorEvent; +use GetStream\GeneratedModels\AsyncImportSuccessEvent; use GetStream\GeneratedModels\BlockedUserEvent; use GetStream\GeneratedModels\BookmarkAddedEvent; use GetStream\GeneratedModels\BookmarkDeletedEvent; @@ -63,6 +66,7 @@ use GetStream\GeneratedModels\CallRecordingStoppedEvent; use GetStream\GeneratedModels\CallRejectedEvent; use GetStream\GeneratedModels\CallRingEvent; +use GetStream\GeneratedModels\CallRingSettledEvent; use GetStream\GeneratedModels\CallRtmpBroadcastFailedEvent; use GetStream\GeneratedModels\CallRtmpBroadcastStartedEvent; use GetStream\GeneratedModels\CallRtmpBroadcastStoppedEvent; @@ -96,6 +100,7 @@ use GetStream\GeneratedModels\ClosedCaptionEvent; use GetStream\GeneratedModels\CommentAddedEvent; use GetStream\GeneratedModels\CommentDeletedEvent; +use GetStream\GeneratedModels\CommentFeedbackEvent; use GetStream\GeneratedModels\CommentReactionAddedEvent; use GetStream\GeneratedModels\CommentReactionDeletedEvent; use GetStream\GeneratedModels\CommentReactionUpdatedEvent; @@ -144,6 +149,12 @@ use GetStream\GeneratedModels\NotificationThreadMessageNewEvent; use GetStream\GeneratedModels\PendingMessageEvent; use GetStream\GeneratedModels\PermissionRequestEvent; +use GetStream\GeneratedModels\PollClosedEvent; +use GetStream\GeneratedModels\PollDeletedEvent; +use GetStream\GeneratedModels\PollUpdatedEvent; +use GetStream\GeneratedModels\PollVoteCastedEvent; +use GetStream\GeneratedModels\PollVoteChangedEvent; +use GetStream\GeneratedModels\PollVoteRemovedEvent; use GetStream\GeneratedModels\ReactionDeletedEvent; use GetStream\GeneratedModels\ReactionNewEvent; use GetStream\GeneratedModels\ReactionUpdatedEvent; @@ -153,6 +164,8 @@ use GetStream\GeneratedModels\ReminderUpdatedEvent; use GetStream\GeneratedModels\ReviewQueueItemNewEvent; use GetStream\GeneratedModels\ReviewQueueItemUpdatedEvent; +use GetStream\GeneratedModels\ScheduledMessageFailedEvent; +use GetStream\GeneratedModels\ScheduledMessageSentEvent; use GetStream\GeneratedModels\StoriesFeedUpdatedEvent; use GetStream\GeneratedModels\ThreadUpdatedEvent; use GetStream\GeneratedModels\UnblockedUserEvent; @@ -226,6 +239,7 @@ class Webhook public const EVENT_TYPE_CALL_RECORDING_STOPPED = 'call.recording_stopped'; public const EVENT_TYPE_CALL_REJECTED = 'call.rejected'; public const EVENT_TYPE_CALL_RING = 'call.ring'; + public const EVENT_TYPE_CALL_RING_SETTLED = 'call.ring_settled'; public const EVENT_TYPE_CALL_RTMP_BROADCAST_FAILED = 'call.rtmp_broadcast_failed'; public const EVENT_TYPE_CALL_RTMP_BROADCAST_STARTED = 'call.rtmp_broadcast_started'; public const EVENT_TYPE_CALL_RTMP_BROADCAST_STOPPED = 'call.rtmp_broadcast_stopped'; @@ -263,6 +277,8 @@ class Webhook public const EVENT_TYPE_EXPORT_BULK_IMAGE_MODERATION_SUCCESS = 'export.bulk_image_moderation.success'; public const EVENT_TYPE_EXPORT_CHANNELS_ERROR = 'export.channels.error'; public const EVENT_TYPE_EXPORT_CHANNELS_SUCCESS = 'export.channels.success'; + public const EVENT_TYPE_EXPORT_LABEL_RESULTS_ERROR = 'export.label_results.error'; + public const EVENT_TYPE_EXPORT_LABEL_RESULTS_SUCCESS = 'export.label_results.success'; public const EVENT_TYPE_EXPORT_MODERATION_LOGS_ERROR = 'export.moderation_logs.error'; public const EVENT_TYPE_EXPORT_MODERATION_LOGS_SUCCESS = 'export.moderation_logs.success'; public const EVENT_TYPE_EXPORT_REVIEW_QUEUE_ERROR = 'export.review_queue.error'; @@ -288,6 +304,7 @@ class Webhook public const EVENT_TYPE_FEEDS_BOOKMARK_FOLDER_UPDATED = 'feeds.bookmark_folder.updated'; public const EVENT_TYPE_FEEDS_COMMENT_ADDED = 'feeds.comment.added'; public const EVENT_TYPE_FEEDS_COMMENT_DELETED = 'feeds.comment.deleted'; + public const EVENT_TYPE_FEEDS_COMMENT_FEEDBACK = 'feeds.comment.feedback'; public const EVENT_TYPE_FEEDS_COMMENT_REACTION_ADDED = 'feeds.comment.reaction.added'; public const EVENT_TYPE_FEEDS_COMMENT_REACTION_DELETED = 'feeds.comment.reaction.deleted'; public const EVENT_TYPE_FEEDS_COMMENT_REACTION_UPDATED = 'feeds.comment.reaction.updated'; @@ -308,6 +325,8 @@ class Webhook public const EVENT_TYPE_FEEDS_NOTIFICATION_FEED_UPDATED = 'feeds.notification_feed.updated'; public const EVENT_TYPE_FEEDS_STORIES_FEED_UPDATED = 'feeds.stories_feed.updated'; public const EVENT_TYPE_FLAG_UPDATED = 'flag.updated'; + public const EVENT_TYPE_IMPORT_ERROR = 'import.error'; + public const EVENT_TYPE_IMPORT_SUCCESS = 'import.success'; public const EVENT_TYPE_INGRESS_ERROR = 'ingress.error'; public const EVENT_TYPE_INGRESS_STARTED = 'ingress.started'; public const EVENT_TYPE_INGRESS_STOPPED = 'ingress.stopped'; @@ -333,6 +352,12 @@ class Webhook public const EVENT_TYPE_NOTIFICATION_MARK_UNREAD = 'notification.mark_unread'; public const EVENT_TYPE_NOTIFICATION_REMINDER_DUE = 'notification.reminder_due'; public const EVENT_TYPE_NOTIFICATION_THREAD_MESSAGE_NEW = 'notification.thread_message_new'; + public const EVENT_TYPE_POLL_CLOSED = 'poll.closed'; + public const EVENT_TYPE_POLL_DELETED = 'poll.deleted'; + public const EVENT_TYPE_POLL_UPDATED = 'poll.updated'; + public const EVENT_TYPE_POLL_VOTE_CASTED = 'poll.vote_casted'; + public const EVENT_TYPE_POLL_VOTE_CHANGED = 'poll.vote_changed'; + public const EVENT_TYPE_POLL_VOTE_REMOVED = 'poll.vote_removed'; public const EVENT_TYPE_REACTION_DELETED = 'reaction.deleted'; public const EVENT_TYPE_REACTION_NEW = 'reaction.new'; public const EVENT_TYPE_REACTION_UPDATED = 'reaction.updated'; @@ -341,6 +366,8 @@ class Webhook public const EVENT_TYPE_REMINDER_UPDATED = 'reminder.updated'; public const EVENT_TYPE_REVIEW_QUEUE_ITEM_NEW = 'review_queue_item.new'; public const EVENT_TYPE_REVIEW_QUEUE_ITEM_UPDATED = 'review_queue_item.updated'; + public const EVENT_TYPE_SCHEDULED_MESSAGE_FAILED = 'scheduled_message.failed'; + public const EVENT_TYPE_SCHEDULED_MESSAGE_SENT = 'scheduled_message.sent'; public const EVENT_TYPE_THREAD_UPDATED = 'thread.updated'; public const EVENT_TYPE_USER_BANNED = 'user.banned'; public const EVENT_TYPE_USER_DEACTIVATED = 'user.deactivated'; @@ -468,6 +495,7 @@ private static function getEventClass(string $eventType): ?string 'call.recording_stopped' => CallRecordingStoppedEvent::class, 'call.rejected' => CallRejectedEvent::class, 'call.ring' => CallRingEvent::class, + 'call.ring_settled' => CallRingSettledEvent::class, 'call.rtmp_broadcast_failed' => CallRtmpBroadcastFailedEvent::class, 'call.rtmp_broadcast_started' => CallRtmpBroadcastStartedEvent::class, 'call.rtmp_broadcast_stopped' => CallRtmpBroadcastStoppedEvent::class, @@ -505,6 +533,8 @@ private static function getEventClass(string $eventType): ?string 'export.bulk_image_moderation.success' => AsyncBulkImageModerationEvent::class, 'export.channels.error' => AsyncExportErrorEvent::class, 'export.channels.success' => AsyncExportChannelsEvent::class, + 'export.label_results.error' => AsyncExportErrorEvent::class, + 'export.label_results.success' => AsyncExportLabelResultsEvent::class, 'export.moderation_logs.error' => AsyncExportErrorEvent::class, 'export.moderation_logs.success' => AsyncExportModerationLogsEvent::class, 'export.review_queue.error' => AsyncExportErrorEvent::class, @@ -530,6 +560,7 @@ private static function getEventClass(string $eventType): ?string 'feeds.bookmark_folder.updated' => BookmarkFolderUpdatedEvent::class, 'feeds.comment.added' => CommentAddedEvent::class, 'feeds.comment.deleted' => CommentDeletedEvent::class, + 'feeds.comment.feedback' => CommentFeedbackEvent::class, 'feeds.comment.reaction.added' => CommentReactionAddedEvent::class, 'feeds.comment.reaction.deleted' => CommentReactionDeletedEvent::class, 'feeds.comment.reaction.updated' => CommentReactionUpdatedEvent::class, @@ -550,6 +581,8 @@ private static function getEventClass(string $eventType): ?string 'feeds.notification_feed.updated' => NotificationFeedUpdatedEvent::class, 'feeds.stories_feed.updated' => StoriesFeedUpdatedEvent::class, 'flag.updated' => FlagUpdatedEvent::class, + 'import.error' => AsyncImportErrorEvent::class, + 'import.success' => AsyncImportSuccessEvent::class, 'ingress.error' => IngressErrorEvent::class, 'ingress.started' => IngressStartedEvent::class, 'ingress.stopped' => IngressStoppedEvent::class, @@ -575,6 +608,12 @@ private static function getEventClass(string $eventType): ?string 'notification.mark_unread' => NotificationMarkUnreadEvent::class, 'notification.reminder_due' => ReminderNotificationEvent::class, 'notification.thread_message_new' => NotificationThreadMessageNewEvent::class, + 'poll.closed' => PollClosedEvent::class, + 'poll.deleted' => PollDeletedEvent::class, + 'poll.updated' => PollUpdatedEvent::class, + 'poll.vote_casted' => PollVoteCastedEvent::class, + 'poll.vote_changed' => PollVoteChangedEvent::class, + 'poll.vote_removed' => PollVoteRemovedEvent::class, 'reaction.deleted' => ReactionDeletedEvent::class, 'reaction.new' => ReactionNewEvent::class, 'reaction.updated' => ReactionUpdatedEvent::class, @@ -583,6 +622,8 @@ private static function getEventClass(string $eventType): ?string 'reminder.updated' => ReminderUpdatedEvent::class, 'review_queue_item.new' => ReviewQueueItemNewEvent::class, 'review_queue_item.updated' => ReviewQueueItemUpdatedEvent::class, + 'scheduled_message.failed' => ScheduledMessageFailedEvent::class, + 'scheduled_message.sent' => ScheduledMessageSentEvent::class, 'thread.updated' => ThreadUpdatedEvent::class, 'user.banned' => UserBannedEvent::class, 'user.deactivated' => UserDeactivatedEvent::class, diff --git a/src/GeneratedModels/AIAudioConfigRequest.php b/src/GeneratedModels/AIAudioConfigRequest.php index ed2ec41e..5431f846 100644 --- a/src/GeneratedModels/AIAudioConfigRequest.php +++ b/src/GeneratedModels/AIAudioConfigRequest.php @@ -6,10 +6,12 @@ class AIAudioConfigRequest extends BaseModel { public function __construct( - public ?string $profile = null, + public ?string $profile = null, // Bodyguard credentials profile to classify transcripts with. Applies to the NLP engine only; ignored when LLM configurability is enabled. Empty falls back to the app-pinned profile, then the organization's top-level credentials /** @var array|null */ #[ArrayOf(BodyguardRule::class)] - public ?array $rules = null, + public ?array $rules = null, // Deprecated pre-split rule list. Still the live config while no engine config exists; once one does it is kept as a fallback for whichever engine has none of its own + public ?AITextConfig $aiTextConfig = null, + public ?LLMConfig $llmConfig = null, ) { } diff --git a/src/GeneratedModels/AIAudioConfigResponse.php b/src/GeneratedModels/AIAudioConfigResponse.php index 9e135294..6e6601dc 100644 --- a/src/GeneratedModels/AIAudioConfigResponse.php +++ b/src/GeneratedModels/AIAudioConfigResponse.php @@ -6,11 +6,13 @@ class AIAudioConfigResponse extends BaseModel { public function __construct( - public ?bool $enabled = null, - public ?string $profile = null, + public ?bool $enabled = null, // Whether the engine selected by the application's LLM configurability flag has a rule that does something. Derived, not stored + public ?string $profile = null, // Bodyguard credentials profile transcripts are classified with. Applies to the NLP engine only /** @var array|null */ #[ArrayOf(BodyguardRule::class)] - public ?array $rules = null, + public ?array $rules = null, // The active engine's rules, flattened into the pre-split shape for clients that predate the per-engine configs. This is the whole config for a policy that has no per-engine config stored + public ?AITextConfig $aiTextConfig = null, + public ?LLMConfig $llmConfig = null, ) { } diff --git a/src/GeneratedModels/AIVideoConfig.php b/src/GeneratedModels/AIVideoConfig.php index 48b77486..40ba94cf 100644 --- a/src/GeneratedModels/AIVideoConfig.php +++ b/src/GeneratedModels/AIVideoConfig.php @@ -11,7 +11,6 @@ public function __construct( /** @var array|null */ #[ArrayOf(AWSRekognitionRule::class)] public ?array $rules = null, - public ?string $provider = null, ) { } diff --git a/src/GeneratedModels/APIError.php b/src/GeneratedModels/APIError.php index 6654dffe..69d0184a 100644 --- a/src/GeneratedModels/APIError.php +++ b/src/GeneratedModels/APIError.php @@ -14,6 +14,7 @@ public function __construct( public ?string $moreInfo = null, // URL with additional information public ?array $details = null, // Additional error-specific information public ?bool $unrecoverable = null, // Flag that indicates if the error is unrecoverable, requests that return unrecoverable errors should not be retried, this error only applies to the request that caused it + public ?int $cooldownRemainingMs = null, // Milliseconds until the user's slow mode cool down period ends. Only set on code 60 (cool down) errors ) { } diff --git a/src/GeneratedModels/ActivityResponse.php b/src/GeneratedModels/ActivityResponse.php index 63047356..d563e3cc 100644 --- a/src/GeneratedModels/ActivityResponse.php +++ b/src/GeneratedModels/ActivityResponse.php @@ -44,6 +44,7 @@ public function __construct( public ?ModerationV2Response $moderation = null, public ?string $moderationAction = null, public ?int $commentCount = null, // Number of comments on the activity + public ?int $topLevelCommentCount = null, // Number of top-level comments (comments directly on the activity, excluding replies). Only returned by GetActivity when include_top_level_comment_count=true; never set on feed reads or events. Same status/deletion rules as comment_count; not adjusted per viewer. public ?int $bookmarkCount = null, // Number of bookmarks on the activity public ?int $shareCount = null, // Number of times the activity was shared public ?int $reactionCount = null, // Number of reactions to the activity diff --git a/src/GeneratedModels/ActivitySelectorConfig.php b/src/GeneratedModels/ActivitySelectorConfig.php index a90f63a3..924bc185 100644 --- a/src/GeneratedModels/ActivitySelectorConfig.php +++ b/src/GeneratedModels/ActivitySelectorConfig.php @@ -15,6 +15,8 @@ public function __construct( public ?string $cutoffWindow = null, // Flexible relative time window for activity selection (e.g., '1h', '3d', '1y'). Activities older than this duration will be filtered out. Cannot be used together with cutoff_time public ?int $minPopularity = null, // Minimum popularity threshold. For the 'popular' selector, omit to use the default (5); values below 1 are rejected public ?FeedGroupScope $feedGroups = null, + public ?int $rankingCandidateLimit = null, // Maximum number of candidate activities this selector contributes to a ranked feed (1-1000). Omit to use the default ranking buffer. Only supported on the popular, proximity, interest and query selectors, and ignored on feeds without ranking + public ?int $timeBudgetMs = null, // Maximum time in milliseconds this selector may take (25-5000). A selector that runs over its budget is dropped from that read instead of failing it, and stays out for the rest of that pagination session. The budget can only tighten the default, never extend it. Omit to use the default. Only supported on the popular, proximity, interest, query and follow_suggestion selectors public ?object $params = null, ) { } diff --git a/src/GeneratedModels/ActivitySelectorConfigResponse.php b/src/GeneratedModels/ActivitySelectorConfigResponse.php index bc1e540d..853cf6fc 100644 --- a/src/GeneratedModels/ActivitySelectorConfigResponse.php +++ b/src/GeneratedModels/ActivitySelectorConfigResponse.php @@ -15,6 +15,8 @@ public function __construct( public ?string $cutoffWindow = null, // Flexible relative time window for activity selection (e.g., '1h', '3d', '1y') public ?int $minPopularity = null, // Minimum popularity threshold. For the 'popular' selector, values below 1 are normalized to the default (5) at read time. public ?FeedGroupScope $feedGroups = null, + public ?int $rankingCandidateLimit = null, // Maximum number of candidate activities this selector contributes to a ranked feed + public ?int $timeBudgetMs = null, // Maximum time in milliseconds this selector may take before it is dropped from the read public ?object $params = null, // Generic params for selector-specific configuration ) { } diff --git a/src/GeneratedModels/AddActivityRequest.php b/src/GeneratedModels/AddActivityRequest.php index 3938b1aa..84cbeb8e 100644 --- a/src/GeneratedModels/AddActivityRequest.php +++ b/src/GeneratedModels/AddActivityRequest.php @@ -38,6 +38,7 @@ public function __construct( public ?bool $enrichOwnFields = null, public ?bool $forceModeration = null, public ?bool $createUsers = null, + public ?bool $skipExisting = null, ) { } diff --git a/src/GeneratedModels/AddActivityResponse.php b/src/GeneratedModels/AddActivityResponse.php index 8146267c..c27acdff 100644 --- a/src/GeneratedModels/AddActivityResponse.php +++ b/src/GeneratedModels/AddActivityResponse.php @@ -8,6 +8,7 @@ class AddActivityResponse extends BaseModel public function __construct( public ?ActivityResponse $activity = null, public ?int $mentionNotificationsCreated = null, // Number of mention notification activities created for mentioned users + public ?array $skippedExisting = null, // Contains the activity ID when skip_existing is true and the activity already existed, so it was left unchanged. public ?string $duration = null, ) { } diff --git a/src/GeneratedModels/AddCommentReactionResponse.php b/src/GeneratedModels/AddCommentReactionResponse.php index d5b0d308..22c2b585 100644 --- a/src/GeneratedModels/AddCommentReactionResponse.php +++ b/src/GeneratedModels/AddCommentReactionResponse.php @@ -13,6 +13,9 @@ public function __construct( public ?bool $notificationAccepted = null, // Whether notification creation was accepted for asynchronous processing public ?string $notificationTaskID = null, // ID of the async notification-creation task; poll GET /tasks/{id} for its status public ?ActivityResponse $referenceActivity = null, + public ?string $outcome = null, // What this write did to the user's reaction on this target. One of: created, replaced, unchanged. 'created' means a new reaction was written and nothing was replaced; 'replaced' means enforce_unique removed one or more of the user's other reaction types; 'unchanged' means the user already held this reaction type (its custom data may still have been updated). Without enforce_unique a user can hold several reaction types on one target, so 'created' then means 'this reaction type was newly added', not 'the user's first reaction on this target'. + public ?string $previousReactionType = null, // The reaction type this write replaced, or null when nothing was replaced. Non-null exactly when outcome is 'replaced'. If enforce_unique removed several reactions — possible only for data created before enforce_unique was adopted — this is the most recently created one. + public ?int $counterDelta = null, // The change this write made to the number of reactions the user holds on this target: 1 when outcome is 'created', 0 when it is 'replaced' or 'unchanged'. These endpoints never return -1; a successful delete-reaction call is what decrements the count. With enforce_unique this is the delta of the user's reaction on the target; without it, the delta of reactions of this type. public ?string $duration = null, // Duration of the request ) { } diff --git a/src/GeneratedModels/AddReactionResponse.php b/src/GeneratedModels/AddReactionResponse.php index 32d16bf9..edaebed7 100644 --- a/src/GeneratedModels/AddReactionResponse.php +++ b/src/GeneratedModels/AddReactionResponse.php @@ -13,6 +13,9 @@ public function __construct( public ?bool $notificationAccepted = null, // Whether notification creation was accepted for asynchronous processing public ?string $notificationTaskID = null, // ID of the async notification-creation task; poll GET /tasks/{id} for its status public ?ActivityResponse $referenceActivity = null, + public ?string $outcome = null, // What this write did to the user's reaction on this target. One of: created, replaced, unchanged. 'created' means a new reaction was written and nothing was replaced; 'replaced' means enforce_unique removed one or more of the user's other reaction types; 'unchanged' means the user already held this reaction type (its custom data may still have been updated). Without enforce_unique a user can hold several reaction types on one target, so 'created' then means 'this reaction type was newly added', not 'the user's first reaction on this target'. + public ?string $previousReactionType = null, // The reaction type this write replaced, or null when nothing was replaced. Non-null exactly when outcome is 'replaced'. If enforce_unique removed several reactions — possible only for data created before enforce_unique was adopted — this is the most recently created one. + public ?int $counterDelta = null, // The change this write made to the number of reactions the user holds on this target: 1 when outcome is 'created', 0 when it is 'replaced' or 'unchanged'. These endpoints never return -1; a successful delete-reaction call is what decrements the count. With enforce_unique this is the delta of the user's reaction on the target; without it, the delta of reactions of this type. public ?string $duration = null, ) { } diff --git a/src/GeneratedModels/AggregationConfig.php b/src/GeneratedModels/AggregationConfig.php index 7d45d1d9..bbfff28b 100644 --- a/src/GeneratedModels/AggregationConfig.php +++ b/src/GeneratedModels/AggregationConfig.php @@ -7,6 +7,7 @@ class AggregationConfig extends BaseModel { public function __construct( public ?string $format = null, // Format for activity aggregation + public ?int $groupSize = null, // Maximum number of activities kept in each aggregated group. Omit to use the default: 15 for apps migrated from Feeds v2 or created on or after 2026-10-11, 100 otherwise. Must be between 1 and 100 when set. public ?string $scoreStrategy = null, // Strategy for computing aggregated group scores from member activity scores when ranking is enabled. Valid values: sum, max, avg public ?string $activitiesSort = null, // Order of member activities inside each aggregated group for non-stories feeds: created_at_desc (newest first, default) or created_at_asc (oldest first). Stories feeds ignore this and always use oldest first. ) { diff --git a/src/GeneratedModels/AnalyzeRequest.php b/src/GeneratedModels/AnalyzeRequest.php index 0649eace..fcf334a8 100644 --- a/src/GeneratedModels/AnalyzeRequest.php +++ b/src/GeneratedModels/AnalyzeRequest.php @@ -15,6 +15,7 @@ public function __construct( public ?\DateTime $contentPublishedAt = null, // Original timestamp when the content was produced. Used as the `published_at` timestamp on per-content log entries that surface in `matched_contents` on aggregation-rule webhooks. public ?array $contentIds = null, // Optional map from a content label (either a `texts` key or an `image:` multipart label) to a caller-supplied per-instance identifier. Echoed on per-field verdicts and surfaced in `matched_contents` when an aggregation rule fires. public ?bool $asyncResponse = null, // When true, the response carries no verdicts (status `pending`) and per-modality results arrive via `moderation.text_analysis.complete` and `moderation.image_analysis.complete` webhooks. Image moderation runs on a background worker; text moderation runs synchronously and is then delivered via webhook. + public ?string $countryCode = null, // ISO 3166-1 alpha-2 country the content is aimed at (e.g. US, DE). Forwarded to the AI text provider as country context so it can resolve words whose meaning changes between countries. public ?string $userID = null, public ?UserRequest $user = null, // User request object ) { diff --git a/src/GeneratedModels/AnalyzeResponse.php b/src/GeneratedModels/AnalyzeResponse.php index aaf12cfa..fa92541a 100644 --- a/src/GeneratedModels/AnalyzeResponse.php +++ b/src/GeneratedModels/AnalyzeResponse.php @@ -14,6 +14,8 @@ public function __construct( #[MapOf(AnalyzeImageField::class)] public ?array $images = null, // Per-image moderation verdicts keyed by caller label. public ?string $duration = null, + public ?string $llmModel = null, // ID of the LLM model that scored the content (e.g. gpt-4o-mini). Omitted when no LLM verdict was used (e.g. Bodyguard-only, or `pending`). + public ?string $llmReasoningEffort = null, // reasoning_effort sent with the LLM request. Omitted when the request did not send one. ) { } diff --git a/src/GeneratedModels/AppDefaults.php b/src/GeneratedModels/AppDefaults.php new file mode 100644 index 00000000..1d50ba70 --- /dev/null +++ b/src/GeneratedModels/AppDefaults.php @@ -0,0 +1,19 @@ +|null */ @@ -33,6 +33,8 @@ public function __construct( public ?string $aiTextSeverity = null, // Text severity level assigned by the AI provider public ?string $configKey = null, // Moderation policy key that was applied public ?string $reviewQueueItemID = null, // ID of the review queue item linked to this appeal, if the appeal was submitted with one + public ?array $languages = null, // Detected languages in the content + public ?string $appealReasonLanguage = null, // Detected language of the appeal_reason text itself ) { } diff --git a/src/GeneratedModels/AppealRequest.php b/src/GeneratedModels/AppealRequest.php index 030c18f3..3ececad0 100644 --- a/src/GeneratedModels/AppealRequest.php +++ b/src/GeneratedModels/AppealRequest.php @@ -11,6 +11,7 @@ public function __construct( public ?string $appealReason = null, // Explanation for why the content is being appealed public ?array $attachments = null, // Array of Attachment URLs(e.g., images) public ?string $reviewQueueItemID = null, // ID of the review queue item (flagged message) that triggered the ban. Applicable only for user ban appeals. + public ?string $channelCid = null, // CID of the channel ban being appealed. Only used when entity_type is stream:user; omit to appeal the global ban. public ?string $userID = null, public ?UserRequest $user = null, // User request object ) { diff --git a/src/GeneratedModels/AsyncExportLabelResultsEvent.php b/src/GeneratedModels/AsyncExportLabelResultsEvent.php new file mode 100644 index 00000000..aa9cccde --- /dev/null +++ b/src/GeneratedModels/AsyncExportLabelResultsEvent.php @@ -0,0 +1,22 @@ +|null */ + #[MapOf(RingSettledTarget::class)] + public ?array $targets = null, // Final state of every rung user, keyed by user ID + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/CallSettingsRequest.php b/src/GeneratedModels/CallSettingsRequest.php index 30289d2b..7db73386 100644 --- a/src/GeneratedModels/CallSettingsRequest.php +++ b/src/GeneratedModels/CallSettingsRequest.php @@ -23,6 +23,7 @@ public function __construct( public ?SessionSettingsRequest $session = null, public ?IngressSettingsRequest $ingress = null, public ?EncryptionSettingsRequest $encryption = null, + public ?LifecycleSettingsRequest $lifecycle = null, ) { } diff --git a/src/GeneratedModels/CallSettingsResponse.php b/src/GeneratedModels/CallSettingsResponse.php index 817a183e..a6c43a1e 100644 --- a/src/GeneratedModels/CallSettingsResponse.php +++ b/src/GeneratedModels/CallSettingsResponse.php @@ -23,6 +23,7 @@ public function __construct( public ?SessionSettingsResponse $session = null, public ?IngressSettingsResponse $ingress = null, public ?EncryptionSettingsResponse $encryption = null, // EncryptionSettings is the payload for end-to-end encryption settings + public ?LifecycleSettingsResponse $lifecycle = null, // LifecycleSettings is the payload for call lifecycle settings ) { } diff --git a/src/GeneratedModels/CastPollVoteRequest.php b/src/GeneratedModels/CastPollVoteRequest.php index 1923c3bf..01302d6a 100644 --- a/src/GeneratedModels/CastPollVoteRequest.php +++ b/src/GeneratedModels/CastPollVoteRequest.php @@ -7,6 +7,8 @@ class CastPollVoteRequest extends BaseModel { public function __construct( public ?VoteData $vote = null, + public ?string $configKey = null, // Key of the moderation configuration to use. Server-side only. + public ?string $configTeam = null, // Team associated with the configuration. Server-side only. public ?string $userID = null, public ?UserRequest $user = null, // User request object ) { diff --git a/src/GeneratedModels/ChannelBanResponse.php b/src/GeneratedModels/ChannelBanResponse.php new file mode 100644 index 00000000..3a227b5a --- /dev/null +++ b/src/GeneratedModels/ChannelBanResponse.php @@ -0,0 +1,19 @@ +|null */ #[ArrayOf(Command::class)] diff --git a/src/GeneratedModels/ChannelOwnCapability.php b/src/GeneratedModels/ChannelOwnCapability.php index ffb85a8f..956f5483 100644 --- a/src/GeneratedModels/ChannelOwnCapability.php +++ b/src/GeneratedModels/ChannelOwnCapability.php @@ -4,7 +4,7 @@ namespace GetStream\GeneratedModels; /** - * All possibility of string to use + * An action that can be performed in a channel. */ class ChannelOwnCapability extends BaseModel { diff --git a/src/GeneratedModels/ChannelPushPreferencesResponse.php b/src/GeneratedModels/ChannelPushPreferencesResponse.php index 12bedeaa..dffc95f8 100644 --- a/src/GeneratedModels/ChannelPushPreferencesResponse.php +++ b/src/GeneratedModels/ChannelPushPreferencesResponse.php @@ -3,12 +3,15 @@ declare(strict_types=1); namespace GetStream\GeneratedModels; +/** + * The push preference details. + */ class ChannelPushPreferencesResponse extends BaseModel { public function __construct( - public ?string $chatLevel = null, + public ?string $chatLevel = null, // The scope level of the push notifications. public ?ChatPreferencesResponse $chatPreferences = null, - public ?\DateTime $disabledUntil = null, + public ?\DateTime $disabledUntil = null, // If provided the notifications will be disabled until the set date. ) { } diff --git a/src/GeneratedModels/ChannelStateResponse.php b/src/GeneratedModels/ChannelStateResponse.php index 7d0de616..1f6943a5 100644 --- a/src/GeneratedModels/ChannelStateResponse.php +++ b/src/GeneratedModels/ChannelStateResponse.php @@ -9,35 +9,39 @@ public function __construct( public ?ChannelResponse $channel = null, // Represents channel in chat /** @var array|null */ #[ArrayOf(MessageResponse::class)] - public ?array $messages = null, + public ?array $messages = null, // List of channel messages /** @var array|null */ #[ArrayOf(MessageResponse::class)] - public ?array $pinnedMessages = null, - public ?int $watcherCount = null, + public ?array $pinnedMessages = null, // List of pinned messages in the channel + public ?int $watcherCount = null, // Number of channel watchers /** @var array|null */ #[ArrayOf(UserResponse::class)] - public ?array $watchers = null, + public ?array $watchers = null, // List of user who is watching the channel /** @var array|null */ #[ArrayOf(ReadStateResponse::class)] - public ?array $read = null, + public ?array $read = null, // List of read states /** @var array|null */ #[ArrayOf(ChannelMemberResponse::class)] - public ?array $members = null, + public ?array $members = null, // List of channel members public ?ChannelMemberResponse $membership = null, - public ?ChannelPushPreferencesResponse $pushPreferences = null, + public ?ChannelPushPreferencesResponse $pushPreferences = null, // The push preference details. /** @var array|null */ #[ArrayOf(ThreadStateResponse::class)] public ?array $threads = null, - public ?bool $hidden = null, - public ?\DateTime $hideMessagesBefore = null, + public ?bool $hidden = null, // Whether this channel is hidden or not + public ?\DateTime $hideMessagesBefore = null, // Messages before this date are hidden from the user /** @var array|null */ #[ArrayOf(PendingMessageResponse::class)] - public ?array $pendingMessages = null, + public ?array $pendingMessages = null, // Pending messages that this user has sent public ?DraftResponse $draft = null, /** @var array|null */ #[ArrayOf(SharedLocationResponseData::class)] - public ?array $activeLiveLocations = null, + public ?array $activeLiveLocations = null, // Active live locations in the channel + public ?int $cooldownRemainingMs = null, // Milliseconds until the current user's slow mode cool down period ends. Only set on client-side get or create channel and get channel requests while the user is under cool down public ?string $duration = null, + /** @var array|null */ + #[ArrayOf(ScheduledMessageResponse::class)] + public ?array $scheduledMessages = null, // The caller's own scheduled, sending and failed messages in this channel. Set only by a client-side GetOrCreateChannel with include_scheduled_messages; absent when not requested or not known, in which case use the scheduled messages query ) { } diff --git a/src/GeneratedModels/ChannelStateResponseFields.php b/src/GeneratedModels/ChannelStateResponseFields.php index 7408e46b..c6f525bb 100644 --- a/src/GeneratedModels/ChannelStateResponseFields.php +++ b/src/GeneratedModels/ChannelStateResponseFields.php @@ -24,7 +24,7 @@ public function __construct( #[ArrayOf(ChannelMemberResponse::class)] public ?array $members = null, // List of channel members public ?ChannelMemberResponse $membership = null, - public ?ChannelPushPreferencesResponse $pushPreferences = null, + public ?ChannelPushPreferencesResponse $pushPreferences = null, // The push preference details. /** @var array|null */ #[ArrayOf(ThreadStateResponse::class)] public ?array $threads = null, @@ -37,6 +37,7 @@ public function __construct( /** @var array|null */ #[ArrayOf(SharedLocationResponseData::class)] public ?array $activeLiveLocations = null, // Active live locations in the channel + public ?int $cooldownRemainingMs = null, // Milliseconds until the current user's slow mode cool down period ends. Only set on client-side get or create channel and get channel requests while the user is under cool down ) { } diff --git a/src/GeneratedModels/ChannelTypeConfig.php b/src/GeneratedModels/ChannelTypeConfig.php index ccf29c18..de45dca2 100644 --- a/src/GeneratedModels/ChannelTypeConfig.php +++ b/src/GeneratedModels/ChannelTypeConfig.php @@ -46,7 +46,7 @@ public function __construct( public ?int $partitionSize = null, public ?string $partitionTtl = null, public ?bool $skipLastMsgUpdateForSystemMsgs = null, - public ?string $pushLevel = null, + public ?string $pushLevel = null, // Sets the push notification level for a channel type public ?ChatPreferences $chatPreferences = null, /** @var array|null */ #[ArrayOf(Command::class)] diff --git a/src/GeneratedModels/CheckGCPPubSubRequest.php b/src/GeneratedModels/CheckGCPPubSubRequest.php new file mode 100644 index 00000000..a101bd9f --- /dev/null +++ b/src/GeneratedModels/CheckGCPPubSubRequest.php @@ -0,0 +1,17 @@ +|null */ #[ArrayOf(TriggeredRuleResponse::class)] public ?array $triggeredRules = null, // All moderation rules triggered by this check (content, user, and call rules), with their resolved actions + /** @var array|null */ + #[ArrayOf(IntentScoreResponse::class)] + public ?array $intentScores = null, // Score (0-100) of each policy intent topic against this request's text, in policy order (test mode only; omitted when the policy has no topics or scoring failed) public ?string $duration = null, + public ?string $llmModel = null, // ID of the LLM model that produced the verdict (e.g. gpt-4o-mini). Omitted when no LLM ran synchronously (e.g. Bodyguard-only checks or async moderation) + public ?string $llmReasoningEffort = null, // reasoning_effort sent with the LLM request that produced the verdict. Omitted when the request did not send one ) { } diff --git a/src/GeneratedModels/ClientEvent.php b/src/GeneratedModels/ClientEvent.php index e451ad6b..bb9425f8 100644 --- a/src/GeneratedModels/ClientEvent.php +++ b/src/GeneratedModels/ClientEvent.php @@ -28,6 +28,7 @@ public function __construct( public ?int $elapsedTime = null, // Milliseconds elapsed between the stage attempt's initiation and this event. public ?string $callSessionID = null, // Call session ID associated with the attempt. Required on every event except CoordinatorJoin initiation and CoordinatorJoin failure (where the call session is not yet established); optional on MediaDevicePermission. public ?string $joinReason = null, // Reason the client initiated the join. Optional on CoordinatorJoin events; empty when not provided. + public ?string $source = null, // Source of the coordinator join. Optional on CoordinatorJoin events; omitted when not provided. public ?string $sfuID = null, // Identifier of the SFU the client was attempting to connect to. Required on WSJoin and PeerConnectionConnect failure, and on FirstAudioFrame and FirstVideoFrame. public ?string $trackID = null, // Identifier of the media track the frame belongs to. Required on FirstVideoFrame; optional on FirstAudioFrame. public ?string $retryFailureReason = null, // Failure reason string. Required on CoordinatorJoin, CoordinatorWS, WSJoin, and PeerConnectionConnect failure. @@ -36,6 +37,8 @@ public function __construct( public ?string $screenShareStatus = null, // Screen-share permission status: INITIATED, FAILED, GRANTED, or NOT_INITIATED. Optional on MediaDevicePermission events. public ?string $microphonePermissionStatus = null, // Microphone permission status: INITIATED, FAILED, GRANTED, or NOT_INITIATED. Required on every MediaDevicePermission event. public ?string $cameraPermissionStatus = null, // Camera permission status: INITIATED, FAILED, GRANTED, or NOT_INITIATED. Required on every MediaDevicePermission event. + public ?string $leaveInitiator = null, // Source of the leave that aborted a join: user, app, callkit, remote_event, sdk_error, or unknown. Not validated against this set, so SDKs may report new values. Optional; sent on failure events. Maximum 32 characters. + public ?string $leaveReason = null, // Internal reason or triggering event for the leave that aborted a join. Optional; sent on failure events. Maximum 200 characters. ) { } diff --git a/src/GeneratedModels/CommentFeedbackEvent.php b/src/GeneratedModels/CommentFeedbackEvent.php new file mode 100644 index 00000000..89d7a352 --- /dev/null +++ b/src/GeneratedModels/CommentFeedbackEvent.php @@ -0,0 +1,23 @@ +|null */ #[ArrayOf(UserResponse::class)] public ?array $mentionedUsers = null, // Users mentioned in the comment + public ?bool $hidden = null, // Only true in QueryComments results filtered with hidden: true public ?string $status = null, // Status of the comment. One of: active, deleted, removed, hidden public ?\DateTime $createdAt = null, // When the comment was created public ?\DateTime $updatedAt = null, // When the comment was last updated diff --git a/src/GeneratedModels/ConfigOverridesRequest.php b/src/GeneratedModels/ConfigOverridesRequest.php index 14dcd8ce..d56d9c67 100644 --- a/src/GeneratedModels/ConfigOverridesRequest.php +++ b/src/GeneratedModels/ConfigOverridesRequest.php @@ -23,7 +23,7 @@ public function __construct( public ?bool $userMessageReminders = null, // Enable/disable user message reminders public ?bool $sharedLocations = null, // Enable/disable shared locations public ?bool $countMessages = null, // Enable/disable message counting - public ?string $pushLevel = null, + public ?string $pushLevel = null, // Overrides the push notification level for this channel public ?ChatPreferences $chatPreferences = null, ) { } diff --git a/src/GeneratedModels/ConfigResponse.php b/src/GeneratedModels/ConfigResponse.php index 9d865145..7cba8df6 100644 --- a/src/GeneratedModels/ConfigResponse.php +++ b/src/GeneratedModels/ConfigResponse.php @@ -20,6 +20,7 @@ public function __construct( public ?AIAudioConfigResponse $aiAudioConfig = null, public ?VelocityFilterConfig $velocityFilterConfig = null, public ?FloodConfig $floodConfig = null, + public ?IntentConfigResponse $intentConfig = null, public ?\DateTime $createdAt = null, // When the configuration was created public ?\DateTime $updatedAt = null, // When the configuration was last updated public ?VideoCallRuleConfig $videoCallRuleConfig = null, diff --git a/src/GeneratedModels/ContentCountryCodeParameters.php b/src/GeneratedModels/ContentCountryCodeParameters.php new file mode 100644 index 00000000..d007d188 --- /dev/null +++ b/src/GeneratedModels/ContentCountryCodeParameters.php @@ -0,0 +1,16 @@ +|null */ #[ArrayOf(PollOptionInput::class)] public ?array $options = null, - public ?string $votingVisibility = null, + public ?string $votingVisibility = null, // Represents the visibility of votes in a poll. public ?bool $enforceUniqueVote = null, // Indicates whether users can cast multiple votes public ?int $maxVotesAllowed = null, // Indicates the maximum amount of votes a user can cast public ?bool $allowUserSuggestedOptions = null, public ?bool $allowAnswers = null, // Indicates whether users can suggest user defined answers public ?bool $isClosed = null, // Indicates whether the poll is open for voting + public ?string $team = null, public ?object $custom = null, // Custom data for this object + public ?string $configKey = null, // Key of the moderation configuration to use. Server-side only. + public ?string $configTeam = null, // Team associated with the configuration. Server-side only. public ?string $userID = null, public ?UserRequest $user = null, // User request object ) { diff --git a/src/GeneratedModels/CreateReminderRequest.php b/src/GeneratedModels/CreateReminderRequest.php index 2788cb92..27b2262d 100644 --- a/src/GeneratedModels/CreateReminderRequest.php +++ b/src/GeneratedModels/CreateReminderRequest.php @@ -7,6 +7,7 @@ class CreateReminderRequest extends BaseModel { public function __construct( public ?\DateTime $remindAt = null, + public ?\DateTime $expiresAt = null, public ?string $userID = null, public ?UserRequest $user = null, // User request object ) { diff --git a/src/GeneratedModels/DeleteFeedsRetentionPolicyRequest.php b/src/GeneratedModels/DeleteFeedsRetentionPolicyRequest.php new file mode 100644 index 00000000..c01cd634 --- /dev/null +++ b/src/GeneratedModels/DeleteFeedsRetentionPolicyRequest.php @@ -0,0 +1,15 @@ +|null */ + #[ArrayOf(InterestTagResponse::class)] + public ?array $interests = null, // Interest tags still set on the user + public ?string $duration = null, + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/DeliveryReceiptsResponse.php b/src/GeneratedModels/DeliveryReceiptsResponse.php index 25fe6227..b63a424c 100644 --- a/src/GeneratedModels/DeliveryReceiptsResponse.php +++ b/src/GeneratedModels/DeliveryReceiptsResponse.php @@ -3,6 +3,9 @@ declare(strict_types=1); namespace GetStream\GeneratedModels; +/** + * The settings for the delivery receipt events. + */ class DeliveryReceiptsResponse extends BaseModel { public function __construct( diff --git a/src/GeneratedModels/DeviceResponse.php b/src/GeneratedModels/DeviceResponse.php index 1493dc2b..e868d8da 100644 --- a/src/GeneratedModels/DeviceResponse.php +++ b/src/GeneratedModels/DeviceResponse.php @@ -4,15 +4,15 @@ namespace GetStream\GeneratedModels; /** - * Response for Device + * An object representing a device which can receive push notifications. */ class DeviceResponse extends BaseModel { public function __construct( public ?string $pushProvider = null, // Push provider public ?string $pushProviderName = null, // Push provider name - public ?string $id = null, // Device ID - public ?\DateTime $createdAt = null, // Date/time of creation + public ?string $id = null, // The device identifier. + public ?\DateTime $createdAt = null, // The date when the device was created. public ?bool $disabled = null, // Whether device is disabled or not public ?string $disabledReason = null, // Reason explaining why device had been disabled public ?bool $voip = null, // When true the token is for Apple VoIP push notifications diff --git a/src/GeneratedModels/EnrichmentOptions.php b/src/GeneratedModels/EnrichmentOptions.php index 43c1ac8a..ce2877ee 100644 --- a/src/GeneratedModels/EnrichmentOptions.php +++ b/src/GeneratedModels/EnrichmentOptions.php @@ -28,6 +28,7 @@ public function __construct( public ?bool $skipOwnCapabilities = null, // Default: false. When true, skips computing and including capabilities for feeds. public ?bool $skipAll = null, // Default: false. When true, skips all enrichments. public ?bool $includeScoreVars = null, // Default: false. When true, includes score_vars in activity responses containing variable values used at ranking time. + public ?bool $includeRankingConfig = null, // Default: false. Server-side only. When true, the response includes ranking_config: the ranking configuration (from the feed view, or the feed group as fallback) used to rank this read. public ?bool $includeFlatActivities = null, // Controls the top-level flat 'activities' array for aggregated feeds. For new apps, defaults to false (excluded); set to true to include. For older apps, defaults to true (included) for backward compatibility; set to false to exclude. ) { } diff --git a/src/GeneratedModels/EntityCreatorResponse.php b/src/GeneratedModels/EntityCreatorResponse.php index af6e59db..8096be41 100644 --- a/src/GeneratedModels/EntityCreatorResponse.php +++ b/src/GeneratedModels/EntityCreatorResponse.php @@ -28,7 +28,7 @@ public function __construct( public ?bool $bypassModeration = null, public ?\DateTime $banExpires = null, public ?PushNotificationSettingsResponse $pushNotifications = null, - public ?PrivacySettingsResponse $privacySettings = null, + public ?PrivacySettingsResponse $privacySettings = null, // The privacy settings of the user. /** @var array|null */ #[ArrayOf(DeviceResponse::class)] public ?array $devices = null, diff --git a/src/GeneratedModels/EventHook.php b/src/GeneratedModels/EventHook.php index bd72aa89..877c3cd5 100644 --- a/src/GeneratedModels/EventHook.php +++ b/src/GeneratedModels/EventHook.php @@ -23,11 +23,16 @@ public function __construct( public ?string $snsKey = null, public ?string $snsSecret = null, public ?string $snsRoleArn = null, + public ?string $gcpPubsubTopic = null, + public ?string $gcpPubsubAuthType = null, + public ?string $gcpPubsubRegion = null, public ?string $product = null, public ?bool $shouldSendCustomEvents = null, public ?int $timeoutMs = null, public ?AsyncModerationCallbackConfig $callback = null, public ?bool $snsEventBasedMessageGroupIDEnabled = null, + public ?bool $sqsEventBasedMessageGroupIDEnabled = null, + public ?bool $gcpPubsubEventBasedOrderingKeyEnabled = null, public ?WebhookFailoverConfig $failoverConfig = null, public ?\DateTime $createdAt = null, public ?\DateTime $updatedAt = null, diff --git a/src/GeneratedModels/FeedsNotificationComment.php b/src/GeneratedModels/FeedsNotificationComment.php index 6a1c2831..aa5728c2 100644 --- a/src/GeneratedModels/FeedsNotificationComment.php +++ b/src/GeneratedModels/FeedsNotificationComment.php @@ -12,6 +12,7 @@ public function __construct( /** @var array|null */ #[ArrayOf(Attachment::class)] public ?array $attachments = null, + public ?string $parentID = null, ) { } diff --git a/src/GeneratedModels/FeedsPolicyConfig.php b/src/GeneratedModels/FeedsPolicyConfig.php new file mode 100644 index 00000000..39fe122c --- /dev/null +++ b/src/GeneratedModels/FeedsPolicyConfig.php @@ -0,0 +1,16 @@ +|null */ #[ArrayOf(UserResponse::class)] public ?array $mentionedUsers = null, + public ?bool $hidden = null, public ?string $status = null, public ?\DateTime $createdAt = null, public ?\DateTime $updatedAt = null, diff --git a/src/GeneratedModels/FileUploadRequest.php b/src/GeneratedModels/FileUploadRequest.php index 15d11e2c..1f28cb10 100644 --- a/src/GeneratedModels/FileUploadRequest.php +++ b/src/GeneratedModels/FileUploadRequest.php @@ -3,7 +3,7 @@ declare(strict_types=1); namespace GetStream\GeneratedModels; -class FileUploadRequest extends BaseModel +class FileUploadRequest extends BaseModel implements MultipartRequest { public function __construct( public ?string $file = null, // file field diff --git a/src/GeneratedModels/FilterConfigResponse.php b/src/GeneratedModels/FilterConfigResponse.php index 879b9296..0828125f 100644 --- a/src/GeneratedModels/FilterConfigResponse.php +++ b/src/GeneratedModels/FilterConfigResponse.php @@ -10,7 +10,9 @@ public function __construct( public ?array $aiTextLabels = null, // AI text moderation labels available as filter values public ?array $aiImageLabels = null, // AI image moderation labels available as filter values. Reflects the app's effective image taxonomy: custom Bodyguard taxonomy when enabled, otherwise the standard L1 label set. public ?array $aiImageTaxonomy = null, // AI image moderation labels available as filter values, as a map of L1 label to its L2 sub-labels. Reflects the app's effective image taxonomy: custom Bodyguard taxonomy when enabled, otherwise the standard catalogue of the org's enabled image providers. + public ?array $aiImageOcrLabels = null, // Labels the image OCR pipeline can flag, available as filter values on the `label` field under the ai_image category. The app's LLM labels when LLM configurability is enabled, otherwise the AI text labels. OCR and image-classification labels share the `label` field, so a name present in both matches either. public ?array $configKeys = null, // Moderation config keys present in the queue, available as filter values + public ?array $ruleNames = null, // Names of the app's moderation rules, available as filter values on the `label` field when filtering rule-flagged content. Includes disabled rules, since items flagged before a rule was turned off still carry its name; excludes deleted ones. Scoped to the caller's teams on a multi-tenant app. Capped at 30 names, ordered by name, so an app above that cap is listed partially. public ?array $filterableCustomKeys = null, // The moderation_payload.custom keys the app has configured as review-queue filter chips (via moderation_dashboard_preferences.filterable_custom_keys). Discovery hint for the dashboard only — the filter accepts any custom key regardless of this list. ) { } diff --git a/src/GeneratedModels/FloodIdenticalRuleParameters.php b/src/GeneratedModels/FloodIdenticalRuleParameters.php index 284f2744..01f42e41 100644 --- a/src/GeneratedModels/FloodIdenticalRuleParameters.php +++ b/src/GeneratedModels/FloodIdenticalRuleParameters.php @@ -9,6 +9,8 @@ public function __construct( public ?int $threshold = null, public ?string $timeWindow = null, public ?array $allowlist = null, + public ?bool $trackAcrossUsers = null, + public ?int $minTextLength = null, ) { } diff --git a/src/GeneratedModels/FloodSimilarRuleParameters.php b/src/GeneratedModels/FloodSimilarRuleParameters.php index c34e9cfd..596b9373 100644 --- a/src/GeneratedModels/FloodSimilarRuleParameters.php +++ b/src/GeneratedModels/FloodSimilarRuleParameters.php @@ -10,6 +10,7 @@ public function __construct( public ?string $timeWindow = null, public ?int $similarityDistance = null, public ?array $allowlist = null, + public ?int $minTextLength = null, ) { } diff --git a/src/GeneratedModels/FollowBatchRequest.php b/src/GeneratedModels/FollowBatchRequest.php index 3926348f..254d8dd1 100644 --- a/src/GeneratedModels/FollowBatchRequest.php +++ b/src/GeneratedModels/FollowBatchRequest.php @@ -11,6 +11,7 @@ public function __construct( public ?array $follows = null, // List of follow relationships to create public ?bool $enrichOwnFields = null, // If true, enriches the follow's source_feed and target_feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. public ?bool $createUsers = null, // If true, auto-creates users referenced by source/target FIDs in the batch when they don't already exist. Server-side only. Defaults to false. This top-level field is the only supported batch/upsert create_users control. + public ?bool $async = null, // If true, the batch is queued as a background task, paced per app, and the response has empty follows and a task_id. Server-side only. Supported by the get-or-create endpoint (GetOrCreateFollows); FollowBatch rejects it. Async batches can apply out of order with other follow writes. Defaults to false. ) { } diff --git a/src/GeneratedModels/FollowBatchResponse.php b/src/GeneratedModels/FollowBatchResponse.php index b76b3b7e..8eaba30f 100644 --- a/src/GeneratedModels/FollowBatchResponse.php +++ b/src/GeneratedModels/FollowBatchResponse.php @@ -12,6 +12,7 @@ public function __construct( /** @var array|null */ #[ArrayOf(FollowResponse::class)] public ?array $created = null, // List of newly created follow relationships + public ?string $taskID = null, // ID of the background task when the request was sent with async: true public ?string $duration = null, ) { } diff --git a/src/GeneratedModels/FullUserResponse.php b/src/GeneratedModels/FullUserResponse.php index e9b40be5..63fed894 100644 --- a/src/GeneratedModels/FullUserResponse.php +++ b/src/GeneratedModels/FullUserResponse.php @@ -23,7 +23,7 @@ public function __construct( public ?\DateTime $revokeTokensIssuedBefore = null, public ?\DateTime $deactivatedAt = null, public ?int $avgResponseTime = null, - public ?PrivacySettingsResponse $privacySettings = null, + public ?PrivacySettingsResponse $privacySettings = null, // The privacy settings of the user. /** @var array|null */ #[ArrayOf(DeviceResponse::class)] public ?array $devices = null, @@ -34,7 +34,8 @@ public function __construct( /** @var array|null */ #[ArrayOf(ChannelMute::class)] public ?array $channelMutes = null, - public ?int $unreadCount = null, + /** @deprecated */ + public ?int $unreadCount = null, // Deprecated: Use total_unread_count instead. public ?int $totalUnreadCount = null, public ?int $unreadChannels = null, public ?int $unreadThreads = null, diff --git a/src/GeneratedModels/GetApplicationResponse.php b/src/GeneratedModels/GetApplicationResponse.php index 4f5a3c8f..371694e9 100644 --- a/src/GeneratedModels/GetApplicationResponse.php +++ b/src/GeneratedModels/GetApplicationResponse.php @@ -9,7 +9,7 @@ class GetApplicationResponse extends BaseModel { public function __construct( - public ?AppResponseFields $app = null, + public ?AppResponseFields $app = null, // A type representing the app settings. public ?string $duration = null, // Duration of the request in milliseconds ) { } diff --git a/src/GeneratedModels/GetChannelTypeResponse.php b/src/GeneratedModels/GetChannelTypeResponse.php index b40b2630..2f95a57c 100644 --- a/src/GeneratedModels/GetChannelTypeResponse.php +++ b/src/GeneratedModels/GetChannelTypeResponse.php @@ -49,7 +49,7 @@ public function __construct( public ?int $partitionSize = null, public ?string $partitionTtl = null, public ?bool $skipLastMsgUpdateForSystemMsgs = null, - public ?string $pushLevel = null, + public ?string $pushLevel = null, // Sets the push notification level for a channel type public ?ChatPreferences $chatPreferences = null, /** @var array|null */ #[ArrayOf(Command::class)] diff --git a/src/GeneratedModels/GetCommentsResponse.php b/src/GeneratedModels/GetCommentsResponse.php index 182b0fd0..330f0629 100644 --- a/src/GeneratedModels/GetCommentsResponse.php +++ b/src/GeneratedModels/GetCommentsResponse.php @@ -10,6 +10,8 @@ public function __construct( #[ArrayOf(ThreadedCommentResponse::class)] public ?array $comments = null, // Threaded listing for the activity public ?string $sort = null, // Sort order used for the comments (first, last, top, best, controversial) + public ?int $commentCount = null, // Total number of comments on the object, including replies at every depth + public ?int $topLevelCommentCount = null, // Number of comments directly on the object, excluding replies. Independent of depth, replies_limit and id_around, and not adjusted per viewer. Only present when include_top_level_comment_count is set public ?string $next = null, public ?string $prev = null, public ?string $duration = null, diff --git a/src/GeneratedModels/GetFeedsRetentionPolicyResponse.php b/src/GeneratedModels/GetFeedsRetentionPolicyResponse.php new file mode 100644 index 00000000..b4fb5496 --- /dev/null +++ b/src/GeneratedModels/GetFeedsRetentionPolicyResponse.php @@ -0,0 +1,22 @@ +|null */ + #[ArrayOf(FeedsRetentionPolicy::class)] + public ?array $policies = null, + public ?bool $enabled = null, + public ?string $duration = null, // Duration of the request in milliseconds + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/GetFeedsRetentionPolicyRunsRequest.php b/src/GeneratedModels/GetFeedsRetentionPolicyRunsRequest.php new file mode 100644 index 00000000..3f563d3a --- /dev/null +++ b/src/GeneratedModels/GetFeedsRetentionPolicyRunsRequest.php @@ -0,0 +1,21 @@ +|null */ + #[ArrayOf(SortParamRequest::class)] + public ?array $sort = null, // Array of sort parameters + public ?int $limit = null, + public ?string $next = null, + public ?string $prev = null, + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/GetFeedsRetentionPolicyRunsResponse.php b/src/GeneratedModels/GetFeedsRetentionPolicyRunsResponse.php new file mode 100644 index 00000000..7d1e8054 --- /dev/null +++ b/src/GeneratedModels/GetFeedsRetentionPolicyRunsResponse.php @@ -0,0 +1,23 @@ +|null */ + #[ArrayOf(FeedsRetentionRunResponse::class)] + public ?array $runs = null, + public ?string $next = null, + public ?string $prev = null, + public ?string $duration = null, // Duration of the request in milliseconds + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/GetOrCreateChannelDefaults.php b/src/GeneratedModels/GetOrCreateChannelDefaults.php new file mode 100644 index 00000000..0b9c42e0 --- /dev/null +++ b/src/GeneratedModels/GetOrCreateChannelDefaults.php @@ -0,0 +1,19 @@ +|null */ #[ArrayOf(InterestTagResponse::class)] - public ?array $interests = null, // Top-N interest tags sorted by descending count, then alphabetically by tag + public ?array $interests = null, // Interest tags sorted by descending weight, then manually set tags before computed ones, then descending count, then alphabetically by tag public ?string $duration = null, ) { } diff --git a/src/GeneratedModels/GroupedChannelsBucket.php b/src/GeneratedModels/GroupedChannelsBucket.php index fb21d8d4..47d44108 100644 --- a/src/GeneratedModels/GroupedChannelsBucket.php +++ b/src/GeneratedModels/GroupedChannelsBucket.php @@ -9,7 +9,7 @@ public function __construct( /** @var array|null */ #[ArrayOf(ChannelStateResponseFields::class)] public ?array $channels = null, // Channels returned for this bucket - public ?int $unreadChannels = null, // Unread channels currently classified into this bucket + public ?int $unreadChannels = null, // Total unread channels matching this bucket and its filters, independent of page size public ?string $next = null, // Cursor for the next page of this group public ?string $prev = null, // Cursor for the previous page of this group ) { diff --git a/src/GeneratedModels/GroupedChannelsGroupRequest.php b/src/GeneratedModels/GroupedChannelsGroupRequest.php index 3bf369d9..7155dc1a 100644 --- a/src/GeneratedModels/GroupedChannelsGroupRequest.php +++ b/src/GeneratedModels/GroupedChannelsGroupRequest.php @@ -6,9 +6,10 @@ class GroupedChannelsGroupRequest extends BaseModel { public function __construct( - public ?int $limit = null, - public ?string $next = null, - public ?string $prev = null, + public ?int $limit = null, // Max channels for this group; omitted or zero uses the request limit + public ?string $next = null, // Cursor for the next page; only allowed when requesting one group + public ?string $prev = null, // Cursor for the previous page; only allowed when requesting one group + public ?object $filterConditions = null, // Optional query_timestamp $gte bound for a stored group, requiring query_timestamp sort; do not repeat its group name. For all, combine group equality/$in and date bounds with $or, or use one standalone group $ne exclusion. An empty object matches a stored group; omitted or null preserves legacy grouping. ) { } diff --git a/src/GeneratedModels/GroupedQueryChannelsRequest.php b/src/GeneratedModels/GroupedQueryChannelsRequest.php index 0dac47aa..b357f18f 100644 --- a/src/GeneratedModels/GroupedQueryChannelsRequest.php +++ b/src/GeneratedModels/GroupedQueryChannelsRequest.php @@ -9,9 +9,12 @@ public function __construct( public ?int $limit = null, // Default max channels per group (default 10) /** @var array|null */ #[MapOf(GroupedChannelsGroupRequest::class)] - public ?array $groups = null, // Groups to return, keyed by group name. Each group can define limit, next, or prev. 'next' and 'prev' cursors are only allowed when the request contains exactly one group; multi-group pagination is rejected. + public ?array $groups = null, // Groups to return, keyed by stored group name. Each entry can define limit, next, prev, and optional filter_conditions: date bounds for stored groups; all supports combined group/date branches or one group $ne exclusion. Cursors are only allowed when requesting exactly one group. Omitted or null filters preserve legacy grouping, including all. public ?string $userID = null, public ?UserRequest $user = null, // User request object + /** @var array|null */ + #[ArrayOf(SortParamRequest::class)] + public ?array $sort = null, // Optional query_timestamp descending with NULLS LAST when enabled. Omitted sort preserves existing last_updated ordering and cursor formats ) { } diff --git a/src/GeneratedModels/GroupedQueryChannelsResponse.php b/src/GeneratedModels/GroupedQueryChannelsResponse.php index 709f763e..b23df21a 100644 --- a/src/GeneratedModels/GroupedQueryChannelsResponse.php +++ b/src/GeneratedModels/GroupedQueryChannelsResponse.php @@ -8,7 +8,7 @@ class GroupedQueryChannelsResponse extends BaseModel public function __construct( /** @var array|null */ #[MapOf(GroupedChannelsBucket::class)] - public ?array $groups = null, // Predefined channel groups keyed by group name + public ?array $groups = null, // Groups keyed by the requested stored group name public ?string $duration = null, // Duration of the request in milliseconds ) { } diff --git a/src/GeneratedModels/ImageUploadRequest.php b/src/GeneratedModels/ImageUploadRequest.php index 1b116c01..308a3775 100644 --- a/src/GeneratedModels/ImageUploadRequest.php +++ b/src/GeneratedModels/ImageUploadRequest.php @@ -3,7 +3,7 @@ declare(strict_types=1); namespace GetStream\GeneratedModels; -class ImageUploadRequest extends BaseModel +class ImageUploadRequest extends BaseModel implements MultipartRequest { public function __construct( public ?string $file = null, diff --git a/src/GeneratedModels/IntentConditionInfo.php b/src/GeneratedModels/IntentConditionInfo.php new file mode 100644 index 00000000..810b7355 --- /dev/null +++ b/src/GeneratedModels/IntentConditionInfo.php @@ -0,0 +1,18 @@ +|null */ + #[ArrayOf(IntentTopicRequest::class)] + public ?array $topics = null, // Topics to classify conversation text against (max 20, labels must be unique) + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/IntentConfigResponse.php b/src/GeneratedModels/IntentConfigResponse.php new file mode 100644 index 00000000..e2e6d91f --- /dev/null +++ b/src/GeneratedModels/IntentConfigResponse.php @@ -0,0 +1,17 @@ +|null */ + #[ArrayOf(IntentTopicResponse::class)] + public ?array $topics = null, // Topics conversation text is classified against + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/IntentEvaluationInfo.php b/src/GeneratedModels/IntentEvaluationInfo.php new file mode 100644 index 00000000..f88092d8 --- /dev/null +++ b/src/GeneratedModels/IntentEvaluationInfo.php @@ -0,0 +1,21 @@ +|null */ + #[ArrayOf(IntentConditionInfo::class)] + public ?array $conditions = null, // One entry per `intent_rule` condition of the rule, flat conditions first, then group conditions. + public ?string $conversationID = null, // The analyzed conversation: the channel CID for chat, the object ID for feeds. + public ?int $messageCount = null, // Number of conversation messages sent to the model. + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/IntentRuleParameters.php b/src/GeneratedModels/IntentRuleParameters.php new file mode 100644 index 00000000..76ae5e24 --- /dev/null +++ b/src/GeneratedModels/IntentRuleParameters.php @@ -0,0 +1,19 @@ +|null */ #[ArrayOf(MatchedContent::class)] public ?array $matchedContents = null, // Ordered list of contents whose verdicts contributed to an aggregation rule's threshold. Populated only for aggregation rules when callers supplied `content_ids`. + public ?IntentEvaluationInfo $intent = null, ) { } diff --git a/src/GeneratedModels/MultipartRequest.php b/src/GeneratedModels/MultipartRequest.php new file mode 100644 index 00000000..328122dd --- /dev/null +++ b/src/GeneratedModels/MultipartRequest.php @@ -0,0 +1,17 @@ +|null */ #[ArrayOf(Attachment::class)] - public ?array $attachments = null, + public ?array $attachments = null, // Attachments on the comment + public ?string $parentID = null, // The ID of the parent comment when this comment is a reply; omitted for top-level comments ) { } diff --git a/src/GeneratedModels/OwnUserResponse.php b/src/GeneratedModels/OwnUserResponse.php index 6a9f69b5..4cd27068 100644 --- a/src/GeneratedModels/OwnUserResponse.php +++ b/src/GeneratedModels/OwnUserResponse.php @@ -23,8 +23,8 @@ public function __construct( public ?\DateTime $revokeTokensIssuedBefore = null, public ?\DateTime $deactivatedAt = null, public ?int $avgResponseTime = null, - public ?PushPreferencesResponse $pushPreferences = null, - public ?PrivacySettingsResponse $privacySettings = null, + public ?PushPreferencesResponse $pushPreferences = null, // The push preference details. + public ?PrivacySettingsResponse $privacySettings = null, // The privacy settings of the user. /** @var array|null */ #[ArrayOf(DeviceResponse::class)] public ?array $devices = null, @@ -35,7 +35,8 @@ public function __construct( /** @var array|null */ #[ArrayOf(ChannelMute::class)] public ?array $channelMutes = null, - public ?int $unreadCount = null, + /** @deprecated */ + public ?int $unreadCount = null, // Deprecated: Use total_unread_count instead. public ?int $totalUnreadCount = null, public ?array $totalUnreadCountByTeam = null, public ?int $unreadChannels = null, diff --git a/src/GeneratedModels/PagerDefaults.php b/src/GeneratedModels/PagerDefaults.php new file mode 100644 index 00000000..340da7a4 --- /dev/null +++ b/src/GeneratedModels/PagerDefaults.php @@ -0,0 +1,18 @@ +|null */ + #[ArrayOf(RingAttemptResponse::class)] + public ?array $ringAttempts = null, // The attempts, newest first + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/QueryChannelBansRequest.php b/src/GeneratedModels/QueryChannelBansRequest.php new file mode 100644 index 00000000..6572e5a7 --- /dev/null +++ b/src/GeneratedModels/QueryChannelBansRequest.php @@ -0,0 +1,22 @@ +|null */ + #[ArrayOf(ChannelBanResponse::class)] + public ?array $bans = null, // Users banned from the channel, one entry per user, newest ban first + public ?int $total = null, // Number of banned users, each counted once, ignoring paging. Counted per scope with a cap of 100000 each, so it can reach 200000. Only present when include_total is set on the request; omitted when counting timed out + public ?ChannelBansScopeTotals $totalByScope = null, + public ?string $next = null, + public ?string $prev = null, + public ?string $duration = null, // Duration of the request in milliseconds + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/QueryChannelsDefaults.php b/src/GeneratedModels/QueryChannelsDefaults.php new file mode 100644 index 00000000..13cbc472 --- /dev/null +++ b/src/GeneratedModels/QueryChannelsDefaults.php @@ -0,0 +1,21 @@ +|null */ #[ArrayOf(SortParamRequest::class)] public ?array $sort = null, // Sorting parameters for the query + public ?bool $includeGroupCounts = null, // When true (server-side only), the response includes group_counts: accepted following counts keyed by the followed feed's group. Requires exactly one source_feed / source_fid string equality. HTTP 400 if target_feed appears, if two source FIDs are given, or if $in / $or / $nor mentions those keys. Independent of paging and of other filters, including status. public ?int $limit = null, public ?string $next = null, public ?string $prev = null, diff --git a/src/GeneratedModels/QueryFollowsResponse.php b/src/GeneratedModels/QueryFollowsResponse.php index 00cb58fb..f7b0aee3 100644 --- a/src/GeneratedModels/QueryFollowsResponse.php +++ b/src/GeneratedModels/QueryFollowsResponse.php @@ -9,6 +9,7 @@ public function __construct( /** @var array|null */ #[ArrayOf(FollowResponse::class)] public ?array $follows = null, // List of follow relationships matching the query + public ?array $groupCounts = null, // Accepted following counts keyed by followed feed group. Present only when include_group_counts is set with a source_feed equality. public ?string $next = null, // Cursor for next page public ?string $prev = null, // Cursor for previous page public ?string $duration = null, diff --git a/src/GeneratedModels/QueryPinnedActivitiesRequest.php b/src/GeneratedModels/QueryPinnedActivitiesRequest.php index 09cc26e8..bd7d9d90 100644 --- a/src/GeneratedModels/QueryPinnedActivitiesRequest.php +++ b/src/GeneratedModels/QueryPinnedActivitiesRequest.php @@ -11,9 +11,14 @@ public function __construct( #[ArrayOf(SortParamRequest::class)] public ?array $sort = null, // Sorting parameters for the query public ?bool $enrichOwnFields = null, + public ?bool $includeSoftDeletedActivities = null, // When true, return pinned activities even if they are soft-deleted. Server-side only; not allowed when a user is set. + public ?bool $includeModeratedActivities = null, // When true, return pinned activities even if moderation hides them (shadowed or removed). Server-side only; not allowed when a user is set. + public ?bool $includeExpiredActivities = null, // When true, return pinned activities even if they have expired. Server-side only; not allowed when a user is set. public ?int $limit = null, public ?string $next = null, public ?string $prev = null, + public ?string $userID = null, + public ?UserRequest $user = null, // User request object ) { } diff --git a/src/GeneratedModels/QueryReviewQueueRequest.php b/src/GeneratedModels/QueryReviewQueueRequest.php index 323ff8d8..d92e55b2 100644 --- a/src/GeneratedModels/QueryReviewQueueRequest.php +++ b/src/GeneratedModels/QueryReviewQueueRequest.php @@ -6,7 +6,7 @@ class QueryReviewQueueRequest extends BaseModel { public function __construct( - public ?object $filter = null, // Filter conditions for review queue items. Accepts built-in fields (e.g. status, channel_cid, severity, recommended_action) and customer-supplied moderation_payload.custom keys: any key that is not a built-in field is matched against the item's custom moderation data (e.g. {"location_id": "loc-42"}). Use filter_config.filterable_custom_keys to discover which custom keys the app exposes as chips. + public ?object $filter = null, // Filter conditions for review queue items. Accepts built-in fields (e.g. status, channel_cid, severity, recommended_action) and customer-supplied moderation_payload.custom keys: any key that is not a built-in field is matched against the item's custom moderation data (e.g. {"location_id": "loc-42"}). Use filter_config.filterable_custom_keys to discover which custom keys the app exposes as chips. content_text searches the moderated text: "$q" is a keyword search (terms ANDed, no adjacency) over the indexed tsvector, while "$eq" (or "$in" for several wordings) matches the text exactly. The exact form is unindexed, so scope it with date_range rather than running it across the whole queue. /** @var array|null */ #[ArrayOf(SortParamRequest::class)] public ?array $sort = null, // Sorting parameters for the results diff --git a/src/GeneratedModels/QueryScheduledMessagesRequest.php b/src/GeneratedModels/QueryScheduledMessagesRequest.php new file mode 100644 index 00000000..0e40d31e --- /dev/null +++ b/src/GeneratedModels/QueryScheduledMessagesRequest.php @@ -0,0 +1,22 @@ +|null */ + #[ArrayOf(SortParamRequest::class)] + public ?array $sort = null, // Only scheduled_at ascending is supported. Pending messages come before failed ones + public ?int $limit = null, // Page size, 1 to 100. Defaults to 20 + public ?string $next = null, // Cursor from the previous page + public ?string $userID = null, + public ?UserRequest $user = null, // User request object + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/QueryScheduledMessagesResponse.php b/src/GeneratedModels/QueryScheduledMessagesResponse.php new file mode 100644 index 00000000..7ab77d78 --- /dev/null +++ b/src/GeneratedModels/QueryScheduledMessagesResponse.php @@ -0,0 +1,19 @@ +|null */ + #[ArrayOf(ScheduledMessageResponse::class)] + public ?array $scheduledMessages = null, // Pending messages first, then failed ones, each by scheduled_at + public ?string $next = null, // Cursor for the next page; empty on the last page + public ?string $duration = null, // Duration of the request in milliseconds + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/RankingConfig.php b/src/GeneratedModels/RankingConfig.php index 5ab8a6f2..7998388a 100644 --- a/src/GeneratedModels/RankingConfig.php +++ b/src/GeneratedModels/RankingConfig.php @@ -12,6 +12,7 @@ public function __construct( /** @var array|null */ #[MapOf(DecayFunctionConfig::class)] public ?array $functions = null, // Decay functions configuration + public ?float $excludeBelow = null, // Activities scoring strictly below this value are dropped from the ranked feed. Not supported on aggregated feeds ) { } diff --git a/src/GeneratedModels/ReadReceiptsResponse.php b/src/GeneratedModels/ReadReceiptsResponse.php index 29eb5c23..902a9ba9 100644 --- a/src/GeneratedModels/ReadReceiptsResponse.php +++ b/src/GeneratedModels/ReadReceiptsResponse.php @@ -3,6 +3,9 @@ declare(strict_types=1); namespace GetStream\GeneratedModels; +/** + * The settings for the read receipt events. + */ class ReadReceiptsResponse extends BaseModel { public function __construct( diff --git a/src/GeneratedModels/ReminderResponseData.php b/src/GeneratedModels/ReminderResponseData.php index f3a7f381..15e8cfef 100644 --- a/src/GeneratedModels/ReminderResponseData.php +++ b/src/GeneratedModels/ReminderResponseData.php @@ -7,6 +7,7 @@ class ReminderResponseData extends BaseModel { public function __construct( public ?\DateTime $remindAt = null, + public ?\DateTime $expiresAt = null, public ?string $channelCid = null, public ?ChannelResponse $channel = null, // Represents channel in chat public ?string $messageID = null, diff --git a/src/GeneratedModels/ReviewQueueItemResponse.php b/src/GeneratedModels/ReviewQueueItemResponse.php index 4944c3c8..15fbc89a 100644 --- a/src/GeneratedModels/ReviewQueueItemResponse.php +++ b/src/GeneratedModels/ReviewQueueItemResponse.php @@ -18,6 +18,7 @@ public function __construct( public ?\DateTime $reviewedAt = null, // When the item was reviewed public ?string $reviewedBy = null, // ID of the moderator who reviewed the item public ?array $languages = null, // Detected languages in the content + public ?string $countryCode = null, public ?int $severity = null, // Severity level of the content public ?string $aiTextSeverity = null, // AI-determined text severity public ?string $latestModeratorAction = null, @@ -43,6 +44,7 @@ public function __construct( public ?Reaction $feedsV2Reaction = null, public ?FeedsV3ActivityResponse $feedsV3Activity = null, public ?FeedsV3CommentResponse $feedsV3Comment = null, + public ?PollResponseData $poll = null, public ?array $teams = null, // Teams associated with this item public ?string $configKey = null, public ?int $flagsCount = null, diff --git a/src/GeneratedModels/RingAttemptResponse.php b/src/GeneratedModels/RingAttemptResponse.php new file mode 100644 index 00000000..fb974591 --- /dev/null +++ b/src/GeneratedModels/RingAttemptResponse.php @@ -0,0 +1,34 @@ +|null */ + #[MapOf(RingTargetResponse::class)] + public ?array $targets = null, // The rung users, keyed by user ID + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/RingCallRequest.php b/src/GeneratedModels/RingCallRequest.php index e1ce3e5b..1c2d4719 100644 --- a/src/GeneratedModels/RingCallRequest.php +++ b/src/GeneratedModels/RingCallRequest.php @@ -8,6 +8,7 @@ class RingCallRequest extends BaseModel public function __construct( public ?array $membersIds = null, // Members that should receive the ring. If no ids are provided, all call members who are not already in the call will receive ring notifications. public ?bool $video = null, // Indicate if call should be video + public ?object $custom = null, // Opaque context stored on the ring attempt; refs and IDs only ) { } diff --git a/src/GeneratedModels/RingCallResponse.php b/src/GeneratedModels/RingCallResponse.php index 746f06d2..55dd03af 100644 --- a/src/GeneratedModels/RingCallResponse.php +++ b/src/GeneratedModels/RingCallResponse.php @@ -8,6 +8,7 @@ class RingCallResponse extends BaseModel public function __construct( public ?string $duration = null, public ?array $membersIds = null, // List of members ringing notification was sent to + public ?string $ringID = null, // The ring this call created, for correlating the accept, reject and missed outcomes that follow ) { } diff --git a/src/GeneratedModels/RingDeliveryResponse.php b/src/GeneratedModels/RingDeliveryResponse.php new file mode 100644 index 00000000..9872f0d4 --- /dev/null +++ b/src/GeneratedModels/RingDeliveryResponse.php @@ -0,0 +1,24 @@ +|null */ + #[ArrayOf(RingDeliveryResponse::class)] + public ?array $deliveries = null, // The dispatches of this ring to the target's devices + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/RuleBuilderCondition.php b/src/GeneratedModels/RuleBuilderCondition.php index c493f356..7471ac93 100644 --- a/src/GeneratedModels/RuleBuilderCondition.php +++ b/src/GeneratedModels/RuleBuilderCondition.php @@ -21,6 +21,7 @@ public function __construct( public ?FloodSimilarRuleParameters $floodSimilarParams = null, public ?ContentCustomPropertyCountParameters $contentCustomPropertyCountParams = null, public ?ContentCustomPropertyParameters $contentCustomPropertyParams = null, + public ?ContentCountryCodeParameters $contentCountryCodeParams = null, public ?IPContentCountRuleParameters $ipContentCountRuleParams = null, public ?IPFlagCountRuleParameters $ipFlagCountRuleParams = null, public ?TextContentParameters $textContentParams = null, @@ -37,6 +38,10 @@ public function __construct( public ?CallCustomPropertyParameters $callCustomPropertyParams = null, public ?CallViolationCountParameters $callViolationCountParams = null, public ?UserReactionCountRuleParameters $userReactionCountParams = null, + public ?UserIdenticalImageCountParameters $userIdenticalImageCountParams = null, + public ?UserChannelCountRuleParameters $userChannelCountParams = null, + public ?UserChannelBanCountRuleParameters $userChannelBanCountParams = null, + public ?IntentRuleParameters $intentRuleParams = null, // intent_rule params: policy intent topic label and the minimum final score (1-100) that fires the condition ) { } diff --git a/src/GeneratedModels/ScheduledMessageChannelResponse.php b/src/GeneratedModels/ScheduledMessageChannelResponse.php new file mode 100644 index 00000000..4f1f3a12 --- /dev/null +++ b/src/GeneratedModels/ScheduledMessageChannelResponse.php @@ -0,0 +1,22 @@ +:) + public ?string $type = null, // Channel type + public ?string $id = null, // Channel ID + public ?string $name = null, // Channel name, from its custom data + public ?string $image = null, // Channel image, from its custom data + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/ScheduledMessageContentResponse.php b/src/GeneratedModels/ScheduledMessageContentResponse.php new file mode 100644 index 00000000..4959eb70 --- /dev/null +++ b/src/GeneratedModels/ScheduledMessageContentResponse.php @@ -0,0 +1,39 @@ +|null */ + #[ArrayOf(Attachment::class)] + public ?array $attachments = null, // Array of message attachments + public ?string $parentID = null, // ID of parent message (thread) + public ?bool $showInChannel = null, // Whether thread reply should be shown in the channel as well + public ?string $quotedMessageID = null, + public ?array $mentionedUsers = null, // IDs of the users mentioned in the message + public ?array $mentionedRoles = null, // Roles mentioned in the message + public ?array $mentionedGroupIds = null, // IDs of the user groups mentioned in the message + public ?bool $mentionedChannel = null, // Whether the message mentions the whole channel + public ?bool $mentionedHere = null, // Whether the message mentions the online channel members + public ?array $restrictedVisibility = null, // IDs of the users the message will be visible to + public ?bool $silent = null, // Whether message is silent or not + public ?bool $pinned = null, // Whether the message will be pinned when sent + public ?\DateTime $pinExpires = null, // Date/time the pin expires + public ?string $pollID = null, // Identifier of the poll to include in the message + public ?ScheduledMessageLocation $sharedLocation = null, // The location a scheduled message will share + public ?object $custom = null, + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/ScheduledMessageFailedEvent.php b/src/GeneratedModels/ScheduledMessageFailedEvent.php new file mode 100644 index 00000000..7619bcb4 --- /dev/null +++ b/src/GeneratedModels/ScheduledMessageFailedEvent.php @@ -0,0 +1,24 @@ +|null */ #[ArrayOf(UserResponse::class)] public ?array $mentionedUsers = null, + public ?bool $hidden = null, public ?string $status = null, // Status of the comment. One of: active, deleted, removed, hidden public ?\DateTime $createdAt = null, public ?\DateTime $updatedAt = null, diff --git a/src/GeneratedModels/TypingIndicatorsResponse.php b/src/GeneratedModels/TypingIndicatorsResponse.php index 8af2c2b8..1dd99f04 100644 --- a/src/GeneratedModels/TypingIndicatorsResponse.php +++ b/src/GeneratedModels/TypingIndicatorsResponse.php @@ -3,6 +3,9 @@ declare(strict_types=1); namespace GetStream\GeneratedModels; +/** + * The settings for typing indicator events. + */ class TypingIndicatorsResponse extends BaseModel { public function __construct( diff --git a/src/GeneratedModels/UnbanRequest.php b/src/GeneratedModels/UnbanRequest.php index 4d0e8554..1b315d7e 100644 --- a/src/GeneratedModels/UnbanRequest.php +++ b/src/GeneratedModels/UnbanRequest.php @@ -8,6 +8,7 @@ class UnbanRequest extends BaseModel public function __construct( /** @deprecated */ public ?string $unbannedByID = null, // ID of the user performing the unban Deprecated: not used by the unban flow + /** @deprecated */ public ?UserRequest $unbannedBy = null, // User request object ) { } diff --git a/src/GeneratedModels/UnblockActionRequestPayload.php b/src/GeneratedModels/UnblockActionRequestPayload.php index d5ec0df0..0642b840 100644 --- a/src/GeneratedModels/UnblockActionRequestPayload.php +++ b/src/GeneratedModels/UnblockActionRequestPayload.php @@ -4,7 +4,7 @@ namespace GetStream\GeneratedModels; /** - * Deprecated: use restore instead — it now also reverses a block or shadow block. Configuration for unblock action. + * Deprecated: Use restore instead, which now also reverses a block or shadow block. Configuration for unblock action. */ class UnblockActionRequestPayload extends BaseModel { diff --git a/src/GeneratedModels/UnfollowBatchRequest.php b/src/GeneratedModels/UnfollowBatchRequest.php index c5c66150..f99fd9ea 100644 --- a/src/GeneratedModels/UnfollowBatchRequest.php +++ b/src/GeneratedModels/UnfollowBatchRequest.php @@ -11,6 +11,7 @@ public function __construct( public ?array $follows = null, // List of follow relationships to remove, each with optional keep_history public ?bool $deleteNotificationActivity = null, // Whether to delete the corresponding notification activity (default: false) public ?bool $enrichOwnFields = null, // If true, enriches the follow's source_feed and target_feed with own_* fields (own_follows, own_followings, own_capabilities, own_membership). Defaults to false for performance. + public ?bool $async = null, // If true, the batch is queued as a background task, paced per app, and the response has empty follows and a task_id. Server-side only. Supported by the get-or-create endpoint (GetOrCreateUnfollows); UnfollowBatch rejects it. Async batches can apply out of order with other follow writes. Defaults to false. ) { } diff --git a/src/GeneratedModels/UnfollowBatchResponse.php b/src/GeneratedModels/UnfollowBatchResponse.php index f34adb9f..d952dcf6 100644 --- a/src/GeneratedModels/UnfollowBatchResponse.php +++ b/src/GeneratedModels/UnfollowBatchResponse.php @@ -9,6 +9,7 @@ public function __construct( /** @var array|null */ #[ArrayOf(FollowResponse::class)] public ?array $follows = null, // List of follow relationships that were removed + public ?string $taskID = null, // ID of the background task when the request was sent with async: true public ?string $duration = null, ) { } diff --git a/src/GeneratedModels/UnreadCountsChannel.php b/src/GeneratedModels/UnreadCountsChannel.php index 88612548..30f551f9 100644 --- a/src/GeneratedModels/UnreadCountsChannel.php +++ b/src/GeneratedModels/UnreadCountsChannel.php @@ -3,12 +3,15 @@ declare(strict_types=1); namespace GetStream\GeneratedModels; +/** + * The unread information of a channel. + */ class UnreadCountsChannel extends BaseModel { public function __construct( - public ?string $channelID = null, - public ?int $unreadCount = null, - public ?\DateTime $lastRead = null, + public ?string $channelID = null, // The channel CID (type:id). + public ?int $unreadCount = null, // The number of unread messages inside the channel. + public ?\DateTime $lastRead = null, // The date which the current user last read the channel. ) { } diff --git a/src/GeneratedModels/UnreadCountsChannelType.php b/src/GeneratedModels/UnreadCountsChannelType.php index 0effc748..05b81e64 100644 --- a/src/GeneratedModels/UnreadCountsChannelType.php +++ b/src/GeneratedModels/UnreadCountsChannelType.php @@ -3,12 +3,15 @@ declare(strict_types=1); namespace GetStream\GeneratedModels; +/** + * The unread information from channels with a specific type. + */ class UnreadCountsChannelType extends BaseModel { public function __construct( - public ?string $channelType = null, - public ?int $channelCount = null, - public ?int $unreadCount = null, + public ?string $channelType = null, // The channel type. + public ?int $channelCount = null, // The number of unread channels of this channel type. + public ?int $unreadCount = null, // The number of unread messages of all the channels with this type. ) { } diff --git a/src/GeneratedModels/UnreadCountsThread.php b/src/GeneratedModels/UnreadCountsThread.php index 628e2904..370950bf 100644 --- a/src/GeneratedModels/UnreadCountsThread.php +++ b/src/GeneratedModels/UnreadCountsThread.php @@ -3,13 +3,16 @@ declare(strict_types=1); namespace GetStream\GeneratedModels; +/** + * The unread information of a thread. + */ class UnreadCountsThread extends BaseModel { public function __construct( - public ?int $unreadCount = null, - public ?\DateTime $lastRead = null, - public ?string $lastReadMessageID = null, - public ?string $parentMessageID = null, + public ?int $unreadCount = null, // The number of unread replies inside the thread. + public ?\DateTime $lastRead = null, // The date which the current user last read the thread. + public ?string $lastReadMessageID = null, // The id of the last reply which the current user read in the thread. + public ?string $parentMessageID = null, // The message id of the root of the thread. ) { } diff --git a/src/GeneratedModels/UpdateChannelTypeRequest.php b/src/GeneratedModels/UpdateChannelTypeRequest.php index c19ad148..923e4e0b 100644 --- a/src/GeneratedModels/UpdateChannelTypeRequest.php +++ b/src/GeneratedModels/UpdateChannelTypeRequest.php @@ -43,7 +43,7 @@ public function __construct( public ?array $allowedFlagReasons = null, public ?Thresholds $automodThresholds = null, // Sets thresholds for AI moderation public ?bool $skipLastMsgUpdateForSystemMsgs = null, - public ?string $pushLevel = null, + public ?string $pushLevel = null, // Sets the push notification level for a channel type public ?ChatPreferences $chatPreferences = null, public ?array $commands = null, // List of commands that channel supports ) { diff --git a/src/GeneratedModels/UpdateChannelTypeResponse.php b/src/GeneratedModels/UpdateChannelTypeResponse.php index e38b457e..dcccaa98 100644 --- a/src/GeneratedModels/UpdateChannelTypeResponse.php +++ b/src/GeneratedModels/UpdateChannelTypeResponse.php @@ -3,6 +3,9 @@ declare(strict_types=1); namespace GetStream\GeneratedModels; +/** + * Basic response information + */ class UpdateChannelTypeResponse extends BaseModel { public function __construct( @@ -44,12 +47,12 @@ public function __construct( public ?int $partitionSize = null, public ?string $partitionTtl = null, public ?bool $skipLastMsgUpdateForSystemMsgs = null, - public ?string $pushLevel = null, + public ?string $pushLevel = null, // Sets the push notification level for a channel type public ?ChatPreferences $chatPreferences = null, public ?\DateTime $createdAt = null, public ?\DateTime $updatedAt = null, public ?array $commands = null, - public ?string $duration = null, + public ?string $duration = null, // Duration of the request in milliseconds ) { } diff --git a/src/GeneratedModels/UpdatePollOptionRequest.php b/src/GeneratedModels/UpdatePollOptionRequest.php index 28401634..e604f091 100644 --- a/src/GeneratedModels/UpdatePollOptionRequest.php +++ b/src/GeneratedModels/UpdatePollOptionRequest.php @@ -9,6 +9,8 @@ public function __construct( public ?string $id = null, // Option ID public ?string $text = null, // Option text public ?object $custom = null, // Custom data for this object + public ?string $configKey = null, // Key of the moderation configuration to use. Server-side only. + public ?string $configTeam = null, // Team associated with the configuration. Server-side only. public ?string $userID = null, public ?UserRequest $user = null, // User request object ) { diff --git a/src/GeneratedModels/UpdatePollPartialRequest.php b/src/GeneratedModels/UpdatePollPartialRequest.php index c5b890f2..f186d601 100644 --- a/src/GeneratedModels/UpdatePollPartialRequest.php +++ b/src/GeneratedModels/UpdatePollPartialRequest.php @@ -6,6 +6,8 @@ class UpdatePollPartialRequest extends BaseModel { public function __construct( + public ?string $configKey = null, // Key of the moderation configuration to use. Server-side only. + public ?string $configTeam = null, // Team associated with the configuration. Server-side only. public ?object $set = null, // Sets new field values public ?array $unset = null, // Array of field names to unset public ?string $userID = null, diff --git a/src/GeneratedModels/UpdatePollRequest.php b/src/GeneratedModels/UpdatePollRequest.php index 4ba62cde..594cb335 100644 --- a/src/GeneratedModels/UpdatePollRequest.php +++ b/src/GeneratedModels/UpdatePollRequest.php @@ -19,6 +19,8 @@ public function __construct( public ?bool $allowAnswers = null, // Allow answers public ?bool $isClosed = null, // Is closed public ?object $custom = null, // Custom data for this object + public ?string $configKey = null, // Key of the moderation configuration to use. Server-side only. + public ?string $configTeam = null, // Team associated with the configuration. Server-side only. public ?string $userID = null, public ?UserRequest $user = null, // User request object ) { diff --git a/src/GeneratedModels/UpdateReminderRequest.php b/src/GeneratedModels/UpdateReminderRequest.php index 36ea28f1..f05f2ce1 100644 --- a/src/GeneratedModels/UpdateReminderRequest.php +++ b/src/GeneratedModels/UpdateReminderRequest.php @@ -7,6 +7,7 @@ class UpdateReminderRequest extends BaseModel { public function __construct( public ?\DateTime $remindAt = null, + public ?\DateTime $expiresAt = null, public ?string $userID = null, public ?UserRequest $user = null, // User request object ) { diff --git a/src/GeneratedModels/UpdateScheduledMessageRequest.php b/src/GeneratedModels/UpdateScheduledMessageRequest.php new file mode 100644 index 00000000..539fec40 --- /dev/null +++ b/src/GeneratedModels/UpdateScheduledMessageRequest.php @@ -0,0 +1,16 @@ +|null */ + #[ArrayOf(UserInterestRequest::class)] + public ?array $interests = null, // Interest tags to add or update (1-50) + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/UpsertUserInterestsResponse.php b/src/GeneratedModels/UpsertUserInterestsResponse.php new file mode 100644 index 00000000..b2085fcc --- /dev/null +++ b/src/GeneratedModels/UpsertUserInterestsResponse.php @@ -0,0 +1,21 @@ +|null */ + #[ArrayOf(InterestTagResponse::class)] + public ?array $interests = null, // All interest tags of the user after the write + public ?string $duration = null, + ) { + } + + // BaseModel automatically handles jsonSerialize(), toArray(), and fromJson() using constructor types! + // Use #[JsonKey('user_id')] to override field names if needed. +} diff --git a/src/GeneratedModels/UserChannelBanCountRuleParameters.php b/src/GeneratedModels/UserChannelBanCountRuleParameters.php new file mode 100644 index 00000000..97d5b720 --- /dev/null +++ b/src/GeneratedModels/UserChannelBanCountRuleParameters.php @@ -0,0 +1,17 @@ +|null */ #[ArrayOf(DeviceResponse::class)] public ?array $devices = null, // List of devices user is using diff --git a/src/GeneratedModels/UserResponsePrivacyFields.php b/src/GeneratedModels/UserResponsePrivacyFields.php index 72fbc419..d6bbe25a 100644 --- a/src/GeneratedModels/UserResponsePrivacyFields.php +++ b/src/GeneratedModels/UserResponsePrivacyFields.php @@ -24,7 +24,7 @@ public function __construct( public ?\DateTime $deactivatedAt = null, public ?array $blockedUserIds = null, public ?int $avgResponseTime = null, - public ?PrivacySettingsResponse $privacySettings = null, + public ?PrivacySettingsResponse $privacySettings = null, // The privacy settings of the user. public ?bool $invisible = null, ) { } diff --git a/src/GeneratedModels/WSEvent.php b/src/GeneratedModels/WSEvent.php index f25640ad..0c9855d7 100644 --- a/src/GeneratedModels/WSEvent.php +++ b/src/GeneratedModels/WSEvent.php @@ -31,7 +31,7 @@ public function __construct( public ?string $reason = null, public ?UserResponse $createdBy = null, // User response object public ?bool $automoderation = null, - public ?ModerationResponse $automoderationScores = null, + public ?ModerationResponse $automoderationScores = null, // Response from AI moderation public ?string $parentID = null, public ?string $team = null, public ?object $custom = null, diff --git a/src/GeneratedModels/WrappedUnreadCountsResponse.php b/src/GeneratedModels/WrappedUnreadCountsResponse.php index 5538d03d..61aa86ab 100644 --- a/src/GeneratedModels/WrappedUnreadCountsResponse.php +++ b/src/GeneratedModels/WrappedUnreadCountsResponse.php @@ -4,23 +4,23 @@ namespace GetStream\GeneratedModels; /** - * Basic response information + * The total unread information from the current user. */ class WrappedUnreadCountsResponse extends BaseModel { public function __construct( - public ?int $totalUnreadCount = null, - public ?int $totalUnreadThreadsCount = null, - public ?array $totalUnreadCountByTeam = null, + public ?int $totalUnreadCount = null, // The total number of unread messages. + public ?int $totalUnreadThreadsCount = null, // The total number of unread threads. + public ?array $totalUnreadCountByTeam = null, // The total number of unread messages grouped by team. /** @var array|null */ #[ArrayOf(UnreadCountsChannel::class)] - public ?array $channels = null, + public ?array $channels = null, // The unread information per channel. /** @var array|null */ #[ArrayOf(UnreadCountsChannelType::class)] - public ?array $channelType = null, + public ?array $channelType = null, // The unread information per channel type. /** @var array|null */ #[ArrayOf(UnreadCountsThread::class)] - public ?array $threads = null, + public ?array $threads = null, // The unread information per thread. public ?string $duration = null, // Duration of the request in milliseconds ) { } diff --git a/tests/Integration/ChatScheduledMessagesIntegrationTest.php b/tests/Integration/ChatScheduledMessagesIntegrationTest.php new file mode 100644 index 00000000..de9b8c60 --- /dev/null +++ b/tests/Integration/ChatScheduledMessagesIntegrationTest.php @@ -0,0 +1,126 @@ +chat = ClientBuilder::fromEnv()->buildChatClient(); + $this->userID = $this->getSharedUserIDs()[0]; + } + + /** + * @test + */ + public function schedulesUpdatesAndSendsAMessageNow(): void + { + [$type, $channelID] = $this->createTestChannelWithMembers($this->userID, [$this->userID]); + $cid = "{$type}:{$channelID}"; + + $scheduled = $this->scheduleMessage($type, $channelID, 'Scheduled from PHP SDK'); + self::assertSame('scheduled', $scheduled->status); + self::assertSame($cid, $scheduled->cid); + self::assertSame('Scheduled from PHP SDK', $scheduled->message->text); + + $queryResp = $this->chat->queryScheduledMessages(new GeneratedModels\QueryScheduledMessagesRequest( + filter: new GeneratedModels\ScheduledMessagesFilter(cid: $cid), + userID: $this->userID, + )); + $this->assertResponseSuccess($queryResp, 'query scheduled messages'); + $found = $queryResp->getData()->scheduledMessages; + self::assertCount(1, $found); + self::assertSame($scheduled->id, $found[0]->id); + + $scheduledAt = new \DateTime('+2 hours'); + $updateResp = $this->chat->updateScheduledMessage($scheduled->id, new GeneratedModels\UpdateScheduledMessageRequest( + message: new GeneratedModels\MessageRequest(text: 'Rescheduled from PHP SDK'), + scheduledAt: $scheduledAt, + )); + $this->assertResponseSuccess($updateResp, 'update scheduled message'); + $updated = $updateResp->getData()->scheduledMessage; + self::assertSame('Rescheduled from PHP SDK', $updated->message->text); + self::assertSame($scheduledAt->getTimestamp(), $updated->scheduledAt->getTimestamp()); + + $sendResp = $this->chat->sendScheduledMessageNow($scheduled->id, new GeneratedModels\SendScheduledMessageNowRequest()); + $this->assertResponseSuccess($sendResp, 'send scheduled message now'); + self::assertSame($scheduled->id, $sendResp->getData()->scheduledMessage->id); + } + + /** + * @test + */ + public function deletesAScheduledMessage(): void + { + [$type, $channelID] = $this->createTestChannelWithMembers($this->userID, [$this->userID]); + + $scheduled = $this->scheduleMessage($type, $channelID, 'Deleted before sending'); + + $deleteResp = $this->chat->deleteScheduledMessage($scheduled->id); + $this->assertResponseSuccess($deleteResp, 'delete scheduled message'); + self::assertSame($scheduled->id, $deleteResp->getData()->scheduledMessage->id); + self::assertSame('canceled', $deleteResp->getData()->scheduledMessage->status); + + $queryResp = $this->chat->queryScheduledMessages(new GeneratedModels\QueryScheduledMessagesRequest( + filter: new GeneratedModels\ScheduledMessagesFilter(cid: "{$type}:{$channelID}"), + userID: $this->userID, + )); + $this->assertResponseSuccess($queryResp, 'query scheduled messages'); + self::assertCount(0, $queryResp->getData()->scheduledMessages); + } + + /** + * Schedules a message an hour ahead, skipping the test when the app or + * backend does not support scheduled messages. + */ + private function scheduleMessage(string $type, string $channelID, string $text): GeneratedModels\ScheduledMessageResponse + { + try { + $resp = $this->sendMessage($type, $channelID, new GeneratedModels\SendMessageRequest( + message: new GeneratedModels\MessageRequest(text: $text, userID: $this->userID), + scheduledAt: new \DateTime('+1 hour'), + )); + } catch (StreamApiException $e) { + if ($e->getApiErrorCode() === self::SCHEDULED_MESSAGES_DISABLED) { + self::markTestSkipped('Scheduled messages are not enabled for this app'); + } + + throw $e; + } + $this->assertResponseSuccess($resp, 'schedule message'); + + $scheduled = $resp->getData()->scheduledMessage; + if ($scheduled === null) { + self::markTestSkipped('Backend ignored scheduled_at and sent the message immediately'); + } + + return $scheduled; + } +} diff --git a/tests/WebhookTest.php b/tests/WebhookTest.php index 3d0ff028..ea641adf 100644 --- a/tests/WebhookTest.php +++ b/tests/WebhookTest.php @@ -125,6 +125,7 @@ public static function webhookEventProvider(): array 'call.recording_stopped' => ['call.recording_stopped', 'CallRecordingStoppedEvent'], 'call.rejected' => ['call.rejected', 'CallRejectedEvent'], 'call.ring' => ['call.ring', 'CallRingEvent'], + 'call.ring_settled' => ['call.ring_settled', 'CallRingSettledEvent'], 'call.rtmp_broadcast_failed' => ['call.rtmp_broadcast_failed', 'CallRtmpBroadcastFailedEvent'], 'call.rtmp_broadcast_started' => ['call.rtmp_broadcast_started', 'CallRtmpBroadcastStartedEvent'], 'call.rtmp_broadcast_stopped' => ['call.rtmp_broadcast_stopped', 'CallRtmpBroadcastStoppedEvent'], @@ -162,6 +163,8 @@ public static function webhookEventProvider(): array 'export.bulk_image_moderation.success' => ['export.bulk_image_moderation.success', 'AsyncBulkImageModerationEvent'], 'export.channels.error' => ['export.channels.error', 'AsyncExportErrorEvent'], 'export.channels.success' => ['export.channels.success', 'AsyncExportChannelsEvent'], + 'export.label_results.error' => ['export.label_results.error', 'AsyncExportErrorEvent'], + 'export.label_results.success' => ['export.label_results.success', 'AsyncExportLabelResultsEvent'], 'export.moderation_logs.error' => ['export.moderation_logs.error', 'AsyncExportErrorEvent'], 'export.moderation_logs.success' => ['export.moderation_logs.success', 'AsyncExportModerationLogsEvent'], 'export.review_queue.error' => ['export.review_queue.error', 'AsyncExportErrorEvent'], @@ -187,6 +190,7 @@ public static function webhookEventProvider(): array 'feeds.bookmark_folder.updated' => ['feeds.bookmark_folder.updated', 'BookmarkFolderUpdatedEvent'], 'feeds.comment.added' => ['feeds.comment.added', 'CommentAddedEvent'], 'feeds.comment.deleted' => ['feeds.comment.deleted', 'CommentDeletedEvent'], + 'feeds.comment.feedback' => ['feeds.comment.feedback', 'CommentFeedbackEvent'], 'feeds.comment.reaction.added' => ['feeds.comment.reaction.added', 'CommentReactionAddedEvent'], 'feeds.comment.reaction.deleted' => ['feeds.comment.reaction.deleted', 'CommentReactionDeletedEvent'], 'feeds.comment.reaction.updated' => ['feeds.comment.reaction.updated', 'CommentReactionUpdatedEvent'], @@ -207,6 +211,8 @@ public static function webhookEventProvider(): array 'feeds.notification_feed.updated' => ['feeds.notification_feed.updated', 'NotificationFeedUpdatedEvent'], 'feeds.stories_feed.updated' => ['feeds.stories_feed.updated', 'StoriesFeedUpdatedEvent'], 'flag.updated' => ['flag.updated', 'FlagUpdatedEvent'], + 'import.error' => ['import.error', 'AsyncImportErrorEvent'], + 'import.success' => ['import.success', 'AsyncImportSuccessEvent'], 'ingress.error' => ['ingress.error', 'IngressErrorEvent'], 'ingress.started' => ['ingress.started', 'IngressStartedEvent'], 'ingress.stopped' => ['ingress.stopped', 'IngressStoppedEvent'], @@ -232,6 +238,12 @@ public static function webhookEventProvider(): array 'notification.mark_unread' => ['notification.mark_unread', 'NotificationMarkUnreadEvent'], 'notification.reminder_due' => ['notification.reminder_due', 'ReminderNotificationEvent'], 'notification.thread_message_new' => ['notification.thread_message_new', 'NotificationThreadMessageNewEvent'], + 'poll.closed' => ['poll.closed', 'PollClosedEvent'], + 'poll.deleted' => ['poll.deleted', 'PollDeletedEvent'], + 'poll.updated' => ['poll.updated', 'PollUpdatedEvent'], + 'poll.vote_casted' => ['poll.vote_casted', 'PollVoteCastedEvent'], + 'poll.vote_changed' => ['poll.vote_changed', 'PollVoteChangedEvent'], + 'poll.vote_removed' => ['poll.vote_removed', 'PollVoteRemovedEvent'], 'reaction.deleted' => ['reaction.deleted', 'ReactionDeletedEvent'], 'reaction.new' => ['reaction.new', 'ReactionNewEvent'], 'reaction.updated' => ['reaction.updated', 'ReactionUpdatedEvent'], @@ -240,6 +252,8 @@ public static function webhookEventProvider(): array 'reminder.updated' => ['reminder.updated', 'ReminderUpdatedEvent'], 'review_queue_item.new' => ['review_queue_item.new', 'ReviewQueueItemNewEvent'], 'review_queue_item.updated' => ['review_queue_item.updated', 'ReviewQueueItemUpdatedEvent'], + 'scheduled_message.failed' => ['scheduled_message.failed', 'ScheduledMessageFailedEvent'], + 'scheduled_message.sent' => ['scheduled_message.sent', 'ScheduledMessageSentEvent'], 'thread.updated' => ['thread.updated', 'ThreadUpdatedEvent'], 'user.banned' => ['user.banned', 'UserBannedEvent'], 'user.deactivated' => ['user.deactivated', 'UserDeactivatedEvent'], From d3dec0ebec0933a33a2a63e79d0c6ce2ac2dd7c6 Mon Sep 17 00:00:00 2001 From: nijeeshjoshy Date: Thu, 15 Oct 2026 11:31:45 +0200 Subject: [PATCH 2/2] chore: regenerate from protocol openapi-v239.72.0 Co-Authored-By: Claude Opus 5.5 --- src/GeneratedModels/ScheduledMessageResponse.php | 2 +- src/GeneratedModels/ScheduledMessagesFilter.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GeneratedModels/ScheduledMessageResponse.php b/src/GeneratedModels/ScheduledMessageResponse.php index 2ede7c9e..696c9be5 100644 --- a/src/GeneratedModels/ScheduledMessageResponse.php +++ b/src/GeneratedModels/ScheduledMessageResponse.php @@ -14,7 +14,7 @@ public function __construct( public ?UserResponse $user = null, // User response object public ?ScheduledMessageContentResponse $message = null, // The message a scheduled message will send public ?\DateTime $scheduledAt = null, // Date/time the message is scheduled to be sent - public ?string $status = null, // Status of the scheduled message. One of: scheduled, sending, failed, canceled, sent + public ?string $status = null, // Status of the scheduled message. One of: scheduled, sending, failed, canceled, sent. A message is sending from its first send attempt until it is sent or fails, including while it waits to retry a failed attempt; it cannot be edited, canceled or sent now while sending public ?string $failureReason = null, // Why sending the message failed. Only set when status is failed. One of: banned, no_permission, channel_frozen, channel_deleted, user_deleted, moderation_blocked, hook_rejected, expired, internal_error, invalid_message, pending_not_supported public ?\DateTime $createdAt = null, // Date/time of creation public ?\DateTime $updatedAt = null, // Date/time of the last update diff --git a/src/GeneratedModels/ScheduledMessagesFilter.php b/src/GeneratedModels/ScheduledMessagesFilter.php index a8123c2d..b42f3809 100644 --- a/src/GeneratedModels/ScheduledMessagesFilter.php +++ b/src/GeneratedModels/ScheduledMessagesFilter.php @@ -10,7 +10,7 @@ class ScheduledMessagesFilter extends BaseModel { public function __construct( public ?string $cid = null, // Only scheduled messages of this channel - public ?array $status = null, // Only these statuses. One or more of: scheduled, sending, failed + public ?array $status = null, // Only these statuses, as reported in each scheduled message's status. One or more of: scheduled, sending, failed ) { }