Skip to content

4.83.0 Release #3752

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 21 commits into from
Jul 29, 2025
Merged

4.83.0 Release #3752

merged 21 commits into from
Jul 29, 2025

Conversation

Stream-SDK-Bot
Copy link
Collaborator

StreamChat

✅ Added

  • Add support for Filtering and Sorting Threads #3731
  • Add ChatThread.activeParticipantCount #3731
  • Add CurrentUserUnreads.totalUnreadCountByTeam #3733
  • Enable subclassing StreamAudioPlayer and StreamAudioSessionConfigurator #3737
  • Add skipPush parameter to MessageController.editMessage() #3738
  • Add skipPush and emojiCode to MessageController.addReaction() #3738
  • Add Components.availableReactionsPushEmojis for rendering emojis in reaction push notifications #3738
  • Add Components.isReactionPushEmojisEnabled to control whether an emoji should be set when adding a reaction #3738
  • Add MessageNotificationContent.reaction that can be used by Notification Service Extension #3738
  • Add average message response time for users #3739

🐞 Fixed

  • Fix rare crashes in IOSBackgroundTaskScheduler with on entering callbacks #3751

StreamChatUI

🐞 Fixed

  • Fix reaction picker position in RTL layout #3748
  • Fix swiping and dismissing GalleryVC when using RTL layout #3745
  • Slide to cancel gesture did not cancel the recording in RTL layout #3744
  • Fix the direction of the bubble beak in RTL layouts #3742
  • Fix animating attachments when opening a sheet in the channel view #3746
  • Fix audio visualisation progress in RTL layout #3749

Stream Bot and others added 21 commits July 16, 2025 12:46
* Add a view in user profile to show the total unread counts for the user

* Add total unread count by teams

* Update CHANGELOG.md

* Remove dead code
* Fix existing filter queries not actually limit their scope when creating the filters

* Make channel list query keypath optional

* Add ThreadListQuery filter and sorting support

* Add new `LocalConvertibleSortingKey` to reuse code between ChannelListSortingKey and ThreadListSortingKey

* Fix existing tests

* Add ThreadListQuery test coverage

* Add a way to show the channel threads in the demo app

* Add activeParticipantCount to Threads

* Add comment explaining why we don't save threads in the DB on new message event

* Add test coverage to filtering and sorting

* Update CHANGELOG.md

* Update CHANGELOG.md

* Fix runtime sorting not respecting isAscending

* Fix unnecessary fallback in activeParticipantCount

* Fix typo in ThreadListFilterScope extending from Channel List

* Fix typo in parentMessageId filter key

* Fix runtimeSorting logic

* Update CHANGELOG.md

* Rename LocalConvertibleQuery to LocalConvertibleSortingQuery

* Fix linting

* Update Sources/StreamChat/WebSocketClient/EventMiddlewares/ThreadUpdaterMiddleware.swift
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.18.8 to 1.18.9.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md)
- [Commits](sparklemotion/nokogiri@v1.18.8...v1.18.9)

---
updated-dependencies:
- dependency-name: nokogiri
  dependency-version: 1.18.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alexey Alter-Pesotskiy <[email protected]>
…cation (#3738)

* Add skipPush to `MessageController.editMessage()`

* Add skipPush and emojiCode to `MessageController.addReaction()`

* Add `MessageNotificationContent.reaction` so that it can be used by NSEs

* Add test coverage to skip push edit message

* Add test coverage to skip push and emojiCode

* Add test coverage to remote notification handler parsing reaction data

* Fix existing unit tests

* Update CHANGELOG.md

* Fix type in addReaction defaultValues test

* Fix NSE not compiling correctly on CI

* PR Feedback
@Stream-SDK-Bot Stream-SDK-Bot requested a review from a team as a code owner July 28, 2025 14:50
Copy link

coderabbitai bot commented Jul 28, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch release/4.83.0

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@Stream-SDK-Bot
Copy link
Collaborator Author

SDK Size

title previous release current release diff status
StreamChat 7.88 MB 7.92 MB +37 KB 🟢
StreamChatUI 4.84 MB 4.84 MB 0 KB 🟢

Copy link

Public Interface

+ public struct ThreadListFilterScope: FilterScope, AnyThreadListFilterScope

+ public struct PushReactionInfo  
+ 
+   public let type: MessageReactionType
+   public let reactionUserId: UserId
+   public let reactionUserImageUrl: URL?
+   public let receiverUserId: UserId

+ extension ThreadListSortingKey  
+ 
+   public static let createdAt
+   public static let updatedAt
+   public static let lastMessageAt
+   public static let participantCount
+   public static let activeParticipantCount
+   public static let replyCount
+   public static let parentMessageId
+   public static let hasUnread

+ public struct LocalConvertibleSortingKey: SortingKey, Encodable, Equatable  
+ 
+   public static func custom(keyPath: KeyPath<Model, Value>,key: String)-> Self
+   public func encode(to encoder: Encoder)throws

+ public protocol AnyThreadListFilterScope

+ extension LocalConvertibleSortingKey: CustomDebugStringConvertible  
+ 
+   public var debugDescription: String

- public struct ChannelListSortingKey: SortingKey, Equatable  
- 
-   public static let `default`
-   public static let createdAt
-   public static let updatedAt
-   public static let lastMessageAt
-   public static let pinnedAt
-   public static let memberCount
-   public static let cid
-   public static let hasUnread
-   public static let unreadCount
-   
- 
-   public static func custom(keyPath: KeyPath<ChatChannel, T>,key: String)-> Self
-   public func encode(to encoder: Encoder)throws

 public class Chat  
-   @discardableResult public func updateMessage(_ messageId: MessageId,text: String,attachments: [AnyAttachmentPayload] = [],extraData: [String: RawJSON]? = nil,restrictedVisibility: [UserId] = [],skipEnrichURL: Bool = false)async throws -> ChatMessage
+   @discardableResult public func updateMessage(_ messageId: MessageId,text: String,attachments: [AnyAttachmentPayload] = [],extraData: [String: RawJSON]? = nil,restrictedVisibility: [UserId] = [],skipEnrichURL: Bool = false,skipPush: Bool = false)async throws -> ChatMessage
-   public func sendReaction(to messageId: MessageId,with type: MessageReactionType,score: Int = 1,enforceUnique: Bool = false,extraData: [String: RawJSON] = [:])async throws 
+   public func sendReaction(to messageId: MessageId,with type: MessageReactionType,score: Int = 1,enforceUnique: Bool = false,skipPush: Bool = false,pushEmojiCode: String? = nil,extraData: [String: RawJSON] = [:])async throws 

 open class GalleryVC: _ViewController, UIGestureRecognizerDelegate, AppearanceProvider, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, ComponentsProvider  
-   override open func viewWillDisappear(_ animated: Bool)
+   override open func viewDidAppear(_ animated: Bool)
-   override open func updateContent()
+   override open func viewWillDisappear(_ animated: Bool)
-   @objc open func handlePan(with gestureRecognizer: UIPanGestureRecognizer)
+   override open func updateContent()
-   @objc open func closeButtonTapped()
+   @objc open func handlePan(with gestureRecognizer: UIPanGestureRecognizer)
-   @objc open func shareButtonTapped()
+   @objc open func closeButtonTapped()
-   open func updateCurrentPage()
+   @objc open func shareButtonTapped()
-   open func collectionView(_ collectionView: UICollectionView,numberOfItemsInSection section: Int)-> Int
+   open func updateCurrentPage()
-   open func collectionView(_ collectionView: UICollectionView,cellForItemAt indexPath: IndexPath)-> UICollectionViewCell
+   open func collectionView(_ collectionView: UICollectionView,numberOfItemsInSection section: Int)-> Int
-   open func collectionView(_ collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath)-> CGSize
+   open func collectionView(_ collectionView: UICollectionView,cellForItemAt indexPath: IndexPath)-> UICollectionViewCell
-   open func collectionView(_ collectionView: UICollectionView,targetContentOffsetForProposedContentOffset proposedContentOffset: CGPoint)-> CGPoint
+   open func collectionView(_ collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath)-> CGSize
-   open func scrollViewDidEndDecelerating(_ scrollView: UIScrollView)
+   open func collectionView(_ collectionView: UICollectionView,targetContentOffsetForProposedContentOffset proposedContentOffset: CGPoint)-> CGPoint
-   open func scrollViewDidScroll(_ scrollView: UIScrollView)
+   open func scrollViewDidEndDecelerating(_ scrollView: UIScrollView)
-   override open func viewWillTransition(to size: CGSize,with coordinator: UIViewControllerTransitionCoordinator)
+   open func scrollViewDidScroll(_ scrollView: UIScrollView)
-   open func shareItem(at indexPath: IndexPath)-> Any?
+   override open func viewWillTransition(to size: CGSize,with coordinator: UIViewControllerTransitionCoordinator)
-   open func cellReuseIdentifierForItem(at indexPath: IndexPath)-> String?
+   open func shareItem(at indexPath: IndexPath)-> Any?
-   open func handleSingleTapOnCell(at indexPath: IndexPath)
+   open func cellReuseIdentifierForItem(at indexPath: IndexPath)-> String?
-   
+   open func handleSingleTapOnCell(at indexPath: IndexPath)
- 
+   
-   public struct Content  
+ 
-   
+   public struct Content  
-     public var message: ChatMessage
+   
-     public var currentPage: Int
+     public var message: ChatMessage
-     
+     public var currentPage: Int
-   
+     
-     public init(message: ChatMessage,currentPage: Int = 0)
+   
+     public init(message: ChatMessage,currentPage: Int = 0)

- extension ChannelListSortingKey: CustomDebugStringConvertible  
+ extension ChannelListSortingKey  
-   public var debugDescription: String
+   public static let `default`
+   public static let createdAt
+   public static let updatedAt
+   public static let lastMessageAt
+   public static let pinnedAt
+   public static let memberCount
+   public static let cid
+   public static let hasUnread
+   public static let unreadCount

- public struct ThreadListQuery: Encodable  
+ public struct ThreadListQuery: Encodable, LocalConvertibleSortingQuery  
-   case watch
+   case filter
-   case replyLimit = "reply_limit"
+   case sort
-   case participantLimit = "participant_limit"
+   case watch
-   case limit
+   case replyLimit = "reply_limit"
-   case next
+   case participantLimit = "participant_limit"
-   
+   case limit
- 
+   case next
-   public var watch: Bool
+   
-   public var limit: Int
+ 
-   public var replyLimit: Int
+   public let filter: Filter<ThreadListFilterScope>?
-   public var participantLimit: Int
+   public let sort: [Sorting<ThreadListSortingKey>]
-   public var next: String?
+   public var watch: Bool
-   
+   public var limit: Int
- 
+   public var replyLimit: Int
-   public init(watch: Bool,limit: Int = 20,replyLimit: Int = 3,participantLimit: Int = 10,next: String? = nil)
+   public var participantLimit: Int
+   public var next: String?
+   
+ 
+   public init(watch: Bool,filter: Filter<ThreadListFilterScope>? = nil,sort: [Sorting<ThreadListSortingKey>] = [
+             .init(key: .hasUnread),
+             .init(key: .lastMessageAt),
+             .init(key: .parentMessageId)
+         ],limit: Int = 20,replyLimit: Int = 3,participantLimit: Int = 10,next: String? = nil)

 public class MessageNotificationContent  
-   public let type: PushNotificationType
+   public let reaction: PushReactionInfo?
+   public let type: PushNotificationType

 public class ChatUser  
-   public let extraData: [String: RawJSON]
+   public let avgResponseTime: Int?
+   public let extraData: [String: RawJSON]

 public struct ChatThread  
-   public let threadParticipants: [ThreadParticipant]
+   public let activeParticipantCount: Int
-   public let lastMessageAt: Date?
+   public let threadParticipants: [ThreadParticipant]
-   public let createdAt: Date
+   public let lastMessageAt: Date?
-   public let updatedAt: Date?
+   public let createdAt: Date
-   public let title: String?
+   public let updatedAt: Date?
-   public let latestReplies: [ChatMessage]
+   public let title: String?
-   public let reads: [ThreadRead]
+   public let latestReplies: [ChatMessage]
-   public let extraData: [String: RawJSON]
+   public let reads: [ThreadRead]
+   public let extraData: [String: RawJSON]

- public struct ChannelListQuery: Encodable  
+ public struct ChannelListQuery: Encodable, LocalConvertibleSortingQuery  

 public struct Components  
-   @available(iOSApplicationExtension, unavailable) public var threadListRouter: ChatThreadListRouter.Type
+   public var isReactionPushEmojisEnabled: Bool
-   public var threadListItemCell: ChatThreadListItemCell.Type
+   @available(iOSApplicationExtension, unavailable) public var threadListRouter: ChatThreadListRouter.Type
-   public var threadListItemView: ChatThreadListItemView.Type
+   public var threadListItemCell: ChatThreadListItemCell.Type
-   public var threadUnreadCountView: ChatThreadUnreadCountView.Type
+   public var threadListItemView: ChatThreadListItemView.Type
-   public var threadListHeaderBannerView: ChatThreadListHeaderBannerView.Type
+   public var threadUnreadCountView: ChatThreadUnreadCountView.Type
-   public var threadListLoadingView: ChatThreadListLoadingView.Type
+   public var threadListHeaderBannerView: ChatThreadListHeaderBannerView.Type
-   public var threadListEmptyView: ChatThreadListEmptyView.Type
+   public var threadListLoadingView: ChatThreadListLoadingView.Type
-   public var threadListErrorView: ChatThreadListErrorView.Type
+   public var threadListEmptyView: ChatThreadListEmptyView.Type
-   public var threadVC: ChatThreadVC.Type
+   public var threadListErrorView: ChatThreadListErrorView.Type
-   public var threadHeaderView: ChatThreadHeaderView.Type
+   public var threadVC: ChatThreadVC.Type
-   public var threadRepliesCounterDecorationView: ChatThreadRepliesCountDecorationView.Type
+   public var threadHeaderView: ChatThreadHeaderView.Type
-   public var threadRepliesCounterEnabled
+   public var threadRepliesCounterDecorationView: ChatThreadRepliesCountDecorationView.Type
-   public var threadRendersParentMessageEnabled
+   public var threadRepliesCounterEnabled
-   public var threadRepliesStartFromOldest
+   public var threadRendersParentMessageEnabled
-   public var channelVC: ChatChannelVC.Type
+   public var threadRepliesStartFromOldest
-   public var channelHeaderView: ChatChannelHeaderView.Type
+   public var channelVC: ChatChannelVC.Type
-   public var channelListLayout: UICollectionViewLayout.Type
+   public var channelHeaderView: ChatChannelHeaderView.Type
-   public var channelCell: ChatChannelListCollectionViewCell.Type
+   public var channelListLayout: UICollectionViewLayout.Type
-   public var channelCellSeparator: UICollectionReusableView.Type
+   public var channelCell: ChatChannelListCollectionViewCell.Type
-   public var channelActionsView: SwipeableView.Type
+   public var channelCellSeparator: UICollectionReusableView.Type
-   public var channelContentView: ChatChannelListItemView.Type
+   public var channelActionsView: SwipeableView.Type
-   public var channelAvatarView: ChatChannelAvatarView.Type
+   public var channelContentView: ChatChannelListItemView.Type
-   public var channelUnreadCountView: ChatChannelUnreadCountView.Type
+   public var channelAvatarView: ChatChannelAvatarView.Type
-   public var channelListEmptyView: ChatChannelListEmptyView.Type
+   public var channelUnreadCountView: ChatChannelUnreadCountView.Type
-   public var channelListErrorView: ChatChannelListErrorView.Type
+   public var channelListEmptyView: ChatChannelListEmptyView.Type
-   public var channelListLoadingView: ChatChannelListLoadingView.Type
+   public var channelListErrorView: ChatChannelListErrorView.Type
-   public var channelListLoadingViewCell: ChatChannelListLoadingViewCell.Type
+   public var channelListLoadingView: ChatChannelListLoadingView.Type
-   public var channelListLoadingContentViewCell: ChatChannelListLoadingViewCellContentView.Type
+   public var channelListLoadingViewCell: ChatChannelListLoadingViewCell.Type
-   public var isChatChannelListStatesEnabled
+   public var channelListLoadingContentViewCell: ChatChannelListLoadingViewCellContentView.Type
-   public var channelListSearchStrategy: ChannelListSearchStrategy?
+   public var isChatChannelListStatesEnabled
-   public var messageComposerVC: ComposerVC.Type
+   public var channelListSearchStrategy: ChannelListSearchStrategy?
-   public var messageComposerView: ComposerView.Type
+   public var messageComposerVC: ComposerVC.Type
-   public var messageComposerAttachmentsVC: AttachmentsPreviewVC.Type
+   public var messageComposerView: ComposerView.Type
-   public var messageComposerAttachmentCell: AttachmentPreviewContainer.Type
+   public var messageComposerAttachmentsVC: AttachmentsPreviewVC.Type
-   public var messageComposerFileAttachmentView: FileAttachmentView.Type
+   public var messageComposerAttachmentCell: AttachmentPreviewContainer.Type
-   public var imageAttachmentComposerPreview: ImageAttachmentComposerPreview
+   public var messageComposerFileAttachmentView: FileAttachmentView.Type
-         .Type
+   public var imageAttachmentComposerPreview: ImageAttachmentComposerPreview
-   public var videoAttachmentComposerPreview: VideoAttachmentComposerPreview
+         .Type
-         .Type
+   public var videoAttachmentComposerPreview: VideoAttachmentComposerPreview
-   public var suggestionsVC: ChatSuggestionsVC.Type
+         .Type
-   public var mentionAllAppUsers: Bool
+   public var suggestionsVC: ChatSuggestionsVC.Type
-   public var suggestionsCollectionView: ChatSuggestionsCollectionView.Type
+   public var mentionAllAppUsers: Bool
-   public var suggestionsMentionCollectionViewCell: ChatMentionSuggestionCollectionViewCell.Type
+   public var suggestionsCollectionView: ChatSuggestionsCollectionView.Type
-   public var suggestionsCommandCollectionViewCell: ChatCommandSuggestionCollectionViewCell
+   public var suggestionsMentionCollectionViewCell: ChatMentionSuggestionCollectionViewCell.Type
-         .Type
+   public var suggestionsCommandCollectionViewCell: ChatCommandSuggestionCollectionViewCell
-   public var suggestionsMentionView: ChatMentionSuggestionView.Type
+         .Type
-   public var suggestionsCommandView: ChatCommandSuggestionView.Type
+   public var suggestionsMentionView: ChatMentionSuggestionView.Type
-   public var suggestionsCollectionViewLayout: UICollectionViewLayout.Type
+   public var suggestionsCommandView: ChatCommandSuggestionView.Type
-   public var suggestionsHeaderReusableView: UICollectionReusableView.Type
+   public var suggestionsCollectionViewLayout: UICollectionViewLayout.Type
-   public var suggestionsHeaderView: ChatSuggestionsHeaderView.Type
+   public var suggestionsHeaderReusableView: UICollectionReusableView.Type
-   public var userAvatarView: ChatUserAvatarView.Type
+   public var suggestionsHeaderView: ChatSuggestionsHeaderView.Type
-   public var isVoiceRecordingEnabled
+   public var userAvatarView: ChatUserAvatarView.Type
-   public var isVoiceRecordingConfirmationRequiredEnabled
+   public var isVoiceRecordingEnabled
-   public var voiceRecordingViewController: VoiceRecordingVC.Type
+   public var isVoiceRecordingConfirmationRequiredEnabled
-   public var audioPlayer: AudioPlaying.Type
+   public var voiceRecordingViewController: VoiceRecordingVC.Type
-   public var audioRecorder: AudioRecording.Type
+   public var audioPlayer: AudioPlaying.Type
-   public var audioSessionFeedbackGenerator: AudioSessionFeedbackGenerator.Type
+   public var audioRecorder: AudioRecording.Type
-   public var audioQueuePlayerNextItemProvider: AudioQueuePlayerNextItemProvider.Type
+   public var audioSessionFeedbackGenerator: AudioSessionFeedbackGenerator.Type
-   public var currentUserAvatarView: CurrentChatUserAvatarView.Type
+   public var audioQueuePlayerNextItemProvider: AudioQueuePlayerNextItemProvider.Type
-   public var isBlockingUsersEnabled
+   public var currentUserAvatarView: CurrentChatUserAvatarView.Type
-   public var navigationVC: NavigationVC.Type
+   public var isBlockingUsersEnabled
-   @available(iOSApplicationExtension, unavailable) public var channelListRouter: ChatChannelListRouter.Type
+   public var navigationVC: NavigationVC.Type
-   public var messageListRouter: ChatMessageListRouter.Type
+   @available(iOSApplicationExtension, unavailable) public var channelListRouter: ChatChannelListRouter.Type
-   public var alertsRouter: AlertsRouter.Type
+   public var messageListRouter: ChatMessageListRouter.Type
-   public static var `default`
+   public var alertsRouter: AlertsRouter.Type
-   @available(*, deprecated, renamed: "uploadingOverlayView") public var imageUploadingOverlay: UploadingOverlayView.Type
+   public static var `default`
-   
+   @available(*, deprecated, renamed: "uploadingOverlayView") public var imageUploadingOverlay: UploadingOverlayView.Type
- 
+   
-   public init()
+ 
+   public init()

 open class SlideToCancelView: _View, ThemeProvider  
-   override open func updateContent()
+   override open func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
-   
+   override open func updateContent()
- 
+   
-   public struct Content: Equatable  
+ 
-   
+   public struct Content: Equatable  
-     public var alpha: CGFloat
+   
-     
+     public var alpha: CGFloat
-   
+     
-     public init(alpha: CGFloat)
+   
+     public init(alpha: CGFloat)

 public class ChatMessageController: DataController, DelegateCallable, DataStoreProvider  
-   public func editMessage(text: String,skipEnrichUrl: Bool = false,attachments: [AnyAttachmentPayload] = [],restrictedVisibility: [UserId] = [],extraData: [String: RawJSON]? = nil,completion: ((Error?) -> Void)? = nil)
+   public func editMessage(text: String,skipEnrichUrl: Bool = false,skipPush: Bool = false,attachments: [AnyAttachmentPayload] = [],restrictedVisibility: [UserId] = [],extraData: [String: RawJSON]? = nil,completion: ((Error?) -> Void)? = nil)
-   public func addReaction(_ type: MessageReactionType,score: Int = 1,enforceUnique: Bool = false,extraData: [String: RawJSON] = [:],completion: ((Error?) -> Void)? = nil)
+   public func addReaction(_ type: MessageReactionType,score: Int = 1,enforceUnique: Bool = false,skipPush: Bool = false,pushEmojiCode: String? = nil,extraData: [String: RawJSON] = [:],completion: ((Error?) -> Void)? = nil)

 open class StreamAudioPlayer: AudioPlaying, AppStateObserverDelegate  
-   
+   public init(assetPropertyLoader: AssetPropertyLoading,audioSessionConfigurator: AudioSessionConfiguring)
- 
+   
-   public func configure(_ audioSessionConfigurator: AudioSessionConfiguring)
+ 
-   open func subscribe(_ subscriber: AudioPlayingDelegate)
+   public func configure(_ audioSessionConfigurator: AudioSessionConfiguring)
-   open func loadAsset(from url: URL)
+   open func subscribe(_ subscriber: AudioPlayingDelegate)
-   open func loadAsset(from url: URL,options: [String: Any]?)
+   open func loadAsset(from url: URL)
-   open func play()
+   open func loadAsset(from url: URL,options: [String: Any]?)
-   open func pause()
+   open func play()
-   open func stop()
+   open func pause()
-   open func updateRate(_ newRate: AudioPlaybackRate)
+   open func stop()
-   open func seek(to time: TimeInterval)
+   open func updateRate(_ newRate: AudioPlaybackRate)
-   open func applicationDidMoveToBackground()
+   open func seek(to time: TimeInterval)
-   open func applicationDidMoveToForeground()
+   open func applicationDidMoveToBackground()
+   open func applicationDidMoveToForeground()

 public struct CurrentUserUnreads  
-   public let unreadChannels: [UnreadChannel]
+   public let totalUnreadCountByTeam: [TeamId: Int]?
-   public let unreadThreads: [UnreadThread]
+   public let unreadChannels: [UnreadChannel]
-   public let unreadChannelsByType: [UnreadChannelByType]
+   public let unreadThreads: [UnreadThread]
+   public let unreadChannelsByType: [UnreadChannelByType]

 open class StreamAudioSessionConfigurator: AudioSessionConfiguring  
-   public required convenience init()
+   public required init()

Copy link

1 Warning
⚠️ Big PR

Generated by 🚫 Danger

Copy link

Build for regression testing №123457080 has been uploaded to TestFlight 🎁

Copy link

@testableapple
Copy link
Contributor

/merge release

@testableapple
Copy link
Contributor

Publication of the release has been launched 👍

@github-actions github-actions bot merged commit d56a2b9 into main Jul 29, 2025
15 of 18 checks passed
@github-actions github-actions bot deleted the release/4.83.0 branch July 29, 2025 09:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants