@wazo/sdk 0.37.18 → 0.37.22

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 (163) hide show
  1. package/dist/wazo-sdk.js +13 -5
  2. package/esm/__tests__/api-client.test.js +52 -9
  3. package/esm/__tests__/web-rtc-client.test.js +80 -20
  4. package/esm/api/agentd.js +27 -4
  5. package/esm/api/amid.js +27 -4
  6. package/esm/api/application.js +27 -4
  7. package/esm/api/auth.js +29 -5
  8. package/esm/api/call-logd.js +29 -6
  9. package/esm/api/calld.js +27 -4
  10. package/esm/api/chatd.js +27 -4
  11. package/esm/api/confd.js +51 -8
  12. package/esm/api/ctid-ng.js +27 -4
  13. package/esm/api/dird.js +27 -4
  14. package/esm/api/webhookd.js +27 -4
  15. package/esm/api-client.js +54 -11
  16. package/esm/checker/Checker.js +83 -21
  17. package/esm/checker/checks/aor.js +54 -11
  18. package/esm/checker/checks/api.js +54 -11
  19. package/esm/checker/checks/ice-ipv4.js +1 -1
  20. package/esm/checker/checks/index.js +84 -22
  21. package/esm/checker/checks/symmetric-nat.js +1 -1
  22. package/esm/checker/checks/wazo-websocket.js +29 -4
  23. package/esm/checker/checks/webrtc-transport.js +82 -22
  24. package/esm/checker/checks/webrtc.js +82 -22
  25. package/esm/domain/AdHocAPIConference.js +54 -11
  26. package/esm/domain/Agent.js +1 -1
  27. package/esm/domain/BadResponse.js +1 -1
  28. package/esm/domain/Call.js +1 -1
  29. package/esm/domain/CallLog.js +3 -3
  30. package/esm/domain/CallSession.js +1 -1
  31. package/esm/domain/ChatMessage.js +1 -1
  32. package/esm/domain/ChatRoom.js +1 -1
  33. package/esm/domain/Contact.js +2 -1
  34. package/esm/domain/Country.js +1 -1
  35. package/esm/domain/Device/DebugDevice.js +1 -1
  36. package/esm/domain/ExternalApp.js +1 -1
  37. package/esm/domain/Features.js +54 -10
  38. package/esm/domain/ForwardOption.js +2 -1
  39. package/esm/domain/IndirectTransfer.js +1 -1
  40. package/esm/domain/Line.js +1 -1
  41. package/esm/domain/Meeting.js +20 -3
  42. package/esm/domain/NotificationOptions.js +1 -1
  43. package/esm/domain/Phone/CTIPhone.js +55 -11
  44. package/esm/domain/Phone/WebRTCPhone.js +39 -6
  45. package/esm/domain/Profile.js +2 -1
  46. package/esm/domain/Recording.js +2 -2
  47. package/esm/domain/Relocation.js +1 -1
  48. package/esm/domain/Room.js +1 -1
  49. package/esm/domain/ServerError.js +1 -1
  50. package/esm/domain/Session.js +2 -2
  51. package/esm/domain/SipLine.js +1 -1
  52. package/esm/domain/Subscription.js +1 -1
  53. package/esm/domain/SwitchboardCall.js +1 -1
  54. package/esm/domain/Voicemail.js +1 -1
  55. package/esm/domain/__tests__/CallLog.test.js +2 -2
  56. package/esm/index.js +101 -24
  57. package/esm/lib/WazoSessionDescriptionHandler.js +28 -4
  58. package/esm/service/CallApi.js +54 -11
  59. package/esm/service/IssueReporter.js +27 -4
  60. package/esm/service/__tests__/IssueReporter.test.js +26 -3
  61. package/esm/service/getApiClient.js +55 -11
  62. package/esm/simple/Auth.js +101 -23
  63. package/esm/simple/Configuration.js +100 -23
  64. package/esm/simple/Directory.js +53 -10
  65. package/esm/simple/Phone.js +100 -23
  66. package/esm/simple/Websocket.js +30 -4
  67. package/esm/simple/index.js +100 -23
  68. package/esm/simple/room/LocalParticipant.js +113 -40
  69. package/esm/simple/room/Participant.js +112 -37
  70. package/esm/simple/room/RemoteParticipant.js +114 -41
  71. package/esm/simple/room/Room.js +113 -37
  72. package/esm/simple/room/SipRoom.js +101 -26
  73. package/esm/simple/room/Stream.js +101 -26
  74. package/esm/simple/room/__tests__/RemoteParticipant.test.js +99 -22
  75. package/esm/simple/utils.js +99 -22
  76. package/esm/utils/Emitter.js +1 -1
  77. package/esm/utils/Heartbeat.js +1 -1
  78. package/esm/utils/__tests__/api-requester.test.js +26 -3
  79. package/esm/utils/api-requester.js +28 -4
  80. package/esm/utils/compare-version.js +1 -1
  81. package/esm/utils/isMobile.js +1 -1
  82. package/esm/utils/new-from.js +1 -1
  83. package/esm/utils/once.js +1 -1
  84. package/esm/utils/update-from.js +1 -1
  85. package/esm/web-rtc-client.js +83 -22
  86. package/esm/websocket-client.js +30 -4
  87. package/lib/__tests__/api-client.test.js +61 -18
  88. package/lib/__tests__/web-rtc-client.test.js +97 -37
  89. package/lib/api/agentd.js +27 -4
  90. package/lib/api/amid.js +27 -4
  91. package/lib/api/application.js +27 -4
  92. package/lib/api/auth.js +28 -5
  93. package/lib/api/call-logd.js +34 -11
  94. package/lib/api/calld.js +30 -7
  95. package/lib/api/chatd.js +28 -5
  96. package/lib/api/confd.js +51 -8
  97. package/lib/api/ctid-ng.js +30 -7
  98. package/lib/api/dird.js +27 -4
  99. package/lib/api/webhookd.js +27 -4
  100. package/lib/api-client.js +61 -18
  101. package/lib/checker/Checker.js +100 -38
  102. package/lib/checker/checks/aor.js +61 -18
  103. package/lib/checker/checks/api.js +61 -18
  104. package/lib/checker/checks/index.js +100 -38
  105. package/lib/checker/checks/wazo-websocket.js +31 -6
  106. package/lib/checker/checks/webrtc-transport.js +97 -37
  107. package/lib/checker/checks/webrtc.js +97 -37
  108. package/lib/domain/AdHocAPIConference.js +61 -18
  109. package/lib/domain/Call.js +1 -1
  110. package/lib/domain/CallLog.js +7 -7
  111. package/lib/domain/ChatMessage.js +1 -1
  112. package/lib/domain/Contact.js +1 -1
  113. package/lib/domain/Features.js +62 -19
  114. package/lib/domain/ForwardOption.js +1 -1
  115. package/lib/domain/Meeting.js +19 -2
  116. package/lib/domain/Phone/CTIPhone.js +63 -20
  117. package/lib/domain/Phone/WebRTCPhone.js +40 -8
  118. package/lib/domain/Profile.js +1 -1
  119. package/lib/domain/Recording.js +3 -3
  120. package/lib/domain/Voicemail.js +1 -1
  121. package/lib/domain/__tests__/Call.test.js +1 -1
  122. package/lib/domain/__tests__/CallLog.test.js +13 -13
  123. package/lib/domain/__tests__/Voicemail.test.js +1 -1
  124. package/lib/index.js +120 -43
  125. package/lib/lib/WazoSessionDescriptionHandler.js +32 -9
  126. package/lib/service/CallApi.js +61 -18
  127. package/lib/service/IssueReporter.js +27 -4
  128. package/lib/service/__tests__/IssueReporter.test.js +27 -4
  129. package/lib/service/getApiClient.js +62 -19
  130. package/lib/simple/Auth.js +119 -42
  131. package/lib/simple/Configuration.js +118 -41
  132. package/lib/simple/Directory.js +61 -18
  133. package/lib/simple/Phone.js +118 -41
  134. package/lib/simple/Websocket.js +32 -6
  135. package/lib/simple/index.js +118 -41
  136. package/lib/simple/room/LocalParticipant.js +132 -59
  137. package/lib/simple/room/Participant.js +130 -55
  138. package/lib/simple/room/RemoteParticipant.js +133 -60
  139. package/lib/simple/room/Room.js +131 -56
  140. package/lib/simple/room/SipRoom.js +120 -45
  141. package/lib/simple/room/Stream.js +120 -45
  142. package/lib/simple/room/__tests__/RemoteParticipant.test.js +118 -41
  143. package/lib/simple/utils.js +118 -41
  144. package/lib/utils/Emitter.js +1 -1
  145. package/lib/utils/PhoneNumberUtil.js +2 -2
  146. package/lib/utils/__tests__/PhoneNumberUtil.test.js +2 -2
  147. package/lib/utils/__tests__/api-requester.test.js +27 -4
  148. package/lib/utils/__tests__/sdp.test.js +12 -12
  149. package/lib/utils/api-requester.js +28 -5
  150. package/lib/utils/sdp.js +10 -10
  151. package/lib/web-rtc-client.js +98 -38
  152. package/lib/websocket-client.js +33 -7
  153. package/package.json +2 -2
  154. package/src/api/confd.js +5 -2
  155. package/src/domain/CallLog.js +1 -1
  156. package/src/domain/Meeting.js +19 -2
  157. package/src/domain/Phone/WebRTCPhone.js +11 -2
  158. package/src/domain/Recording.js +1 -1
  159. package/src/service/IssueReporter.js +26 -3
  160. package/src/simple/Phone.js +5 -0
  161. package/src/types/WebSocketMessage.js +5 -1
  162. package/src/web-rtc-client.js +28 -11
  163. package/src/websocket-client.js +2 -0
@@ -1646,6 +1646,7 @@ class IssueReporter {
1646
1646
 
1647
1647
 
1648
1648
 
1649
+
1649
1650
 
1650
1651
  constructor() {
1651
1652
  addLevelsTo(this);
@@ -1657,12 +1658,17 @@ class IssueReporter {
1657
1658
  this.bufferTimeout = null;
1658
1659
  this._boundProcessBuffer = this._processBuffer.bind(this);
1659
1660
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
1661
+ this._callback = null;
1660
1662
  }
1661
1663
 
1662
1664
  init() {
1663
1665
  this._catchConsole();
1664
1666
  }
1665
1667
 
1668
+ setCallback(cb ) {
1669
+ this._callback = cb;
1670
+ }
1671
+
1666
1672
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
1667
1673
  this.remoteClientConfiguration = configuration;
1668
1674
  }
@@ -1698,6 +1704,7 @@ class IssueReporter {
1698
1704
 
1699
1705
  // Handle category label
1700
1706
  let category = null;
1707
+ let skipSendToRemote = false;
1701
1708
  let extra = {};
1702
1709
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
1703
1710
  category = args[0].split('=')[1];
@@ -1713,6 +1720,7 @@ class IssueReporter {
1713
1720
  errorMessage: lastArg.message,
1714
1721
  errorStack: lastArg.stack,
1715
1722
  errorType: lastArg.constructor.name,
1723
+ skipSendToRemote: lastArg.skipSendToRemote,
1716
1724
  };
1717
1725
  } else {
1718
1726
  extra = lastArg;
@@ -1721,7 +1729,12 @@ class IssueReporter {
1721
1729
  args.splice(1, 1);
1722
1730
  }
1723
1731
 
1724
- const date = moment__default["default"]().format('YYYY-MM-DD HH:mm:ss.SSS');
1732
+ if (extra.skipSendToRemote) {
1733
+ skipSendToRemote = true;
1734
+ delete extra.skipSendToRemote;
1735
+ }
1736
+
1737
+ const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
1725
1738
  const message = args.join(', ');
1726
1739
  let consoleMessage = message;
1727
1740
 
@@ -1741,7 +1754,13 @@ class IssueReporter {
1741
1754
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
1742
1755
  oldMethod.apply(oldMethod, [date, consoleMessage]);
1743
1756
 
1744
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
1757
+ if (this._callback) {
1758
+ this._callback(level, consoleMessage);
1759
+ }
1760
+
1761
+ if (!skipSendToRemote) {
1762
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
1763
+ }
1745
1764
  }
1746
1765
 
1747
1766
  logRequest(url , options , response , start ) {
@@ -1886,7 +1905,11 @@ class IssueReporter {
1886
1905
  },
1887
1906
  // $FlowFixMe
1888
1907
  body,
1889
- }).catch(() => {
1908
+ }).catch((e ) => {
1909
+ // $FlowFixMe
1910
+ e.skipSendToRemote = true;
1911
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
1912
+
1890
1913
  setTimeout(() => {
1891
1914
  if (isArray) {
1892
1915
  payload = payload.map(message => {
@@ -1898,7 +1921,7 @@ class IssueReporter {
1898
1921
  payload._retry = retry + 1;
1899
1922
  }
1900
1923
 
1901
- this._sendDebugToGrafana(body, retry + 1);
1924
+ this._sendDebugToGrafana(payload, retry + 1);
1902
1925
  }, 5000 + retry * 1000);
1903
1926
  });
1904
1927
  }
@@ -2616,7 +2639,8 @@ class ExternalApp {
2616
2639
 
2617
2640
 
2618
2641
 
2619
-
2642
+
2643
+
2620
2644
 
2621
2645
 
2622
2646
  class Meeting {
@@ -2628,6 +2652,7 @@ class Meeting {
2628
2652
 
2629
2653
 
2630
2654
 
2655
+
2631
2656
 
2632
2657
 
2633
2658
  static parse(plain ) {
@@ -2639,14 +2664,28 @@ class Meeting {
2639
2664
  port: plain.port,
2640
2665
  uuid: plain.uuid,
2641
2666
  number: plain.number,
2667
+ persistent: plain.persistent,
2642
2668
  });
2643
2669
  }
2644
2670
 
2671
+ static parseMany(items ) {
2672
+ return items.map(plain => Meeting.parse(plain));
2673
+ }
2674
+
2645
2675
  static newFrom(meeting ) {
2646
2676
  return newFrom(meeting, Meeting);
2647
2677
  }
2648
2678
 
2649
- constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
2679
+ constructor({
2680
+ uuid,
2681
+ name,
2682
+ guestSipAuthorization,
2683
+ ownerUuids,
2684
+ port,
2685
+ uri,
2686
+ number,
2687
+ persistent,
2688
+ } = {}) {
2650
2689
  this.guestSipAuthorization = guestSipAuthorization;
2651
2690
  this.uri = uri;
2652
2691
  this.name = name;
@@ -2654,6 +2693,7 @@ class Meeting {
2654
2693
  this.port = port;
2655
2694
  this.uuid = uuid;
2656
2695
  this.number = number;
2696
+ this.persistent = persistent;
2657
2697
 
2658
2698
  // Useful to compare instead of instanceof with minified code
2659
2699
  this.type = 'Meeting';
@@ -2731,8 +2771,11 @@ var confdMethods = (client , baseUrl ) => ({
2731
2771
  }
2732
2772
  },
2733
2773
 
2734
- createMyMeeting: (name ) =>
2735
- client.post(`${baseUrl}/users/me/meetings`, { name }).then(Meeting.parse),
2774
+ getMyMeetings: () =>
2775
+ client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
2776
+
2777
+ createMyMeeting: (name , persistent ) =>
2778
+ client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
2736
2779
 
2737
2780
  deleteMyMeeting: (meetingUuid ) =>
2738
2781
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
@@ -2834,7 +2877,7 @@ class ChatMessage {
2834
2877
  static parse(plain ) {
2835
2878
  return new ChatMessage({
2836
2879
  uuid: plain.uuid,
2837
- date: moment__default["default"](plain.created_at).toDate(),
2880
+ date: moment__default['default'](plain.created_at).toDate(),
2838
2881
  content: plain.content,
2839
2882
  alias: plain.alias,
2840
2883
  userUuid: plain.user_uuid,
@@ -2926,7 +2969,7 @@ class Voicemail {
2926
2969
  static parse(plain ) {
2927
2970
  return new Voicemail({
2928
2971
  id: plain.id,
2929
- date: moment__default["default"](plain.timestamp * 1000).toDate(),
2972
+ date: moment__default['default'](plain.timestamp * 1000).toDate(),
2930
2973
  duration: plain.duration * 1000,
2931
2974
  caller: {
2932
2975
  name: plain.caller_id_name,
@@ -3063,7 +3106,7 @@ class Call {
3063
3106
  onHold: plain.on_hold,
3064
3107
  status: plain.status,
3065
3108
  lineId: plain.line_id,
3066
- startingTime: moment__default["default"](plain.creation_time).toDate(),
3109
+ startingTime: moment__default['default'](plain.creation_time).toDate(),
3067
3110
  talkingToIds: Object.keys(plain.talking_to || {}),
3068
3111
  recording: plain.record_state === RECORD_STATE_ACTIVE,
3069
3112
  });
@@ -3543,7 +3586,7 @@ class Emitter {
3543
3586
 
3544
3587
 
3545
3588
  constructor() {
3546
- this.eventEmitter = new EventEmitter__default["default"]();
3589
+ this.eventEmitter = new EventEmitter__default['default']();
3547
3590
  }
3548
3591
 
3549
3592
  on(event , callback ) {
@@ -3588,7 +3631,7 @@ class Recording {
3588
3631
 
3589
3632
 
3590
3633
 
3591
- static parseMany(recordings ) {
3634
+ static parseMany(recordings = []) {
3592
3635
  return recordings.map(item => Recording.parse(item));
3593
3636
  }
3594
3637
 
@@ -3596,8 +3639,8 @@ class Recording {
3596
3639
  return new Recording({
3597
3640
  deleted: plain.deleted,
3598
3641
  fileName: plain.filename,
3599
- end: plain.end_time ? moment__default["default"](plain.end_time).toDate() : null,
3600
- start: moment__default["default"](plain.start_time).toDate(),
3642
+ end: plain.end_time ? moment__default['default'](plain.end_time).toDate() : null,
3643
+ start: moment__default['default'](plain.start_time).toDate(),
3601
3644
  uuid: plain.uuid,
3602
3645
  });
3603
3646
  }
@@ -3695,7 +3738,7 @@ class CallLog {
3695
3738
 
3696
3739
  static parse(plain ) {
3697
3740
  return new CallLog({
3698
- answer: plain.answer ? moment__default["default"](plain.answer).toDate() : null,
3741
+ answer: plain.answer ? moment__default['default'](plain.answer).toDate() : null,
3699
3742
  answered: plain.answered,
3700
3743
  callDirection: plain.call_direction,
3701
3744
  destination: {
@@ -3712,9 +3755,9 @@ class CallLog {
3712
3755
  },
3713
3756
  id: plain.id,
3714
3757
  duration: (plain.duration || 0) * 1000, // duration is in seconds
3715
- start: moment__default["default"](plain.start).toDate(),
3716
- end: plain.end ? moment__default["default"](plain.end).toDate() : null,
3717
- recordings: Recording.parseMany(plain.recordings),
3758
+ start: moment__default['default'](plain.start).toDate(),
3759
+ end: plain.end ? moment__default['default'](plain.end).toDate() : null,
3760
+ recordings: Recording.parseMany(plain.recordings || []),
3718
3761
  });
3719
3762
  }
3720
3763
 
@@ -5624,7 +5667,7 @@ const parseCandidate$1 = (candidate ) => {
5624
5667
  if (!candidate) {
5625
5668
  return null;
5626
5669
  }
5627
- const result = sdpParser__default["default"].parse(candidate.indexOf('a=') === 0 ? candidate : `a=${candidate}`);
5670
+ const result = sdpParser__default['default'].parse(candidate.indexOf('a=') === 0 ? candidate : `a=${candidate}`);
5628
5671
 
5629
5672
  return result.candidates ? result.candidates[0] : null;
5630
5673
  };
@@ -5638,7 +5681,7 @@ const areCandidateValid = (candidates ) =>
5638
5681
  .length > 0;
5639
5682
 
5640
5683
  const getVideoDirection = (sdp ) => {
5641
- const parsedSdp = sdpParser__default["default"].parse(sdp);
5684
+ const parsedSdp = sdpParser__default['default'].parse(sdp);
5642
5685
  const videoMedia = parsedSdp.media.find(media => media.type === 'video');
5643
5686
  if (!videoMedia) {
5644
5687
  return null;
@@ -5652,14 +5695,14 @@ const hasAnActiveVideo = (sdp ) => {
5652
5695
  return false;
5653
5696
  }
5654
5697
 
5655
- const parsedSdp = sdpParser__default["default"].parse(sdp);
5698
+ const parsedSdp = sdpParser__default['default'].parse(sdp);
5656
5699
 
5657
5700
  return !!parsedSdp.media.find(media =>
5658
5701
  media.type === 'video' && media.port > 10 && (!media.direction || media.direction !== 'inactive'));
5659
5702
  };
5660
5703
 
5661
5704
  const fixSdp = (sdp , candidates , forcePort = true) => {
5662
- const parsedSdp = sdpParser__default["default"].parse(sdp);
5705
+ const parsedSdp = sdpParser__default['default'].parse(sdp);
5663
5706
  const mainCandidate = getSrflxOrRelay(candidates)[0];
5664
5707
  const ip = mainCandidate ? mainCandidate.ip : null;
5665
5708
 
@@ -5677,7 +5720,7 @@ const fixSdp = (sdp , candidates , forcePort = true)
5677
5720
  };
5678
5721
  });
5679
5722
 
5680
- let fixed = sdpParser__default["default"].write(parsedSdp);
5723
+ let fixed = sdpParser__default['default'].write(parsedSdp);
5681
5724
 
5682
5725
  if (ip) {
5683
5726
  fixed = fixed.replace(/IN IP4 0.0.0.0/g, `IN IP4 ${ip}`);
@@ -5723,7 +5766,7 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
5723
5766
  ) {
5724
5767
  super(logger, mediaStreamFactory, sessionDescriptionHandlerConfiguration);
5725
5768
 
5726
- this.eventEmitter = new EventEmitter__default["default"]();
5769
+ this.eventEmitter = new EventEmitter__default['default']();
5727
5770
  this.isWeb = isWeb;
5728
5771
  this.session = session;
5729
5772
  }
@@ -6704,7 +6747,9 @@ class WebRTCClient extends Emitter {
6704
6747
  const inviteOptions = {
6705
6748
  requestDelegate: {
6706
6749
  onAccept: (response ) => {
6707
- session.sessionDescriptionHandler.peerConnection.sfu = conference;
6750
+ if (session.sessionDescriptionHandler.peerConnection) {
6751
+ session.sessionDescriptionHandler.peerConnection.sfu = conference;
6752
+ }
6708
6753
  this._onAccepted(session, response.session, true);
6709
6754
  },
6710
6755
  onReject: (response ) => {
@@ -7040,7 +7085,7 @@ class WebRTCClient extends Emitter {
7040
7085
  // We search for the last transceiver without `video-` in the mid (video- means remote transceiver)
7041
7086
  const transceivers = pc.getTransceivers();
7042
7087
  const transceiverIdx = lastIndexOf(transceivers, transceiver =>
7043
- transceiver.sender.track === null && transceiver.mid.indexOf('video') === -1);
7088
+ transceiver.sender.track === null && transceiver.mid && transceiver.mid.indexOf('video') === -1);
7044
7089
 
7045
7090
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
7046
7091
  } else {
@@ -7576,6 +7621,16 @@ class WebRTCClient extends Emitter {
7576
7621
  return this.hasRemoteVideo(sessionId) ? this.getRemoteStream(sessionId) : null;
7577
7622
  }
7578
7623
 
7624
+ // Useful in a react-native environment when remoteMediaStream is not updated
7625
+ getRemoteVideoStreamFromPc(sessionId ) {
7626
+ const pc = this.getPeerConnection(sessionId);
7627
+ if (!pc) {
7628
+ return null;
7629
+ }
7630
+
7631
+ return pc.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
7632
+ }
7633
+
7579
7634
  hasVideo(sessionId ) {
7580
7635
  return this.hasLocalVideo(sessionId) || this.hasRemoteVideo(sessionId);
7581
7636
  }
@@ -8086,6 +8141,7 @@ class WebRTCClient extends Emitter {
8086
8141
  session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
8087
8142
 
8088
8143
  pc.oniceconnectionstatechange = () => {
8144
+ logger$9.info('on ice connection state changed', { state: pc.iceConnectionState });
8089
8145
  if (pc.iceConnectionState === 'disconnected') {
8090
8146
  this.eventEmitter.emit(ON_DISCONNECTED$1);
8091
8147
  }
@@ -8245,7 +8301,7 @@ class WebRTCClient extends Emitter {
8245
8301
  }
8246
8302
  const sessionId = this.getSipSessionId(session);
8247
8303
 
8248
- getStats__default["default"](pc, (result ) => {
8304
+ getStats__default['default'](pc, (result ) => {
8249
8305
  const { results, internal, nomore, ...stats } = result;
8250
8306
  this.statsIntervals[sessionId] = nomore;
8251
8307
 
@@ -8354,18 +8410,22 @@ class WebRTCClient extends Emitter {
8354
8410
  });
8355
8411
 
8356
8412
  networkStats.packetsLost = packetsLost;
8357
- networkStats.audioBytesSent = audioBytesSent;
8413
+ networkStats.totalAudioBytesSent = audioBytesSent;
8414
+ networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
8415
+ networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
8358
8416
  networkStats.audioBytesReceived = audioBytesReceived;
8359
- networkStats.videoBytesSent = videoBytesSent;
8360
- networkStats.videoBytesReceived = videoBytesReceived;
8417
+ networkStats.totalVideoBytesSent = videoBytesSent;
8418
+ networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
8419
+ networkStats.totalVideoBytesReceived = videoBytesReceived;
8420
+ networkStats.videoBytesReceived = videoBytesReceived - lastVideoReceived;
8421
+ networkStats.totalTransportSent = transportSent - lastTransportSent;
8361
8422
  networkStats.transportSent = transportSent;
8362
- networkStats.transportReceived = transportReceived;
8363
-
8364
- const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
8365
- + (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
8366
- + (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
8423
+ networkStats.totalTransportReceived = transportReceived;
8424
+ networkStats.transportReceived = transportReceived - lastTransportReceived;
8367
8425
 
8368
- networkStats.bandwidth = bandwidth;
8426
+ networkStats.bandwidth = networkStats.audioBytesSent + networkStats.audioBytesReceived
8427
+ + networkStats.videoBytesSent + networkStats.videoBytesReceived + networkStats.transportReceived
8428
+ + networkStats.transportSent;
8369
8429
 
8370
8430
  this.eventEmitter.emit(ON_NETWORK_STATS$1, session, networkStats, this.sessionNetworkStats[sessionId]);
8371
8431
  this.sessionNetworkStats[sessionId].push(networkStats);
@@ -8747,7 +8807,10 @@ class WebRTCPhone extends Emitter {
8747
8807
 
8748
8808
  onCancel(message);
8749
8809
  const elsewhere = message.data.indexOf('cause=26') !== -1 && message.data.indexOf('completed elsewhere') !== -1;
8750
- this.eventEmitter.emit(ON_CALL_CANCELED, this._createCallSession(sipSession), elsewhere);
8810
+ const callSession = this._createCallSession(sipSession);
8811
+ delete this.callSessions[callSession.getId()];
8812
+
8813
+ this.eventEmitter.emit(ON_CALL_CANCELED, callSession, elsewhere);
8751
8814
  };
8752
8815
  } else if (sipSession instanceof invitation.Invitation) {
8753
8816
  console.warn('sipSession._onCancel not found, please update the wazo SDK accordingly');
@@ -8776,9 +8839,11 @@ class WebRTCPhone extends Emitter {
8776
8839
  case sessionState.SessionState.Terminated: {
8777
8840
  logger$8.info('WebRTC phone - call terminated', { sipId: sipSession.id });
8778
8841
 
8842
+ // Should be called before `_onCallTerminated` or the callCount will not decrement...
8843
+ const callSession = this._createCallSession(sipSession);
8779
8844
  const wasCurrentSession = this._onCallTerminated(sipSession);
8780
8845
 
8781
- return this.eventEmitter.emit(ON_CALL_ENDED, this._createCallSession(sipSession), wasCurrentSession);
8846
+ return this.eventEmitter.emit(ON_CALL_ENDED, callSession, wasCurrentSession);
8782
8847
  }
8783
8848
  }
8784
8849
  });
@@ -9726,6 +9791,10 @@ class WebRTCPhone extends Emitter {
9726
9791
  return callSession ? this.client.getRemoteVideoStream(callSession.sipCallId) : null;
9727
9792
  }
9728
9793
 
9794
+ getRemoteVideoStreamFromPc(callSession ) {
9795
+ return callSession ? this.client.getRemoteVideoStreamFromPc(callSession.sipCallId) : null;
9796
+ }
9797
+
9729
9798
  hasRemoteVideo(callSession ) {
9730
9799
  return callSession ? this.client.hasRemoteVideo(callSession.sipCallId) : false;
9731
9800
  }
@@ -10409,6 +10478,11 @@ class Phone extends Emitter {
10409
10478
  return this.getRemoteVideoStream(callSession);
10410
10479
  }
10411
10480
 
10481
+ // Useful in a react-native environment when remoteMediaStream is not updated
10482
+ getRemoteVideoStreamFromPc(callSession ) {
10483
+ return this.phone ? this.phone.getRemoteVideoStreamFromPc(callSession) : false;
10484
+ }
10485
+
10412
10486
  hasVideo(callSession ) {
10413
10487
  return this.phone ? this.phone.hasVideo(callSession) : false;
10414
10488
  }
@@ -10568,6 +10642,7 @@ const AGENT_PAUSED = 'agent_paused';
10568
10642
  const AGENT_UNPAUSED = 'agent_unpaused';
10569
10643
  const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
10570
10644
  const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
10645
+ const MEETING_USER_PROGRESS = 'meeting_user_progress';
10571
10646
 
10572
10647
  const BLACKLIST_EVENTS = [
10573
10648
  CHAT_MESSAGE_SENT,
@@ -10627,7 +10702,7 @@ class WebSocketClient extends Emitter {
10627
10702
 
10628
10703
  connect() {
10629
10704
  logger$6.info('connect method started', { host: this.host, token: this.token });
10630
- this.socket = new ReconnectingWebSocket__default["default"](this._getUrl.bind(this), [], this.options);
10705
+ this.socket = new ReconnectingWebSocket__default['default'](this._getUrl.bind(this), [], this.options);
10631
10706
  if (this.options.binaryType) {
10632
10707
  this.socket.binaryType = this.options.binaryType;
10633
10708
  }
@@ -10918,6 +10993,7 @@ WebSocketClient.eventLists = [
10918
10993
  AGENT_UNPAUSED,
10919
10994
  CONFERENCE_ADHOC_PARTICIPANT_LEFT,
10920
10995
  CONFERENCE_ADHOC_DELETED,
10996
+ MEETING_USER_PROGRESS,
10921
10997
  ];
10922
10998
 
10923
10999
  var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
@@ -10988,6 +11064,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
10988
11064
  AGENT_UNPAUSED: AGENT_UNPAUSED,
10989
11065
  CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
10990
11066
  CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
11067
+ MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
10991
11068
  HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
10992
11069
  'default': WebSocketClient
10993
11070
  });
@@ -11880,7 +11957,7 @@ class Room$1 extends Emitter {
11880
11957
  }
11881
11958
 
11882
11959
  _mapMsid(rawSdp ) {
11883
- const sdp = sdpParser__default["default"].parse(rawSdp);
11960
+ const sdp = sdpParser__default['default'].parse(rawSdp);
11884
11961
  const labelMsidArray = sdp.media.filter(media => !!media.label).map(({ label, msid }) => ({
11885
11962
  label: String(label),
11886
11963
  streamId: msid.split(' ')[0],
@@ -13639,4 +13716,4 @@ var Auth$1 = global.wazoAuthInstance;
13639
13716
 
13640
13717
  exports.InvalidAuthorization = InvalidAuthorization;
13641
13718
  exports.InvalidSubscription = InvalidSubscription;
13642
- exports["default"] = Auth$1;
13719
+ exports.default = Auth$1;