Skip to content

[Performance]UI Improvements #829

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

Open
wants to merge 10 commits into
base: fix/performance-improvements
Choose a base branch
from

Conversation

ipavlidakis
Copy link
Contributor

🎯 Goal

Describe why we are making this change.

📝 Summary

Provide bullet points with the most important changes in the codebase.

🛠 Implementation

Provide a detailed description of the implementation and explain your decisions if you find them relevant.

🎨 Showcase

Add relevant screenshots and/or videos/gifs to easily see what this PR changes, if applicable.

Before After
img img

🧪 Manual Testing Notes

Explain how this change can be tested manually, if applicable.

☑️ Contributor Checklist

  • I have signed the Stream CLA (required)
  • This change follows zero ⚠️ policy (required)
  • This change should receive manual QA
  • Changelog is updated with client-facing changes
  • New code is covered by unit tests
  • Comparison screenshots added for visual changes
  • Affected documentation updated (tutorial, CMS)

🎁 Meme

Provide a funny gif or image that relates to your work on this pull request. (Optional)

@ipavlidakis ipavlidakis self-assigned this Jun 1, 2025
@ipavlidakis ipavlidakis requested a review from a team as a code owner June 1, 2025 18:06
@ipavlidakis ipavlidakis added the enhancement New feature or request label Jun 1, 2025
@ipavlidakis ipavlidakis changed the base branch from develop to fix/performance-improvements June 1, 2025 18:09
Copy link

github-actions bot commented Jun 1, 2025

Public Interface

+ public final class ScreenPropertiesAdapter: @unchecked Sendable  
+ 
+   public private var preferredFramesPerSecond: Int
+   public private var refreshRate: TimeInterval
+   public private var scale: CGFloat

+ extension Publishers  
+ 
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?,)-> AnyPublisher<(A, B, C), Never>

+ public protocol TimerProviding

+ public struct CurrentUserScreenSharingIndicatorView: View  
+ 
+   public var body: some View

+ extension ScreenPropertiesAdapter: InjectionKey  
+ 
+   public nonisolated static var currentValue: ScreenPropertiesAdapter

+ public actor SerialActorQueue  
+ 
+   nonisolated public var unownedExecutor: UnownedSerialExecutor
+   
+ 
+   public init(file: StaticString = #file)
+   
+ 
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+   public nonisolated func cancelAll()
+   
+ 
+   public final class QueueTask: @unchecked Sendable

+ public struct PublisherSubscriptionView: View  
+ 
+   public var body: some View
+   
+ 
+   public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)

- public final class SerialActorQueue: Sendable  
- 
-   public init()
-   
- 
-   public func cancelAll()
-   public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
-   public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T

 open class VideoFilter: @unchecked Sendable  
-   public var filter: (Input) async -> CIImage
+   public var filter: (Input) -> CIImage
-   public init(id: String,name: String,filter: @escaping (Input) async -> CIImage)
+   public init(id: String,name: String,filter: @escaping (Input) -> CIImage)

 @available(iOS 15.0, *) public final class BlurBackgroundVideoFilter: VideoFilter, @unchecked Sendable  
-   @available(*, unavailable) override public init(id: String,name: String,filter: @escaping (Input) async -> CIImage)
+   @available(*, unavailable) override public init(id: String,name: String,filter: @escaping (Input) -> CIImage)

 @available(iOS 15.0, *) public final class ImageBackgroundVideoFilter: VideoFilter, @unchecked Sendable  
-   @available(*, unavailable) override public init(id: String,name: String,filter: @escaping (Input) async -> CIImage)
+   @available(*, unavailable) override public init(id: String,name: String,filter: @escaping (Input) -> CIImage)

 public struct StatelessHangUpIconView: View  
-   public weak var call: Call?
+   public var size: CGFloat
-   public var size: CGFloat
+   public var actionHandler: ActionHandler?
-   public var actionHandler: ActionHandler?
+   public var body: some View
-   public var body: some View
+   
-   
+ 
- 
+   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
-   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)

 public final class DisposableBag: @unchecked Sendable  
+   public func completed(_ key: String)

 public struct CallView: View  
-   public var body: some View
+   case localVideo, screensharing, participantsView
-   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+   public var body: some View
+   
+ 
+   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)

- public enum ParticipantAction: Sendable  
+ public enum ParticipantAction: Equatable, Sendable  

 extension Publisher  
-   public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
-   public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable

 extension Task  
-   public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+   
+ 
+   public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)

- public enum CallingState: Equatable, CustomStringConvertible  
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable  

 public class StreamVideo: ObservableObject, @unchecked Sendable  
-   public var state: State
+   case ringEventReceived
-   public let videoConfig: VideoConfig
+   
-   public var user: User
+ 
-   public var isHardwareAccelerationAvailable: Bool
+   public var state: State
-   public lazy var rejectionReasonProvider: RejectionReasonProviding
+   public let videoConfig: VideoConfig
-   
+   public var user: User
- 
+   public var isHardwareAccelerationAvailable: Bool
-   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+   public lazy var rejectionReasonProvider: RejectionReasonProviding
-   public func connect()async throws 
+   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
-   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+   
-   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+ 
-   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+   public func connect()async throws 
-   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
-   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
-   public func listDevices()async throws -> [Device]
+   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
-   public func disconnect()async 
+   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
-   public func subscribe()-> AsyncStream<VideoEvent>
+   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
-   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+   public func listDevices()async throws -> [Device]
-   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func disconnect()async 
-   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-   
+   public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
- 
+   public func subscribe()-> AsyncStream<VideoEvent>
-   public final class State: ObservableObject, @unchecked Sendable  
+   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-   
+   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var connection: ConnectionStatus
+   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var user: User
+   
-     @Published public internal var activeCall: Call?
+ 
-     @Published public internal var ringingCall: Call?
+   public final class State: ObservableObject, @unchecked Sendable  
+   
+     @Published public internal var connection: ConnectionStatus
+     @Published public internal var user: User
+     @Published public internal var activeCall: Call?
+     @Published public internal var ringingCall: Call?

- public struct ParticipantEvent: Sendable  
+ public struct ParticipantEvent: Equatable, Sendable  

- public struct VideoCallParticipantView: View  
+ public struct VideoCallParticipantView: View, Equatable  
+   
+ 
+   nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool

Copy link

github-actions bot commented Jun 1, 2025

2 Errors
🚫 Please start subject with capital letter.
b75a6a1
🚫 Please use more than one word.
b75a6a1
2 Warnings
⚠️ Please be sure to complete the Contributor Checklist in the Pull Request description
⚠️ Big PR

Generated by 🚫 Danger

@Stream-SDK-Bot
Copy link
Collaborator

Stream-SDK-Bot commented Jun 1, 2025

SDK Size

title develop branch diff status
StreamVideo 7.54 MB 7.61 MB +76 KB 🟢
StreamVideoSwiftUI 2.26 MB 2.35 MB +97 KB 🟢
StreamVideoUIKit 2.38 MB 2.47 MB +97 KB 🟢
StreamWebRTC 9.85 MB 9.85 MB 0 KB 🟢

Copy link
Contributor

@martinmitrevski martinmitrevski left a comment

Choose a reason for hiding this comment

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

Let's discuss it a bit further, we should also test it thoroughly.

@@ -123,8 +123,6 @@ public struct CallParticipant: Identifiable, Sendable, Hashable {
lhs.sessionId == rhs.sessionId &&
lhs.connectionQuality == rhs.connectionQuality &&
lhs.joinedAt == rhs.joinedAt &&
lhs.audioLevel == rhs.audioLevel &&
Copy link
Contributor

Choose a reason for hiding this comment

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

This will probably have an impact on the AI integration, since we rely on the audio level there.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We can expose equatable including AudioLevels for AI (closer to the View though and not on the model)

@@ -24,7 +24,7 @@ final class StreamVideoCaptureHandler: NSObject, RTCVideoCapturerDelegate {

init(
source: RTCVideoCapturerDelegate,
handleRotation: Bool = true
handleRotation: Bool = false
Copy link
Contributor

Choose a reason for hiding this comment

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

why is this changed?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Rewriting the frames has an impact but I just changed it back as it doesn't work correctly when rotating the device.

@@ -26,7 +26,7 @@ open class VideoFilter: @unchecked Sendable {
public let name: String

/// Filter closure that takes a CIImage as input and returns a filtered CIImage as output.
public var filter: (Input) async -> CIImage
public var filter: (Input) -> CIImage
Copy link
Contributor

Choose a reason for hiding this comment

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

how big is the impact here? I would prefer to have it async tbh.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That's something that we need to change to synchronous for sure (we are overly engineering something that it's not in our control). The frame generation pipeline is from WebRTC and the rendering is on AVFoundation. We are just in the middle doing stuff. I'm reverting it for now to reduce the amount of changes but this one has a big asterisk over it.

import Combine
import SwiftUI

public struct PublisherSubscriptionView<Value: Equatable, Content: View>: View {
Copy link
Contributor

Choose a reason for hiding this comment

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

Can you explain a bit more - how does this view help with performance?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Let's also discuss it offline but the summary is here:

  1. Avoids unnecessary view recomputation
  • PublisherSubscriptionView isolates publisher observation in a lightweight ViewModel and drives only the local subtree through its contentProvider.
  • Unlike onReceive placed in .body, which retriggers the full body recomputation every time the publisher emits, this keeps recomputation localized.
  1. More efficient than @ObservedObject/@StateObject in deep trees
  • @ObservedObject or @StateObject triggers an entire View recomputation even if only a small part of the state changes.
  • In contrast, PublisherSubscriptionView only updates the view model’s value, and only that part of the tree inside contentProvider is updated.
  • This is crucial in deeply nested views, where updating the parent could result in cascading recomputations.
  1. Avoids binding propagation overhead
  • Using Binding to propagate state deep into the hierarchy introduces multiple @State or @binding layers.
  • This increases cognitive load, tightly couples components, and leads to rebuilding multiple views unnecessarily when state changes.
  • PublisherSubscriptionView avoids this by scoping observation to exactly where it’s needed, minimizing rebuild impact.

@@ -17,7 +17,7 @@ final class VideoRendererPool: @unchecked Sendable {
///
/// - Parameter initialCapacity: The initial capacity of the pool (default is 0).
@MainActor
init(initialCapacity: Int = 0) {
init(initialCapacity: Int = 5) {
Copy link
Contributor

Choose a reason for hiding this comment

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

why do we change this? Also, we should update the text above if we go with this change.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Now that rendering is happening in a more controlled way, this is actually seems to have benefits.

viewFactory
.makeCallTopView(viewModel: viewModel)
.presentParticipantEventsNotification(viewModel: viewModel)
PublisherSubscriptionView(
Copy link
Contributor

Choose a reason for hiding this comment

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

One thing to consider with custom wrappers is that customers would need to know about it. When they build custom views, they will probably just use observed objects directly.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It's ok if customers do it. What's important is that we don't :)

var sharingPopupDismissed: Binding<Bool>

public var body: some View {
PublisherSubscriptionView(
Copy link
Contributor

Choose a reason for hiding this comment

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

If you need more than one value from the VM, you would need to go back to the standard way, right?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

You can combine publishers

@ipavlidakis ipavlidakis force-pushed the fix/performance-improvements-subtasks/ui-changes branch from 0ded658 to 97d9279 Compare June 2, 2025 07:10
Copy link

github-actions bot commented Jun 2, 2025

Public Interface

+ public struct PublisherSubscriptionView: View  
+ 
+   public var body: some View
+   
+ 
+   public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)

+ public final class ScreenPropertiesAdapter: @unchecked Sendable  
+ 
+   public private var preferredFramesPerSecond: Int
+   public private var refreshRate: TimeInterval
+   public private var scale: CGFloat

+ public actor SerialActorQueue  
+ 
+   nonisolated public var unownedExecutor: UnownedSerialExecutor
+   
+ 
+   public init(file: StaticString = #file)
+   
+ 
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+   public nonisolated func cancelAll()
+   
+ 
+   public final class QueueTask: @unchecked Sendable

+ public struct CurrentUserScreenSharingIndicatorView: View  
+ 
+   public var body: some View

+ public protocol TimerProviding

+ extension ScreenPropertiesAdapter: InjectionKey  
+ 
+   public nonisolated static var currentValue: ScreenPropertiesAdapter

+ extension Publishers  
+ 
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?,)-> AnyPublisher<(A, B, C), Never>

- public final class SerialActorQueue: Sendable  
- 
-   public init()
-   
- 
-   public func cancelAll()
-   public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
-   public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T

- public struct VideoCallParticipantView: View  
+ public struct VideoCallParticipantView: View, Equatable  
+   
+ 
+   nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool

 public struct StatelessHangUpIconView: View  
-   public weak var call: Call?
+   public var size: CGFloat
-   public var size: CGFloat
+   public var actionHandler: ActionHandler?
-   public var actionHandler: ActionHandler?
+   public var body: some View
-   public var body: some View
+   
-   
+ 
- 
+   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
-   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)

- public enum ParticipantAction: Sendable  
+ public enum ParticipantAction: Equatable, Sendable  

 public class StreamVideo: ObservableObject, @unchecked Sendable  
-   public var state: State
+   case ringEventReceived
-   public let videoConfig: VideoConfig
+   
-   public var user: User
+ 
-   public var isHardwareAccelerationAvailable: Bool
+   public var state: State
-   public lazy var rejectionReasonProvider: RejectionReasonProviding
+   public let videoConfig: VideoConfig
-   
+   public var user: User
- 
+   public var isHardwareAccelerationAvailable: Bool
-   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+   public lazy var rejectionReasonProvider: RejectionReasonProviding
-   public func connect()async throws 
+   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
-   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+   
-   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+ 
-   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+   public func connect()async throws 
-   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
-   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
-   public func listDevices()async throws -> [Device]
+   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
-   public func disconnect()async 
+   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
-   public func subscribe()-> AsyncStream<VideoEvent>
+   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
-   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+   public func listDevices()async throws -> [Device]
-   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func disconnect()async 
-   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-   
+   public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
- 
+   public func subscribe()-> AsyncStream<VideoEvent>
-   public final class State: ObservableObject, @unchecked Sendable  
+   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-   
+   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var connection: ConnectionStatus
+   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var user: User
+   
-     @Published public internal var activeCall: Call?
+ 
-     @Published public internal var ringingCall: Call?
+   public final class State: ObservableObject, @unchecked Sendable  
+   
+     @Published public internal var connection: ConnectionStatus
+     @Published public internal var user: User
+     @Published public internal var activeCall: Call?
+     @Published public internal var ringingCall: Call?

 extension Publisher  
-   public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
-   public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable

- public enum CallingState: Equatable, CustomStringConvertible  
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable  

 extension Task  
-   public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+   
+ 
+   public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)

- public struct ParticipantEvent: Sendable  
+ public struct ParticipantEvent: Equatable, Sendable  

 public struct CallView: View  
-   public var body: some View
+   case localVideo, screensharing, participantsView
-   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+   public var body: some View
+   
+ 
+   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)

 public final class DisposableBag: @unchecked Sendable  
+   public func completed(_ key: String)

Copy link

github-actions bot commented Jun 2, 2025

Public Interface

+ public protocol TimerProviding

+ public actor SerialActorQueue  
+ 
+   nonisolated public var unownedExecutor: UnownedSerialExecutor
+   
+ 
+   public init(file: StaticString = #file)
+   
+ 
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+   public nonisolated func cancelAll()
+   
+ 
+   public final class QueueTask: @unchecked Sendable

+ public struct CurrentUserScreenSharingIndicatorView: View  
+ 
+   public var body: some View

+ extension ScreenPropertiesAdapter: InjectionKey  
+ 
+   public nonisolated static var currentValue: ScreenPropertiesAdapter

+ public struct PublisherSubscriptionView: View  
+ 
+   public var body: some View
+   
+ 
+   public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)

+ extension Publishers  
+ 
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?,)-> AnyPublisher<(A, B, C), Never>

+ public final class ScreenPropertiesAdapter: @unchecked Sendable  
+ 
+   public private var preferredFramesPerSecond: Int
+   public private var refreshRate: TimeInterval
+   public private var scale: CGFloat

- public final class SerialActorQueue: Sendable  
- 
-   public init()
-   
- 
-   public func cancelAll()
-   public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
-   public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T

- public enum ParticipantAction: Sendable  
+ public enum ParticipantAction: Equatable, Sendable  

- public struct ParticipantEvent: Sendable  
+ public struct ParticipantEvent: Equatable, Sendable  

 public final class DisposableBag: @unchecked Sendable  
+   public func completed(_ key: String)

 public struct StatelessHangUpIconView: View  
-   public weak var call: Call?
+   public var size: CGFloat
-   public var size: CGFloat
+   public var actionHandler: ActionHandler?
-   public var actionHandler: ActionHandler?
+   public var body: some View
-   public var body: some View
+   
-   
+ 
- 
+   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
-   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)

- public struct VideoCallParticipantView: View  
+ public struct VideoCallParticipantView: View, Equatable  
+   
+ 
+   nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool

 public struct CallView: View  
-   public var body: some View
+   case localVideo, screensharing, participantsView
-   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+   public var body: some View
+   
+ 
+   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)

 public class StreamVideo: ObservableObject, @unchecked Sendable  
-   public var state: State
+   case ringEventReceived
-   public let videoConfig: VideoConfig
+   
-   public var user: User
+ 
-   public var isHardwareAccelerationAvailable: Bool
+   public var state: State
-   public lazy var rejectionReasonProvider: RejectionReasonProviding
+   public let videoConfig: VideoConfig
-   
+   public var user: User
- 
+   public var isHardwareAccelerationAvailable: Bool
-   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+   public lazy var rejectionReasonProvider: RejectionReasonProviding
-   public func connect()async throws 
+   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
-   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+   
-   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+ 
-   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+   public func connect()async throws 
-   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
-   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
-   public func listDevices()async throws -> [Device]
+   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
-   public func disconnect()async 
+   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
-   public func subscribe()-> AsyncStream<VideoEvent>
+   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
-   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+   public func listDevices()async throws -> [Device]
-   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func disconnect()async 
-   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-   
+   public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
- 
+   public func subscribe()-> AsyncStream<VideoEvent>
-   public final class State: ObservableObject, @unchecked Sendable  
+   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-   
+   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var connection: ConnectionStatus
+   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var user: User
+   
-     @Published public internal var activeCall: Call?
+ 
-     @Published public internal var ringingCall: Call?
+   public final class State: ObservableObject, @unchecked Sendable  
+   
+     @Published public internal var connection: ConnectionStatus
+     @Published public internal var user: User
+     @Published public internal var activeCall: Call?
+     @Published public internal var ringingCall: Call?

 extension Task  
-   public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+   
+ 
+   public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)

- public enum CallingState: Equatable, CustomStringConvertible  
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable  

 extension Publisher  
-   public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
-   public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable

Copy link

github-actions bot commented Jun 2, 2025

Public Interface

+ extension Publishers  
+ 
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?,)-> AnyPublisher<(A, B, C), Never>

+ public actor SerialActorQueue  
+ 
+   nonisolated public var unownedExecutor: UnownedSerialExecutor
+   
+ 
+   public init(file: StaticString = #file)
+   
+ 
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+   public nonisolated func cancelAll()
+   
+ 
+   public final class QueueTask: @unchecked Sendable

+ public final class ScreenPropertiesAdapter: @unchecked Sendable  
+ 
+   public private var preferredFramesPerSecond: Int
+   public private var refreshRate: TimeInterval
+   public private var scale: CGFloat

+ public struct CurrentUserScreenSharingIndicatorView: View  
+ 
+   public var body: some View

+ public struct PublisherSubscriptionView: View  
+ 
+   public var body: some View
+   
+ 
+   public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)

+ extension ScreenPropertiesAdapter: InjectionKey  
+ 
+   public nonisolated static var currentValue: ScreenPropertiesAdapter

+ public protocol TimerProviding

- public final class SerialActorQueue: Sendable  
- 
-   public init()
-   
- 
-   public func cancelAll()
-   public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
-   public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T

- public struct VideoCallParticipantView: View  
+ public struct VideoCallParticipantView: View, Equatable  
+   
+ 
+   nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool

- public enum CallingState: Equatable, CustomStringConvertible  
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable  

- public struct ParticipantEvent: Sendable  
+ public struct ParticipantEvent: Equatable, Sendable  

 public struct CallView: View  
-   public var body: some View
+   case localVideo, screensharing, participantsView
-   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+   public var body: some View
+   
+ 
+   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)

 public struct StatelessHangUpIconView: View  
-   public weak var call: Call?
+   public var size: CGFloat
-   public var size: CGFloat
+   public var actionHandler: ActionHandler?
-   public var actionHandler: ActionHandler?
+   public var body: some View
-   public var body: some View
+   
-   
+ 
- 
+   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
-   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)

 extension Publisher  
-   public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
-   public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable

 public final class DisposableBag: @unchecked Sendable  
+   public func completed(_ key: String)

 extension Task  
-   public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+   
+ 
+   public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)

- public enum ParticipantAction: Sendable  
+ public enum ParticipantAction: Equatable, Sendable  

 public class StreamVideo: ObservableObject, @unchecked Sendable  
-   public var state: State
+   case ringEventReceived
-   public let videoConfig: VideoConfig
+   
-   public var user: User
+ 
-   public var isHardwareAccelerationAvailable: Bool
+   public var state: State
-   public lazy var rejectionReasonProvider: RejectionReasonProviding
+   public let videoConfig: VideoConfig
-   
+   public var user: User
- 
+   public var isHardwareAccelerationAvailable: Bool
-   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+   public lazy var rejectionReasonProvider: RejectionReasonProviding
-   public func connect()async throws 
+   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
-   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+   
-   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+ 
-   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+   public func connect()async throws 
-   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
-   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
-   public func listDevices()async throws -> [Device]
+   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
-   public func disconnect()async 
+   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
-   public func subscribe()-> AsyncStream<VideoEvent>
+   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
-   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+   public func listDevices()async throws -> [Device]
-   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func disconnect()async 
-   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-   
+   public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
- 
+   public func subscribe()-> AsyncStream<VideoEvent>
-   public final class State: ObservableObject, @unchecked Sendable  
+   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-   
+   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var connection: ConnectionStatus
+   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var user: User
+   
-     @Published public internal var activeCall: Call?
+ 
-     @Published public internal var ringingCall: Call?
+   public final class State: ObservableObject, @unchecked Sendable  
+   
+     @Published public internal var connection: ConnectionStatus
+     @Published public internal var user: User
+     @Published public internal var activeCall: Call?
+     @Published public internal var ringingCall: Call?

@ipavlidakis ipavlidakis mentioned this pull request Jun 2, 2025
12 tasks
Copy link

github-actions bot commented Jun 2, 2025

Public Interface

+ public actor SerialActorQueue  
+ 
+   nonisolated public var unownedExecutor: UnownedSerialExecutor
+   
+ 
+   public init(file: StaticString = #file)
+   
+ 
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+   public nonisolated func cancelAll()
+   
+ 
+   public final class QueueTask: @unchecked Sendable

+ extension Publishers  
+ 
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?,)-> AnyPublisher<(A, B, C), Never>

+ extension ScreenPropertiesAdapter: InjectionKey  
+ 
+   public nonisolated static var currentValue: ScreenPropertiesAdapter

+ public struct CurrentUserScreenSharingIndicatorView: View  
+ 
+   public var body: some View

+ public final class ScreenPropertiesAdapter: @unchecked Sendable  
+ 
+   public private var preferredFramesPerSecond: Int
+   public private var refreshRate: TimeInterval
+   public private var scale: CGFloat

+ public protocol TimerProviding

+ public struct PublisherSubscriptionView: View  
+ 
+   public var body: some View
+   
+ 
+   public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)

- public final class SerialActorQueue: Sendable  
- 
-   public init()
-   
- 
-   public func cancelAll()
-   public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
-   public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T

- public struct VideoCallParticipantView: View  
+ public struct VideoCallParticipantView: View, Equatable  
+   
+ 
+   nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool

 public final class DisposableBag: @unchecked Sendable  
+   public func completed(_ key: String)

 public struct StatelessHangUpIconView: View  
-   public weak var call: Call?
+   public var size: CGFloat
-   public var size: CGFloat
+   public var actionHandler: ActionHandler?
-   public var actionHandler: ActionHandler?
+   public var body: some View
-   public var body: some View
+   
-   
+ 
- 
+   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
-   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)

 extension Publisher  
-   public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
-   public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable

 public class StreamVideo: ObservableObject, @unchecked Sendable  
-   public var state: State
+   case ringEventReceived
-   public let videoConfig: VideoConfig
+   
-   public var user: User
+ 
-   public var isHardwareAccelerationAvailable: Bool
+   public var state: State
-   public lazy var rejectionReasonProvider: RejectionReasonProviding
+   public let videoConfig: VideoConfig
-   
+   public var user: User
- 
+   public var isHardwareAccelerationAvailable: Bool
-   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+   public lazy var rejectionReasonProvider: RejectionReasonProviding
-   public func connect()async throws 
+   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
-   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+   
-   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+ 
-   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+   public func connect()async throws 
-   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
-   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
-   public func listDevices()async throws -> [Device]
+   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
-   public func disconnect()async 
+   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
-   public func subscribe()-> AsyncStream<VideoEvent>
+   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
-   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+   public func listDevices()async throws -> [Device]
-   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func disconnect()async 
-   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-   
+   public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
- 
+   public func subscribe()-> AsyncStream<VideoEvent>
-   public final class State: ObservableObject, @unchecked Sendable  
+   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-   
+   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var connection: ConnectionStatus
+   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var user: User
+   
-     @Published public internal var activeCall: Call?
+ 
-     @Published public internal var ringingCall: Call?
+   public final class State: ObservableObject, @unchecked Sendable  
+   
+     @Published public internal var connection: ConnectionStatus
+     @Published public internal var user: User
+     @Published public internal var activeCall: Call?
+     @Published public internal var ringingCall: Call?

 public struct CallView: View  
-   public var body: some View
+   case localVideo, screensharing, participantsView
-   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+   public var body: some View
+   
+ 
+   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)

- public enum CallingState: Equatable, CustomStringConvertible  
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable  

- public enum ParticipantAction: Sendable  
+ public enum ParticipantAction: Equatable, Sendable  

 extension Task  
-   public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+   
+ 
+   public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)

- public struct ParticipantEvent: Sendable  
+ public struct ParticipantEvent: Equatable, Sendable  

Copy link

github-actions bot commented Jun 2, 2025

Public Interface

+ public actor SerialActorQueue  
+ 
+   nonisolated public var unownedExecutor: UnownedSerialExecutor
+   
+ 
+   public init(file: StaticString = #file)
+   
+ 
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+   public nonisolated func cancelAll()
+   
+ 
+   public final class QueueTask: @unchecked Sendable

+ extension ScreenPropertiesAdapter: InjectionKey  
+ 
+   public nonisolated static var currentValue: ScreenPropertiesAdapter

+ public struct PublisherSubscriptionView: View  
+ 
+   public var body: some View
+   
+ 
+   public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)

+ public final class ScreenPropertiesAdapter: @unchecked Sendable  
+ 
+   public private var preferredFramesPerSecond: Int
+   public private var refreshRate: TimeInterval
+   public private var scale: CGFloat

+ public struct CurrentUserScreenSharingIndicatorView: View  
+ 
+   public var body: some View

+ public protocol TimerProviding

+ extension Publishers  
+ 
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?)-> AnyPublisher<(A, B, C), Never>

- public final class SerialActorQueue: Sendable  
- 
-   public init()
-   
- 
-   public func cancelAll()
-   public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
-   public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T

 extension Task  
-   public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+   
+ 
+   public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)

 extension Publisher  
-   public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
-   public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable

 public struct StatelessHangUpIconView: View  
-   public weak var call: Call?
+   public var size: CGFloat
-   public var size: CGFloat
+   public var actionHandler: ActionHandler?
-   public var actionHandler: ActionHandler?
+   public var body: some View
-   public var body: some View
+   
-   
+ 
- 
+   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
-   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)

- public struct VideoCallParticipantView: View  
+ public struct VideoCallParticipantView: View, Equatable  
+   
+ 
+   nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool

 public final class DisposableBag: @unchecked Sendable  
+   public func completed(_ key: String)

- public enum CallingState: Equatable, CustomStringConvertible  
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable  

 public class StreamVideo: ObservableObject, @unchecked Sendable  
-   public var state: State
+   case ringEventReceived
-   public let videoConfig: VideoConfig
+   
-   public var user: User
+ 
-   public var isHardwareAccelerationAvailable: Bool
+   public var state: State
-   public lazy var rejectionReasonProvider: RejectionReasonProviding
+   public let videoConfig: VideoConfig
-   
+   public var user: User
- 
+   public var isHardwareAccelerationAvailable: Bool
-   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+   public lazy var rejectionReasonProvider: RejectionReasonProviding
-   public func connect()async throws 
+   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
-   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+   
-   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+ 
-   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+   public func connect()async throws 
-   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
-   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
-   public func listDevices()async throws -> [Device]
+   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
-   public func disconnect()async 
+   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
-   public func subscribe()-> AsyncStream<VideoEvent>
+   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
-   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+   public func listDevices()async throws -> [Device]
-   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func disconnect()async 
-   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-   
+   public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
- 
+   public func subscribe()-> AsyncStream<VideoEvent>
-   public final class State: ObservableObject, @unchecked Sendable  
+   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-   
+   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var connection: ConnectionStatus
+   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var user: User
+   
-     @Published public internal var activeCall: Call?
+ 
-     @Published public internal var ringingCall: Call?
+   public final class State: ObservableObject, @unchecked Sendable  
+   
+     @Published public internal var connection: ConnectionStatus
+     @Published public internal var user: User
+     @Published public internal var activeCall: Call?
+     @Published public internal var ringingCall: Call?

- public struct ParticipantEvent: Sendable  
+ public struct ParticipantEvent: Equatable, Sendable  

- public enum ParticipantAction: Sendable  
+ public enum ParticipantAction: Equatable, Sendable  

 public struct CallView: View  
-   public var body: some View
+   case localVideo, screensharing, participantsView
-   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+   public var body: some View
+   
+ 
+   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)

Copy link

github-actions bot commented Jun 2, 2025

Public Interface

+ extension ScreenPropertiesAdapter: InjectionKey  
+ 
+   public nonisolated static var currentValue: ScreenPropertiesAdapter

+ public protocol TimerProviding

+ public final class ScreenPropertiesAdapter: @unchecked Sendable  
+ 
+   public private var preferredFramesPerSecond: Int
+   public private var refreshRate: TimeInterval
+   public private var scale: CGFloat

+ extension Publishers  
+ 
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?)-> AnyPublisher<(A, B, C), Never>

+ public struct PublisherSubscriptionView: View  
+ 
+   public var body: some View
+   
+ 
+   public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)

+ public actor SerialActorQueue  
+ 
+   nonisolated public var unownedExecutor: UnownedSerialExecutor
+   
+ 
+   public init(file: StaticString = #file)
+   
+ 
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+   public nonisolated func cancelAll()
+   
+ 
+   public final class QueueTask: @unchecked Sendable

+ public struct CurrentUserScreenSharingIndicatorView: View  
+ 
+   public var body: some View

- public final class SerialActorQueue: Sendable  
- 
-   public init()
-   
- 
-   public func cancelAll()
-   public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
-   public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T

 public struct StatelessHangUpIconView: View  
-   public weak var call: Call?
+   public var size: CGFloat
-   public var size: CGFloat
+   public var actionHandler: ActionHandler?
-   public var actionHandler: ActionHandler?
+   public var body: some View
-   public var body: some View
+   
-   
+ 
- 
+   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
-   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)

- public struct ParticipantInfoView: View  
+ public struct ParticipantInfoView: View, Equatable  
+   
+ 
+   public nonisolated static func ==(lhs: ParticipantInfoView,rhs: ParticipantInfoView)-> Bool

 public class StreamVideo: ObservableObject, @unchecked Sendable  
-   public var state: State
+   case ringEventReceived
-   public let videoConfig: VideoConfig
+   
-   public var user: User
+ 
-   public var isHardwareAccelerationAvailable: Bool
+   public var state: State
-   public lazy var rejectionReasonProvider: RejectionReasonProviding
+   public let videoConfig: VideoConfig
-   
+   public var user: User
- 
+   public var isHardwareAccelerationAvailable: Bool
-   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+   public lazy var rejectionReasonProvider: RejectionReasonProviding
-   public func connect()async throws 
+   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
-   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+   
-   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+ 
-   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+   public func connect()async throws 
-   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
-   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
-   public func listDevices()async throws -> [Device]
+   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
-   public func disconnect()async 
+   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
-   public func subscribe()-> AsyncStream<VideoEvent>
+   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
-   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+   public func listDevices()async throws -> [Device]
-   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func disconnect()async 
-   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-   
+   public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
- 
+   public func subscribe()-> AsyncStream<VideoEvent>
-   public final class State: ObservableObject, @unchecked Sendable  
+   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-   
+   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var connection: ConnectionStatus
+   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var user: User
+   
-     @Published public internal var activeCall: Call?
+ 
-     @Published public internal var ringingCall: Call?
+   public final class State: ObservableObject, @unchecked Sendable  
+   
+     @Published public internal var connection: ConnectionStatus
+     @Published public internal var user: User
+     @Published public internal var activeCall: Call?
+     @Published public internal var ringingCall: Call?

 public struct CallView: View  
-   public var body: some View
+   case localVideo, screensharing, participantsView
-   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+   public var body: some View
+   
+ 
+   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)

 public struct BottomView: View  
-   public init(content: @escaping () -> Content)
+   public init(@ViewBuilder content: @escaping () -> Content)

- public struct ParticipantEvent: Sendable  
+ public struct ParticipantEvent: Equatable, Sendable  

- public struct VideoCallParticipantView: View  
+ public struct VideoCallParticipantView: View, Equatable  
+   
+ 
+   nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool

 public final class DisposableBag: @unchecked Sendable  
+   public func completed(_ key: String)

 extension Publisher  
-   public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
-   public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable

- public enum CallingState: Equatable, CustomStringConvertible  
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable  

 extension Task  
-   public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+   
+ 
+   public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)

- public enum ParticipantAction: Sendable  
+ public enum ParticipantAction: Equatable, Sendable  

Copy link

github-actions bot commented Jun 2, 2025

Public Interface

+ public protocol TimerProviding

+ public actor SerialActorQueue  
+ 
+   nonisolated public var unownedExecutor: UnownedSerialExecutor
+   
+ 
+   public init(file: StaticString = #file)
+   
+ 
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+   public nonisolated func cancelAll()
+   
+ 
+   public final class QueueTask: @unchecked Sendable

+ extension Publishers  
+ 
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?)-> AnyPublisher<(A, B, C), Never>

+ public final class ScreenPropertiesAdapter: @unchecked Sendable  
+ 
+   public private var preferredFramesPerSecond: Int
+   public private var refreshRate: TimeInterval
+   public private var scale: CGFloat

+ public struct PublisherSubscriptionView: View  
+ 
+   public var body: some View
+   
+ 
+   public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)

+ extension ScreenPropertiesAdapter: InjectionKey  
+ 
+   public nonisolated static var currentValue: ScreenPropertiesAdapter

+ public struct CurrentUserScreenSharingIndicatorView: View  
+ 
+   public var body: some View

- public final class SerialActorQueue: Sendable  
- 
-   public init()
-   
- 
-   public func cancelAll()
-   public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
-   public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T

- public struct VideoCallParticipantView: View  
+ public struct VideoCallParticipantView: View, Equatable  
+   
+ 
+   nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool

 public final class DisposableBag: @unchecked Sendable  
+   public func completed(_ key: String)

- public struct ParticipantInfoView: View  
+ public struct ParticipantInfoView: View, Equatable  
+   
+ 
+   public nonisolated static func ==(lhs: ParticipantInfoView,rhs: ParticipantInfoView)-> Bool

- public struct ParticipantEvent: Sendable  
+ public struct ParticipantEvent: Equatable, Sendable  

 public struct BottomView: View  
-   public init(content: @escaping () -> Content)
+   public init(@ViewBuilder content: @escaping () -> Content)

 public struct StatelessHangUpIconView: View  
-   public weak var call: Call?
+   public var size: CGFloat
-   public var size: CGFloat
+   public var actionHandler: ActionHandler?
-   public var actionHandler: ActionHandler?
+   public var body: some View
-   public var body: some View
+   
-   
+ 
- 
+   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
-   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)

- public enum CallingState: Equatable, CustomStringConvertible  
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable  

 extension Task  
-   public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+   
+ 
+   public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)

- public enum ParticipantAction: Sendable  
+ public enum ParticipantAction: Equatable, Sendable  

 extension Publisher  
-   public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
-   public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable

 public class StreamVideo: ObservableObject, @unchecked Sendable  
-   public var state: State
+   case ringEventReceived
-   public let videoConfig: VideoConfig
+   
-   public var user: User
+ 
-   public var isHardwareAccelerationAvailable: Bool
+   public var state: State
-   public lazy var rejectionReasonProvider: RejectionReasonProviding
+   public let videoConfig: VideoConfig
-   
+   public var user: User
- 
+   public var isHardwareAccelerationAvailable: Bool
-   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+   public lazy var rejectionReasonProvider: RejectionReasonProviding
-   public func connect()async throws 
+   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
-   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+   
-   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+ 
-   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+   public func connect()async throws 
-   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
-   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
-   public func listDevices()async throws -> [Device]
+   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
-   public func disconnect()async 
+   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
-   public func subscribe()-> AsyncStream<VideoEvent>
+   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
-   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+   public func listDevices()async throws -> [Device]
-   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func disconnect()async 
-   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-   
+   public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
- 
+   public func subscribe()-> AsyncStream<VideoEvent>
-   public final class State: ObservableObject, @unchecked Sendable  
+   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-   
+   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var connection: ConnectionStatus
+   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var user: User
+   
-     @Published public internal var activeCall: Call?
+ 
-     @Published public internal var ringingCall: Call?
+   public final class State: ObservableObject, @unchecked Sendable  
+   
+     @Published public internal var connection: ConnectionStatus
+     @Published public internal var user: User
+     @Published public internal var activeCall: Call?
+     @Published public internal var ringingCall: Call?

 public struct CallView: View  
-   public var body: some View
+   case localVideo, screensharing, participantsView
-   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+   public var body: some View
+   
+ 
+   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)

Copy link

github-actions bot commented Jun 2, 2025

Public Interface

+ public final class ScreenPropertiesAdapter: @unchecked Sendable  
+ 
+   public private var preferredFramesPerSecond: Int
+   public private var refreshRate: TimeInterval
+   public private var scale: CGFloat

+ public struct PublisherSubscriptionView: View  
+ 
+   public var body: some View
+   
+ 
+   public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)

+ extension Publishers  
+ 
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?)-> AnyPublisher<(A, B, C), Never>

+ public actor SerialActorQueue  
+ 
+   nonisolated public var unownedExecutor: UnownedSerialExecutor
+   
+ 
+   public init(file: StaticString = #file)
+   
+ 
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+   public nonisolated func cancelAll()
+   
+ 
+   public final class QueueTask: @unchecked Sendable

+ public struct CurrentUserScreenSharingIndicatorView: View  
+ 
+   public var body: some View

+ extension ScreenPropertiesAdapter: InjectionKey  
+ 
+   public nonisolated static var currentValue: ScreenPropertiesAdapter

+ public protocol TimerProviding

- public final class SerialActorQueue: Sendable  
- 
-   public init()
-   
- 
-   public func cancelAll()
-   public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
-   public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T

- public struct ParticipantInfoView: View  
+ public struct ParticipantInfoView: View, Equatable  
+   
+ 
+   public nonisolated static func ==(lhs: ParticipantInfoView,rhs: ParticipantInfoView)-> Bool

- public enum CallingState: Equatable, CustomStringConvertible  
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable  

- public enum ParticipantAction: Sendable  
+ public enum ParticipantAction: Equatable, Sendable  

 public struct StatelessHangUpIconView: View  
-   public weak var call: Call?
+   public var size: CGFloat
-   public var size: CGFloat
+   public var actionHandler: ActionHandler?
-   public var actionHandler: ActionHandler?
+   public var body: some View
-   public var body: some View
+   
-   
+ 
- 
+   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
-   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)

 public final class DisposableBag: @unchecked Sendable  
+   public func completed(_ key: String)

 public struct CallView: View  
-   public var body: some View
+   case localVideo, screensharing, participantsView
-   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+   public var body: some View
+   
+ 
+   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)

- public struct VideoCallParticipantView: View  
+ public struct VideoCallParticipantView: View, Equatable  
+   
+ 
+   nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool

 public class StreamVideo: ObservableObject, @unchecked Sendable  
-   public var state: State
+   case ringEventReceived
-   public let videoConfig: VideoConfig
+   
-   public var user: User
+ 
-   public var isHardwareAccelerationAvailable: Bool
+   public var state: State
-   public lazy var rejectionReasonProvider: RejectionReasonProviding
+   public let videoConfig: VideoConfig
-   
+   public var user: User
- 
+   public var isHardwareAccelerationAvailable: Bool
-   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+   public lazy var rejectionReasonProvider: RejectionReasonProviding
-   public func connect()async throws 
+   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
-   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+   
-   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+ 
-   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+   public func connect()async throws 
-   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
-   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
-   public func listDevices()async throws -> [Device]
+   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
-   public func disconnect()async 
+   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
-   public func subscribe()-> AsyncStream<VideoEvent>
+   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
-   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+   public func listDevices()async throws -> [Device]
-   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func disconnect()async 
-   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-   
+   public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
- 
+   public func subscribe()-> AsyncStream<VideoEvent>
-   public final class State: ObservableObject, @unchecked Sendable  
+   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-   
+   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var connection: ConnectionStatus
+   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var user: User
+   
-     @Published public internal var activeCall: Call?
+ 
-     @Published public internal var ringingCall: Call?
+   public final class State: ObservableObject, @unchecked Sendable  
+   
+     @Published public internal var connection: ConnectionStatus
+     @Published public internal var user: User
+     @Published public internal var activeCall: Call?
+     @Published public internal var ringingCall: Call?

 extension Task  
-   public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+   
+ 
+   public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)

- public struct ParticipantEvent: Sendable  
+ public struct ParticipantEvent: Equatable, Sendable  

 extension Publisher  
-   public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
-   public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable

 public struct BottomView: View  
-   public init(content: @escaping () -> Content)
+   public init(@ViewBuilder content: @escaping () -> Content)

Copy link

github-actions bot commented Jun 2, 2025

Public Interface

+ public protocol TimerProviding

+ public actor SerialActorQueue  
+ 
+   nonisolated public var unownedExecutor: UnownedSerialExecutor
+   
+ 
+   public init(file: StaticString = #file)
+   
+ 
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+   @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+   @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+   public nonisolated func cancelAll()
+   
+ 
+   public final class QueueTask: @unchecked Sendable

+ public struct CurrentUserScreenSharingIndicatorView: View  
+ 
+   public var body: some View

+ extension Publishers  
+ 
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+   public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?)-> AnyPublisher<(A, B, C), Never>

+ public struct PublisherSubscriptionView: View  
+ 
+   public var body: some View
+   
+ 
+   public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)

+ public final class ScreenPropertiesAdapter: @unchecked Sendable  
+ 
+   public private var preferredFramesPerSecond: Int
+   public private var refreshRate: TimeInterval
+   public private var scale: CGFloat

+ extension ScreenPropertiesAdapter: InjectionKey  
+ 
+   public nonisolated static var currentValue: ScreenPropertiesAdapter

- public final class SerialActorQueue: Sendable  
- 
-   public init()
-   
- 
-   public func cancelAll()
-   public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
-   public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T

 public struct StatelessHangUpIconView: View  
-   public weak var call: Call?
+   public var size: CGFloat
-   public var size: CGFloat
+   public var actionHandler: ActionHandler?
-   public var actionHandler: ActionHandler?
+   public var body: some View
-   public var body: some View
+   
-   
+ 
- 
+   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
-   @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)

 extension Publisher  
-   public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
-   public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+   public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable

- public struct ParticipantInfoView: View  
+ public struct ParticipantInfoView: View, Equatable  
+   
+ 
+   public nonisolated static func ==(lhs: ParticipantInfoView,rhs: ParticipantInfoView)-> Bool

- public enum CallingState: Equatable, CustomStringConvertible  
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable  

 public class StreamVideo: ObservableObject, @unchecked Sendable  
-   public var state: State
+   case ringEventReceived
-   public let videoConfig: VideoConfig
+   
-   public var user: User
+ 
-   public var isHardwareAccelerationAvailable: Bool
+   public var state: State
-   public lazy var rejectionReasonProvider: RejectionReasonProviding
+   public let videoConfig: VideoConfig
-   
+   public var user: User
- 
+   public var isHardwareAccelerationAvailable: Bool
-   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+   public lazy var rejectionReasonProvider: RejectionReasonProviding
-   public func connect()async throws 
+   public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
-   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+   
-   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+ 
-   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+   public func connect()async throws 
-   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+   public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
-   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+   public func makeCallsController(callsQuery: CallsQuery)-> CallsController
-   public func listDevices()async throws -> [Device]
+   @discardableResult public func setDevice(id: String)async throws -> ModelResponse
-   public func disconnect()async 
+   @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
-   public func subscribe()-> AsyncStream<VideoEvent>
+   @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
-   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+   public func listDevices()async throws -> [Device]
-   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func disconnect()async 
-   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+   public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-   
+   public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
- 
+   public func subscribe()-> AsyncStream<VideoEvent>
-   public final class State: ObservableObject, @unchecked Sendable  
+   public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-   
+   public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var connection: ConnectionStatus
+   public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
-     @Published public internal var user: User
+   
-     @Published public internal var activeCall: Call?
+ 
-     @Published public internal var ringingCall: Call?
+   public final class State: ObservableObject, @unchecked Sendable  
+   
+     @Published public internal var connection: ConnectionStatus
+     @Published public internal var user: User
+     @Published public internal var activeCall: Call?
+     @Published public internal var ringingCall: Call?

- public struct ParticipantEvent: Sendable  
+ public struct ParticipantEvent: Equatable, Sendable  

 extension Task  
-   public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+   @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+   
+ 
+   public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)

 public final class DisposableBag: @unchecked Sendable  
+   public func completed(_ key: String)

- public struct VideoCallParticipantView: View  
+ public struct VideoCallParticipantView: View, Equatable  
+   
+ 
+   nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool

 public struct CallView: View  
-   public var body: some View
+   case localVideo, screensharing, participantsView
-   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+   public var body: some View
+   
+ 
+   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)

- public enum ParticipantAction: Sendable  
+ public enum ParticipantAction: Equatable, Sendable  

 public struct BottomView: View  
-   public init(content: @escaping () -> Content)
+   public init(@ViewBuilder content: @escaping () -> Content)

Copy link

sonarqubecloud bot commented Jun 2, 2025

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants