@wazo/sdk 0.37.22 → 0.37.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.
Files changed (113) hide show
  1. package/dist/wazo-sdk.js +5 -5
  2. package/esm/__tests__/api-client.test.js +26 -0
  3. package/esm/__tests__/web-rtc-client.test.js +40 -52
  4. package/esm/api/call-logd.js +7 -0
  5. package/esm/api/calld.js +10 -0
  6. package/esm/api/chatd.js +7 -0
  7. package/esm/api/confd.js +3 -0
  8. package/esm/api/ctid-ng.js +10 -0
  9. package/esm/api/dird.js +3 -0
  10. package/esm/api-client.js +26 -0
  11. package/esm/checker/Checker.js +40 -52
  12. package/esm/checker/checks/aor.js +26 -0
  13. package/esm/checker/checks/api.js +26 -0
  14. package/esm/checker/checks/index.js +40 -52
  15. package/esm/checker/checks/webrtc-transport.js +40 -52
  16. package/esm/checker/checks/webrtc.js +40 -52
  17. package/esm/domain/AdHocAPIConference.js +26 -0
  18. package/esm/domain/Call.js +3 -0
  19. package/esm/domain/CallLog.js +7 -0
  20. package/esm/domain/ChatMessage.js +4 -0
  21. package/esm/domain/ChatRoom.js +3 -0
  22. package/esm/domain/Contact.js +3 -0
  23. package/esm/domain/Features.js +26 -0
  24. package/esm/domain/Meeting.js +3 -0
  25. package/esm/domain/Phone/CTIPhone.js +30 -0
  26. package/esm/domain/Phone/WebRTCPhone.js +14 -12
  27. package/esm/domain/Recording.js +3 -0
  28. package/esm/domain/Voicemail.js +3 -0
  29. package/esm/domain/__tests__/Call.test.js +3 -0
  30. package/esm/domain/__tests__/CallLog.test.js +7 -0
  31. package/esm/domain/__tests__/Contact.test.js +3 -0
  32. package/esm/domain/__tests__/Voicemail.test.js +3 -0
  33. package/esm/index.js +57 -63
  34. package/esm/lib/WazoSessionDescriptionHandler.js +0 -38
  35. package/esm/service/CallApi.js +26 -0
  36. package/esm/service/getApiClient.js +26 -0
  37. package/esm/simple/Auth.js +57 -63
  38. package/esm/simple/Configuration.js +57 -63
  39. package/esm/simple/Directory.js +26 -0
  40. package/esm/simple/Phone.js +57 -63
  41. package/esm/simple/index.js +57 -63
  42. package/esm/simple/room/LocalParticipant.js +57 -63
  43. package/esm/simple/room/Participant.js +57 -63
  44. package/esm/simple/room/RemoteParticipant.js +57 -63
  45. package/esm/simple/room/Room.js +57 -63
  46. package/esm/simple/room/SipRoom.js +57 -63
  47. package/esm/simple/room/Stream.js +57 -63
  48. package/esm/simple/room/__tests__/RemoteParticipant.test.js +57 -63
  49. package/esm/simple/utils.js +57 -63
  50. package/esm/web-rtc-client.js +40 -52
  51. package/lib/__tests__/api-client.test.js +26 -0
  52. package/lib/__tests__/web-rtc-client.test.js +40 -52
  53. package/lib/api/call-logd.js +7 -0
  54. package/lib/api/calld.js +10 -0
  55. package/lib/api/chatd.js +7 -0
  56. package/lib/api/confd.js +3 -0
  57. package/lib/api/ctid-ng.js +10 -0
  58. package/lib/api/dird.js +3 -0
  59. package/lib/api-client.js +26 -0
  60. package/lib/checker/Checker.js +40 -52
  61. package/lib/checker/checks/aor.js +26 -0
  62. package/lib/checker/checks/api.js +26 -0
  63. package/lib/checker/checks/index.js +40 -52
  64. package/lib/checker/checks/webrtc-transport.js +40 -52
  65. package/lib/checker/checks/webrtc.js +40 -52
  66. package/lib/domain/AdHocAPIConference.js +26 -0
  67. package/lib/domain/Call.js +3 -0
  68. package/lib/domain/CallLog.js +7 -0
  69. package/lib/domain/ChatMessage.js +4 -0
  70. package/lib/domain/ChatRoom.js +3 -0
  71. package/lib/domain/Contact.js +3 -0
  72. package/lib/domain/Features.js +26 -0
  73. package/lib/domain/Meeting.js +3 -0
  74. package/lib/domain/Phone/CTIPhone.js +30 -0
  75. package/lib/domain/Phone/WebRTCPhone.js +14 -12
  76. package/lib/domain/Recording.js +3 -0
  77. package/lib/domain/Voicemail.js +3 -0
  78. package/lib/domain/__tests__/Call.test.js +3 -0
  79. package/lib/domain/__tests__/CallLog.test.js +7 -0
  80. package/lib/domain/__tests__/Contact.test.js +3 -0
  81. package/lib/domain/__tests__/Voicemail.test.js +3 -0
  82. package/lib/index.js +57 -63
  83. package/lib/lib/WazoSessionDescriptionHandler.js +0 -38
  84. package/lib/service/CallApi.js +26 -0
  85. package/lib/service/getApiClient.js +26 -0
  86. package/lib/simple/Auth.js +57 -63
  87. package/lib/simple/Configuration.js +57 -63
  88. package/lib/simple/Directory.js +26 -0
  89. package/lib/simple/Phone.js +57 -63
  90. package/lib/simple/index.js +57 -63
  91. package/lib/simple/room/LocalParticipant.js +57 -63
  92. package/lib/simple/room/Participant.js +57 -63
  93. package/lib/simple/room/RemoteParticipant.js +57 -63
  94. package/lib/simple/room/Room.js +57 -63
  95. package/lib/simple/room/SipRoom.js +57 -63
  96. package/lib/simple/room/Stream.js +57 -63
  97. package/lib/simple/room/__tests__/RemoteParticipant.test.js +57 -63
  98. package/lib/simple/utils.js +57 -63
  99. package/lib/web-rtc-client.js +40 -52
  100. package/package.json +1 -1
  101. package/src/domain/Call.js +3 -0
  102. package/src/domain/CallLog.js +4 -0
  103. package/src/domain/ChatMessage.js +4 -0
  104. package/src/domain/ChatRoom.js +3 -0
  105. package/src/domain/Contact.js +3 -0
  106. package/src/domain/Meeting.js +3 -0
  107. package/src/domain/Phone/CTIPhone.js +4 -0
  108. package/src/domain/Phone/Phone.js +2 -0
  109. package/src/domain/Phone/WebRTCPhone.js +14 -12
  110. package/src/domain/Recording.js +3 -0
  111. package/src/domain/Voicemail.js +3 -0
  112. package/src/lib/WazoSessionDescriptionHandler.js +1 -35
  113. package/src/web-rtc-client.js +14 -14
@@ -1560,6 +1560,9 @@ class Contact {
1560
1560
  }
1561
1561
 
1562
1562
  static parseMany(response ) {
1563
+ if (!response || !response.results) {
1564
+ return [];
1565
+ }
1563
1566
  return response.results.map(r => Contact.parse(r, response.column_types));
1564
1567
  }
1565
1568
 
@@ -2667,6 +2670,9 @@ class Meeting {
2667
2670
  }
2668
2671
 
2669
2672
  static parseMany(items ) {
2673
+ if (!items) {
2674
+ return [];
2675
+ }
2670
2676
  return items.map(plain => Meeting.parse(plain));
2671
2677
  }
2672
2678
 
@@ -2869,6 +2875,10 @@ class ChatMessage {
2869
2875
 
2870
2876
 
2871
2877
  static parseMany(plain ) {
2878
+ if (!plain || !plain.items) {
2879
+ return [];
2880
+ }
2881
+
2872
2882
  return plain.items.map(item => ChatMessage.parse(item));
2873
2883
  }
2874
2884
 
@@ -2978,6 +2988,9 @@ class Voicemail {
2978
2988
  }
2979
2989
 
2980
2990
  static parseMany(plain ) {
2991
+ if (!plain) {
2992
+ return [];
2993
+ }
2981
2994
  const plainUnread = plain.folders.filter(folder => folder.type === 'new')[0].messages;
2982
2995
  const plainRead = plain.folders.filter(folder => folder.type === 'old')[0].messages;
2983
2996
 
@@ -3087,6 +3100,9 @@ class Call {
3087
3100
 
3088
3101
 
3089
3102
  static parseMany(plain ) {
3103
+ if (!plain) {
3104
+ return [];
3105
+ }
3090
3106
  return plain.map((plainCall ) => Call.parse(plainCall));
3091
3107
  }
3092
3108
 
@@ -3630,6 +3646,9 @@ class Recording {
3630
3646
 
3631
3647
 
3632
3648
  static parseMany(recordings = []) {
3649
+ if (!recordings) {
3650
+ return [];
3651
+ }
3633
3652
  return recordings.map(item => Recording.parse(item));
3634
3653
  }
3635
3654
 
@@ -3731,6 +3750,10 @@ class CallLog {
3731
3750
  }
3732
3751
 
3733
3752
  static parseMany(plain ) {
3753
+ if (!plain || !plain.items) {
3754
+ return [];
3755
+ }
3756
+
3734
3757
  return plain.items.map(item => CallLog.parse(item));
3735
3758
  }
3736
3759
 
@@ -4300,6 +4323,10 @@ class CTIPhone extends Emitter {
4300
4323
  return false;
4301
4324
  }
4302
4325
 
4326
+ hasAVideoTrack() {
4327
+ return false;
4328
+ }
4329
+
4303
4330
  getLocalStreamForCall() {
4304
4331
  return null;
4305
4332
  }
@@ -4693,6 +4720,9 @@ class ChatRoom {
4693
4720
 
4694
4721
 
4695
4722
  static parseMany(plain ) {
4723
+ if (!plain || !plain.items) {
4724
+ return [];
4725
+ }
4696
4726
  return plain.items.map(item => ChatRoom.parse(item));
4697
4727
  }
4698
4728
 
@@ -5938,10 +5968,6 @@ const getSrflxOrRelay = (candidates ) =>
5938
5968
  candidates
5939
5969
  .filter(candidate => candidate && (candidate.type === 'srflx' || candidate.type === 'relay'));
5940
5970
 
5941
- const areCandidateValid = (candidates ) =>
5942
- getSrflxOrRelay(candidates)
5943
- .length > 0;
5944
-
5945
5971
  const getVideoDirection = (sdp ) => {
5946
5972
  const parsedSdp = sdpParser__default['default'].parse(sdp);
5947
5973
  const videoMedia = parsedSdp.media.find(media => media.type === 'video');
@@ -5994,8 +6020,6 @@ const fixSdp = (sdp , candidates , forcePort = true)
5994
6020
  /* global RTCSessionDescriptionInit, navigator */
5995
6021
 
5996
6022
  const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
5997
- const MAX_WAIT_FOR_ICE_TRIES = 20;
5998
- const WAIT_FOR_ICE_TIMEOUT = 500;
5999
6023
 
6000
6024
  // Customized mediaStreamFactory allowing to send screensharing stream directory when upgrading
6001
6025
  const wazoMediaStreamFactory = (constraints ) => {
@@ -6185,38 +6209,6 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
6185
6209
  this._peerConnection = undefined;
6186
6210
  }
6187
6211
 
6188
- async _waitForValidGatheredIce() {
6189
- let tries = 0;
6190
-
6191
- while (!areCandidateValid(this.gatheredCandidates) && tries < MAX_WAIT_FOR_ICE_TRIES) {
6192
- wazoLogger.trace('SessionDescriptionHandler._waitForValidGatheredIce, waiting for ice', {
6193
- tries,
6194
- max: MAX_WAIT_FOR_ICE_TRIES,
6195
- });
6196
-
6197
- tries++;
6198
-
6199
- // eslint-disable-next-line no-await-in-loop
6200
- await new Promise(resolve => setTimeout(resolve, WAIT_FOR_ICE_TIMEOUT));
6201
- }
6202
-
6203
- if (tries >= MAX_WAIT_FOR_ICE_TRIES) {
6204
- const errorMsg = 'No valid candidates found, can\'t answer the call';
6205
- const error = new Error(errorMsg);
6206
- wazoLogger.error(errorMsg, { tries, max: MAX_WAIT_FOR_ICE_TRIES });
6207
-
6208
- // Emit an error, because sip.js catches the exception and switch to status Terminated.
6209
- this.eventEmitter.emit('error', error);
6210
-
6211
- wazoLogger.error('No valid candidates found', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
6212
- }
6213
-
6214
- // eslint-disable-next-line
6215
- wazoLogger.trace('Found valid candidates', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
6216
-
6217
- return this.getLocalSessionDescription();
6218
- }
6219
-
6220
6212
  // Overridden to send `inactive` in conference
6221
6213
  updateDirection(options , isConference = false,
6222
6214
  audioOnly = false) {
@@ -8632,25 +8624,25 @@ class WebRTCClient extends Emitter {
8632
8624
 
8633
8625
  stats.forEach(report => {
8634
8626
  if (report.type === 'outbound-rtp' && report.kind === 'audio') {
8635
- audioBytesSent += report.bytesSent + report.headerBytesSent;
8627
+ audioBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
8636
8628
  }
8637
8629
  if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
8638
- audioBytesSent += report.bytesSent;
8630
+ audioBytesSent += Number(report.bytesSent);
8639
8631
  }
8640
8632
  if (report.type === 'outbound-rtp' && report.kind === 'video') {
8641
- videoBytesSent += report.bytesSent + report.headerBytesSent;
8633
+ videoBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
8642
8634
  }
8643
8635
  if (report.type === 'inbound-rtp' && report.kind === 'audio') {
8644
- packetsLost += report.packetsLost;
8645
- networkStats.packetsReceived = report.packetsReceived;
8646
- audioBytesReceived += report.bytesReceived + report.headerBytesReceived;
8636
+ packetsLost += Number(report.packetsLost);
8637
+ networkStats.packetsReceived = Number(report.packetsReceived);
8638
+ audioBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
8647
8639
  }
8648
8640
  if (report.type === 'inbound-rtp' && report.kind === 'video') {
8649
- videoBytesReceived += report.bytesReceived + report.headerBytesReceived;
8641
+ videoBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
8650
8642
  }
8651
8643
  if (report.type === 'outbound-rtp' && report.kind === 'video') {
8652
8644
  if ('framesPerSecond' in report) {
8653
- networkStats.framesPerSecond = report.framesPerSecond;
8645
+ networkStats.framesPerSecond = Number(report.framesPerSecond);
8654
8646
  }
8655
8647
  if ('framerateMean' in report) {
8656
8648
  // framerateMean is only available in FF
@@ -8658,16 +8650,16 @@ class WebRTCClient extends Emitter {
8658
8650
  }
8659
8651
  }
8660
8652
  if (report.type === 'remote-inbound-rtp' && report.kind === 'audio') {
8661
- packetsLost += report.packetsLost;
8662
- networkStats.roundTripTime = report.roundTripTime;
8663
- networkStats.jitter = report.jitter;
8653
+ packetsLost += Number(report.packetsLost);
8654
+ networkStats.roundTripTime = Number(report.roundTripTime);
8655
+ networkStats.jitter = Number(report.jitter);
8664
8656
  }
8665
8657
  if (report.type === 'remote-inbound-rtp' && report.kind === 'video') {
8666
- packetsLost += report.packetsLost;
8658
+ packetsLost += Number(report.packetsLost);
8667
8659
  }
8668
8660
  if (report.type === 'transport') {
8669
- transportSent += report.bytesSent;
8670
- transportReceived += report.bytesReceived;
8661
+ transportSent += Number(report.bytesSent);
8662
+ transportReceived += Number(report.bytesReceived);
8671
8663
  }
8672
8664
  });
8673
8665
 
@@ -9253,18 +9245,20 @@ class WebRTCPhone extends Emitter {
9253
9245
  screenTrack,
9254
9246
  });
9255
9247
 
9256
- screenTrack.onended = () => {
9257
- logger$7.info('WebRTC phone - on screenshare ended', {
9258
- hadVideo,
9259
- id: this.getSipSessionId(sipSession),
9260
- screenTrack,
9261
- });
9248
+ if (screenTrack) {
9249
+ screenTrack.onended = () => {
9250
+ logger$7.info('WebRTC phone - on screenshare ended', {
9251
+ hadVideo,
9252
+ id: this.getSipSessionId(sipSession),
9253
+ screenTrack,
9254
+ });
9262
9255
 
9263
- this.eventEmitter.emit(
9264
- ON_SHARE_SCREEN_ENDING,
9265
- this._createCallSession(sipSession, callSession),
9266
- );
9267
- };
9256
+ this.eventEmitter.emit(
9257
+ ON_SHARE_SCREEN_ENDING,
9258
+ this._createCallSession(sipSession, callSession),
9259
+ );
9260
+ };
9261
+ }
9268
9262
 
9269
9263
  this.currentScreenShare = {
9270
9264
  stream: screenStream,
@@ -1562,6 +1562,9 @@ class Contact {
1562
1562
  }
1563
1563
 
1564
1564
  static parseMany(response ) {
1565
+ if (!response || !response.results) {
1566
+ return [];
1567
+ }
1565
1568
  return response.results.map(r => Contact.parse(r, response.column_types));
1566
1569
  }
1567
1570
 
@@ -2669,6 +2672,9 @@ class Meeting {
2669
2672
  }
2670
2673
 
2671
2674
  static parseMany(items ) {
2675
+ if (!items) {
2676
+ return [];
2677
+ }
2672
2678
  return items.map(plain => Meeting.parse(plain));
2673
2679
  }
2674
2680
 
@@ -2871,6 +2877,10 @@ class ChatMessage {
2871
2877
 
2872
2878
 
2873
2879
  static parseMany(plain ) {
2880
+ if (!plain || !plain.items) {
2881
+ return [];
2882
+ }
2883
+
2874
2884
  return plain.items.map(item => ChatMessage.parse(item));
2875
2885
  }
2876
2886
 
@@ -2980,6 +2990,9 @@ class Voicemail {
2980
2990
  }
2981
2991
 
2982
2992
  static parseMany(plain ) {
2993
+ if (!plain) {
2994
+ return [];
2995
+ }
2983
2996
  const plainUnread = plain.folders.filter(folder => folder.type === 'new')[0].messages;
2984
2997
  const plainRead = plain.folders.filter(folder => folder.type === 'old')[0].messages;
2985
2998
 
@@ -3089,6 +3102,9 @@ class Call {
3089
3102
 
3090
3103
 
3091
3104
  static parseMany(plain ) {
3105
+ if (!plain) {
3106
+ return [];
3107
+ }
3092
3108
  return plain.map((plainCall ) => Call.parse(plainCall));
3093
3109
  }
3094
3110
 
@@ -3632,6 +3648,9 @@ class Recording {
3632
3648
 
3633
3649
 
3634
3650
  static parseMany(recordings = []) {
3651
+ if (!recordings) {
3652
+ return [];
3653
+ }
3635
3654
  return recordings.map(item => Recording.parse(item));
3636
3655
  }
3637
3656
 
@@ -3733,6 +3752,10 @@ class CallLog {
3733
3752
  }
3734
3753
 
3735
3754
  static parseMany(plain ) {
3755
+ if (!plain || !plain.items) {
3756
+ return [];
3757
+ }
3758
+
3736
3759
  return plain.items.map(item => CallLog.parse(item));
3737
3760
  }
3738
3761
 
@@ -4302,6 +4325,10 @@ class CTIPhone extends Emitter {
4302
4325
  return false;
4303
4326
  }
4304
4327
 
4328
+ hasAVideoTrack() {
4329
+ return false;
4330
+ }
4331
+
4305
4332
  getLocalStreamForCall() {
4306
4333
  return null;
4307
4334
  }
@@ -4695,6 +4722,9 @@ class ChatRoom {
4695
4722
 
4696
4723
 
4697
4724
  static parseMany(plain ) {
4725
+ if (!plain || !plain.items) {
4726
+ return [];
4727
+ }
4698
4728
  return plain.items.map(item => ChatRoom.parse(item));
4699
4729
  }
4700
4730
 
@@ -5940,10 +5970,6 @@ const getSrflxOrRelay = (candidates ) =>
5940
5970
  candidates
5941
5971
  .filter(candidate => candidate && (candidate.type === 'srflx' || candidate.type === 'relay'));
5942
5972
 
5943
- const areCandidateValid = (candidates ) =>
5944
- getSrflxOrRelay(candidates)
5945
- .length > 0;
5946
-
5947
5973
  const getVideoDirection = (sdp ) => {
5948
5974
  const parsedSdp = sdpParser__default['default'].parse(sdp);
5949
5975
  const videoMedia = parsedSdp.media.find(media => media.type === 'video');
@@ -5996,8 +6022,6 @@ const fixSdp = (sdp , candidates , forcePort = true)
5996
6022
  /* global RTCSessionDescriptionInit, navigator */
5997
6023
 
5998
6024
  const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
5999
- const MAX_WAIT_FOR_ICE_TRIES = 20;
6000
- const WAIT_FOR_ICE_TIMEOUT = 500;
6001
6025
 
6002
6026
  // Customized mediaStreamFactory allowing to send screensharing stream directory when upgrading
6003
6027
  const wazoMediaStreamFactory = (constraints ) => {
@@ -6187,38 +6211,6 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
6187
6211
  this._peerConnection = undefined;
6188
6212
  }
6189
6213
 
6190
- async _waitForValidGatheredIce() {
6191
- let tries = 0;
6192
-
6193
- while (!areCandidateValid(this.gatheredCandidates) && tries < MAX_WAIT_FOR_ICE_TRIES) {
6194
- wazoLogger.trace('SessionDescriptionHandler._waitForValidGatheredIce, waiting for ice', {
6195
- tries,
6196
- max: MAX_WAIT_FOR_ICE_TRIES,
6197
- });
6198
-
6199
- tries++;
6200
-
6201
- // eslint-disable-next-line no-await-in-loop
6202
- await new Promise(resolve => setTimeout(resolve, WAIT_FOR_ICE_TIMEOUT));
6203
- }
6204
-
6205
- if (tries >= MAX_WAIT_FOR_ICE_TRIES) {
6206
- const errorMsg = 'No valid candidates found, can\'t answer the call';
6207
- const error = new Error(errorMsg);
6208
- wazoLogger.error(errorMsg, { tries, max: MAX_WAIT_FOR_ICE_TRIES });
6209
-
6210
- // Emit an error, because sip.js catches the exception and switch to status Terminated.
6211
- this.eventEmitter.emit('error', error);
6212
-
6213
- wazoLogger.error('No valid candidates found', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
6214
- }
6215
-
6216
- // eslint-disable-next-line
6217
- wazoLogger.trace('Found valid candidates', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
6218
-
6219
- return this.getLocalSessionDescription();
6220
- }
6221
-
6222
6214
  // Overridden to send `inactive` in conference
6223
6215
  updateDirection(options , isConference = false,
6224
6216
  audioOnly = false) {
@@ -8634,25 +8626,25 @@ class WebRTCClient extends Emitter {
8634
8626
 
8635
8627
  stats.forEach(report => {
8636
8628
  if (report.type === 'outbound-rtp' && report.kind === 'audio') {
8637
- audioBytesSent += report.bytesSent + report.headerBytesSent;
8629
+ audioBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
8638
8630
  }
8639
8631
  if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
8640
- audioBytesSent += report.bytesSent;
8632
+ audioBytesSent += Number(report.bytesSent);
8641
8633
  }
8642
8634
  if (report.type === 'outbound-rtp' && report.kind === 'video') {
8643
- videoBytesSent += report.bytesSent + report.headerBytesSent;
8635
+ videoBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
8644
8636
  }
8645
8637
  if (report.type === 'inbound-rtp' && report.kind === 'audio') {
8646
- packetsLost += report.packetsLost;
8647
- networkStats.packetsReceived = report.packetsReceived;
8648
- audioBytesReceived += report.bytesReceived + report.headerBytesReceived;
8638
+ packetsLost += Number(report.packetsLost);
8639
+ networkStats.packetsReceived = Number(report.packetsReceived);
8640
+ audioBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
8649
8641
  }
8650
8642
  if (report.type === 'inbound-rtp' && report.kind === 'video') {
8651
- videoBytesReceived += report.bytesReceived + report.headerBytesReceived;
8643
+ videoBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
8652
8644
  }
8653
8645
  if (report.type === 'outbound-rtp' && report.kind === 'video') {
8654
8646
  if ('framesPerSecond' in report) {
8655
- networkStats.framesPerSecond = report.framesPerSecond;
8647
+ networkStats.framesPerSecond = Number(report.framesPerSecond);
8656
8648
  }
8657
8649
  if ('framerateMean' in report) {
8658
8650
  // framerateMean is only available in FF
@@ -8660,16 +8652,16 @@ class WebRTCClient extends Emitter {
8660
8652
  }
8661
8653
  }
8662
8654
  if (report.type === 'remote-inbound-rtp' && report.kind === 'audio') {
8663
- packetsLost += report.packetsLost;
8664
- networkStats.roundTripTime = report.roundTripTime;
8665
- networkStats.jitter = report.jitter;
8655
+ packetsLost += Number(report.packetsLost);
8656
+ networkStats.roundTripTime = Number(report.roundTripTime);
8657
+ networkStats.jitter = Number(report.jitter);
8666
8658
  }
8667
8659
  if (report.type === 'remote-inbound-rtp' && report.kind === 'video') {
8668
- packetsLost += report.packetsLost;
8660
+ packetsLost += Number(report.packetsLost);
8669
8661
  }
8670
8662
  if (report.type === 'transport') {
8671
- transportSent += report.bytesSent;
8672
- transportReceived += report.bytesReceived;
8663
+ transportSent += Number(report.bytesSent);
8664
+ transportReceived += Number(report.bytesReceived);
8673
8665
  }
8674
8666
  });
8675
8667
 
@@ -9255,18 +9247,20 @@ class WebRTCPhone extends Emitter {
9255
9247
  screenTrack,
9256
9248
  });
9257
9249
 
9258
- screenTrack.onended = () => {
9259
- logger$7.info('WebRTC phone - on screenshare ended', {
9260
- hadVideo,
9261
- id: this.getSipSessionId(sipSession),
9262
- screenTrack,
9263
- });
9250
+ if (screenTrack) {
9251
+ screenTrack.onended = () => {
9252
+ logger$7.info('WebRTC phone - on screenshare ended', {
9253
+ hadVideo,
9254
+ id: this.getSipSessionId(sipSession),
9255
+ screenTrack,
9256
+ });
9264
9257
 
9265
- this.eventEmitter.emit(
9266
- ON_SHARE_SCREEN_ENDING,
9267
- this._createCallSession(sipSession, callSession),
9268
- );
9269
- };
9258
+ this.eventEmitter.emit(
9259
+ ON_SHARE_SCREEN_ENDING,
9260
+ this._createCallSession(sipSession, callSession),
9261
+ );
9262
+ };
9263
+ }
9270
9264
 
9271
9265
  this.currentScreenShare = {
9272
9266
  stream: screenStream,