import { StreamHandle } from "../../Types";
import * as MediaServerTypes from "./MediaServerWebSocketApiTypes";
export interface UserWithPubKey {
    userId: string;
    key: string;
}
export interface ListQuery {
    skip?: number;
    limit?: number;
    order?: string;
}
export interface StreamCreateMeta {
    mid?: string;
    description?: string;
    p2p?: boolean;
    tracks?: StreamTrackCreateMeta[];
}
export interface StreamTrackCreateMeta {
    mid?: string;
    description?: string;
}
export interface StreamRemoteInfo {
    id: StreamId;
    tracks?: TrackInfo[];
}
export interface StreamAndTracksSelector {
    streamRoomId: StreamRoomId;
    streamId: StreamId;
    tracks?: StreamTrackId[];
}
export interface Stream {
    handle: StreamHandle;
    streamRoomId: StreamRoomId;
    remote: boolean;
    createStreamMeta?: StreamCreateMeta;
    remoteStreamInfo?: StreamRemoteInfo;
    localMediaStream?: MediaStream;
}
export interface StreamList {
    list: Stream[];
}
export type StreamId = number & {
    __streamId: never;
};
export interface DataChannelMeta {
    created: boolean;
    dataChannel?: RTCDataChannel;
}
export interface StreamTrackInit {
    track?: MediaStreamTrack;
    createDataChannel?: boolean;
}
export interface StreamTrackList {
    list: TrackInfo[];
}
export type StreamTrackId = string & {
    __streamTrackId: never;
};
export interface PublishMeta {
    bitrate?: number;
    display?: string;
}
export interface TrackInfo extends MediaServerTypes.VideoRoomStreamTrack {
    type: string;
    streamRoomId: StreamRoomId;
    streamId: StreamId;
    meta?: DataChannelMeta;
    dataTrackId?: StreamTrackId;
}
export type StreamRoomInfo = MediaServerTypes.VideoRoom;
export type StreamRoomList = MediaServerTypes.RoomListResult;
export type StreamRoomId = string & {
    __streamRoomId: never;
};
export type TrackType = "audio" | "video" | "data";
