export type SessionId = string & { _sessionId: never; }; export type TransactionId = string & { _transactionId: never; }; export type PluginHandleId = number & { _pluginHandleId: never; }; export type PluginId = string & { _pluginId: never; }; export type UserToken = string & { _userToken: never; }; export type VideoRoomRequestStatus = string & { _videoRoomStatus: never; }; export type VideoRoomId = number & { _videoRoomId: never; }; export type VideoRoomParticipantId = number & { _videoRoomParticipantId: never; }; export type VideoRoomPublisherId = number & { _videoRoomPublisherId: never; }; export interface JanusSession { id: SessionId; } export interface JanusStreamInfo { type: "audio" | "video" | "data"; active: boolean; mid: string; mindex: number; ready: boolean; send: boolean; source_ids: VideoRoomParticipantId[]; sources: number; } export interface JanusPluginHandle { id: PluginHandleId; pluginId: PluginId; } export interface VideoRoom { room: VideoRoomId; description: string; pin_required: boolean; is_private: boolean; max_publishers: number; bitrate: number; bitrate_cap: number; fir_freq: number; require_pvtid: boolean; require_e2ee: boolean; dummy_publisher: boolean; notify_joining: boolean; audiocodec: string; videocodec: string; opus_fec: boolean; opus_dtx: boolean; record: boolean; rec_dir: string; lock_record: boolean; num_participants: number; audiolevel_ext: boolean; audiolevel_event: boolean; audio_active_packets: number; audio_level_average: number; videoorient_ext: boolean; playoutdelay_ext: boolean; transport_wide_cc_ext: boolean; } export interface PublisherInfo { id: string; display: string; dummy: boolean; streams: StreamInfo[]; talking: boolean; } export interface StreamInfo { type: string; mindex: string; mid: string; disabled: boolean; codec: string; description: string; moderated: boolean; simulcast: boolean; svc: boolean; talking: boolean; } export interface VideoRoomParticipant { id: VideoRoomParticipantId; display: string; publisher: boolean; talking: boolean; } export interface CreateRoomOptions { room?: string; permanent?: boolean; description?: string; secret?: string; pin?: string; is_private?: boolean; allowed?: UserToken[]; publishers?: number; } export interface CreateRoomResult { videoroom: "created"; room: VideoRoomId; permanent: boolean; } export interface EditRoomOptions { room: VideoRoomId; new_description?: string; } export interface EditRoomResult { videoroom: "edited"; room: VideoRoomId; permanent: boolean; } export interface DestroyRoomOptions { room: VideoRoomId; secret?: string; permanent?: boolean; } export interface DestroyRoomResult { videoroom: "destroyed"; room: VideoRoomId; permanent: boolean; } export interface RoomExistsOptions { room: VideoRoomId; } export interface RoomExistsResult { room: VideoRoomId; exists: boolean; } export interface SetRoomRestrictedAccessOptions { secret?: string; action: "enable" | "disable"; room: VideoRoomId; } export interface SetRoomAccessAllowedOptions { secret?: string; action: "add" | "remove"; room: VideoRoomId; allowed: string[]; } export interface RoomAccessResult { room: VideoRoomId; allowed?: string[]; } export interface RoomKickOptions { secret?: string; room: VideoRoomId; id: VideoRoomParticipantId; } export interface RoomModerateOptions { secret?: string; room: VideoRoomId; id: VideoRoomParticipantId; mid: string; mute: boolean; } export interface RoomListParticipantsOptions { room: VideoRoomId; } export interface RoomListResult { list: VideoRoom[]; } export interface RoomListParticipantsResult { room: VideoRoomId; participants: VideoRoomParticipant[]; } export interface RoomJoinAsPublisherOptions { room: VideoRoomId; id?: VideoRoomParticipantId; display?: string; token?: string; } export interface RoomJoinAsSubscriberOptions { room: VideoRoomId; use_msid?: boolean; autoupdate?: boolean; private_id?: string; streams: RoomJoinStreamOptions[]; data: boolean; } export interface RoomJoinStreamOptions { feed: number; mid?: string; crossrefid?: string; } export interface VideoRoomDescription { mid: string; description?: string; } export interface RoomPublishOptions { videocodec?: string; bitrate?: number; record?: boolean; filename?: string; display?: string; audio_level_average?: number; audio_active_packets?: any; descriptions?: VideoRoomDescription[]; e2ee?: boolean; data: boolean; } export interface VideoRoomStreamTrack { type: string; codec: string; mid: string; mindex: number; } export interface NewPublisherEvent { id: VideoRoomPublisherId; video_codec: string; streams: VideoRoomStreamTrack[]; } export interface JoinedEvent { room: VideoRoomId; description: string; id: number; private_id: number; publishers: NewPublisherEvent[]; } export type MediaServerSignallingEvent = WebRTCMediaEvent | WebRTCSHangupEvent | WebRTCSlowLinkEvent | WebRTCUpEvent; export interface WebRTCUpEvent { eventType: "webrtcup"; session_id: string; sender: string; } export interface WebRTCMediaEvent { eventType: "media"; session_id: string; sender: string; type: "audio" | "video" | "data"; receiving: boolean; } export interface WebRTCSlowLinkEvent { eventType: "slowlink"; session_id: string; sender: string; uplink: boolean; nacks: number; } export interface WebRTCSHangupEvent { eventType: "hangup"; session_id: string; sender: string; reason: string; }