infobip-rtc
Version:
Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation
87 lines • 4.52 kB
JavaScript
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