@exotel-npm-dev/webrtc-client-sdk 1.0.24 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/exotelsdk.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  *
3
- * WebRTC CLient SIP version 1.0.24
3
+ * WebRTC CLient SIP version 2.0.2
4
4
  *
5
5
  */
6
6
  (function webpackUniversalModuleDefinition(root, factory) {
@@ -48,6 +48,7 @@ __webpack_require__.r(__webpack_exports__);
48
48
 
49
49
 
50
50
  const logger = _coreSDKLogger__WEBPACK_IMPORTED_MODULE_0__["default"];
51
+ let enableAutoAudioDeviceChangeHandling = false;
51
52
  const audioDeviceManager = {
52
53
  resetInputDevice: false,
53
54
  resetOutputDevice: false,
@@ -65,21 +66,23 @@ const audioDeviceManager = {
65
66
  this.resetOutputDevice = value;
66
67
  },
67
68
 
68
- async changeAudioInputDevice(deviceId, onSuccess, onError) {
69
+ async changeAudioInputDevice(deviceId, onSuccess, onError, forceDeviceChange) {
69
70
  logger.log(`SIPJSPhone:changeAudioInputDevice entry`);
70
71
  try {
71
- if (deviceId == audioDeviceManager.currentAudioInputDeviceId) {
72
- logger.log(`SIPJSPhone:changeAudioInputDevice current input device is same as ${deviceId} hence not changing`);
73
- if (onError) onError("current input device is same as " + deviceId + " hence not changing");
74
- return;
75
- }
76
- const inputDevice = audioDeviceManager.mediaDevices.find(device => device.deviceId === deviceId && device.kind === 'audioinput');
77
- if (!inputDevice) {
78
- logger.error("input device id " + deviceId + "not found");
79
- if (onError) onError("deviceIdNotFound");
80
- return;
72
+ if (enableAutoAudioDeviceChangeHandling && !forceDeviceChange) {
73
+ if (deviceId == audioDeviceManager.currentAudioInputDeviceId) {
74
+ logger.log(`SIPJSPhone:changeAudioInputDevice current input device is same as ${deviceId} hence not changing`);
75
+ if (onError) onError("current input device is same as " + deviceId + " hence not changing");
76
+ return;
77
+ }
78
+ const inputDevice = audioDeviceManager.mediaDevices.find(device => device.deviceId === deviceId && device.kind === 'audioinput');
79
+ if (!inputDevice) {
80
+ logger.error("input device id " + deviceId + "not found");
81
+ if (onError) onError("deviceIdNotFound");
82
+ return;
83
+ }
84
+ logger.log(`SIPJSPhone:changeAudioInputDevice acquiring input device ${deviceId} : ${inputDevice.label}`);
81
85
  }
82
- logger.log(`SIPJSPhone:changeAudioInputDevice acquiring input device ${deviceId} : ${inputDevice.label}`);
83
86
  const stream = await navigator.mediaDevices.getUserMedia({
84
87
  audio: { deviceId: { exact: deviceId } }
85
88
  });
@@ -90,30 +93,31 @@ const audioDeviceManager = {
90
93
  }
91
94
  },
92
95
 
93
- async changeAudioOutputDevice(audioRemote, deviceId, onSuccess, onError) {
94
- logger.log(`audioDeviceManager:changeAudioOutputDevice : entry`);
95
- if (deviceId == audioDeviceManager.currentAudioOutputDeviceId) {
96
- logger.log(`SIPJSPhone:changeAudioOutputDevice current output device is same as ${deviceId}`);
97
- if (onError) onError("current output device is same as " + deviceId);
98
- return;
99
- }
96
+ async changeAudioOutputDevice(audioRemote, deviceId, onSuccess, onError, forceDeviceChange) {
97
+ logger.log(`audioDeviceManager:changeAudioOutputDevice : entry`);
100
98
  const audioElement = audioRemote;
101
99
  if (typeof audioElement.sinkId !== 'undefined') {
102
100
  try {
103
-
104
- if (!audioDeviceManager.mediaDevices || audioDeviceManager.mediaDevices.length == 0) {
105
- logger.error("audioDeviceManager:changeAudioOutputDevice mediaDeviceList is empty ");
106
- if (onError) logger.error(deviceId + "not found in mediaDeviceList in audioManager");
107
- return;
108
- }
109
- const outputDevice = audioDeviceManager.mediaDevices.find(device => device.deviceId === deviceId && device.kind === 'audiooutput');
110
- if (!outputDevice) {
111
- logger.error("audioDeviceManager:changeAudioOutputDevice output device id " + deviceId + "not found");
112
- if (onError) onError("deviceIdNotFound");
113
- return;
101
+ if (enableAutoAudioDeviceChangeHandling && !forceDeviceChange) {
102
+ if (deviceId == audioDeviceManager.currentAudioOutputDeviceId) {
103
+ logger.log(`SIPJSPhone:changeAudioOutputDevice current output device is same as ${deviceId}`);
104
+ if (onError) onError("current output device is same as " + deviceId);
105
+ return;
106
+ }
107
+ if (!audioDeviceManager.mediaDevices || audioDeviceManager.mediaDevices.length == 0) {
108
+ logger.error("audioDeviceManager:changeAudioOutputDevice mediaDeviceList is empty ");
109
+ if (onError) onError(deviceId + "not found in mediaDeviceList in audioManager");
110
+ return;
111
+ }
112
+ const outputDevice = audioDeviceManager.mediaDevices.find(device => device.deviceId === deviceId && device.kind === 'audiooutput');
113
+ if (!outputDevice) {
114
+ logger.error("audioDeviceManager:changeAudioOutputDevice output device id " + deviceId + "not found");
115
+ if (onError) onError("deviceIdNotFound");
116
+ return;
117
+ }
118
+ logger.log(`audioDeviceManager:changeAudioOutputDevice acquiring output device ${deviceId} : ${outputDevice.label}`);
119
+ // audioElement.load();
114
120
  }
115
- logger.log(`audioDeviceManager:changeAudioOutputDevice acquiring output device ${deviceId} : ${outputDevice.label}`);
116
- // audioElement.load();
117
121
  await audioElement.setSinkId(deviceId);
118
122
  audioDeviceManager.currentAudioOutputDeviceId = deviceId;
119
123
  logger.log(`audioDeviceManager:changeAudioOutputDevice Output device changed to: ${deviceId}`);
@@ -178,6 +182,10 @@ const audioDeviceManager = {
178
182
  if (callback) callback();
179
183
  },
180
184
 
185
+ setEnableAutoAudioDeviceChangeHandling(flag) {
186
+ enableAutoAudioDeviceChangeHandling = flag;
187
+ },
188
+
181
189
  };
182
190
 
183
191
  audioDeviceManager.enumerateDevices();
@@ -20843,6 +20851,7 @@ var SIP = __webpack_require__(/*! ./sip-0.20.0.js */ "./node_modules/@exotel-npm
20843
20851
 
20844
20852
 
20845
20853
 
20854
+ let enableAutoAudioDeviceChangeHandling = false;
20846
20855
  var lastTransportState = "";
20847
20856
  var lastRegistererState = "";
20848
20857
  var initializeComplete = false;
@@ -20885,7 +20894,7 @@ function getLogger() {
20885
20894
  uaLogger = userAgent.getLogger("sip.WebrtcLib")
20886
20895
  //let loggerFactory = userAgent.getLoggerFactory()
20887
20896
  } catch (e) {
20888
- logger.log("No userAgent.getLogger: Using console log")
20897
+ logger.log("sipjsphone: getLogger: No userAgent.getLogger, Using console log")
20889
20898
  return console;
20890
20899
  }
20891
20900
 
@@ -20893,7 +20902,7 @@ function getLogger() {
20893
20902
  return uaLogger;
20894
20903
  }
20895
20904
  else {
20896
- logger.log("No Logger: Using console log")
20905
+ logger.log("sipjsphone: getLogger: No Logger, Using console log")
20897
20906
  return logger;
20898
20907
  }
20899
20908
  }
@@ -20928,10 +20937,10 @@ function postInit(onInitDoneCallback) {
20928
20937
  ctxSip.ringtone.play()
20929
20938
  .then(() => {
20930
20939
  // Audio is playing.
20931
- logger.log("startRingTone: Audio is playing: count=" + count + " ctxSip.ringToneIntervalID=" + ctxSip.ringToneIntervalID + " ctxSip.ringtoneCount=" + ctxSip.ringtoneCount);
20940
+ logger.log("sipjsphone: startRingTone: Audio is playing: count=" + count + " ctxSip.ringToneIntervalID=" + ctxSip.ringToneIntervalID + " ctxSip.ringtoneCount=" + ctxSip.ringtoneCount);
20932
20941
  })
20933
20942
  .catch(e => {
20934
- logger.log("startRingTone: Exception:", e);
20943
+ logger.log("sipjsphone: startRingTone: Exception:", e);
20935
20944
  });
20936
20945
  count++;
20937
20946
  if (count > ctxSip.ringtoneCount) {
@@ -20941,7 +20950,7 @@ function postInit(onInitDoneCallback) {
20941
20950
 
20942
20951
 
20943
20952
 
20944
- } catch (e) { logger.log("startRingTone: Exception:", e); }
20953
+ } catch (e) { logger.log("sipjsphone: startRingTone: Exception:", e); }
20945
20954
  },
20946
20955
 
20947
20956
  stopRingTone: function () {
@@ -20951,9 +20960,9 @@ function postInit(onInitDoneCallback) {
20951
20960
  ctxSip.ringtone = ringtone;
20952
20961
  }
20953
20962
  ctxSip.ringtone.pause();
20954
- logger.log("stopRingTone: intervalID:", ctxSip.ringToneIntervalID);
20963
+ logger.log("sipjsphone: stopRingTone: intervalID:", ctxSip.ringToneIntervalID);
20955
20964
  clearInterval(ctxSip.ringToneIntervalID)
20956
- } catch (e) { logger.log("stopRingTone: Exception:", e); }
20965
+ } catch (e) { logger.log("sipjsphone: stopRingTone: Exception:", e); }
20957
20966
  },
20958
20967
 
20959
20968
  startRingbackTone: function () {
@@ -20963,19 +20972,19 @@ function postInit(onInitDoneCallback) {
20963
20972
  try {
20964
20973
  ctxSip.ringbacktone.play().then(() => {
20965
20974
  // Audio is playing.
20966
- logger.log("startRingbackTone: Audio is playing:");
20975
+ logger.log("sipjsphone: startRingbackTone: Audio is playing:");
20967
20976
  })
20968
20977
  .catch(e => {
20969
- logger.log("startRingbackTone: Exception:", e);
20978
+ logger.log("sipjsphone: startRingbackTone: Exception:", e);
20970
20979
  });
20971
- } catch (e) { logger.log("startRingbackTone: Exception:", e); }
20980
+ } catch (e) { logger.log("sipjsphone: startRingbackTone: Exception:", e); }
20972
20981
  },
20973
20982
 
20974
20983
  stopRingbackTone: function () {
20975
20984
  if (!ctxSip.ringbacktone) {
20976
20985
  ctxSip.ringbacktone = ringbacktone;
20977
20986
  }
20978
- try { ctxSip.ringbacktone.pause(); } catch (e) { logger.log("stopRingbackTone: Exception:", e); }
20987
+ try { ctxSip.ringbacktone.pause(); } catch (e) { logger.log("sipjsphone: stopRingbackTone: Exception:", e); }
20979
20988
  },
20980
20989
 
20981
20990
  // Genereates a rendom string to ID a call
@@ -21020,7 +21029,7 @@ function postInit(onInitDoneCallback) {
21020
21029
  let pc = sdh._peerConnection;
21021
21030
  _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].initGetStats(pc, callId, username);
21022
21031
  } catch (e) {
21023
- logger.log("something went wrong while initing getstats");
21032
+ logger.log("sipjsphone: newSession: something went wrong while initing getstats");
21024
21033
  logger.log(e);
21025
21034
  }
21026
21035
 
@@ -21125,7 +21134,7 @@ function postInit(onInitDoneCallback) {
21125
21134
 
21126
21135
  sipSendDTMF: function (digit) {
21127
21136
 
21128
- try { ctxSip.dtmfTone.play(); } catch (e) { logger.log("sipSendDTMF: Exception:", e); }
21137
+ try { ctxSip.dtmfTone.play(); } catch (e) { logger.log("sipjsphone: sipSendDTMF: Exception:", e); }
21129
21138
 
21130
21139
  var a = ctxSip.callActiveID;
21131
21140
  if (a) {
@@ -21159,7 +21168,7 @@ function postInit(onInitDoneCallback) {
21159
21168
 
21160
21169
 
21161
21170
  phoneMuteButtonPressed: function (sessionid) {
21162
-
21171
+ logger.log(" sipjsphone: phoneMuteButtonPressed: bMicEnable, sessionid", bMicEnable, sessionid);
21163
21172
  var s = ctxSip.Sessions[sessionid];
21164
21173
 
21165
21174
  if (bMicEnable) {
@@ -21175,16 +21184,20 @@ function postInit(onInitDoneCallback) {
21175
21184
  phoneMute: function (sessionid, bMute) {
21176
21185
  if (sessionid) {
21177
21186
  var s = ctxSip.Sessions[sessionid];
21178
- logger.log("phoneMute: bMute", bMute)
21187
+ logger.log(" sipjsphone: phoneMute: bMute", bMute)
21179
21188
  toggleMute(s, bMute);
21180
21189
  bMicEnable = !bMute;
21181
21190
  }
21191
+ else{
21192
+ logger.log(" sipjsphone: phoneMute: doing nothing as sessionid not found")
21193
+
21194
+ }
21182
21195
  },
21183
21196
 
21184
21197
  phoneHold: function (sessionid, bHold) {
21185
21198
  if (sessionid) {
21186
21199
  var s = ctxSip.Sessions[sessionid];
21187
- logger.log("phoneHold: bHold", bHold)
21200
+ logger.log("sipjsphone: phoneHold: bHold", bHold)
21188
21201
  toggleHold(s, bHold);
21189
21202
  bHoldEnable = bHold;
21190
21203
  }
@@ -21230,7 +21243,7 @@ function postInit(onInitDoneCallback) {
21230
21243
  alert('Your browser don\'t support WebRTC.\naudio/video calls will be disabled.');
21231
21244
  }
21232
21245
  _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].setWebRTCFSMMapper("sipjs");
21233
- logger.log("init: Initialization complete...")
21246
+ logger.log("sipjsphone: init: Initialization complete...")
21234
21247
  initializeComplete = true;
21235
21248
  onInitDoneCallback();
21236
21249
  }
@@ -21353,7 +21366,7 @@ function sipRegister() {
21353
21366
  },
21354
21367
  stunServers: ["stun:stun.l.google.com:19302"],
21355
21368
  registerOptions: {
21356
- expires: 60
21369
+ expires: 300
21357
21370
  }
21358
21371
 
21359
21372
  };
@@ -21444,7 +21457,7 @@ function registerPhoneEventListeners() {
21444
21457
 
21445
21458
  ctxSip.phone.transport.stateChange.addListener(transportStateChangeListener);
21446
21459
 
21447
- registerer = new SIP.Registerer(ctxSip.phone, { expires: 60, refreshFrequency: 80 });
21460
+ registerer = new SIP.Registerer(ctxSip.phone, { expires: 300, refreshFrequency: 80 });
21448
21461
 
21449
21462
 
21450
21463
  ctxSip.phone.delegate.onInvite = (incomingSession) => {
@@ -21495,7 +21508,7 @@ function destroySocketConnection() {
21495
21508
  ctxSip.phone.transport.disconnect();
21496
21509
  }
21497
21510
  } catch (e) {
21498
- logger.log("ERROR", e);
21511
+ logger.log("sipjsphone: destroySocketConnection: ERROR", e);
21499
21512
  }
21500
21513
  }
21501
21514
 
@@ -21516,7 +21529,7 @@ function uiCallTerminated(s_description) {
21516
21529
 
21517
21530
 
21518
21531
  function sipCall() {
21519
- logger.log("testing emit accept_reject");
21532
+ logger.log("sipjsphone: sipCall: testing emit accept_reject");
21520
21533
  _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].sendWebRTCEventsToFSM("accept_reject", "CALL");
21521
21534
  }
21522
21535
 
@@ -21531,7 +21544,7 @@ function sipPhoneLogger(level, category, label, content) {
21531
21544
  } else if (content.startsWith("Received WebSocket text message")) {
21532
21545
  handleWebSocketMessageContent(content, "recv");
21533
21546
  }
21534
- logger.log(level + " sipjslog: " + category + ": " + content);
21547
+ logger.log("sipjsphone: sipPhoneLogger:" + level + " sipjslog: " + category + ": " + content);
21535
21548
  }
21536
21549
  } catch (e) {
21537
21550
  logger.error("sipjsphone:sipPhoneLogger ERROR", e);
@@ -21653,7 +21666,7 @@ function cleanupRegistererTimer() {
21653
21666
 
21654
21667
 
21655
21668
  } catch (e) {
21656
- logger.log("ERROR", e);
21669
+ logger.log("sipjsphone: cleanupRegistererTimer: ERROR", e);
21657
21670
 
21658
21671
  }
21659
21672
  registerer = null;
@@ -21720,8 +21733,8 @@ function handleWebSocketMessageContent(content, direction) {
21720
21733
  switch (direction) {
21721
21734
  case "sent":
21722
21735
 
21723
- if (sipMessage.method == "CONNECTION")
21724
- _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].sendWebRTCEventsToFSM("sent_request", sipMessage.method);
21736
+ if (sipMessage.method == "REGISTER")
21737
+ _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].sendWebRTCEventsToFSM("sent_request", "CONNECTION");
21725
21738
 
21726
21739
  _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].onCallStatSipSendCallback(newtext, "sipjs");
21727
21740
 
@@ -21809,13 +21822,13 @@ function enableReceiverTracks(s, enable) {
21809
21822
  throw new Error("Peer connection closed.");
21810
21823
  }
21811
21824
  peerConnection.getReceivers().forEach((receiver) => {
21812
- logger.log("Receiver ", receiver)
21825
+ logger.log("sipjsphone: enableReceiverTracks: Receiver ", receiver)
21813
21826
  if (receiver.track) {
21814
21827
  receiver.track.enabled = enable;
21815
21828
  }
21816
21829
  });
21817
21830
  } catch (e) {
21818
- logger.log("enableReceiverTracks: Error in updating receiver tracks ", e)
21831
+ logger.log("sipjsphone: enableReceiverTracks: Error in updating receiver tracks ", e)
21819
21832
 
21820
21833
  }
21821
21834
  }
@@ -21834,7 +21847,7 @@ function enableSenderTracks(s, enable) {
21834
21847
  }
21835
21848
  });
21836
21849
  } catch (e) {
21837
- logger.log("enableSenderTracks: Error in updating sender tracks ", e)
21850
+ logger.log("sipjsphone: enableSenderTracks: Error in updating sender tracks ", e)
21838
21851
  }
21839
21852
  }
21840
21853
 
@@ -21900,7 +21913,7 @@ function onUserSessionAcceptFailed(e) {
21900
21913
  _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].onCallStatSipJsSessionEvent('userMediaFailed');
21901
21914
  _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].onGetUserMediaErrorCallstatCallback();
21902
21915
  } else {
21903
- logger.log("user media failed due to error ", e);
21916
+ logger.log("sipjsphone: onUserSessionAcceptFailed: user media failed due to error ", e);
21904
21917
  }
21905
21918
  uiCallTerminated('Media stream permission denied');
21906
21919
  }
@@ -21910,13 +21923,13 @@ const SIPJSPhone = {
21910
21923
  init: (onInitDoneCallback) => {
21911
21924
 
21912
21925
  var preInit = function () {
21913
- logger.log("init:readyState, calling postInit")
21926
+ logger.log("sipjsphone: init:readyState, calling postInit")
21914
21927
  postInit(onInitDoneCallback);
21915
21928
  }
21916
21929
  var oReadyStateTimer = setInterval(function () {
21917
21930
  if (document.readyState === "complete") {
21918
21931
  clearInterval(oReadyStateTimer);
21919
- logger.log("init:readyState, calling preinit")
21932
+ logger.log("sipjsphone: init:readyState, calling preinit")
21920
21933
  preInit();
21921
21934
  }
21922
21935
  }, 100);
@@ -22007,11 +22020,11 @@ const SIPJSPhone = {
22007
22020
  },
22008
22021
 
22009
22022
  reRegister: () => {
22010
- logger.log("sipjs: registering in case of relogin");
22023
+ logger.log("sipjsphone: reRegister: registering in case of relogin");
22011
22024
  if (ctxSip.phone && registerer) {
22012
22025
  registerer.register({});
22013
22026
  } else {
22014
- logger.log("sipjs: SIP Session does not exist for re registration");
22027
+ logger.log("sipjsphone: reRegister: SIP Session does not exist for re registration");
22015
22028
  }
22016
22029
 
22017
22030
  },
@@ -22059,7 +22072,7 @@ const SIPJSPhone = {
22059
22072
 
22060
22073
  pickPhoneCall: () => {
22061
22074
  var newSess = ctxSip.Sessions[ctxSip.callActiveID];
22062
- logger.log("pickphonecall ", ctxSip.callActiveID);
22075
+ logger.log("sipjsphone: pickphonecall: ", ctxSip.callActiveID);
22063
22076
  if (newSess) {
22064
22077
  if (_audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.currentAudioInputDeviceId != "default") {
22065
22078
  newSess.accept({
@@ -22092,7 +22105,7 @@ const SIPJSPhone = {
22092
22105
  try {
22093
22106
  ctxSip.beeptone.play();
22094
22107
  } catch (e) {
22095
- logger.log("playBeep: Exception:", e);
22108
+ logger.log("sipjsphone: playBeep: Exception:", e);
22096
22109
  }
22097
22110
  },
22098
22111
 
@@ -22128,38 +22141,39 @@ const SIPJSPhone = {
22128
22141
  },
22129
22142
  /* NL Additions - Start */
22130
22143
  getSpeakerTestTone: () => {
22131
- logger.log("Returning speaker test tone:", ringtone);
22144
+ logger.log("sipjsphone: getSpeakerTestTone: Returning speaker test tone:", ringtone);
22132
22145
  return ringtone;
22133
22146
  },
22134
22147
 
22135
22148
 
22136
22149
  getWSSUrl: () => {
22137
- logger.log("Returning txtWebsocketURL:", txtWebsocketURL);
22150
+ logger.log("sipjsphone: getWSSUrl: Returning txtWebsocketURL:", txtWebsocketURL);
22138
22151
  return txtWebsocketURL;
22139
22152
  },
22140
22153
  /* NL Additions - End */
22141
22154
  getTransportState: () => {
22142
- logger.log("Returning Transport State : ", lastTransportState);
22155
+ logger.log("sipjsphone: getTransportState: Returning Transport State : ", lastTransportState);
22143
22156
  return lastTransportState;
22144
22157
  },
22145
22158
  getRegistrationState: () => {
22146
- logger.log("Returning Registration State : ", lastRegistererState);
22159
+ logger.log("sipjsphone: getRegistrationState: Returning Registration State : ", lastRegistererState);
22147
22160
  return lastRegistererState;
22148
22161
  },
22149
22162
 
22150
- changeAudioInputDevice(deviceId, onSuccess, onError) {
22163
+ changeAudioInputDevice(deviceId, onSuccess, onError, forceDeviceChange) {
22164
+ logger.log(`SIPJSPhone: changeAudioInputDevice called with deviceId=${deviceId}, forceDeviceChange=${forceDeviceChange}, enableAutoAudioDeviceChangeHandling=${enableAutoAudioDeviceChangeHandling}`);
22151
22165
  _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.changeAudioInputDevice(deviceId, function (stream) {
22152
22166
  const trackChanged = SIPJSPhone.replaceSenderTrack(stream, deviceId);
22153
22167
  if (trackChanged) {
22154
22168
  _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.currentAudioInputDeviceId = deviceId;
22155
- logger.log(`SIPJSPhone:changeAudioInputDevice Input device changed to: ${deviceId}`);
22169
+ logger.log(`sipjsphone: changeAudioInputDevice: Input device changed to: ${deviceId}`);
22156
22170
 
22157
22171
  onSuccess();
22158
22172
  } else {
22159
- logger.error("SIPJSPhone:changeAudioInputDevice failed");
22173
+ logger.error("sipjsphone: changeAudioInputDevice: failed");
22160
22174
  onError("replaceSenderTrack failed for webrtc");
22161
22175
  }
22162
- }, onError);
22176
+ }, onError, forceDeviceChange);
22163
22177
  },
22164
22178
  changeAudioOutputDeviceForAdditionalAudioElement(deviceId) {
22165
22179
  const additionalAudioElements = [ringtone, beeptone, ringbacktone, dtmftone];
@@ -22175,14 +22189,15 @@ const SIPJSPhone = {
22175
22189
  logger.error("sipjsphone:changeAudioOutputDeviceForAdditionalAudioElement failed to setSink for additonal AudioElements", e);
22176
22190
  }
22177
22191
  },
22178
- changeAudioOutputDevice(deviceId, onSuccess, onError) {
22192
+ changeAudioOutputDevice(deviceId, onSuccess, onError, forceDeviceChange) {
22193
+ logger.log(`SIPJSPhone: changeAudioOutputDevice called with deviceId=${deviceId}, forceDeviceChange=${forceDeviceChange}, enableAutoAudioDeviceChangeHandling=${enableAutoAudioDeviceChangeHandling}`);
22179
22194
  if (!ctxSip.callActiveID) {
22180
22195
  audioRemote = document.createElement("audio");
22181
22196
  }
22182
22197
  _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.changeAudioOutputDevice(audioRemote, deviceId, function () {
22183
22198
  SIPJSPhone.changeAudioOutputDeviceForAdditionalAudioElement(deviceId);
22184
22199
  onSuccess();
22185
- }, onError);
22200
+ }, onError, forceDeviceChange);
22186
22201
  },
22187
22202
 
22188
22203
  stopStreamTracks(stream) {
@@ -22234,49 +22249,56 @@ const SIPJSPhone = {
22234
22249
  audioOutputDeviceChangeCallback: null,
22235
22250
  onDeviceChangeCallback: null,
22236
22251
  registerAudioDeviceChangeCallback(audioInputDeviceChangeCallback, audioOutputDeviceChangeCallback, onDeviceChangeCallback) {
22237
- logger.log(`SIPJSPhone:registerAudioDeviceChangeCallback entry`);
22252
+ logger.log(`sipjsphone: registerAudioDeviceChangeCallback: entry`);
22238
22253
  SIPJSPhone.audioInputDeviceChangeCallback = audioInputDeviceChangeCallback;
22239
22254
  SIPJSPhone.audioOutputDeviceChangeCallback = audioOutputDeviceChangeCallback;
22240
22255
  SIPJSPhone.onDeviceChangeCallback = onDeviceChangeCallback;
22241
- }
22242
-
22243
- };
22244
-
22245
-
22246
- navigator.mediaDevices.addEventListener('devicechange', function (event) {
22247
- try {
22248
- if (!ctxSip.callActiveID) {
22249
- audioRemote = document.createElement("audio");
22250
- }
22251
- _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.enumerateDevices(function () {
22252
-
22253
- if (SIPJSPhone.onDeviceChangeCallback) {
22254
- logger.info("SIPJSPhone:ondevicechange relaying event to callback");
22255
- SIPJSPhone.onDeviceChangeCallback(event);
22256
- return;
22257
- }
22258
- _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.onAudioDeviceChange(audioRemote,
22259
- function (stream, deviceId) {
22260
- const trackChanged = SIPJSPhone.replaceSenderTrack(stream, deviceId);
22261
- if (trackChanged) {
22262
- _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.currentAudioInputDeviceId = deviceId;
22263
- if (SIPJSPhone.audioInputDeviceChangeCallback) {
22264
- SIPJSPhone.audioInputDeviceChangeCallback(deviceId);
22265
- }
22266
- }
22267
- }, function (deviceId) {
22268
- SIPJSPhone.changeAudioOutputDeviceForAdditionalAudioElement(deviceId);
22269
- _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.currentAudioOutputDeviceId = deviceId;
22270
- if (SIPJSPhone.audioOutputDeviceChangeCallback) {
22271
- SIPJSPhone.audioOutputDeviceChangeCallback(deviceId);
22256
+ },
22257
+ attachGlobalDeviceChangeListener() {
22258
+ logger.log("SIPJSPhone: Attaching global devicechange event listener (enableAutoAudioDeviceChangeHandling is true)");
22259
+ navigator.mediaDevices.addEventListener('devicechange', (event) => {
22260
+ try {
22261
+ if (!ctxSip.callActiveID) {
22262
+ audioRemote = document.createElement("audio");
22263
+ }
22264
+ _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.enumerateDevices(() => {
22265
+ if (SIPJSPhone.onDeviceChangeCallback) {
22266
+ logger.info("SIPJSPhone:ondevicechange relaying event to callback");
22267
+ SIPJSPhone.onDeviceChangeCallback(event);
22272
22268
  }
22269
+ _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.onAudioDeviceChange(
22270
+ audioRemote,
22271
+ (stream, deviceId) => {
22272
+ const trackChanged = SIPJSPhone.replaceSenderTrack(stream, deviceId);
22273
+ if (trackChanged) {
22274
+ _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.currentAudioInputDeviceId = deviceId;
22275
+ if (SIPJSPhone.audioInputDeviceChangeCallback) {
22276
+ SIPJSPhone.audioInputDeviceChangeCallback(deviceId);
22277
+ }
22278
+ }
22279
+ },
22280
+ (deviceId) => {
22281
+ SIPJSPhone.changeAudioOutputDeviceForAdditionalAudioElement(deviceId);
22282
+ _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.currentAudioOutputDeviceId = deviceId;
22283
+ if (SIPJSPhone.audioOutputDeviceChangeCallback) {
22284
+ SIPJSPhone.audioOutputDeviceChangeCallback(deviceId);
22285
+ }
22286
+ }
22287
+ );
22273
22288
  });
22289
+ } catch (e) {
22290
+ logger.error("SIPJSPhone:ondevicechange something went wrong during device change", e);
22291
+ }
22274
22292
  });
22293
+ },
22294
+ setEnableAutoAudioDeviceChangeHandling(flag) {
22295
+ logger.log("sipjsphone: setEnableAutoAudioDeviceChangeHandling: entry, enableAutoAudioDeviceChangeHandling = ",flag);
22296
+ enableAutoAudioDeviceChangeHandling = flag;
22297
+ _audioDeviceManager_js__WEBPACK_IMPORTED_MODULE_0__.audioDeviceManager.setEnableAutoAudioDeviceChangeHandling(flag);
22298
+ }
22299
+ };
22300
+
22275
22301
 
22276
- } catch (e) {
22277
- logger.error("SIPJSPhone:ondevicechange something went wrong during device change", e);
22278
- }
22279
- });
22280
22302
 
22281
22303
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SIPJSPhone);
22282
22304
 
@@ -22306,12 +22328,12 @@ __webpack_require__.r(__webpack_exports__);
22306
22328
 
22307
22329
 
22308
22330
 
22309
-
22310
22331
  var phone = null;
22311
22332
  let webrtcSIPEngine = null;
22312
22333
  const logger = _coreSDKLogger__WEBPACK_IMPORTED_MODULE_0__["default"];
22313
22334
 
22314
22335
  function sendWebRTCEventsToFSM(eventType, sipMethod) {
22336
+ logger.log("webrtcSIPPhone: sendWebRTCEventsToFSM : ",eventType,sipMethod);
22315
22337
  _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].sendWebRTCEventsToFSM(eventType, sipMethod);
22316
22338
  }
22317
22339
 
@@ -22321,6 +22343,7 @@ const webrtcSIPPhone = {
22321
22343
 
22322
22344
 
22323
22345
  isConnected: () => {
22346
+ logger.log("webrtcSIPPhone: isConnected entry");
22324
22347
  var status = phone.getStatus();
22325
22348
  if (status != "offline") {
22326
22349
  return true;
@@ -22330,10 +22353,12 @@ const webrtcSIPPhone = {
22330
22353
  },
22331
22354
 
22332
22355
  sendDTMFWebRTC: (dtmfValue) => {
22356
+ logger.log("webrtcSIPPhone: sendDTMFWebRTC : ",dtmfValue);
22333
22357
  phone.sipSendDTMF(dtmfValue);
22334
22358
  },
22335
22359
 
22336
22360
  registerWebRTCClient: (sipAccountInfo, handler) => {
22361
+ logger.log("webrtcSIPPhone: registerWebRTCClient : ",sipAccountInfo,handler);
22337
22362
  sipAccountInfoData = sipAccountInfo;
22338
22363
  phone.init(() => {
22339
22364
  phone.loadCredentials(sipAccountInfo);
@@ -22352,76 +22377,92 @@ const webrtcSIPPhone = {
22352
22377
 
22353
22378
 
22354
22379
  configureWebRTCClientDevice: (handler) => {
22380
+ logger.log("webrtcSIPPhone: configureWebRTCClientDevice : ",handler);
22355
22381
  phone.registerCallBacks(handler);
22356
22382
  },
22357
22383
 
22358
22384
  setAuthenticatorServerURL(serverURL) {
22385
+ logger.log("webrtcSIPPhone: setAuthenticatorServerURL : ",serverURL);
22359
22386
  // Nothing to do here
22360
22387
  },
22361
22388
 
22362
22389
  toggleSipRegister: () => {
22390
+ logger.log("webrtcSIPPhone: toggleSipRegister entry");
22363
22391
  phone.resetRegisterAttempts();
22364
22392
  phone.sipToggleRegister();
22365
22393
  },
22366
22394
 
22367
- webRTCMuteUnmute: (isMuted) => {
22395
+ webRTCMuteUnmute: () => {
22396
+ logger.log("webrtcSIPPhone: webRTCMuteUnmute");
22368
22397
  phone.sipToggleMic();
22369
22398
  },
22370
22399
 
22371
22400
  getMuteStatus: () => {
22401
+ logger.log("webrtcSIPPhone: getMuteStatus entry");
22372
22402
  return phone.getMicMuteStatus();
22373
22403
  },
22374
22404
 
22375
22405
  muteAction: (bMute) => {
22406
+ logger.log("webrtcSIPPhone: muteAction: ",bMute);
22376
22407
  phone.sipMute(bMute);
22377
22408
  },
22378
22409
 
22379
22410
  holdAction: (bHold) => {
22411
+ logger.log("webrtcSIPPhone: holdAction: ",bHold);
22380
22412
  phone.sipHold(bHold);
22381
22413
  },
22382
22414
 
22383
22415
  holdCall: () => {
22416
+ logger.log("webrtcSIPPhone: holdCall entry");
22384
22417
  phone.holdCall();
22385
22418
  },
22386
22419
 
22387
22420
  pickCall: () => {
22421
+ logger.log("webrtcSIPPhone: pickCall entry");
22388
22422
  phone.pickPhoneCall();
22389
22423
 
22390
22424
  _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].onPickCall();
22391
22425
  },
22392
22426
 
22393
22427
  rejectCall: () => {
22428
+ logger.log("webrtcSIPPhone: rejectCall entry");
22394
22429
  phone.sipHangUp();
22395
22430
 
22396
22431
  _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].onRejectCall();
22397
22432
  },
22398
22433
 
22399
22434
  reRegisterWebRTCPhone: () => {
22435
+ logger.log("webrtcSIPPhone: reRegisterWebRTCPhone entry");
22400
22436
  phone.reRegister();
22401
22437
  },
22402
22438
 
22403
22439
 
22404
22440
  playBeepTone: () => {
22441
+ logger.log("webrtcSIPPhone: playBeepTone entry");
22405
22442
  phone.playBeep();
22406
22443
 
22407
22444
  },
22408
22445
 
22409
22446
  sipUnRegisterWebRTC: () => {
22447
+ logger.log("webrtcSIPPhone: sipUnRegisterWebRTC entry");
22410
22448
  phone.sipUnRegister();
22411
22449
  },
22412
22450
 
22413
22451
  startWSNetworkTest: () => {
22452
+ logger.log("webrtcSIPPhone: startWSNetworkTest entry");
22414
22453
  undefined.testingMode = true;
22415
22454
  phone.sipRegister();
22416
22455
  },
22417
22456
 
22418
22457
  stopWSNetworkTest: () => {
22458
+ logger.log("webrtcSIPPhone stopWSNetworkTest entry");
22419
22459
  phone.sipUnRegister();
22420
22460
  },
22421
22461
 
22422
22462
 
22423
22463
 
22424
- registerPhone: (engine, delegate) => {
22464
+ registerPhone: (engine, delegate, enableAutoAudioDeviceChangeHandling = false) => {
22465
+ logger.log("webrtcSIPPhone: registerPhone : ",engine, "enableAutoAudioDeviceChangeHandling:", enableAutoAudioDeviceChangeHandling);
22425
22466
  webrtcSIPEngine = engine;
22426
22467
  switch (engine) {
22427
22468
  case "sipjs":
@@ -22432,34 +22473,42 @@ const webrtcSIPPhone = {
22432
22473
  }
22433
22474
  _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].registerDelegate(delegate);
22434
22475
  _webrtcSIPPhoneEventDelegate__WEBPACK_IMPORTED_MODULE_2__["default"].onRegisterWebRTCSIPEngine(engine);
22435
-
22436
-
22476
+ phone.setEnableAutoAudioDeviceChangeHandling(enableAutoAudioDeviceChangeHandling);
22477
+ if (enableAutoAudioDeviceChangeHandling) {
22478
+ phone.attachGlobalDeviceChangeListener();
22479
+ }
22437
22480
  },
22438
22481
 
22439
22482
  getWebRTCStatus: () => {
22483
+ logger.log("webrtcSIPPhone: getWebRTCStatus entry");
22440
22484
  var status = phone.getStatus();
22441
22485
  return status;
22442
22486
  },
22443
22487
 
22444
22488
  disconnect: () => {
22489
+ logger.log("webrtcSIPPhone: disconnect entry");
22445
22490
  if (phone) {
22446
22491
  phone.disconnect();
22447
22492
  }
22448
22493
  },
22449
22494
 
22450
22495
  connect: () => {
22496
+ logger.log("webrtcSIPPhone: connect entry");
22451
22497
  phone.connect();
22452
22498
  },
22453
22499
 
22454
22500
  getSIPAccountInfo() {
22501
+ logger.log("webrtcSIPPhone: getSIPAccountInfo entry");
22455
22502
  return sipAccountInfoData;
22456
22503
  },
22457
22504
  getWebRTCSIPEngine() {
22505
+ logger.log("webrtcSIPPhone: getWebRTCSIPEngine entry");
22458
22506
  return webrtcSIPEngine;
22459
22507
  },
22460
22508
 
22461
22509
  /* NL Addition - Start */
22462
22510
  getSpeakerTestTone() {
22511
+ logger.log("webrtcSIPPhone: getSpeakerTestTone entry");
22463
22512
  try {
22464
22513
  return _sipjsphone__WEBPACK_IMPORTED_MODULE_1__["default"].getSpeakerTestTone()
22465
22514
  } catch (e) {
@@ -22468,6 +22517,7 @@ const webrtcSIPPhone = {
22468
22517
  },
22469
22518
 
22470
22519
  getWSSUrl() {
22520
+ logger.log("webrtcSIPPhone: getWSSUrl entry");
22471
22521
  try {
22472
22522
  return _sipjsphone__WEBPACK_IMPORTED_MODULE_1__["default"].getWSSUrl()
22473
22523
  } catch (e) {
@@ -22477,6 +22527,7 @@ const webrtcSIPPhone = {
22477
22527
  /* NL Addition - End */
22478
22528
 
22479
22529
  getTransportState() {
22530
+ logger.log("webrtcSIPPhone: getTransportState entry");
22480
22531
  try {
22481
22532
  return _sipjsphone__WEBPACK_IMPORTED_MODULE_1__["default"].getTransportState();
22482
22533
  } catch (e) {
@@ -22486,6 +22537,7 @@ const webrtcSIPPhone = {
22486
22537
  },
22487
22538
 
22488
22539
  getRegistrationState() {
22540
+ logger.log("webrtcSIPPhone: getRegistrationState entry");
22489
22541
  try {
22490
22542
  return _sipjsphone__WEBPACK_IMPORTED_MODULE_1__["default"].getRegistrationState();
22491
22543
  } catch (e) {
@@ -22494,21 +22546,21 @@ const webrtcSIPPhone = {
22494
22546
  }
22495
22547
  },
22496
22548
 
22497
- changeAudioInputDevice(deviceId, onSuccess, onError) {
22498
- logger.log(`webrtcSIPPhone:changeAudioInputDevice entry`);
22499
- _sipjsphone__WEBPACK_IMPORTED_MODULE_1__["default"].changeAudioInputDevice(deviceId, onSuccess, onError);
22549
+ changeAudioInputDevice(deviceId, onSuccess, onError, forceDeviceChange=false) {
22550
+ logger.log("webrtcSIPPhone: changeAudioInputDevice : ", deviceId, onSuccess, onError);
22551
+ _sipjsphone__WEBPACK_IMPORTED_MODULE_1__["default"].changeAudioInputDevice(deviceId, onSuccess, onError, forceDeviceChange);
22500
22552
  },
22501
22553
 
22502
- changeAudioOutputDevice(deviceId, onSuccess, onError) {
22503
- logger.log(`webrtcSIPPhone:changeAudioOutputDevice entry`);
22504
- _sipjsphone__WEBPACK_IMPORTED_MODULE_1__["default"].changeAudioOutputDevice(deviceId, onSuccess, onError);
22554
+ changeAudioOutputDevice(deviceId, onSuccess, onError, forceDeviceChange=false) {
22555
+ logger.log("webrtcSIPPhone: changeAudioOutputDevice : ", deviceId, onSuccess, onError);
22556
+ _sipjsphone__WEBPACK_IMPORTED_MODULE_1__["default"].changeAudioOutputDevice(deviceId, onSuccess, onError, forceDeviceChange);
22505
22557
  },
22506
22558
  setPreferredCodec(codecName) {
22507
- logger.log("webrtcSIPPhone:setPreferredCodec entry");
22559
+ logger.log("webrtcSIPPhone: setPreferredCodec : ", codecName);
22508
22560
  _sipjsphone__WEBPACK_IMPORTED_MODULE_1__["default"].setPreferredCodec(codecName);
22509
22561
  },
22510
22562
  registerAudioDeviceChangeCallback(audioInputDeviceChangeCallback, audioOutputDeviceChangeCallback, onDeviceChangeCallback) {
22511
- logger.log(`webrtcSIPPhone:registerAudioDeviceChangeCallback entry`);
22563
+ logger.log("webrtcSIPPhone: registerAudioDeviceChangeCallback entry");
22512
22564
  _sipjsphone__WEBPACK_IMPORTED_MODULE_1__["default"].registerAudioDeviceChangeCallback(audioInputDeviceChangeCallback, audioOutputDeviceChangeCallback, onDeviceChangeCallback);
22513
22565
  },
22514
22566
  getLogger() {
@@ -22714,6 +22766,55 @@ const webrtcSIPPhoneEventDelegate = {
22714
22766
 
22715
22767
  /***/ }),
22716
22768
 
22769
+ /***/ "./src/api/LogManager.js":
22770
+ /*!*******************************!*\
22771
+ !*** ./src/api/LogManager.js ***!
22772
+ \*******************************/
22773
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
22774
+
22775
+ "use strict";
22776
+ __webpack_require__.r(__webpack_exports__);
22777
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
22778
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
22779
+ /* harmony export */ });
22780
+ const MAX_LOG_LINES = 1000;
22781
+ const LOG_STORAGE_KEY = 'webrtc_sdk_logs';
22782
+ const LogManager = {
22783
+ onLog(level, msg, args = []) {
22784
+ const timestamp = new Date().toISOString();
22785
+ const line = `[${timestamp}] [${level.toUpperCase()}] ${msg} ${args.map(arg => JSON.stringify(arg)).join(" ")}`.trim();
22786
+ let logs = JSON.parse(localStorage.getItem(LOG_STORAGE_KEY)) || [];
22787
+ logs.push(line);
22788
+ if (logs.length > MAX_LOG_LINES) {
22789
+ logs = logs.slice(-MAX_LOG_LINES); // rotate
22790
+ }
22791
+
22792
+ localStorage.setItem(LOG_STORAGE_KEY, JSON.stringify(logs));
22793
+ },
22794
+ getLogs() {
22795
+ return JSON.parse(localStorage.getItem(LOG_STORAGE_KEY)) || [];
22796
+ },
22797
+ downloadLogs(filename) {
22798
+ if (!filename) {
22799
+ const now = new Date();
22800
+ const formattedDate = now.toISOString().split('T')[0]; // Gets YYYY-MM-DD
22801
+ filename = `webrtc_sdk_logs_${formattedDate}.txt`;
22802
+ }
22803
+ const blob = new Blob([LogManager.getLogs().join('\n')], {
22804
+ type: 'text/plain'
22805
+ });
22806
+ const url = URL.createObjectURL(blob);
22807
+ const a = document.createElement('a');
22808
+ a.href = url;
22809
+ a.download = filename;
22810
+ a.click();
22811
+ URL.revokeObjectURL(url);
22812
+ }
22813
+ };
22814
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LogManager);
22815
+
22816
+ /***/ }),
22817
+
22717
22818
  /***/ "./src/api/callAPI/Call.js":
22718
22819
  /*!*********************************!*\
22719
22820
  !*** ./src/api/callAPI/Call.js ***!
@@ -22749,25 +22850,32 @@ function Call() {
22749
22850
  /**
22750
22851
  * When agent clicks on mute
22751
22852
  */
22752
- logger.log('mute toggle clicked');
22753
- let dummyFlag = null;
22754
- _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_1__.webrtcSIPPhone.webRTCMuteUnmute(null);
22853
+ logger.log('Call: MuteToggle');
22854
+ _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_1__.webrtcSIPPhone.webRTCMuteUnmute();
22755
22855
  };
22756
22856
  this.Mute = function () {
22757
22857
  /**
22758
22858
  * When agent clicks on mute
22759
22859
  */
22760
- logger.log('mute clicked');
22761
- let dummyFlag = true;
22762
- _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_1__.webrtcSIPPhone.webRTCMuteUnmute(dummyFlag);
22860
+ var isMicEnabled = _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_1__.webrtcSIPPhone.getMuteStatus();
22861
+ logger.log('Call: Mute: isMicEnabled: ', isMicEnabled);
22862
+ if (isMicEnabled) {
22863
+ _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_1__.webrtcSIPPhone.muteAction(true);
22864
+ } else {
22865
+ logger.log('Call: Mute: Already muted');
22866
+ }
22763
22867
  };
22764
22868
  this.UnMute = function () {
22765
22869
  /**
22766
22870
  * When agent clicks on mute
22767
22871
  */
22768
- logger.log('unmute clicked');
22769
- let dummyFlag = false;
22770
- _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_1__.webrtcSIPPhone.webRTCMuteUnmute(dummyFlag);
22872
+ var isMicEnabled = _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_1__.webrtcSIPPhone.getMuteStatus();
22873
+ logger.log('Call: UnMute: isMicEnabled: ', isMicEnabled);
22874
+ if (isMicEnabled) {
22875
+ logger.log('Call: Unmute: Already unmuted');
22876
+ } else {
22877
+ _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_1__.webrtcSIPPhone.muteAction(false);
22878
+ }
22771
22879
  };
22772
22880
  this.HoldToggle = function () {
22773
22881
  /**
@@ -23948,6 +24056,8 @@ __webpack_require__.r(__webpack_exports__);
23948
24056
  /* harmony import */ var _listeners_Callback__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Callback */ "./src/listeners/Callback.js");
23949
24057
  /* harmony import */ var _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @exotel-npm-dev/webrtc-core-sdk */ "./node_modules/@exotel-npm-dev/webrtc-core-sdk/index.js");
23950
24058
  /* harmony import */ var _api_callAPI_CallDetails__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../api/callAPI/CallDetails */ "./src/api/callAPI/CallDetails.js");
24059
+ /* harmony import */ var _api_LogManager_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../api/LogManager.js */ "./src/api/LogManager.js");
24060
+
23951
24061
 
23952
24062
 
23953
24063
 
@@ -24013,7 +24123,7 @@ function ExDelegationHandler(exClient_) {
24013
24123
  logger.log("delegationHandler: setTestingMode\n");
24014
24124
  };
24015
24125
  this.onCallStatSipJsSessionEvent = function (ev) {
24016
- logger.log("delegationHandler: onCallStatSipJsSessionEvent\n");
24126
+ logger.log("delegationHandler: onCallStatSipJsSessionEvent", ev);
24017
24127
  };
24018
24128
  this.sendWebRTCEventsToFSM = function (eventType, sipMethod) {
24019
24129
  logger.log("delegationHandler: sendWebRTCEventsToFSM\n");
@@ -24139,7 +24249,17 @@ class ExotelWebClient {
24139
24249
  //this.webRTCPhones = {};
24140
24250
 
24141
24251
  sipAccountInfo = null;
24142
- initWebrtc = (sipAccountInfo_, RegisterEventCallBack, CallListenerCallback, SessionCallback) => {
24252
+ clientSDKLoggerCallback = null;
24253
+ constructor() {
24254
+ /*
24255
+ Register the logger callback and emit the onLog event
24256
+ */
24257
+ logger.registerLoggerCallback(function (type, message, args) {
24258
+ _api_LogManager_js__WEBPACK_IMPORTED_MODULE_10__["default"].onLog(type, message, args);
24259
+ if (this.clientSDKLoggerCallback) this.clientSDKLoggerCallback("log", arg1, args);
24260
+ });
24261
+ }
24262
+ initWebrtc = (sipAccountInfo_, RegisterEventCallBack, CallListenerCallback, SessionCallback, enableAutoAudioDeviceChangeHandling = false) => {
24143
24263
  if (!this.eventListener) {
24144
24264
  this.eventListener = new _listeners_ExotelVoiceClientListener__WEBPACK_IMPORTED_MODULE_3__.ExotelVoiceClientListener();
24145
24265
  }
@@ -24152,7 +24272,8 @@ class ExotelWebClient {
24152
24272
  if (!this.call) {
24153
24273
  this.call = new _api_callAPI_Call__WEBPACK_IMPORTED_MODULE_0__.Call();
24154
24274
  }
24155
- logger.log("Exotel Client Initialised with " + JSON.stringify(sipAccountInfo_));
24275
+ sipAccountInfo_.enableAutoAudioDeviceChangeHandling = enableAutoAudioDeviceChangeHandling;
24276
+ logger.log("ExWebClient: initWebrtc: Exotel Client Initialised with " + JSON.stringify(sipAccountInfo_));
24156
24277
  this.sipAccountInfo = sipAccountInfo_;
24157
24278
  if (!this.sipAccountInfo["userName"] || !this.sipAccountInfo["sipdomain"] || !this.sipAccountInfo["port"]) {
24158
24279
  return false;
@@ -24160,22 +24281,22 @@ class ExotelWebClient {
24160
24281
  this.sipAccountInfo["sipUri"] = "wss://" + this.sipAccountInfo["userName"] + "@" + this.sipAccountInfo["sipdomain"] + ":" + this.sipAccountInfo["port"];
24161
24282
  _listeners_Callback__WEBPACK_IMPORTED_MODULE_7__.callbacks.initializeCallback(CallListenerCallback);
24162
24283
  _listeners_Callback__WEBPACK_IMPORTED_MODULE_7__.registerCallback.initializeRegisterCallback(RegisterEventCallBack);
24163
- logger.log("Initializing session callback");
24284
+ logger.log("ExWebClient: initWebrtc: Initializing session callback");
24164
24285
  _listeners_Callback__WEBPACK_IMPORTED_MODULE_7__.sessionCallback.initializeSessionCallback(SessionCallback);
24165
24286
  this.setEventListener(this.eventListener);
24166
24287
  return true;
24167
24288
  };
24168
24289
  DoRegister = () => {
24169
- logger.log("ExWebClient:DoRegister Entry");
24290
+ logger.log("ExWebClient: DoRegister: Entry");
24170
24291
  if (!this.isReadyToRegister) {
24171
- logger.warn("ExWebClient:DoRegister SDK is not ready to register");
24292
+ logger.warn("ExWebClient: DoRegister: SDK is not ready to register");
24172
24293
  return false;
24173
24294
  }
24174
24295
  (0,_api_registerAPI_RegisterListener__WEBPACK_IMPORTED_MODULE_1__.DoRegister)(this.sipAccountInfo, this);
24175
24296
  return true;
24176
24297
  };
24177
24298
  UnRegister = () => {
24178
- logger.log("ExWebClient:UnRegister Entry");
24299
+ logger.log("ExWebClient: UnRegister: Entry");
24179
24300
  (0,_api_registerAPI_RegisterListener__WEBPACK_IMPORTED_MODULE_1__.UnRegister)(this.sipAccountInfo, this);
24180
24301
  };
24181
24302
  initDiagnostics = (saveDiagnosticsCallback, keyValueSetCallback) => {
@@ -24236,7 +24357,7 @@ class ExotelWebClient {
24236
24357
  */
24237
24358
 
24238
24359
  registerEventCallback = (event, phone, param) => {
24239
- logger.log("Dialer: registerEventCallback: Received ---> " + event + 'phone....', phone + 'param....', param);
24360
+ logger.log("ExWebClient: registerEventCallback: Received ---> " + event + 'phone....', phone + 'param....', param);
24240
24361
  if (event === "connected") {
24241
24362
  /**
24242
24363
  * When registration is successful then send the phone number of the same to UI
@@ -24244,7 +24365,7 @@ class ExotelWebClient {
24244
24365
  this.eventListener.onInitializationSuccess(phone);
24245
24366
  this.registrationInProgress = false;
24246
24367
  if (this.unregisterInitiated) {
24247
- logger.log("ExWebClient:registerEventCallback unregistering due to unregisterInitiated");
24368
+ logger.log("ExWebClient: registerEventCallback: unregistering due to unregisterInitiated");
24248
24369
  this.unregisterInitiated = false;
24249
24370
  this.unregister();
24250
24371
  }
@@ -24259,7 +24380,7 @@ class ExotelWebClient {
24259
24380
  this.isReadyToRegister = true;
24260
24381
  }
24261
24382
  if (this.shouldAutoRetry) {
24262
- logger.log("ExWebClient:registerEventCallback Autoretrying");
24383
+ logger.log("ExWebClient: registerEventCallback: Autoretrying");
24263
24384
  (0,_api_registerAPI_RegisterListener__WEBPACK_IMPORTED_MODULE_1__.DoRegister)(this.sipAccountInfo, this, 5000);
24264
24385
  }
24265
24386
  } else if (event === "sent_request") {
@@ -24276,7 +24397,7 @@ class ExotelWebClient {
24276
24397
  * @param {*} param
24277
24398
  */
24278
24399
  callEventCallback = (event, phone, param) => {
24279
- logger.log("Dialer: callEventCallback: Received ---> " + event + 'param sent....' + param + 'for phone....' + phone);
24400
+ logger.log("ExWebClient: callEventCallback: Received ---> " + event + 'param sent....' + param + 'for phone....' + phone);
24280
24401
  if (event === "i_new_call") {
24281
24402
  this.callListener.onIncomingCall(param, phone);
24282
24403
  } else if (event === "connected") {
@@ -24301,7 +24422,7 @@ class ExotelWebClient {
24301
24422
  * @param {*} sipAccountInfo
24302
24423
  */
24303
24424
  unregister = sipAccountInfo => {
24304
- logger.log("ExWebClient:unregister Entry");
24425
+ logger.log("ExWebClient: unregister: Entry");
24305
24426
  this.shouldAutoRetry = false;
24306
24427
  this.unregisterInitiated = true;
24307
24428
  if (!this.registrationInProgress) {
@@ -24311,7 +24432,7 @@ class ExotelWebClient {
24311
24432
  }
24312
24433
  };
24313
24434
  webRTCStatusCallbackHandler = (msg1, arg1) => {
24314
- logger.log("webRTCStatusCallbackHandler: " + msg1 + " " + arg1);
24435
+ logger.log("ExWebClient: webRTCStatusCallbackHandler: " + msg1 + " " + arg1);
24315
24436
  };
24316
24437
 
24317
24438
  /**
@@ -24337,7 +24458,7 @@ class ExotelWebClient {
24337
24458
  'port': '',
24338
24459
  'contactHost': ''
24339
24460
  };
24340
- logger.log('Sending register for the number..', subscriberName);
24461
+ logger.log('ExWebClient: initialize: Sending register for the number..', subscriberName);
24341
24462
  fetchPublicIP(sipAccountInfo);
24342
24463
 
24343
24464
  /* Temporary till we figure out the arguments - Start */
@@ -24387,7 +24508,7 @@ class ExotelWebClient {
24387
24508
  //webRTCPhones[userName] = webRTC;
24388
24509
 
24389
24510
  /* New-Way */
24390
- _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_8__.webrtcSIPPhone.registerPhone("sipjs", delegationHandler);
24511
+ _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_8__.webrtcSIPPhone.registerPhone("sipjs", delegationHandler, sipAccountInfo.enableAutoAudioDeviceChangeHandling);
24391
24512
  _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_8__.webrtcSIPPhone.registerWebRTCClient(this.sipAccntInfo, synchronousHandler);
24392
24513
 
24393
24514
  /**
@@ -24434,24 +24555,28 @@ class ExotelWebClient {
24434
24555
  }
24435
24556
  }
24436
24557
  }).catch(function (error) {
24437
- logger.log("something went wrong during checkClientStatus ", error);
24558
+ logger.log("ExWebClient: checkClientStatus: something went wrong during checkClientStatus ", error);
24438
24559
  callback("media_permission_denied");
24439
24560
  });
24440
24561
  };
24441
- changeAudioInputDevice(deviceId, onSuccess, onError) {
24442
- logger.log(`in changeAudioInputDevice() of ExWebClient.js`);
24443
- _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_8__.webrtcSIPPhone.changeAudioInputDevice(deviceId, onSuccess, onError);
24562
+ changeAudioInputDevice(deviceId, onSuccess, onError, forceDeviceChange = false) {
24563
+ logger.log(`ExWebClient: changeAudioInputDevice: Entry`);
24564
+ _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_8__.webrtcSIPPhone.changeAudioInputDevice(deviceId, onSuccess, onError, forceDeviceChange);
24565
+ }
24566
+ changeAudioOutputDevice(deviceId, onSuccess, onError, forceDeviceChange = false) {
24567
+ logger.log(`ExWebClient: changeAudioOutputDevice: Entry`);
24568
+ _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_8__.webrtcSIPPhone.changeAudioOutputDevice(deviceId, onSuccess, onError, forceDeviceChange);
24444
24569
  }
24445
- changeAudioOutputDevice(deviceId, onSuccess, onError) {
24446
- logger.log(`in changeAudioOutputDevice() of ExWebClient.js`);
24447
- _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_8__.webrtcSIPPhone.changeAudioOutputDevice(deviceId, onSuccess, onError);
24570
+ downloadLogs() {
24571
+ logger.log(`ExWebClient: downloadLogs: Entry`);
24572
+ _api_LogManager_js__WEBPACK_IMPORTED_MODULE_10__["default"].downloadLogs();
24448
24573
  }
24449
24574
  setPreferredCodec(codecName) {
24450
- logger.log("ExWebClient:setPreferredCodec entry");
24575
+ logger.log("ExWebClient: setPreferredCodec: Entry");
24451
24576
  _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_8__.webrtcSIPPhone.setPreferredCodec(codecName);
24452
24577
  }
24453
24578
  registerLoggerCallback(callback) {
24454
- logger.registerLoggerCallback(callback);
24579
+ this.clientSDKLoggerCallback = callback;
24455
24580
  }
24456
24581
  registerAudioDeviceChangeCallback(audioInputDeviceChangeCallback, audioOutputDeviceChangeCallback, onDeviceChangeCallback) {
24457
24582
  _exotel_npm_dev_webrtc_core_sdk__WEBPACK_IMPORTED_MODULE_8__.webrtcSIPPhone.registerAudioDeviceChangeCallback(audioInputDeviceChangeCallback, audioOutputDeviceChangeCallback, onDeviceChangeCallback);