UNPKG

infobip-rtc

Version:

Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation

264 lines 11.8 kB
import { FlowType } from "../FlowType"; import { ApiEventEmitter } from "../../util/ApiEventEmitter"; import { CallsApiEvent } from "../event/CallsApiEvents"; import { ApplicationCallOptions } from "../options/ApplicationCallOptions"; import ValidationUtil from "./util/ValidationUtil"; import { InternalApplicationCallOptions } from "../options/InternalApplicationCallOptions"; import { getRecordingOptions } from "./util/CallOptionsUtil"; export class DefaultRoomCall { constructor(infobipRtc, roomOptions, roomName) { this.roomOptions = roomOptions; this.roomName = roomName; this.establishedEvent = null; this.conferenceJoinedEvent = null; this.apiEventEmitter = new ApiEventEmitter(); let applicationCallOptions = this.mapOptions(this.roomName, this.roomOptions); this.applicationCall = infobipRtc.callApplication(roomName, applicationCallOptions); this.initEventHandlers(); } mapOptions(roomName, roomOptions) { if (roomOptions === null || roomOptions === void 0 ? void 0 : roomOptions.customData) { ValidationUtil.validateCustomData(roomOptions === null || roomOptions === void 0 ? void 0 : roomOptions.customData); } let internalCustomData = Object.assign({ type: FlowType.ROOM.toString(), roomName: roomName }, getRecordingOptions(roomOptions)); let applicationCallOptions = ApplicationCallOptions.builder() .setAudio(roomOptions === null || roomOptions === void 0 ? void 0 : roomOptions.audio) .setAudioOptions(roomOptions === null || roomOptions === void 0 ? void 0 : roomOptions.audioOptions) .setVideo(roomOptions === null || roomOptions === void 0 ? void 0 : roomOptions.video) .setVideoOptions(roomOptions === null || roomOptions === void 0 ? void 0 : roomOptions.videoOptions) .setDataChannel(roomOptions === null || roomOptions === void 0 ? void 0 : roomOptions.dataChannel) .setAutoReconnect(roomOptions === null || roomOptions === void 0 ? void 0 : roomOptions.autoReconnect) .build(); if (roomOptions === null || roomOptions === void 0 ? void 0 : roomOptions.customData) { applicationCallOptions.customData = roomOptions === null || roomOptions === void 0 ? void 0 : roomOptions.customData; } return new InternalApplicationCallOptions(applicationCallOptions, internalCustomData); } name() { return this.roomName; } cameraOrientation() { return this.applicationCall.cameraOrientation(); } cameraVideo(localVideo) { return this.applicationCall.cameraVideo(localVideo); } duration() { return this.joinTime == null ? 0 : this.getDurationInSeconds(this.leaveTime() != null ? this.leaveTime() : new Date()); } joinTime() { return this.roomJoinTime; } leaveTime() { return this.applicationCall.endTime(); } leave() { return this.applicationCall.hangup(); } hasCameraVideo() { return this.applicationCall.hasCameraVideo(); } hasScreenShare() { return this.applicationCall.hasScreenShare(); } id() { return this.applicationCall.id(); } muted() { return this.applicationCall.muted(); } on(name, handler) { if (!Object.values(CallsApiEvent) .find(apiEvent => apiEvent === name)) { throw new Error(`Unknown event: ${name}!`); } this.apiEventEmitter.on(name, handler); } options() { return this.roomOptions; } customData() { return this.options().customData; } pauseIncomingVideo() { this.applicationCall.pauseIncomingVideo(); } resumeIncomingVideo() { this.applicationCall.resumeIncomingVideo(); } screenShare(screenShare) { return this.applicationCall.screenShare(screenShare); } startScreenShare(displayOptions) { return this.applicationCall.startScreenShare(displayOptions); } stopScreenShare() { return this.applicationCall.stopScreenShare(); } sendDTMF(dtmf) { return this.applicationCall.sendDTMF(dtmf); } audioFilter() { return this.applicationCall.audioFilter(); } setAudioFilter(audioFilter) { return this.applicationCall.setAudioFilter(audioFilter); } clearAudioFilter() { return this.applicationCall.clearAudioFilter(); } setAudioInputDevice(deviceId) { return this.applicationCall.setAudioInputDevice(deviceId); } setCameraOrientation(cameraOrientation) { return this.applicationCall.setCameraOrientation(cameraOrientation); } localCapturer() { return this.applicationCall.localCapturer(); } serverCapturer() { return this.applicationCall.serverCapturer(); } dataChannel() { return this.applicationCall.dataChannel(); } setAudioQualityMode(audioQualityMode) { return this.applicationCall.setAudioQualityMode(audioQualityMode); } audioQualityMode() { return this.applicationCall.audioQualityMode(); } videoFilter() { return this.applicationCall.videoFilter(); } setVideoFilter(videoFilter) { return this.applicationCall.setVideoFilter(videoFilter); } clearVideoFilter() { return this.applicationCall.clearVideoFilter(); } setVideoInputDevice(deviceId) { return this.applicationCall.setVideoInputDevice(deviceId); } status() { return this.applicationCall.status(); } mute(shouldMute) { return this.applicationCall.mute(shouldMute); } getDurationInSeconds(currentTime) { return Math.floor((currentTime.getTime() - this.roomJoinTime.getTime()) / 1000); } emitRoomJoinedEvent() { if (this.conferenceJoinedEvent && this.establishedEvent) { const roomJoinedEvent = this.createRoomJoinedEvent(this.establishedEvent, this.conferenceJoinedEvent); this.conferenceJoinedEvent = null; this.establishedEvent = null; this.roomJoinTime = new Date(); this.apiEventEmitter.emit(CallsApiEvent.ROOM_JOINED, roomJoinedEvent); } } initEventHandlers() { this.applicationCall.on(CallsApiEvent.CONFERENCE_JOINED, (event) => { this.conferenceJoinedEvent = event; this.emitRoomJoinedEvent(); }); this.applicationCall.on(CallsApiEvent.ESTABLISHED, (event) => { this.establishedEvent = event; this.emitRoomJoinedEvent(); }); this.applicationCall.on(CallsApiEvent.HANGUP, (event) => { this.apiEventEmitter.emit(CallsApiEvent.ROOM_LEFT, event); }); this.applicationCall.on(CallsApiEvent.ERROR, (event) => { this.apiEventEmitter.emit(CallsApiEvent.ERROR, event); }); this.applicationCall.on(CallsApiEvent.CAMERA_VIDEO_ADDED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.CAMERA_VIDEO_ADDED, event); }); this.applicationCall.on(CallsApiEvent.CAMERA_VIDEO_UPDATED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.CAMERA_VIDEO_UPDATED, event); }); this.applicationCall.on(CallsApiEvent.CAMERA_VIDEO_REMOVED, () => { this.apiEventEmitter.emit(CallsApiEvent.CAMERA_VIDEO_REMOVED, {}); }); this.applicationCall.on(CallsApiEvent.SCREEN_SHARE_ADDED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.SCREEN_SHARE_ADDED, event); }); this.applicationCall.on(CallsApiEvent.SCREEN_SHARE_REMOVED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.SCREEN_SHARE_REMOVED, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_JOINING, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_JOINING, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_JOINED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_JOINED, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_MUTED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_MUTED, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_UNMUTED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_UNMUTED, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_DEAF, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_DEAF, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_UNDEAF, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_UNDEAF, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_STARTED_TALKING, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_STARTED_TALKING, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_STOPPED_TALKING, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_STOPPED_TALKING, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_CAMERA_VIDEO_ADDED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_CAMERA_VIDEO_ADDED, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_CAMERA_VIDEO_REMOVED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_CAMERA_VIDEO_REMOVED, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_SCREEN_SHARE_ADDED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_SCREEN_SHARE_ADDED, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_SCREEN_SHARE_REMOVED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_SCREEN_SHARE_REMOVED, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_LEFT, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_LEFT, event); }); this.applicationCall.on(CallsApiEvent.NETWORK_QUALITY_CHANGED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.NETWORK_QUALITY_CHANGED, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_NETWORK_QUALITY_CHANGED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_NETWORK_QUALITY_CHANGED, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_DISCONNECTED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_DISCONNECTED, event); }); this.applicationCall.on(CallsApiEvent.PARTICIPANT_RECONNECTED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.PARTICIPANT_RECONNECTED, event); }); this.applicationCall.on(CallsApiEvent.RECONNECTING, () => { this.apiEventEmitter.emit(CallsApiEvent.RECONNECTING, {}); }); this.applicationCall.on(CallsApiEvent.RECONNECTED, () => { this.apiEventEmitter.emit(CallsApiEvent.RECONNECTED, {}); }); this.applicationCall.on(CallsApiEvent.CONFERENCE_RECORDING_STARTED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.ROOM_RECORDING_STARTED, event); }); } createRoomJoinedEvent(establishedEvent, conferenceJoinedEvent) { let roomJoinedEvent = { id: undefined, name: undefined, participants: undefined, stream: undefined, recordingType: undefined }; Object.assign(roomJoinedEvent, establishedEvent, conferenceJoinedEvent); return roomJoinedEvent; } } //# sourceMappingURL=DefaultRoomCall.js.map