@exotel-npm-dev/webrtc-client-sdk 1.0.21 → 1.0.23

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exotel-npm-dev/webrtc-client-sdk",
3
- "version": "1.0.21",
3
+ "version": "1.0.23",
4
4
  "description": "client sdk for webrtc based on webrtc core sdk",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -29,6 +29,6 @@
29
29
  "webpack-cli": "^4.10.0"
30
30
  },
31
31
  "dependencies": {
32
- "@exotel-npm-dev/webrtc-core-sdk": "^1.0.18"
32
+ "@exotel-npm-dev/webrtc-core-sdk": "^1.0.20"
33
33
  }
34
34
  }
@@ -0,0 +1,40 @@
1
+ const MAX_LOG_LINES = 1000;
2
+ const LOG_STORAGE_KEY = 'webrtc_sdk_logs';
3
+
4
+ const LogManager = {
5
+ onLog(level, msg, args = []) {
6
+ const timestamp = new Date().toISOString();
7
+ const line = `[${timestamp}] [${level.toUpperCase()}] ${msg} ${args.map(arg => JSON.stringify(arg)).join(" ")}`.trim();
8
+
9
+ let logs = JSON.parse(localStorage.getItem(LOG_STORAGE_KEY)) || [];
10
+ logs.push(line);
11
+ if (logs.length > MAX_LOG_LINES) {
12
+ logs = logs.slice(-MAX_LOG_LINES); // rotate
13
+ }
14
+
15
+ localStorage.setItem(LOG_STORAGE_KEY, JSON.stringify(logs));
16
+ },
17
+
18
+ getLogs() {
19
+ return JSON.parse(localStorage.getItem(LOG_STORAGE_KEY)) || [];
20
+ },
21
+
22
+ downloadLogs(filename) {
23
+ if (!filename) {
24
+ const now = new Date();
25
+ const formattedDate = now.toISOString().split('T')[0]; // Gets YYYY-MM-DD
26
+ filename = `webrtc_sdk_logs_${formattedDate}.txt`;
27
+ }
28
+ const blob = new Blob([LogManager.getLogs().join('\n')], { type: 'text/plain' });
29
+ const url = URL.createObjectURL(blob);
30
+
31
+ const a = document.createElement('a');
32
+ a.href = url;
33
+ a.download = filename;
34
+ a.click();
35
+ URL.revokeObjectURL(url);
36
+ },
37
+
38
+ };
39
+
40
+ export default LogManager;
@@ -24,27 +24,34 @@ export function Call() {
24
24
  /**
25
25
  * When agent clicks on mute
26
26
  */
27
- logger.log('mute toggle clicked')
28
- let dummyFlag = null;
29
- webrtcSIPPhone.webRTCMuteUnmute(null);
27
+ logger.log('Call: MuteToggle');
28
+ webrtcSIPPhone.webRTCMuteUnmute();
30
29
  }
31
30
 
32
31
  this.Mute = function () {
33
32
  /**
34
33
  * When agent clicks on mute
35
34
  */
36
- logger.log('mute clicked')
37
- let dummyFlag = true;
38
- webrtcSIPPhone.webRTCMuteUnmute(dummyFlag);
35
+ var isMicEnabled = webrtcSIPPhone.getMuteStatus();
36
+ logger.log('Call: Mute: isMicEnabled: ', isMicEnabled);
37
+ if (isMicEnabled) {
38
+ webrtcSIPPhone.muteAction(true);
39
+ } else {
40
+ logger.log('Call: Mute: Already muted');
41
+ }
39
42
  }
40
-
43
+
41
44
  this.UnMute = function () {
42
45
  /**
43
46
  * When agent clicks on mute
44
47
  */
45
- logger.log('unmute clicked')
46
- let dummyFlag = false;
47
- webrtcSIPPhone.webRTCMuteUnmute(dummyFlag);
48
+ var isMicEnabled = webrtcSIPPhone.getMuteStatus();
49
+ logger.log('Call: UnMute: isMicEnabled: ', isMicEnabled);
50
+ if (isMicEnabled) {
51
+ logger.log('Call: Unmute: Already unmuted');
52
+ } else {
53
+ webrtcSIPPhone.muteAction(false);
54
+ }
48
55
  }
49
56
 
50
57
  this.HoldToggle = function () {
@@ -12,6 +12,7 @@ import { webrtcTroubleshooterEventBus } from "./Callback";
12
12
 
13
13
  import { webrtcSIPPhone } from '@exotel-npm-dev/webrtc-core-sdk';
14
14
  import { CallDetails } from "../api/callAPI/CallDetails";
15
+ import LogManager from '../api/LogManager.js';
15
16
 
16
17
  var intervalId;
17
18
  var intervalIDMap = new Map();
@@ -67,7 +68,7 @@ export function ExDelegationHandler(exClient_) {
67
68
  }
68
69
 
69
70
  this.onCallStatSipJsSessionEvent = function (ev) {
70
- logger.log("delegationHandler: onCallStatSipJsSessionEvent\n");
71
+ logger.log("delegationHandler: onCallStatSipJsSessionEvent",ev);
71
72
  }
72
73
 
73
74
  this.sendWebRTCEventsToFSM = function (eventType, sipMethod) {
@@ -224,6 +225,21 @@ export class ExotelWebClient {
224
225
  //this.webRTCPhones = {};
225
226
 
226
227
  sipAccountInfo = null;
228
+ clientSDKLoggerCallback = null;
229
+
230
+ constructor() {
231
+ /*
232
+ Register the logger callback and emit the onLog event
233
+ */
234
+ logger.registerLoggerCallback(function (type, message, args) {
235
+
236
+ LogManager.onLog(type, message, args);
237
+ if (this.clientSDKLoggerCallback)
238
+ this.clientSDKLoggerCallback("log", arg1, args);
239
+
240
+ });
241
+ }
242
+
227
243
 
228
244
  initWebrtc = (sipAccountInfo_,
229
245
  RegisterEventCallBack, CallListenerCallback, SessionCallback) => {
@@ -244,7 +260,7 @@ export class ExotelWebClient {
244
260
  this.call = new Call();
245
261
  }
246
262
 
247
- logger.log("Exotel Client Initialised with " + JSON.stringify(sipAccountInfo_))
263
+ logger.log("ExWebClient: initWebrtc: Exotel Client Initialised with " + JSON.stringify(sipAccountInfo_))
248
264
  this.sipAccountInfo = sipAccountInfo_;
249
265
  if (!this.sipAccountInfo["userName"] || !this.sipAccountInfo["sipdomain"] || !this.sipAccountInfo["port"]) {
250
266
  return false;
@@ -253,16 +269,16 @@ export class ExotelWebClient {
253
269
 
254
270
  callbacks.initializeCallback(CallListenerCallback);
255
271
  registerCallback.initializeRegisterCallback(RegisterEventCallBack);
256
- logger.log("Initializing session callback")
272
+ logger.log("ExWebClient: initWebrtc: Initializing session callback")
257
273
  sessionCallback.initializeSessionCallback(SessionCallback);
258
274
  this.setEventListener(this.eventListener);
259
275
  return true;
260
276
  };
261
277
 
262
278
  DoRegister = () => {
263
- logger.log("ExWebClient:DoRegister Entry")
279
+ logger.log("ExWebClient: DoRegister: Entry")
264
280
  if (!this.isReadyToRegister) {
265
- logger.warn("ExWebClient:DoRegister SDK is not ready to register");
281
+ logger.warn("ExWebClient: DoRegister: SDK is not ready to register");
266
282
  return false;
267
283
  }
268
284
  DoRegisterRL(this.sipAccountInfo, this);
@@ -270,7 +286,7 @@ export class ExotelWebClient {
270
286
  };
271
287
 
272
288
  UnRegister = () => {
273
- logger.log("ExWebClient:UnRegister Entry")
289
+ logger.log("ExWebClient: UnRegister: Entry")
274
290
  UnRegisterRL(this.sipAccountInfo, this)
275
291
  };
276
292
 
@@ -343,7 +359,7 @@ export class ExotelWebClient {
343
359
 
344
360
  registerEventCallback = (event, phone, param) => {
345
361
 
346
- logger.log("Dialer: registerEventCallback: Received ---> " + event + 'phone....', phone + 'param....', param)
362
+ logger.log("ExWebClient: registerEventCallback: Received ---> " + event + 'phone....', phone + 'param....', param)
347
363
  if (event === "connected") {
348
364
  /**
349
365
  * When registration is successful then send the phone number of the same to UI
@@ -351,7 +367,7 @@ export class ExotelWebClient {
351
367
  this.eventListener.onInitializationSuccess(phone);
352
368
  this.registrationInProgress = false;
353
369
  if (this.unregisterInitiated) {
354
- logger.log("ExWebClient:registerEventCallback unregistering due to unregisterInitiated");
370
+ logger.log("ExWebClient: registerEventCallback: unregistering due to unregisterInitiated");
355
371
  this.unregisterInitiated = false;
356
372
  this.unregister();
357
373
  }
@@ -366,7 +382,7 @@ export class ExotelWebClient {
366
382
  this.isReadyToRegister = true;
367
383
  }
368
384
  if (this.shouldAutoRetry) {
369
- logger.log("ExWebClient:registerEventCallback Autoretrying");
385
+ logger.log("ExWebClient: registerEventCallback: Autoretrying");
370
386
  DoRegisterRL(this.sipAccountInfo, this, 5000);
371
387
  }
372
388
  } else if (event === "sent_request") {
@@ -383,7 +399,7 @@ export class ExotelWebClient {
383
399
  * @param {*} param
384
400
  */
385
401
  callEventCallback = (event, phone, param) => {
386
- logger.log("Dialer: callEventCallback: Received ---> " + event + 'param sent....' + param + 'for phone....' + phone)
402
+ logger.log("ExWebClient: callEventCallback: Received ---> " + event + 'param sent....' + param + 'for phone....' + phone)
387
403
  if (event === "i_new_call") {
388
404
  this.callListener.onIncomingCall(param, phone)
389
405
  } else if (event === "connected") {
@@ -408,7 +424,7 @@ export class ExotelWebClient {
408
424
  * @param {*} sipAccountInfo
409
425
  */
410
426
  unregister = (sipAccountInfo) => {
411
- logger.log("ExWebClient:unregister Entry");
427
+ logger.log("ExWebClient: unregister: Entry");
412
428
  this.shouldAutoRetry = false;
413
429
  this.unregisterInitiated = true;
414
430
  if (!this.registrationInProgress) {
@@ -420,7 +436,7 @@ export class ExotelWebClient {
420
436
 
421
437
 
422
438
  webRTCStatusCallbackHandler = (msg1, arg1) => {
423
- logger.log("webRTCStatusCallbackHandler: " + msg1 + " " + arg1)
439
+ logger.log("ExWebClient: webRTCStatusCallbackHandler: " + msg1 + " " + arg1)
424
440
  };
425
441
 
426
442
  /**
@@ -449,7 +465,7 @@ export class ExotelWebClient {
449
465
  'contactHost': ''
450
466
  }
451
467
 
452
- logger.log('Sending register for the number..', subscriberName);
468
+ logger.log('ExWebClient: initialize: Sending register for the number..', subscriberName);
453
469
 
454
470
  fetchPublicIP(sipAccountInfo);
455
471
 
@@ -557,28 +573,33 @@ export class ExotelWebClient {
557
573
  }
558
574
  })
559
575
  .catch(function (error) {
560
- logger.log("something went wrong during checkClientStatus ", error);
576
+ logger.log("ExWebClient: checkClientStatus: something went wrong during checkClientStatus ", error);
561
577
  callback("media_permission_denied");
562
578
  });
563
579
  };
564
580
 
565
581
  changeAudioInputDevice(deviceId, onSuccess, onError) {
566
- logger.log(`in changeAudioInputDevice() of ExWebClient.js`);
582
+ logger.log(`ExWebClient: changeAudioInputDevice: Entry`);
567
583
  webrtcSIPPhone.changeAudioInputDevice(deviceId, onSuccess, onError);
568
584
  }
569
585
 
570
586
  changeAudioOutputDevice(deviceId, onSuccess, onError) {
571
- logger.log(`in changeAudioOutputDevice() of ExWebClient.js`);
587
+ logger.log(`ExWebClient: changeAudioOutputDevice: Entry`);
572
588
  webrtcSIPPhone.changeAudioOutputDevice(deviceId, onSuccess, onError);
573
589
  }
574
590
 
591
+ downloadLogs() {
592
+ logger.log(`ExWebClient: downloadLogs: Entry`);
593
+ LogManager.downloadLogs();
594
+ }
595
+
575
596
  setPreferredCodec(codecName) {
576
- logger.log("ExWebClient:setPreferredCodec entry");
597
+ logger.log("ExWebClient: setPreferredCodec: Entry");
577
598
  webrtcSIPPhone.setPreferredCodec(codecName);
578
599
  }
579
600
 
580
601
  registerLoggerCallback(callback) {
581
- logger.registerLoggerCallback(callback);
602
+ this.clientSDKLoggerCallback = callback;
582
603
  }
583
604
 
584
605
  registerAudioDeviceChangeCallback(audioInputDeviceChangeCallback, audioOutputDeviceChangeCallback, onDeviceChangeCallback) {