UNPKG

infobip-rtc

Version:

Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation

87 lines 4.52 kB
import { PhoneEndpoint, WebrtcEndpoint } from "../../util/Endpoint"; import { FlowType } from "../FlowType"; import { DefaultCall } from "./DefaultCall"; import { CallsApiEvent } from "../event/CallsApiEvents"; import { ApplicationCallOptions } from "../options/ApplicationCallOptions"; import ValidationUtil from "./util/ValidationUtil"; import { InternalApplicationCallOptions } from "../options/InternalApplicationCallOptions"; import { getMachineDetectionOptions, getRecordingOptions } from "./util/CallOptionsUtil"; import { DefaultOutgoingApplicationCall } from "./DefaultOutgoingApplicationCall"; export class DefaultOutgoingPhoneCall extends DefaultCall { constructor(infobipRtc, phoneCallOptions, currentUserIdentity, phoneNumberDestination, logger) { super(phoneCallOptions, new WebrtcEndpoint(currentUserIdentity), new PhoneEndpoint(phoneNumberDestination), logger); let applicationCallOptions = this.mapOptions(phoneNumberDestination, phoneCallOptions); this.applicationCall = infobipRtc.callApplication(phoneNumberDestination, applicationCallOptions); this.initEventHandlers(); } counterpart() { return this.destination(); } options() { return this.basicCallOptions; } mapOptions(phoneNumberDestination, phoneCallOptions) { if (phoneCallOptions?.customData) { ValidationUtil.validateCustomData(phoneCallOptions?.customData); } const internalCustomData = { to: phoneNumberDestination, from: phoneCallOptions?.from, type: FlowType.PHONE_NUMBER.toString(), ...getRecordingOptions(phoneCallOptions), ...getMachineDetectionOptions(phoneCallOptions), withDialog: "true" }; let applicationCallOptions = ApplicationCallOptions.builder() .setAudio(phoneCallOptions?.audio) .setAudioOptions(phoneCallOptions?.audioOptions) .setAutoReconnect(phoneCallOptions?.autoReconnect) .build(); if (phoneCallOptions?.customData) { applicationCallOptions.customData = phoneCallOptions?.customData; } return new InternalApplicationCallOptions(applicationCallOptions, internalCustomData, DefaultOutgoingApplicationCall.WEBRTC_CALLS_CONFIGURATION_ID); } initEventHandlers() { this.applicationCall.on(CallsApiEvent.RINGING, () => { this.updateCustomData(); this.apiEventEmitter.emit(CallsApiEvent.RINGING, {}); }); this.applicationCall.on(CallsApiEvent.EARLY_MEDIA, (event) => { this.apiEventEmitter.emit(CallsApiEvent.EARLY_MEDIA, event); }); this.applicationCall.on(CallsApiEvent.ESTABLISHED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.ESTABLISHED, event); }); this.applicationCall.on(CallsApiEvent.HANGUP, (event) => { this.apiEventEmitter.emit(CallsApiEvent.HANGUP, event); }); this.applicationCall.on(CallsApiEvent.ERROR, (event) => { this.apiEventEmitter.emit(CallsApiEvent.ERROR, event); }); this.applicationCall.on(CallsApiEvent.NETWORK_QUALITY_CHANGED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.NETWORK_QUALITY_CHANGED, event); }); this.applicationCall.on(CallsApiEvent.DIALOG_RECORDING_STARTED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.CALL_RECORDING_STARTED, { recordingType: event.recordingType }); }); this.applicationCall.on(CallsApiEvent.RECONNECTING, (event) => { this.apiEventEmitter.emit(CallsApiEvent.RECONNECTING, event); }); this.applicationCall.on(CallsApiEvent.RECONNECTED, (event) => { this.apiEventEmitter.emit(CallsApiEvent.RECONNECTED, event); }); this.applicationCall.on(CallsApiEvent.TALKING_WHILE_MUTED, () => { this.apiEventEmitter.emit(CallsApiEvent.TALKING_WHILE_MUTED, {}); }); this.applicationCall.on(CallsApiEvent.MACHINE_DETECTION_FINISHED, (event) => { this.updateCustomData(); this.apiEventEmitter.emit(CallsApiEvent.MACHINE_DETECTION_FINISHED, event); }); this.applicationCall.on(CallsApiEvent.MACHINE_DETECTION_FAILED, (event) => { this.updateCustomData(); this.apiEventEmitter.emit(CallsApiEvent.MACHINE_DETECTION_FAILED, event); }); } } //# sourceMappingURL=DefaultOutgoingPhoneCall.js.map