Skip to content

[#4] OpenAPI: Replace EventPayload with the generated WSEvent - #4297

Merged
laevandus merged 25 commits into
developfrom
open-api-wrap-4-events
Oct 5, 2026
Merged

laevandus merged 25 commits into
developfrom
open-api-wrap-4-events

Conversation

@laevandus

Copy link
Copy Markdown
Contributor

🔗 Issue Links

Resolves: IOS-1847

🎯 Goal

Decode WebSocket and /sync events into the generated WSEvent and event DTOs instead of the hand-written EventPayload.

📝 Summary

  • EventDecoder returns WSEvent; EventNotificationCenter unwraps it into the public Event types
  • Middlewares and DatabaseSession.saveEvent work with WSEvent
  • EventPayload and the hand-written event DTOs are removed
  • Generated event models keep only the properties the SDK reads

🛠 Implementation

This is the event part of #4288; the tree matches it. connection.ok and connection.error stay hand-written until they are in the chat v2 spec (CHA-5606).

🎨 Showcase

N/A

🧪 Manual Testing Notes

  1. Send messages, reactions, typing indicators and read receipts between two devices, and check that the events arrive and update the UI.
  2. Try other channel updates, such as adding members.

☑️ Contributor Checklist

  • I have signed the Stream CLA (required)
  • This change should be manually QAed
  • Changelog is updated with client-facing changes
  • Changelog is updated with new localization keys
  • New code is covered by unit tests
  • Documentation has been updated in the docs-content repo

@laevandus
laevandus requested a review from a team as a code owner September 28, 2026 12:44
@coderabbitai

coderabbitai Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: dcc49678-2caa-4811-99d2-27722d89511c
📥 Commits

Reviewing files that changed from the base of the PR and between 63b8459 and a4aa653.

⛔ Files ignored due to path filters (63)
  • Sources/StreamChat/Generated/OpenAPI/APIs/DefaultEndpoints.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/AIIndicatorClearEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/AIIndicatorStopEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/AIIndicatorUpdateEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ChannelDeletedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ChannelHiddenEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ChannelTruncatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ChannelUpdatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ChannelVisibleEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ConnectedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ConnectionErrorEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/CreateGuestRequest.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/CreateGuestResponse.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/DraftDeletedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/DraftUpdatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/HealthCheckEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/MemberAddedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/MemberRemovedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/MemberUpdatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/MessageDeletedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/MessageDeliveredEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/MessageNewEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/MessageReadEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/MessageUpdatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationAddedToChannelEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationChannelDeletedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationChannelMutesUpdatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationInviteAcceptedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationInviteRejectedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationInvitedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationMarkReadEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationMarkUnreadEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationMutesUpdatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationNewMessageEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationRemovedFromChannelEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/NotificationThreadMessageNewEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/PollClosedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/PollDeletedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/PollUpdatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/PollVoteCastedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/PollVoteChangedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/PollVoteRemovedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ReactionDeletedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ReactionNewEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ReactionUpdatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ReminderCreatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ReminderDeletedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ReminderNotificationEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ReminderUpdatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/SyncRequest.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/SyncResponse.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/ThreadUpdatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/TypingStartEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/TypingStopEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/UserBannedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/UserMessagesDeletedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/UserPresenceChangedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/UserRequest.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/UserUnbannedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/UserUpdatedEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/UserWatchingStartEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/UserWatchingStopEventDTO.swift is excluded by !**/generated/**
  • Sources/StreamChat/Generated/OpenAPI/models/WSEvent.swift is excluded by !**/generated/**
📒 Files selected for processing (130)
  • Scripts/openapi_generate.sh
  • Sources/StreamChat/.openapi.sourcery.yml
  • Sources/StreamChat/APIClient/Endpoints/EndpointPath+OfflineRequest.swift
  • Sources/StreamChat/APIClient/Endpoints/GuestEndpoints.swift
  • Sources/StreamChat/APIClient/Endpoints/Payloads/GuestUserTokenPayload.swift
  • Sources/StreamChat/APIClient/Endpoints/Payloads/MemberContainerPayload.swift
  • Sources/StreamChat/APIClient/Endpoints/Payloads/MissingEventsPayload.swift
  • Sources/StreamChat/APIClient/Endpoints/Payloads/UnknownChannelEvent.swift
  • Sources/StreamChat/APIClient/Endpoints/Payloads/UnknownUserEvent.swift
  • Sources/StreamChat/APIClient/Endpoints/Requests/GuestUserTokenRequestPayload.swift
  • Sources/StreamChat/APIClient/Endpoints/Requests/MissingEventsRequestBody.swift
  • Sources/StreamChat/APIClient/Endpoints/SyncEndpoint.swift
  • Sources/StreamChat/APIClient/Endpoints/WebSocketConnectEndpoint.swift
  • Sources/StreamChat/Config/Token.swift
  • Sources/StreamChat/Database/DatabaseSession.swift
  • Sources/StreamChat/Extensions/StringInterpolation+Extensions.swift
  • Sources/StreamChat/Models/UnreadCount.swift
  • Sources/StreamChat/Repositories/AuthenticationRepository.swift
  • Sources/StreamChat/Repositories/ConnectionRepository.swift
  • Sources/StreamChat/Repositories/SyncRepository.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/ChannelDeliveredMiddleware.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/ChannelReadUpdaterMiddleware.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/ChannelVisibilityEventMiddleware.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/DraftUpdaterMiddleware.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/EventDataProcessorMiddleware.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/EventMiddleware.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/MemberEventMiddleware.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/ReminderUpdaterMiddleware.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/ThreadUpdaterMiddleware.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/TypingStartCleanupMiddleware.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/UserChannelBanEventsMiddleware.swift
  • Sources/StreamChat/WebSocketClient/EventMiddlewares/UserTypingStateUpdaterMiddleware.swift
  • Sources/StreamChat/WebSocketClient/Events/AITypingEvents.swift
  • Sources/StreamChat/WebSocketClient/Events/ChannelEvents.swift
  • Sources/StreamChat/WebSocketClient/Events/ConnectionEvents.swift
  • Sources/StreamChat/WebSocketClient/Events/DraftEvents.swift
  • Sources/StreamChat/WebSocketClient/Events/Event.swift
  • Sources/StreamChat/WebSocketClient/Events/EventDecoder.swift
  • Sources/StreamChat/WebSocketClient/Events/EventPayload.swift
  • Sources/StreamChat/WebSocketClient/Events/EventType.swift
  • Sources/StreamChat/WebSocketClient/Events/MemberEvents.swift
  • Sources/StreamChat/WebSocketClient/Events/MessageEvents.swift
  • Sources/StreamChat/WebSocketClient/Events/NotificationEvents.swift
  • Sources/StreamChat/WebSocketClient/Events/PollsEvents.swift
  • Sources/StreamChat/WebSocketClient/Events/ReactionEvents.swift
  • Sources/StreamChat/WebSocketClient/Events/ReminderEvents.swift
  • Sources/StreamChat/WebSocketClient/Events/ThreadEvents.swift
  • Sources/StreamChat/WebSocketClient/Events/TypingEvent.swift
  • Sources/StreamChat/WebSocketClient/Events/UserEvents.swift
  • Sources/StreamChat/WebSocketClient/WebSocketConnectPayload.swift
  • Sources/StreamChat/Workers/EventNotificationCenter.swift
  • Sources/StreamChat/Workers/ManualEventHandler.swift
  • StreamChat.xcodeproj/project.pbxproj
  • TestTools/StreamChatTestTools/Extensions/EndpoinPath+Equatable.swift
  • TestTools/StreamChatTestTools/Extensions/Endpoint+Mock.swift
  • TestTools/StreamChatTestTools/Extensions/Unique/TypingEventDTO+Unique.swift
  • TestTools/StreamChatTestTools/Fixtures/JSONs/Events/Channel/ChannelVisible.json
  • TestTools/StreamChatTestTools/Fixtures/JSONs/Events/Message/MessageDeleted.json
  • TestTools/StreamChatTestTools/Fixtures/JSONs/Events/Notification/NotificationMarkAllRead.json
  • TestTools/StreamChatTestTools/Fixtures/JSONs/Events/Notification/NotificationRemovedFromChannel.json
  • TestTools/StreamChatTestTools/Fixtures/JSONs/Events/Reaction/ReactionDeleted.json
  • TestTools/StreamChatTestTools/Fixtures/JSONs/Events/Reaction/ReactionNew.json
  • TestTools/StreamChatTestTools/Fixtures/JSONs/Events/Reaction/ReactionUpdated.json
  • TestTools/StreamChatTestTools/Fixtures/JSONs/Sync/MissingEventsPayload.json
  • TestTools/StreamChatTestTools/Mocks/StreamChat/WebSocketClient/EventMiddlewares/EventMiddleware_Mock.swift
  • TestTools/StreamChatTestTools/Mocks/StreamChat/WebSocketClient/Events/EventsDecoder_Mock.swift
  • TestTools/StreamChatTestTools/Mocks/StreamChat/WebSocketClient/WebSocketEngine_Mock.swift
  • TestTools/StreamChatTestTools/TestData/DummyData/CreateGuestResponse+Dummy.swift
  • TestTools/StreamChatTestTools/TestData/DummyData/MemberPayload.swift
  • Tests/StreamChatTests/APIClient/APIClient_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/EndpointPath_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/Endpoint_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/GuestEndpoints_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/Payloads/CustomDataHashMap_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/Payloads/GuestUserTokenPayload_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/Payloads/MissingEventsPayload_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/Payloads/UnknownChannelEvent_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/Payloads/UnknownUserEvent_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/Requests/GuestUserTokenRequestPayload_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/Requests/MissingEventsRequestBody_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/SyncEndpoint_Tests.swift
  • Tests/StreamChatTests/APIClient/Endpoints/WebSocketConnectEndpoint_Tests.swift
  • Tests/StreamChatTests/APIClient/RequestEncoder_Tests.swift
  • Tests/StreamChatTests/ChatClient_Tests.swift
  • Tests/StreamChatTests/Config/Token_Tests.swift
  • Tests/StreamChatTests/Controllers/EventsController/ChannelEventsController_Tests.swift
  • Tests/StreamChatTests/Database/DTOs/QueuedRequestDTO_Tests.swift
  • Tests/StreamChatTests/Database/DatabaseSession_Tests.swift
  • Tests/StreamChatTests/Repositories/AuthenticationRepository_Tests.swift
  • Tests/StreamChatTests/Repositories/ConnectionRepository_Tests.swift
  • Tests/StreamChatTests/Repositories/SyncRepository_Tests.swift
  • Tests/StreamChatTests/StateLayer/ChannelList_Tests.swift
  • Tests/StreamChatTests/StateLayer/Chat_Tests.swift
  • Tests/StreamChatTests/StreamChatIntegrationTests/ChannelEvents_IntegrationTests.swift
  • Tests/StreamChatTests/StreamChatIntegrationTests/MemberEvents_IntegrationTests.swift
  • Tests/StreamChatTests/StreamChatIntegrationTests/MessageEvents_IntegrationTests.swift
  • Tests/StreamChatTests/StreamChatIntegrationTests/ReactionEvents_IntegrationTests.swift
  • Tests/StreamChatTests/StreamChatIntegrationTests/TypingEvents_IntegrationTests.swift
  • Tests/StreamChatTests/StreamChatIntegrationTests/UserEvents_IntegrationTests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/ChannelDeliveredMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/ChannelReadUpdaterMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/ChannelTruncatedEventMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/ChannelVisibilityEventMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/DraftUpdaterMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/EventDTOConverterMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/EventDataProcessorMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/MemberEventMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/ReminderUpdaterMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/ThreadUpdaterMiddlware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/TypingStartCleanupMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/UserChannelBanEventsMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/UserTypingStateUpdaterMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/UserUpdateMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/EventMiddlewares/UserWatchingEventMiddleware_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/AIIndicatorEvents_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/ChannelEvents_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/DraftEvents_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/EventDecoder_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/EventPayload_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/MemberEvents_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/MessageEvents_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/NotificationEvents_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/ReactionEvents_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/ReminderEvents_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/ThreadEvents_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/TypingEvent_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/Events/UserEvents_Tests.swift
  • Tests/StreamChatTests/WebSocketClient/WebSocketConnectPayload_Tests.swift
  • Tests/StreamChatTests/Workers/EventNotificationCenter_Tests.swift
  • Tests/StreamChatTests/Workers/ManualEventHandler_Tests.swift
 ___________________
< Look ma, no bugs! >
 -------------------
  \
   \   \
        \ /\
        ( )
      .( o ).
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@laevandus laevandus changed the title [Requires #4296] OpenAPI: Replace EventPayload with the generated WSEvent [#4] OpenAPI: Replace EventPayload with the generated WSEvent Sep 28, 2026
@github-actions

Copy link
Copy Markdown
1 Warning
⚠️ Big PR
1 Message
📖 There seems to be app changes but CHANGELOG wasn't modified.
Please include an entry if the PR includes user-facing changes.
You can find it at CHANGELOG.md.

Generated by 🚫 Danger

@Stream-SDK-Bot

Copy link
Copy Markdown
Collaborator

SDK Performance

target metric benchmark branch performance status
MessageList Hitches total duration 10 ms 10.01 ms -0.1% 🔽 🟡
Duration 2.6 s 2.54 s 2.31% 🔼 🟢
Hitch time ratio 4 ms per s 3.95 ms per s 1.25% 🔼 🟢
Frame rate 75 fps 79.32 fps 5.76% 🔼 🟢
Number of hitches 1 1.2 -20.0% 🔽 🔴

@martinmitrevski martinmitrevski left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good in general, couldn't spot anything suspicious apart from the handling of the connected events.

// `connection.ok` and `connection.error` are not part of the generated `WSEvent`, and custom
// event types are surfaced through the public unknown event types. Known event types which
// failed to decode must not be reported as unknown events, otherwise the failure goes unnoticed.
if let event = try? decoder.decode(ConnectedEvent.self, from: data) { return event }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm, this is not pretty. How are we doing it on video/feeds?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll implement https://linear.app/stream/issue/CHA-5606 to get connected events as generated events like video and feeds get. Not sure why chat was left out.

@laevandus laevandus Sep 30, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR is up for chat and updated this branch with those changes. I was thinking about doing this cleanup later, but why not now.

# Conflicts:
#	Sources/StreamChat/Generated/OpenAPI/APIs/DefaultEndpoints.swift
# Conflicts:
#	Scripts/openapi_generate.sh
# Conflicts:
#	Scripts/openapi_generate.sh
# Conflicts:
#	Sources/StreamChat/Generated/OpenAPIDecodable.stencil
# Conflicts:
#	Scripts/openapi_generate.sh
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

Public Interface

- public final class HealthCheckEvent: ConnectionEvent, EventDTO, Sendable  
+ public final class HealthCheckEvent: ConnectionEvent, Sendable  

@Stream-SDK-Bot

Copy link
Copy Markdown
Collaborator

SDK Size

title develop branch diff status
StreamChat 7.67 MB 7.96 MB +297 KB 🟡
StreamChatUI 3.38 MB 3.38 MB 0 KB 🟢
StreamChatCommonUI 0.99 MB 0.99 MB 0 KB 🟢

@Stream-SDK-Bot

Copy link
Copy Markdown
Collaborator

StreamChat XCSize

Object Diff (bytes)
EventPayload.o -18940
WSEvent.o +18066
NotificationEvents.o -17338
WebSocketConnectPayload.o -11616
SyncResponse.o +11371
Show 121 more objects
Object Diff (bytes)
AttachmentDownloader.o +11319
UserEvents.o -10975
MessageEvents.o -8754
EventType.o -7917
NotificationMarkUnreadEventDTO.o +7884
AnyAttachmentPayload.o +7678
SearchResultMessage.o -7468
MessageNewEventDTO.o +7405
NotificationMarkReadEventDTO.o +7358
ChannelEvents.o -7332
Event.o +6849
NotificationNewMessageEventDTO.o +6693
UserBannedEventDTO.o +6682
ReactionDeletedEventDTO.o +6674
ReactionUpdatedEventDTO.o +6642
MessageDeliveredEventDTO.o +6599
ReactionNewEventDTO.o +6598
MessageDeletedEventDTO.o +6527
MessageReadEventDTO.o +6425
NotificationChannelDeletedEventDTO.o +6421
NotificationThreadMessageNewEventDTO.o +6371
TypingStartEventDTO.o +6262
ChannelTruncatedEventDTO.o +6218
GuestUserTokenPayload.o -6217
UnknownChannelEvent.o +6208
TypingStopEventDTO.o +6184
MemberAddedEventDTO.o +6162
NotificationRemovedFromChannelEventDTO.o +6158
NotificationInvitedEventDTO.o +6132
MessageUpdatedEventDTO.o +6128
MemberUpdatedEventDTO.o +6122
ChannelUpdatedEventDTO.o +6108
ChannelHiddenEventDTO.o +6105
AIIndicatorUpdateEventDTO.o +6024
NotificationInviteAcceptedEventDTO.o +5931
NotificationInviteRejectedEventDTO.o +5911
UserWatchingStartEventDTO.o +5868
ChannelVisibleEventDTO.o +5865
MemberRemovedEventDTO.o +5835
UserWatchingStopEventDTO.o +5827
GuestUserTokenRequestPayload.o -5782
ChannelDeletedEventDTO.o +5690
NotificationAddedToChannelEventDTO.o +5646
DraftDeletedEventDTO.o +5627
PollVoteCastedEventDTO.o +5621
UserUnbannedEventDTO.o +5614
ConnectedEventDTO.o +5613
ReminderCreatedEventDTO.o +5597
ConnectionErrorEventDTO.o +5583
UserMessagesDeletedEventDTO.o +5578
PollVoteChangedEventDTO.o +5577
ReminderNotificationEventDTO.o +5574
PollVoteRemovedEventDTO.o +5568
DraftUpdatedEventDTO.o +5563
ReminderUpdatedEventDTO.o +5561
ReminderDeletedEventDTO.o +5561
HealthCheckEventDTO.o +5548
AIIndicatorClearEventDTO.o +5419
NotificationChannelMutesUpdatedEventDTO.o +5397
UserPresenceChangedEventDTO.o +5387
ThreadUpdatedEventDTO.o +5387
PollClosedEventDTO.o +5364
NotificationMutesUpdatedEventDTO.o +5226
PollDeletedEventDTO.o +5199
PollUpdatedEventDTO.o +5199
UserUpdatedEventDTO.o +5195
AIIndicatorStopEventDTO.o +5128
MissingEventsRequestBody.o -4793
SyncRequest.o +4789
CreateGuestResponse.o +4714
UserRequest.o +4705
ReminderEvents.o -4308
CreateGuestRequest.o +4207
EventDecoder.o +4044
ThreadEvents.o -3951
PollsEvents.o -3906
MemberEvents.o -3852
MissingEventsPayload.o -3193
ConnectionRepository.o +3051
UnknownUserEvent.o +2810
ReactionEvents.o -2580
DraftEvents.o -2576
AITypingEvents.o -2057
RequestEncoder.o -1988
BanRequest.o +1536
APIClient.o -1372
ConnectionEvents.o -1289
EventNotificationCenter.o +1272
TypingEvent.o -1198
MemberContainerPayload.o -1069
UserListController.o -940
DatabaseSession.o -924
SyncRepository.o +788
ChannelListPayload.o +750
SyncOperations.o +749
DefaultEndpoints.o -742
StringInterpolation+Extensions.o -741
UserWatchingEventMiddleware.o +538
StreamCDNStorage.o -472
AppSettings+Extensions.o +462
ChannelDeliveredMiddleware.o +324
EventDataProcessorMiddleware.o -271
TypingStartCleanupMiddleware.o +208
ChannelReadUpdaterMiddleware.o +192
SystemEnvironment.o +189
UserChannelBanEventsMiddleware.o +168
EventMiddleware.o +164
AuthenticationRepository.o -160
EventDTOConverterMiddleware.o +130
UserTypingStateUpdaterMiddleware.o +116
ThreadUpdaterMiddleware.o +100
ManualEventHandler.o +100
ChannelListLinker.o +80
Filter.o +72
BlockUsersResponse.o -68
UpdateChannelPartialRequest.o -68
MessageAttachmentPayload+Extensions.o +64
MessageReactionDTO.o -58
TypingUser.o -48
ReminderUpdaterMiddleware.o -44
LivestreamChannelController.o +44

@sonarqubecloud

sonarqubecloud Bot commented Oct 2, 2026

Copy link
Copy Markdown

@laevandus laevandus added the 🟢 QAed A PR that was QAed label Oct 5, 2026
@laevandus

Copy link
Copy Markdown
Contributor Author

@testableapple used #4300 for QAing the whole stack of PRs. Marking this one as QAed as well.

@martinmitrevski martinmitrevski left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

Base automatically changed from open-api-wrap-3-sync to develop October 5, 2026 10:58
@laevandus
laevandus merged commit ed52a58 into develop Oct 5, 2026
3 checks passed
@laevandus
laevandus deleted the open-api-wrap-4-events branch October 5, 2026 11:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🟢 QAed A PR that was QAed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants