declare function createStreamShareClient(options: StreamShareOptions): StreamShareClient;

type StreamKind = "camera" | "screen" | "audio";
interface StreamShareOptions {
    userId: string;
    signalingUrl?: string;
}
interface RemoteStreamEvent {
    userId: string;
    stream: MediaStream;
}
interface StreamShareClient {
    subscribe(userId: string): Promise<void>;
    startSession(sessionId: string): Promise<void>;
    joinSession(sessionId: string): Promise<void>;
    publishStream(stream: MediaStream, kind?: StreamKind): Promise<void>;
    onRemoteStream(listener: (event: RemoteStreamEvent) => void): () => void;
    close(): Promise<void>;
}

export { type RemoteStreamEvent, type StreamKind, type StreamShareClient, type StreamShareOptions, createStreamShareClient };
