@wazo/sdk 0.37.24 → 0.37.25

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 (94) hide show
  1. package/dist/wazo-sdk.js +6 -6
  2. package/esm/__tests__/api-client.test.js +12 -12
  3. package/esm/__tests__/web-rtc-client.test.js +120 -103
  4. package/esm/api/amid.js +1 -1
  5. package/esm/api/call-logd.js +2 -2
  6. package/esm/api/ctid-ng.js +3 -3
  7. package/esm/api/dird.js +1 -1
  8. package/esm/api/webhookd.js +1 -1
  9. package/esm/api-client.js +12 -12
  10. package/esm/checker/Checker.js +145 -128
  11. package/esm/checker/checks/aor.js +12 -12
  12. package/esm/checker/checks/api.js +12 -12
  13. package/esm/checker/checks/index.js +135 -118
  14. package/esm/checker/checks/wazo-websocket.js +15 -15
  15. package/esm/checker/checks/webrtc-transport.js +120 -103
  16. package/esm/checker/checks/webrtc.js +120 -103
  17. package/esm/domain/AdHocAPIConference.js +12 -12
  18. package/esm/domain/CallLog.js +1 -1
  19. package/esm/domain/Contact.js +1 -1
  20. package/esm/domain/Features.js +12 -12
  21. package/esm/domain/Phone/CTIPhone.js +26 -26
  22. package/esm/domain/Phone/WebRTCPhone.js +87 -86
  23. package/esm/domain/__tests__/CallLog.test.js +1 -1
  24. package/esm/domain/__tests__/Contact.test.js +1 -1
  25. package/esm/index.js +356 -338
  26. package/esm/lib/WazoSessionDescriptionHandler.js +1 -1
  27. package/esm/service/CallApi.js +12 -12
  28. package/esm/service/IssueReporter.js +1 -1
  29. package/esm/service/__tests__/IssueReporter.test.js +1 -1
  30. package/esm/service/getApiClient.js +12 -12
  31. package/esm/simple/Auth.js +346 -328
  32. package/esm/simple/Configuration.js +346 -328
  33. package/esm/simple/Directory.js +12 -12
  34. package/esm/simple/Phone.js +346 -328
  35. package/esm/simple/Websocket.js +17 -17
  36. package/esm/simple/index.js +350 -332
  37. package/esm/simple/room/LocalParticipant.js +350 -332
  38. package/esm/simple/room/Participant.js +350 -332
  39. package/esm/simple/room/RemoteParticipant.js +350 -332
  40. package/esm/simple/room/Room.js +351 -333
  41. package/esm/simple/room/SipRoom.js +350 -332
  42. package/esm/simple/room/Stream.js +350 -332
  43. package/esm/simple/room/__tests__/RemoteParticipant.test.js +350 -332
  44. package/esm/simple/utils.js +350 -332
  45. package/esm/web-rtc-client.js +120 -103
  46. package/esm/websocket-client.js +15 -15
  47. package/lib/__tests__/api-client.test.js +12 -12
  48. package/lib/__tests__/web-rtc-client.test.js +120 -103
  49. package/lib/api/amid.js +1 -1
  50. package/lib/api/call-logd.js +2 -2
  51. package/lib/api/ctid-ng.js +3 -3
  52. package/lib/api/dird.js +1 -1
  53. package/lib/api/webhookd.js +1 -1
  54. package/lib/api-client.js +12 -12
  55. package/lib/checker/Checker.js +145 -128
  56. package/lib/checker/checks/aor.js +12 -12
  57. package/lib/checker/checks/api.js +12 -12
  58. package/lib/checker/checks/index.js +135 -118
  59. package/lib/checker/checks/wazo-websocket.js +15 -15
  60. package/lib/checker/checks/webrtc-transport.js +120 -103
  61. package/lib/checker/checks/webrtc.js +120 -103
  62. package/lib/domain/AdHocAPIConference.js +12 -12
  63. package/lib/domain/CallLog.js +1 -1
  64. package/lib/domain/Contact.js +1 -1
  65. package/lib/domain/Features.js +12 -12
  66. package/lib/domain/Phone/CTIPhone.js +26 -26
  67. package/lib/domain/Phone/WebRTCPhone.js +87 -86
  68. package/lib/domain/__tests__/CallLog.test.js +1 -1
  69. package/lib/domain/__tests__/Contact.test.js +1 -1
  70. package/lib/index.js +356 -338
  71. package/lib/lib/WazoSessionDescriptionHandler.js +1 -1
  72. package/lib/service/CallApi.js +12 -12
  73. package/lib/service/IssueReporter.js +1 -1
  74. package/lib/service/__tests__/IssueReporter.test.js +1 -1
  75. package/lib/service/getApiClient.js +12 -12
  76. package/lib/simple/Auth.js +346 -328
  77. package/lib/simple/Configuration.js +346 -328
  78. package/lib/simple/Directory.js +12 -12
  79. package/lib/simple/Phone.js +346 -328
  80. package/lib/simple/Websocket.js +17 -17
  81. package/lib/simple/index.js +350 -332
  82. package/lib/simple/room/LocalParticipant.js +350 -332
  83. package/lib/simple/room/Participant.js +350 -332
  84. package/lib/simple/room/RemoteParticipant.js +350 -332
  85. package/lib/simple/room/Room.js +351 -333
  86. package/lib/simple/room/SipRoom.js +350 -332
  87. package/lib/simple/room/Stream.js +350 -332
  88. package/lib/simple/room/__tests__/RemoteParticipant.test.js +350 -332
  89. package/lib/simple/utils.js +350 -332
  90. package/lib/web-rtc-client.js +120 -103
  91. package/lib/websocket-client.js +15 -15
  92. package/package.json +1 -1
  93. package/src/domain/Phone/WebRTCPhone.js +3 -2
  94. package/src/web-rtc-client.js +27 -10
@@ -45,7 +45,7 @@ const isMobile = () => typeof navigator !== 'undefined' && navigator.product ===
45
45
 
46
46
  /* */
47
47
 
48
- const logger = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
48
+ IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
49
49
 
50
50
  // Use a function here to be able to mock it in tests
51
51
  const realFetch = () => {
@@ -621,7 +621,7 @@ const BLACKLIST_EVENTS = [
621
621
  ];
622
622
 
623
623
  const HEARTBEAT_ENGINE_VERSION = '20.09';
624
- const logger$1 = IssueReporter$1.loggerFor('wazo-ws');
624
+ const logger = IssueReporter$1.loggerFor('wazo-ws');
625
625
  const messageLogger = IssueReporter$1.loggerFor('wazo-ws-message');
626
626
 
627
627
  class WebSocketClient extends Emitter {
@@ -670,19 +670,19 @@ class WebSocketClient extends Emitter {
670
670
  }
671
671
 
672
672
  connect() {
673
- logger$1.info('connect method started', { host: this.host, token: this.token });
673
+ logger.info('connect method started', { host: this.host, token: this.token });
674
674
  this.socket = new ReconnectingWebSocket__default['default'](this._getUrl.bind(this), [], this.options);
675
675
  if (this.options.binaryType) {
676
676
  this.socket.binaryType = this.options.binaryType;
677
677
  }
678
678
 
679
679
  this.socket.onopen = () => {
680
- logger$1.info('on Wazo WS open', { method: 'connect', host: this.host });
680
+ logger.info('on Wazo WS open', { method: 'connect', host: this.host });
681
681
  this.eventEmitter.emit(SOCKET_EVENTS.ON_OPEN);
682
682
  };
683
683
 
684
684
  this.socket.onerror = event => {
685
- logger$1.error('on Wazo WS error', event.target);
685
+ logger.error('on Wazo WS error', event.target);
686
686
  this.eventEmitter.emit(SOCKET_EVENTS.ON_ERROR, event);
687
687
  };
688
688
 
@@ -712,7 +712,7 @@ class WebSocketClient extends Emitter {
712
712
 
713
713
  this.socket.onclose = event => {
714
714
  // Can't be converted to JSON (circular structure)
715
- logger$1.info('on Wazo WS close', {
715
+ logger.info('on Wazo WS close', {
716
716
  reason: event.reason,
717
717
  code: event.code,
718
718
  readyState: event.target.readyState,
@@ -730,12 +730,12 @@ class WebSocketClient extends Emitter {
730
730
  };
731
731
 
732
732
  this.socket.onerror = event => {
733
- logger$1.info('Wazo WS error', { message: event.message, code: event.code, readyState: event.target.readyState });
733
+ logger.info('Wazo WS error', { message: event.message, code: event.code, readyState: event.target.readyState });
734
734
  };
735
735
  }
736
736
 
737
737
  close(force = false) {
738
- logger$1.info('Wazo WS close', { socket: !!this.socket, host: this.host, token: this.token });
738
+ logger.info('Wazo WS close', { socket: !!this.socket, host: this.host, token: this.token });
739
739
 
740
740
  if (!this.socket) {
741
741
  return;
@@ -753,7 +753,7 @@ class WebSocketClient extends Emitter {
753
753
 
754
754
  updateToken(token ) {
755
755
  this.token = token;
756
- logger$1.info('Wazo WS updating token', { url: this._getUrl(), token, socket: !!this.socket });
756
+ logger.info('Wazo WS updating token', { url: this._getUrl(), token, socket: !!this.socket });
757
757
 
758
758
  if (this.socket) {
759
759
  // If still connected, send the token to the WS
@@ -771,7 +771,7 @@ class WebSocketClient extends Emitter {
771
771
  }
772
772
 
773
773
  startHeartbeat() {
774
- logger$1.info('Wazo WS start heartbeat', { host: this.host, token: this.token });
774
+ logger.info('Wazo WS start heartbeat', { host: this.host, token: this.token });
775
775
 
776
776
  if (!this.socket) {
777
777
  this.heartbeat.stop();
@@ -785,7 +785,7 @@ class WebSocketClient extends Emitter {
785
785
  }
786
786
 
787
787
  stopHeartbeat() {
788
- logger$1.info('Wazo WS stop heartbeat', { host: this.host, token: this.token });
788
+ logger.info('Wazo WS stop heartbeat', { host: this.host, token: this.token });
789
789
 
790
790
  this.heartbeat.stop();
791
791
  }
@@ -815,7 +815,7 @@ class WebSocketClient extends Emitter {
815
815
  }
816
816
 
817
817
  reconnect(reason ) {
818
- logger$1.info('Wazo WS reconnect', { reason, socket: !!this.socket, host: this.host, token: this.token });
818
+ logger.info('Wazo WS reconnect', { reason, socket: !!this.socket, host: this.host, token: this.token });
819
819
  if (!this.socket) {
820
820
  return;
821
821
  }
@@ -871,7 +871,7 @@ class WebSocketClient extends Emitter {
871
871
  this.close();
872
872
  }
873
873
  const url = `wss://${this.host || ''}/api/websocketd/?token=${this.token || ''}&version=${this.version}`;
874
- logger$1.log('Wazo WS url computed to reconnect', { url });
874
+ logger.log('Wazo WS url computed to reconnect', { url });
875
875
 
876
876
  return url;
877
877
  }
@@ -879,12 +879,12 @@ class WebSocketClient extends Emitter {
879
879
  _onHeartbeat(message ) {
880
880
  if (message.payload === 'pong') {
881
881
  this.heartbeat.onHeartbeat();
882
- logger$1.log('on heartbeat received from Wazo WS');
882
+ logger.log('on heartbeat received from Wazo WS');
883
883
  }
884
884
  }
885
885
 
886
886
  async _onHeartbeatTimeout() {
887
- logger$1.log('heartbeat timed out', { host: this.host, token: this.token });
887
+ logger.log('heartbeat timed out', { host: this.host, token: this.token });
888
888
 
889
889
  this.close();
890
890
  this.eventEmitter.emit(SOCKET_EVENTS.ON_CLOSE, new Error('Websocket ping failure.'));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wazo/sdk",
3
- "version": "0.37.24",
3
+ "version": "0.37.25",
4
4
  "description": "Wazo's JavaScript Software Development Kit.",
5
5
  "main": "dist/wazo-sdk.js",
6
6
  "author": "Wazo (http://wazo.io)",
@@ -203,6 +203,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
203
203
  constraints,
204
204
  audioOnly,
205
205
  conference,
206
+ iceRestart,
206
207
  });
207
208
 
208
209
  if (!sipSession) {
@@ -614,7 +615,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
614
615
  }
615
616
 
616
617
  _onCallAccepted(sipSession: Session, cameraEnabled: boolean): CallSession {
617
- logger.info('WebRTC phone - on call accepted', { sipId: sipSession.id, cameraEnabled });
618
+ logger.info('WebRTC phone - on call accepted', { sipId: sipSession.id, cameraEnabled });
618
619
 
619
620
  const callSession = this._createAcceptedCallSession(sipSession, cameraEnabled);
620
621
  this.currentSipSession = sipSession;
@@ -1126,7 +1127,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
1126
1127
  // @TODO: line is not used here
1127
1128
  async makeCall(number: string, line: any, cameraEnabled?: boolean,
1128
1129
  audioOnly: boolean = false, conference: boolean = false): Promise<?CallSession> {
1129
- logger.info('make WebRTC call', { number, lineId: line ? line.id : null, cameraEnabled });
1130
+ logger.info('make WebRTC call', { number, lineId: line ? line.id : null, cameraEnabled, audioOnly, conference });
1130
1131
  if (!number) {
1131
1132
  return Promise.resolve(null);
1132
1133
  }
@@ -453,7 +453,7 @@ export default class WebRTCClient extends Emitter {
453
453
  }
454
454
 
455
455
  call(number: string, enableVideo?: boolean, audioOnly: boolean = false, conference: boolean = false): Session {
456
- logger.info('sdk webrtc creating call', { number, enableVideo, audioOnly });
456
+ logger.info('sdk webrtc creating call', { number, enableVideo, audioOnly, conference });
457
457
  const inviterOptions: Object = {
458
458
  sessionDescriptionHandlerOptionsReInvite: {
459
459
  conference,
@@ -1529,6 +1529,7 @@ export default class WebRTCClient extends Emitter {
1529
1529
  const screenSharing = constraints && 'screen' in constraints ? constraints.screen : false;
1530
1530
  const isDesktop = constraints && 'desktop' in constraints ? constraints.desktop : false;
1531
1531
  const withAudio = constraints && 'audio' in constraints ? constraints.audio : true;
1532
+ const mandatoryVideo = constraints && typeof constraints.video === 'object' ? constraints.video.mandatory : {};
1532
1533
 
1533
1534
  logger.info('Retrieving media a configuration', { enableVideo, screenSharing, isDesktop, withAudio, constraints });
1534
1535
 
@@ -1536,7 +1537,8 @@ export default class WebRTCClient extends Emitter {
1536
1537
  constraints: {
1537
1538
  // Exact constraint are not supported with `getDisplayMedia` and we must have a video=false in desktop screenshare
1538
1539
  audio: screenSharing ? !isDesktop : (withAudio ? this._getAudioConstraints() : false),
1539
- video: screenSharing ? (isDesktop ? ({ mandatory: { chromeMediaSource: 'desktop' } }) : { cursor: 'always' })
1540
+ video: screenSharing ? (isDesktop
1541
+ ? ({ mandatory: { chromeMediaSource: 'desktop', ...(mandatoryVideo || {}) } }) : { cursor: 'always' })
1540
1542
  : this._getVideoConstraints(enableVideo),
1541
1543
  screen: screenSharing,
1542
1544
  desktop: isDesktop,
@@ -1871,12 +1873,14 @@ export default class WebRTCClient extends Emitter {
1871
1873
 
1872
1874
  session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
1873
1875
 
1874
- pc.oniceconnectionstatechange = () => {
1875
- logger.info('on ice connection state changed', { state: pc.iceConnectionState });
1876
- if (pc.iceConnectionState === 'disconnected') {
1877
- this.eventEmitter.emit(ON_DISCONNECTED);
1878
- }
1879
- };
1876
+ if (pc) {
1877
+ pc.oniceconnectionstatechange = () => {
1878
+ logger.info('on ice connection state changed', { state: pc.iceConnectionState });
1879
+ if (pc.iceConnectionState === 'disconnected') {
1880
+ this.eventEmitter.emit(ON_DISCONNECTED);
1881
+ }
1882
+ };
1883
+ }
1880
1884
 
1881
1885
  if (withEvent) {
1882
1886
  this.eventEmitter.emit(ACCEPTED, session, sessionDialog);
@@ -2086,13 +2090,17 @@ export default class WebRTCClient extends Emitter {
2086
2090
  const nbStats = this.sessionNetworkStats[sessionId].length;
2087
2091
  const lastNetworkStats = this.sessionNetworkStats[sessionId][nbStats - 1];
2088
2092
  const lastAudioSent = lastNetworkStats ? lastNetworkStats.audioBytesSent : 0;
2093
+ const lastAudioContentSent = lastNetworkStats ? lastNetworkStats.audioContentSent : 0;
2089
2094
  const lastVideoSent = lastNetworkStats ? lastNetworkStats.videoBytesSent : 0;
2090
2095
  const lastAudioReceived = lastNetworkStats ? lastNetworkStats.audioBytesReceived : 0;
2096
+ const lastAudioContentReceived = lastNetworkStats ? lastNetworkStats.audioContentReceived : 0;
2091
2097
  const lastVideoReceived = lastNetworkStats ? lastNetworkStats.videoBytesReceived : 0;
2092
2098
  const lastTransportSent = lastNetworkStats ? lastNetworkStats.transportSent : 0;
2093
2099
  const lastTransportReceived = lastNetworkStats ? lastNetworkStats.transportReceived : 0;
2094
- let audioBytesSent = 0;
2095
- let audioBytesReceived = 0;
2100
+ let audioBytesSent = 0; // content + header
2101
+ let audioBytesReceived = 0; // content + header
2102
+ let audioContentSent = 0; // useful to detect blank call
2103
+ let audioContentReceived = 0;
2096
2104
  let videoBytesSent = 0;
2097
2105
  let videoBytesReceived = 0;
2098
2106
  let transportSent = 0;
@@ -2102,6 +2110,7 @@ export default class WebRTCClient extends Emitter {
2102
2110
  stats.forEach(report => {
2103
2111
  if (report.type === 'outbound-rtp' && report.kind === 'audio') {
2104
2112
  audioBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
2113
+ audioContentSent += Number(report.bytesSent);
2105
2114
  }
2106
2115
  if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
2107
2116
  audioBytesSent += Number(report.bytesSent);
@@ -2113,6 +2122,7 @@ export default class WebRTCClient extends Emitter {
2113
2122
  packetsLost += Number(report.packetsLost);
2114
2123
  networkStats.packetsReceived = Number(report.packetsReceived);
2115
2124
  audioBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
2125
+ audioContentReceived += Number(report.bytesReceived);
2116
2126
  }
2117
2127
  if (report.type === 'inbound-rtp' && report.kind === 'video') {
2118
2128
  videoBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
@@ -2141,10 +2151,17 @@ export default class WebRTCClient extends Emitter {
2141
2151
  });
2142
2152
 
2143
2153
  networkStats.packetsLost = packetsLost;
2154
+
2144
2155
  networkStats.totalAudioBytesSent = audioBytesSent;
2145
2156
  networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
2146
2157
  networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
2147
2158
  networkStats.audioBytesReceived = audioBytesReceived;
2159
+
2160
+ networkStats.totalAudioContentSent = audioContentSent;
2161
+ networkStats.audioContentSent = audioContentSent - lastAudioContentSent;
2162
+ networkStats.totalAudioBytesReceived = audioContentReceived - lastAudioContentReceived;
2163
+ networkStats.audioContentReceived = audioContentReceived;
2164
+
2148
2165
  networkStats.totalVideoBytesSent = videoBytesSent;
2149
2166
  networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
2150
2167
  networkStats.totalVideoBytesReceived = videoBytesReceived;