infobip-rtc
Version:
Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation
79 lines • 4.07 kB
JavaScript
import { ViberEndpoint, 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 { DefaultOutgoingApplicationCall } from "./DefaultOutgoingApplicationCall";
import { getRecordingOptions } from "./util/CallOptionsUtil";
export class DefaultOutgoingViberCall extends DefaultCall {
constructor(infobipRtc, viberCallOptions, currentUserIdentity, phoneNumberDestination, callerIdentifier, logger) {
super(viberCallOptions, new WebrtcEndpoint(currentUserIdentity), new ViberEndpoint(phoneNumberDestination), logger);
let applicationCallOptions = this.mapOptions(phoneNumberDestination, callerIdentifier, viberCallOptions);
this.applicationCall = infobipRtc.callApplication(phoneNumberDestination, applicationCallOptions);
this.initEventHandlers();
}
counterpart() {
return this.destination();
}
options() {
return this.basicCallOptions;
}
mapOptions(phoneNumberDestination, callerIdentifier, viberCallOptions) {
if (viberCallOptions?.customData) {
ValidationUtil.validateCustomData(viberCallOptions?.customData);
}
let internalCustomData = {
to: phoneNumberDestination,
from: callerIdentifier,
type: FlowType.PHONE_NUMBER.toString(),
...getRecordingOptions(viberCallOptions),
viber: true.toString(),
withDialog: "true"
};
let applicationCallOptions = ApplicationCallOptions.builder()
.setAudio(viberCallOptions?.audio)
.setAudioOptions(viberCallOptions?.audioOptions)
.setAutoReconnect(viberCallOptions?.autoReconnect)
.build();
if (viberCallOptions?.customData) {
applicationCallOptions.customData = viberCallOptions?.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, {});
});
}
}
//# sourceMappingURL=DefaultOutgoingViberCall.js.map