UNPKG

@100mslive/hms-video-store

Version:

@100mslive Core SDK which abstracts the complexities of webRTC while providing a reactive store for data management with a unidirectional data flow

101 lines (100 loc) 6.56 kB
import AnalyticsEvent from '../../analytics/AnalyticsEvent'; import { HMSConnectionRole } from '../../connection/model'; import { PeerNotificationInfo, SendMessage } from '../../notification-manager'; import { LEAVE_REASON } from '../../utils/constants'; import { Queue } from '../../utils/queue'; import { AcceptRoleChangeParams, BroadcastResponse, CreateWhiteboardResponse, FindPeerByNameRequestParams, FindPeerByNameResponse, FindPeersRequestParams, GetPeerRequestParams, GetSessionMetadataResponse, GetWhiteboardResponse, HLSRequestParams, HLSTimedMetadataParams, HMSPermissionType, HMSWhiteboardCreateOptions, JoinLeaveGroupResponse, MultiTrackUpdateRequestParams, PeerIterRequestParams, PeersIterationResponse, PollInfoGetParams, PollInfoSetParams, PollLeaderboardGetParams, PollLeaderboardGetResponse, PollListParams, PollListResponse, PollQuestionsGetParams, PollQuestionsGetResponse, PollQuestionsSetParams, PollQuestionsSetResponse, PollResponseSetParams, PollResponseSetResponse, PollResponsesGetParams, PollResponsesGetResponse, PollResultParams, PollResultResponse, PollStartParams, PollStartResponse, PollStopParams, RemovePeerRequest, RequestForBulkRoleChangeParams, RequestForRoleChangeParams, SetSessionMetadataParams, SetSessionMetadataResponse, StartRTMPOrRecordingRequestParams, StartTranscriptionRequestParams, Track, TrackUpdateRequestParams, UpdatePeerRequestParams } from '../interfaces'; import { ISignalEventsObserver } from '../ISignalEventsObserver'; export default class JsonRpcSignal { readonly TAG = "[SIGNAL]: "; readonly observer: ISignalEventsObserver; readonly pongResponseTimes: Queue<number>; /** * Sometimes before [join] is completed, there could be a lot of trickles * Sending [HMSTrickle]` before [join] web socket message leads to * error: [500] no rtc transport exists for this Peer * * We keep a list of pending trickles and send them immediately after [join] * is done. */ private isJoinCompleted; private pendingTrickle; private socket; private callbacks; private _isConnected; private id; private sfuNodeId; private onCloseHandler; get isConnected(): boolean; setSfuNodeId(sfuNodeId?: string): void; setIsConnected(newValue: boolean, reason?: string): void; constructor(observer: ISignalEventsObserver); getPongResponseTimes(): number[]; private internalCall; private notify; open(uri: string): Promise<void>; close(): Promise<void>; join(name: string, data: string, disableVidAutoSub: boolean, serverSubDegrade: boolean, simulcast: boolean, onDemandTracks: boolean, offer?: RTCSessionDescriptionInit): Promise<RTCSessionDescriptionInit & { sfu_node_id: string | undefined; }>; trickle(target: HMSConnectionRole, candidate: RTCIceCandidateInit): void; offer(desc: RTCSessionDescriptionInit, tracks: Map<string, any>): Promise<RTCSessionDescriptionInit>; answer(desc: RTCSessionDescriptionInit): void; trackUpdate(tracks: Map<string, Track>): void; broadcast(message: SendMessage): Promise<BroadcastResponse>; leave(reason: LEAVE_REASON): void; endRoom(lock: boolean, reason: string): Promise<void>; sendEvent(event: AnalyticsEvent): void; ping(timeout: number): Promise<number>; requestRoleChange(params: RequestForRoleChangeParams): Promise<void>; requestBulkRoleChange(params: RequestForBulkRoleChangeParams): Promise<void>; acceptRoleChangeRequest(params: AcceptRoleChangeParams): Promise<void>; requestTrackStateChange(params: TrackUpdateRequestParams): Promise<void>; requestMultiTrackStateChange(params: MultiTrackUpdateRequestParams): Promise<void>; removePeer(params: RemovePeerRequest): Promise<void>; startRTMPOrRecording(params: StartRTMPOrRecordingRequestParams): Promise<void>; stopRTMPAndRecording(): Promise<void>; startHLSStreaming(params: HLSRequestParams): Promise<void>; stopHLSStreaming(params?: HLSRequestParams): Promise<void>; startTranscription(params: StartTranscriptionRequestParams): Promise<void>; stopTranscription(params: StartTranscriptionRequestParams): Promise<void>; sendHLSTimedMetadata(params?: HLSTimedMetadataParams): Promise<void>; updatePeer(params: UpdatePeerRequestParams): Promise<void>; getPeer(params: GetPeerRequestParams): Promise<PeerNotificationInfo | undefined>; joinGroup(name: string): Promise<JoinLeaveGroupResponse>; leaveGroup(name: string): Promise<JoinLeaveGroupResponse>; addToGroup(peerId: string, name: string): Promise<void>; removeFromGroup(peerId: string, name: string): Promise<void>; peerIterNext(params: PeerIterRequestParams): Promise<PeersIterationResponse>; findPeers(params: FindPeersRequestParams): Promise<PeersIterationResponse>; findPeerByName(params: FindPeerByNameRequestParams): Promise<FindPeerByNameResponse>; setSessionMetadata(params: SetSessionMetadataParams): Promise<SetSessionMetadataResponse>; listenMetadataChange(keys: string[]): Promise<void>; getSessionMetadata(key?: string): Promise<GetSessionMetadataResponse>; setPollInfo(params: PollInfoSetParams): Promise<import("../interfaces").PollID>; getPollInfo(params: PollInfoGetParams): Promise<import("../interfaces").PollInfoParams>; setPollQuestions(params: PollQuestionsSetParams): Promise<PollQuestionsSetResponse>; startPoll(params: PollStartParams): Promise<PollStartResponse>; stopPoll(params: PollStopParams): Promise<PollStartResponse>; getPollQuestions(params: PollQuestionsGetParams): Promise<PollQuestionsGetResponse>; setPollResponses(params: PollResponseSetParams): Promise<PollResponseSetResponse>; getPollResponses(params: PollResponsesGetParams): Promise<PollResponsesGetResponse>; getPollsList(params: PollListParams): Promise<PollListResponse>; getPollResult(params: PollResultParams): Promise<PollResultResponse>; createWhiteboard(params: HMSWhiteboardCreateOptions): Promise<CreateWhiteboardResponse>; getWhiteboard(params: { id: string; permission?: Array<HMSPermissionType>; }): Promise<GetWhiteboardResponse>; fetchPollLeaderboard(params: PollLeaderboardGetParams): Promise<PollLeaderboardGetResponse>; private validateConnection; private onMessageHandler; private handleResponseWithId; private handleResponseWithMethod; private resolvePingOnAnyResponse; private rejectPendingCalls; private pingPongLoop; private call; private offlineListener; private onlineListener; }