@wazo/sdk 0.37.20 → 0.37.21

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 (110) hide show
  1. package/dist/wazo-sdk.js +5 -5
  2. package/esm/__tests__/api-client.test.js +44 -5
  3. package/esm/__tests__/web-rtc-client.test.js +70 -15
  4. package/esm/api/agentd.js +25 -2
  5. package/esm/api/amid.js +25 -2
  6. package/esm/api/application.js +25 -2
  7. package/esm/api/auth.js +25 -2
  8. package/esm/api/call-logd.js +25 -2
  9. package/esm/api/calld.js +25 -2
  10. package/esm/api/chatd.js +25 -2
  11. package/esm/api/confd.js +44 -5
  12. package/esm/api/ctid-ng.js +25 -2
  13. package/esm/api/dird.js +25 -2
  14. package/esm/api/webhookd.js +25 -2
  15. package/esm/api-client.js +44 -5
  16. package/esm/checker/Checker.js +72 -15
  17. package/esm/checker/checks/aor.js +44 -5
  18. package/esm/checker/checks/api.js +44 -5
  19. package/esm/checker/checks/index.js +72 -15
  20. package/esm/checker/checks/wazo-websocket.js +27 -2
  21. package/esm/checker/checks/webrtc-transport.js +70 -15
  22. package/esm/checker/checks/webrtc.js +70 -15
  23. package/esm/domain/AdHocAPIConference.js +44 -5
  24. package/esm/domain/Features.js +44 -5
  25. package/esm/domain/Meeting.js +14 -1
  26. package/esm/domain/Phone/CTIPhone.js +44 -5
  27. package/esm/domain/Phone/WebRTCPhone.js +32 -3
  28. package/esm/index.js +85 -16
  29. package/esm/lib/WazoSessionDescriptionHandler.js +25 -2
  30. package/esm/service/CallApi.js +44 -5
  31. package/esm/service/IssueReporter.js +25 -2
  32. package/esm/service/__tests__/IssueReporter.test.js +25 -2
  33. package/esm/service/getApiClient.js +44 -5
  34. package/esm/simple/Auth.js +85 -16
  35. package/esm/simple/Configuration.js +85 -16
  36. package/esm/simple/Directory.js +44 -5
  37. package/esm/simple/Phone.js +85 -16
  38. package/esm/simple/Websocket.js +28 -2
  39. package/esm/simple/index.js +85 -16
  40. package/esm/simple/room/LocalParticipant.js +85 -16
  41. package/esm/simple/room/Participant.js +85 -16
  42. package/esm/simple/room/RemoteParticipant.js +85 -16
  43. package/esm/simple/room/Room.js +85 -16
  44. package/esm/simple/room/SipRoom.js +85 -16
  45. package/esm/simple/room/Stream.js +85 -16
  46. package/esm/simple/room/__tests__/RemoteParticipant.test.js +85 -16
  47. package/esm/simple/utils.js +85 -16
  48. package/esm/utils/__tests__/api-requester.test.js +25 -2
  49. package/esm/utils/api-requester.js +25 -2
  50. package/esm/web-rtc-client.js +70 -15
  51. package/esm/websocket-client.js +28 -3
  52. package/lib/__tests__/api-client.test.js +44 -5
  53. package/lib/__tests__/web-rtc-client.test.js +70 -15
  54. package/lib/api/agentd.js +25 -2
  55. package/lib/api/amid.js +25 -2
  56. package/lib/api/application.js +25 -2
  57. package/lib/api/auth.js +25 -2
  58. package/lib/api/call-logd.js +25 -2
  59. package/lib/api/calld.js +25 -2
  60. package/lib/api/chatd.js +25 -2
  61. package/lib/api/confd.js +44 -5
  62. package/lib/api/ctid-ng.js +25 -2
  63. package/lib/api/dird.js +25 -2
  64. package/lib/api/webhookd.js +25 -2
  65. package/lib/api-client.js +44 -5
  66. package/lib/checker/Checker.js +72 -15
  67. package/lib/checker/checks/aor.js +44 -5
  68. package/lib/checker/checks/api.js +44 -5
  69. package/lib/checker/checks/index.js +72 -15
  70. package/lib/checker/checks/wazo-websocket.js +27 -2
  71. package/lib/checker/checks/webrtc-transport.js +70 -15
  72. package/lib/checker/checks/webrtc.js +70 -15
  73. package/lib/domain/AdHocAPIConference.js +44 -5
  74. package/lib/domain/Features.js +44 -5
  75. package/lib/domain/Meeting.js +14 -1
  76. package/lib/domain/Phone/CTIPhone.js +44 -5
  77. package/lib/domain/Phone/WebRTCPhone.js +32 -3
  78. package/lib/index.js +85 -16
  79. package/lib/lib/WazoSessionDescriptionHandler.js +25 -2
  80. package/lib/service/CallApi.js +44 -5
  81. package/lib/service/IssueReporter.js +25 -2
  82. package/lib/service/__tests__/IssueReporter.test.js +25 -2
  83. package/lib/service/getApiClient.js +44 -5
  84. package/lib/simple/Auth.js +85 -16
  85. package/lib/simple/Configuration.js +85 -16
  86. package/lib/simple/Directory.js +44 -5
  87. package/lib/simple/Phone.js +85 -16
  88. package/lib/simple/Websocket.js +28 -2
  89. package/lib/simple/index.js +85 -16
  90. package/lib/simple/room/LocalParticipant.js +85 -16
  91. package/lib/simple/room/Participant.js +85 -16
  92. package/lib/simple/room/RemoteParticipant.js +85 -16
  93. package/lib/simple/room/Room.js +85 -16
  94. package/lib/simple/room/SipRoom.js +85 -16
  95. package/lib/simple/room/Stream.js +85 -16
  96. package/lib/simple/room/__tests__/RemoteParticipant.test.js +85 -16
  97. package/lib/simple/utils.js +85 -16
  98. package/lib/utils/__tests__/api-requester.test.js +25 -2
  99. package/lib/utils/api-requester.js +25 -2
  100. package/lib/web-rtc-client.js +70 -15
  101. package/lib/websocket-client.js +28 -2
  102. package/package.json +1 -1
  103. package/src/api/confd.js +5 -2
  104. package/src/domain/Meeting.js +14 -1
  105. package/src/domain/Phone/WebRTCPhone.js +7 -1
  106. package/src/service/IssueReporter.js +25 -2
  107. package/src/simple/Phone.js +5 -0
  108. package/src/types/WebSocketMessage.js +5 -1
  109. package/src/web-rtc-client.js +26 -10
  110. package/src/websocket-client.js +2 -0
@@ -129,6 +129,7 @@ class IssueReporter {
129
129
 
130
130
 
131
131
 
132
+
132
133
 
133
134
  constructor() {
134
135
  addLevelsTo(this);
@@ -140,12 +141,17 @@ class IssueReporter {
140
141
  this.bufferTimeout = null;
141
142
  this._boundProcessBuffer = this._processBuffer.bind(this);
142
143
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
144
+ this._callback = null;
143
145
  }
144
146
 
145
147
  init() {
146
148
  this._catchConsole();
147
149
  }
148
150
 
151
+ setCallback(cb ) {
152
+ this._callback = cb;
153
+ }
154
+
149
155
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
150
156
  this.remoteClientConfiguration = configuration;
151
157
  }
@@ -181,6 +187,7 @@ class IssueReporter {
181
187
 
182
188
  // Handle category label
183
189
  let category = null;
190
+ let skipSendToRemote = false;
184
191
  let extra = {};
185
192
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
186
193
  category = args[0].split('=')[1];
@@ -196,6 +203,7 @@ class IssueReporter {
196
203
  errorMessage: lastArg.message,
197
204
  errorStack: lastArg.stack,
198
205
  errorType: lastArg.constructor.name,
206
+ skipSendToRemote: lastArg.skipSendToRemote,
199
207
  };
200
208
  } else {
201
209
  extra = lastArg;
@@ -204,6 +212,11 @@ class IssueReporter {
204
212
  args.splice(1, 1);
205
213
  }
206
214
 
215
+ if (extra.skipSendToRemote) {
216
+ skipSendToRemote = true;
217
+ delete extra.skipSendToRemote;
218
+ }
219
+
207
220
  const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
208
221
  const message = args.join(', ');
209
222
  let consoleMessage = message;
@@ -224,7 +237,13 @@ class IssueReporter {
224
237
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
225
238
  oldMethod.apply(oldMethod, [date, consoleMessage]);
226
239
 
227
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
240
+ if (this._callback) {
241
+ this._callback(level, consoleMessage);
242
+ }
243
+
244
+ if (!skipSendToRemote) {
245
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
246
+ }
228
247
  }
229
248
 
230
249
  logRequest(url , options , response , start ) {
@@ -369,7 +388,11 @@ class IssueReporter {
369
388
  },
370
389
  // $FlowFixMe
371
390
  body,
372
- }).catch(() => {
391
+ }).catch((e ) => {
392
+ // $FlowFixMe
393
+ e.skipSendToRemote = true;
394
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
395
+
373
396
  setTimeout(() => {
374
397
  if (isArray) {
375
398
  payload = payload.map(message => {
@@ -586,6 +609,7 @@ const AGENT_PAUSED = 'agent_paused';
586
609
  const AGENT_UNPAUSED = 'agent_unpaused';
587
610
  const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
588
611
  const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
612
+ const MEETING_USER_PROGRESS = 'meeting_user_progress';
589
613
 
590
614
  const BLACKLIST_EVENTS = [
591
615
  CHAT_MESSAGE_SENT,
@@ -936,6 +960,7 @@ WebSocketClient.eventLists = [
936
960
  AGENT_UNPAUSED,
937
961
  CONFERENCE_ADHOC_PARTICIPANT_LEFT,
938
962
  CONFERENCE_ADHOC_DELETED,
963
+ MEETING_USER_PROGRESS,
939
964
  ];
940
965
 
941
966
  var wazoWebsocket = {
@@ -421,6 +421,7 @@ class IssueReporter {
421
421
 
422
422
 
423
423
 
424
+
424
425
 
425
426
  constructor() {
426
427
  addLevelsTo(this);
@@ -432,12 +433,17 @@ class IssueReporter {
432
433
  this.bufferTimeout = null;
433
434
  this._boundProcessBuffer = this._processBuffer.bind(this);
434
435
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
436
+ this._callback = null;
435
437
  }
436
438
 
437
439
  init() {
438
440
  this._catchConsole();
439
441
  }
440
442
 
443
+ setCallback(cb ) {
444
+ this._callback = cb;
445
+ }
446
+
441
447
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
442
448
  this.remoteClientConfiguration = configuration;
443
449
  }
@@ -473,6 +479,7 @@ class IssueReporter {
473
479
 
474
480
  // Handle category label
475
481
  let category = null;
482
+ let skipSendToRemote = false;
476
483
  let extra = {};
477
484
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
478
485
  category = args[0].split('=')[1];
@@ -488,6 +495,7 @@ class IssueReporter {
488
495
  errorMessage: lastArg.message,
489
496
  errorStack: lastArg.stack,
490
497
  errorType: lastArg.constructor.name,
498
+ skipSendToRemote: lastArg.skipSendToRemote,
491
499
  };
492
500
  } else {
493
501
  extra = lastArg;
@@ -496,6 +504,11 @@ class IssueReporter {
496
504
  args.splice(1, 1);
497
505
  }
498
506
 
507
+ if (extra.skipSendToRemote) {
508
+ skipSendToRemote = true;
509
+ delete extra.skipSendToRemote;
510
+ }
511
+
499
512
  const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
500
513
  const message = args.join(', ');
501
514
  let consoleMessage = message;
@@ -516,7 +529,13 @@ class IssueReporter {
516
529
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
517
530
  oldMethod.apply(oldMethod, [date, consoleMessage]);
518
531
 
519
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
532
+ if (this._callback) {
533
+ this._callback(level, consoleMessage);
534
+ }
535
+
536
+ if (!skipSendToRemote) {
537
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
538
+ }
520
539
  }
521
540
 
522
541
  logRequest(url , options , response , start ) {
@@ -661,7 +680,11 @@ class IssueReporter {
661
680
  },
662
681
  // $FlowFixMe
663
682
  body,
664
- }).catch(() => {
683
+ }).catch((e ) => {
684
+ // $FlowFixMe
685
+ e.skipSendToRemote = true;
686
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
687
+
665
688
  setTimeout(() => {
666
689
  if (isArray) {
667
690
  payload = payload.map(message => {
@@ -3204,11 +3227,24 @@ class Meeting {
3204
3227
  });
3205
3228
  }
3206
3229
 
3230
+ static parseMany(items ) {
3231
+ return items.map(plain => Meeting.parse(plain));
3232
+ }
3233
+
3207
3234
  static newFrom(meeting ) {
3208
3235
  return newFrom(meeting, Meeting);
3209
3236
  }
3210
3237
 
3211
- constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
3238
+ constructor({
3239
+ uuid,
3240
+ name,
3241
+ guestSipAuthorization,
3242
+ ownerUuids,
3243
+ port,
3244
+ uri,
3245
+ number,
3246
+ persistent,
3247
+ } = {}) {
3212
3248
  this.guestSipAuthorization = guestSipAuthorization;
3213
3249
  this.uri = uri;
3214
3250
  this.name = name;
@@ -3294,8 +3330,11 @@ var confdMethods = (client , baseUrl ) => ({
3294
3330
  }
3295
3331
  },
3296
3332
 
3297
- createMyMeeting: (name ) =>
3298
- client.post(`${baseUrl}/users/me/meetings`, { name }).then(Meeting.parse),
3333
+ getMyMeetings: () =>
3334
+ client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
3335
+
3336
+ createMyMeeting: (name , persistent ) =>
3337
+ client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
3299
3338
 
3300
3339
  deleteMyMeeting: (meetingUuid ) =>
3301
3340
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
@@ -5707,7 +5746,9 @@ class WebRTCClient extends Emitter {
5707
5746
  const inviteOptions = {
5708
5747
  requestDelegate: {
5709
5748
  onAccept: (response ) => {
5710
- session.sessionDescriptionHandler.peerConnection.sfu = conference;
5749
+ if (session.sessionDescriptionHandler.peerConnection) {
5750
+ session.sessionDescriptionHandler.peerConnection.sfu = conference;
5751
+ }
5711
5752
  this._onAccepted(session, response.session, true);
5712
5753
  },
5713
5754
  onReject: (response ) => {
@@ -6579,6 +6620,16 @@ class WebRTCClient extends Emitter {
6579
6620
  return this.hasRemoteVideo(sessionId) ? this.getRemoteStream(sessionId) : null;
6580
6621
  }
6581
6622
 
6623
+ // Useful in a react-native environment when remoteMediaStream is not updated
6624
+ getRemoteVideoStreamFromPc(sessionId ) {
6625
+ const pc = this.getPeerConnection(sessionId);
6626
+ if (!pc) {
6627
+ return null;
6628
+ }
6629
+
6630
+ return pc.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
6631
+ }
6632
+
6582
6633
  hasVideo(sessionId ) {
6583
6634
  return this.hasLocalVideo(sessionId) || this.hasRemoteVideo(sessionId);
6584
6635
  }
@@ -7357,18 +7408,22 @@ class WebRTCClient extends Emitter {
7357
7408
  });
7358
7409
 
7359
7410
  networkStats.packetsLost = packetsLost;
7360
- networkStats.audioBytesSent = audioBytesSent;
7411
+ networkStats.totalAudioBytesSent = audioBytesSent;
7412
+ networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
7413
+ networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
7361
7414
  networkStats.audioBytesReceived = audioBytesReceived;
7362
- networkStats.videoBytesSent = videoBytesSent;
7363
- networkStats.videoBytesReceived = videoBytesReceived;
7415
+ networkStats.totalVideoBytesSent = videoBytesSent;
7416
+ networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
7417
+ networkStats.totalVideoBytesReceived = videoBytesReceived;
7418
+ networkStats.videoBytesReceived = videoBytesReceived - lastVideoReceived;
7419
+ networkStats.totalTransportSent = transportSent - lastTransportSent;
7364
7420
  networkStats.transportSent = transportSent;
7365
- networkStats.transportReceived = transportReceived;
7366
-
7367
- const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
7368
- + (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
7369
- + (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
7421
+ networkStats.totalTransportReceived = transportReceived;
7422
+ networkStats.transportReceived = transportReceived - lastTransportReceived;
7370
7423
 
7371
- networkStats.bandwidth = bandwidth;
7424
+ networkStats.bandwidth = networkStats.audioBytesSent + networkStats.audioBytesReceived
7425
+ + networkStats.videoBytesSent + networkStats.videoBytesReceived + networkStats.transportReceived
7426
+ + networkStats.transportSent;
7372
7427
 
7373
7428
  this.eventEmitter.emit(ON_NETWORK_STATS, session, networkStats, this.sessionNetworkStats[sessionId]);
7374
7429
  this.sessionNetworkStats[sessionId].push(networkStats);
@@ -421,6 +421,7 @@ class IssueReporter {
421
421
 
422
422
 
423
423
 
424
+
424
425
 
425
426
  constructor() {
426
427
  addLevelsTo(this);
@@ -432,12 +433,17 @@ class IssueReporter {
432
433
  this.bufferTimeout = null;
433
434
  this._boundProcessBuffer = this._processBuffer.bind(this);
434
435
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
436
+ this._callback = null;
435
437
  }
436
438
 
437
439
  init() {
438
440
  this._catchConsole();
439
441
  }
440
442
 
443
+ setCallback(cb ) {
444
+ this._callback = cb;
445
+ }
446
+
441
447
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
442
448
  this.remoteClientConfiguration = configuration;
443
449
  }
@@ -473,6 +479,7 @@ class IssueReporter {
473
479
 
474
480
  // Handle category label
475
481
  let category = null;
482
+ let skipSendToRemote = false;
476
483
  let extra = {};
477
484
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
478
485
  category = args[0].split('=')[1];
@@ -488,6 +495,7 @@ class IssueReporter {
488
495
  errorMessage: lastArg.message,
489
496
  errorStack: lastArg.stack,
490
497
  errorType: lastArg.constructor.name,
498
+ skipSendToRemote: lastArg.skipSendToRemote,
491
499
  };
492
500
  } else {
493
501
  extra = lastArg;
@@ -496,6 +504,11 @@ class IssueReporter {
496
504
  args.splice(1, 1);
497
505
  }
498
506
 
507
+ if (extra.skipSendToRemote) {
508
+ skipSendToRemote = true;
509
+ delete extra.skipSendToRemote;
510
+ }
511
+
499
512
  const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
500
513
  const message = args.join(', ');
501
514
  let consoleMessage = message;
@@ -516,7 +529,13 @@ class IssueReporter {
516
529
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
517
530
  oldMethod.apply(oldMethod, [date, consoleMessage]);
518
531
 
519
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
532
+ if (this._callback) {
533
+ this._callback(level, consoleMessage);
534
+ }
535
+
536
+ if (!skipSendToRemote) {
537
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
538
+ }
520
539
  }
521
540
 
522
541
  logRequest(url , options , response , start ) {
@@ -661,7 +680,11 @@ class IssueReporter {
661
680
  },
662
681
  // $FlowFixMe
663
682
  body,
664
- }).catch(() => {
683
+ }).catch((e ) => {
684
+ // $FlowFixMe
685
+ e.skipSendToRemote = true;
686
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
687
+
665
688
  setTimeout(() => {
666
689
  if (isArray) {
667
690
  payload = payload.map(message => {
@@ -3204,11 +3227,24 @@ class Meeting {
3204
3227
  });
3205
3228
  }
3206
3229
 
3230
+ static parseMany(items ) {
3231
+ return items.map(plain => Meeting.parse(plain));
3232
+ }
3233
+
3207
3234
  static newFrom(meeting ) {
3208
3235
  return newFrom(meeting, Meeting);
3209
3236
  }
3210
3237
 
3211
- constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
3238
+ constructor({
3239
+ uuid,
3240
+ name,
3241
+ guestSipAuthorization,
3242
+ ownerUuids,
3243
+ port,
3244
+ uri,
3245
+ number,
3246
+ persistent,
3247
+ } = {}) {
3212
3248
  this.guestSipAuthorization = guestSipAuthorization;
3213
3249
  this.uri = uri;
3214
3250
  this.name = name;
@@ -3294,8 +3330,11 @@ var confdMethods = (client , baseUrl ) => ({
3294
3330
  }
3295
3331
  },
3296
3332
 
3297
- createMyMeeting: (name ) =>
3298
- client.post(`${baseUrl}/users/me/meetings`, { name }).then(Meeting.parse),
3333
+ getMyMeetings: () =>
3334
+ client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
3335
+
3336
+ createMyMeeting: (name , persistent ) =>
3337
+ client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
3299
3338
 
3300
3339
  deleteMyMeeting: (meetingUuid ) =>
3301
3340
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
@@ -5707,7 +5746,9 @@ class WebRTCClient extends Emitter {
5707
5746
  const inviteOptions = {
5708
5747
  requestDelegate: {
5709
5748
  onAccept: (response ) => {
5710
- session.sessionDescriptionHandler.peerConnection.sfu = conference;
5749
+ if (session.sessionDescriptionHandler.peerConnection) {
5750
+ session.sessionDescriptionHandler.peerConnection.sfu = conference;
5751
+ }
5711
5752
  this._onAccepted(session, response.session, true);
5712
5753
  },
5713
5754
  onReject: (response ) => {
@@ -6579,6 +6620,16 @@ class WebRTCClient extends Emitter {
6579
6620
  return this.hasRemoteVideo(sessionId) ? this.getRemoteStream(sessionId) : null;
6580
6621
  }
6581
6622
 
6623
+ // Useful in a react-native environment when remoteMediaStream is not updated
6624
+ getRemoteVideoStreamFromPc(sessionId ) {
6625
+ const pc = this.getPeerConnection(sessionId);
6626
+ if (!pc) {
6627
+ return null;
6628
+ }
6629
+
6630
+ return pc.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
6631
+ }
6632
+
6582
6633
  hasVideo(sessionId ) {
6583
6634
  return this.hasLocalVideo(sessionId) || this.hasRemoteVideo(sessionId);
6584
6635
  }
@@ -7357,18 +7408,22 @@ class WebRTCClient extends Emitter {
7357
7408
  });
7358
7409
 
7359
7410
  networkStats.packetsLost = packetsLost;
7360
- networkStats.audioBytesSent = audioBytesSent;
7411
+ networkStats.totalAudioBytesSent = audioBytesSent;
7412
+ networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
7413
+ networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
7361
7414
  networkStats.audioBytesReceived = audioBytesReceived;
7362
- networkStats.videoBytesSent = videoBytesSent;
7363
- networkStats.videoBytesReceived = videoBytesReceived;
7415
+ networkStats.totalVideoBytesSent = videoBytesSent;
7416
+ networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
7417
+ networkStats.totalVideoBytesReceived = videoBytesReceived;
7418
+ networkStats.videoBytesReceived = videoBytesReceived - lastVideoReceived;
7419
+ networkStats.totalTransportSent = transportSent - lastTransportSent;
7364
7420
  networkStats.transportSent = transportSent;
7365
- networkStats.transportReceived = transportReceived;
7366
-
7367
- const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
7368
- + (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
7369
- + (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
7421
+ networkStats.totalTransportReceived = transportReceived;
7422
+ networkStats.transportReceived = transportReceived - lastTransportReceived;
7370
7423
 
7371
- networkStats.bandwidth = bandwidth;
7424
+ networkStats.bandwidth = networkStats.audioBytesSent + networkStats.audioBytesReceived
7425
+ + networkStats.videoBytesSent + networkStats.videoBytesReceived + networkStats.transportReceived
7426
+ + networkStats.transportSent;
7372
7427
 
7373
7428
  this.eventEmitter.emit(ON_NETWORK_STATS, session, networkStats, this.sessionNetworkStats[sessionId]);
7374
7429
  this.sessionNetworkStats[sessionId].push(networkStats);
@@ -353,6 +353,7 @@ class IssueReporter {
353
353
 
354
354
 
355
355
 
356
+
356
357
 
357
358
  constructor() {
358
359
  addLevelsTo(this);
@@ -364,12 +365,17 @@ class IssueReporter {
364
365
  this.bufferTimeout = null;
365
366
  this._boundProcessBuffer = this._processBuffer.bind(this);
366
367
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
368
+ this._callback = null;
367
369
  }
368
370
 
369
371
  init() {
370
372
  this._catchConsole();
371
373
  }
372
374
 
375
+ setCallback(cb ) {
376
+ this._callback = cb;
377
+ }
378
+
373
379
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
374
380
  this.remoteClientConfiguration = configuration;
375
381
  }
@@ -405,6 +411,7 @@ class IssueReporter {
405
411
 
406
412
  // Handle category label
407
413
  let category = null;
414
+ let skipSendToRemote = false;
408
415
  let extra = {};
409
416
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
410
417
  category = args[0].split('=')[1];
@@ -420,6 +427,7 @@ class IssueReporter {
420
427
  errorMessage: lastArg.message,
421
428
  errorStack: lastArg.stack,
422
429
  errorType: lastArg.constructor.name,
430
+ skipSendToRemote: lastArg.skipSendToRemote,
423
431
  };
424
432
  } else {
425
433
  extra = lastArg;
@@ -428,6 +436,11 @@ class IssueReporter {
428
436
  args.splice(1, 1);
429
437
  }
430
438
 
439
+ if (extra.skipSendToRemote) {
440
+ skipSendToRemote = true;
441
+ delete extra.skipSendToRemote;
442
+ }
443
+
431
444
  const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
432
445
  const message = args.join(', ');
433
446
  let consoleMessage = message;
@@ -448,7 +461,13 @@ class IssueReporter {
448
461
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
449
462
  oldMethod.apply(oldMethod, [date, consoleMessage]);
450
463
 
451
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
464
+ if (this._callback) {
465
+ this._callback(level, consoleMessage);
466
+ }
467
+
468
+ if (!skipSendToRemote) {
469
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
470
+ }
452
471
  }
453
472
 
454
473
  logRequest(url , options , response , start ) {
@@ -593,7 +612,11 @@ class IssueReporter {
593
612
  },
594
613
  // $FlowFixMe
595
614
  body,
596
- }).catch(() => {
615
+ }).catch((e ) => {
616
+ // $FlowFixMe
617
+ e.skipSendToRemote = true;
618
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
619
+
597
620
  setTimeout(() => {
598
621
  if (isArray) {
599
622
  payload = payload.map(message => {
@@ -2826,11 +2849,24 @@ class Meeting {
2826
2849
  });
2827
2850
  }
2828
2851
 
2852
+ static parseMany(items ) {
2853
+ return items.map(plain => Meeting.parse(plain));
2854
+ }
2855
+
2829
2856
  static newFrom(meeting ) {
2830
2857
  return newFrom(meeting, Meeting);
2831
2858
  }
2832
2859
 
2833
- constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
2860
+ constructor({
2861
+ uuid,
2862
+ name,
2863
+ guestSipAuthorization,
2864
+ ownerUuids,
2865
+ port,
2866
+ uri,
2867
+ number,
2868
+ persistent,
2869
+ } = {}) {
2834
2870
  this.guestSipAuthorization = guestSipAuthorization;
2835
2871
  this.uri = uri;
2836
2872
  this.name = name;
@@ -2916,8 +2952,11 @@ var confdMethods = (client , baseUrl ) => ({
2916
2952
  }
2917
2953
  },
2918
2954
 
2919
- createMyMeeting: (name ) =>
2920
- client.post(`${baseUrl}/users/me/meetings`, { name }).then(Meeting.parse),
2955
+ getMyMeetings: () =>
2956
+ client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
2957
+
2958
+ createMyMeeting: (name , persistent ) =>
2959
+ client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
2921
2960
 
2922
2961
  deleteMyMeeting: (meetingUuid ) =>
2923
2962
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
@@ -138,6 +138,7 @@ class IssueReporter {
138
138
 
139
139
 
140
140
 
141
+
141
142
 
142
143
  constructor() {
143
144
  addLevelsTo(this);
@@ -149,12 +150,17 @@ class IssueReporter {
149
150
  this.bufferTimeout = null;
150
151
  this._boundProcessBuffer = this._processBuffer.bind(this);
151
152
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
153
+ this._callback = null;
152
154
  }
153
155
 
154
156
  init() {
155
157
  this._catchConsole();
156
158
  }
157
159
 
160
+ setCallback(cb ) {
161
+ this._callback = cb;
162
+ }
163
+
158
164
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
159
165
  this.remoteClientConfiguration = configuration;
160
166
  }
@@ -190,6 +196,7 @@ class IssueReporter {
190
196
 
191
197
  // Handle category label
192
198
  let category = null;
199
+ let skipSendToRemote = false;
193
200
  let extra = {};
194
201
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
195
202
  category = args[0].split('=')[1];
@@ -205,6 +212,7 @@ class IssueReporter {
205
212
  errorMessage: lastArg.message,
206
213
  errorStack: lastArg.stack,
207
214
  errorType: lastArg.constructor.name,
215
+ skipSendToRemote: lastArg.skipSendToRemote,
208
216
  };
209
217
  } else {
210
218
  extra = lastArg;
@@ -213,6 +221,11 @@ class IssueReporter {
213
221
  args.splice(1, 1);
214
222
  }
215
223
 
224
+ if (extra.skipSendToRemote) {
225
+ skipSendToRemote = true;
226
+ delete extra.skipSendToRemote;
227
+ }
228
+
216
229
  const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
217
230
  const message = args.join(', ');
218
231
  let consoleMessage = message;
@@ -233,7 +246,13 @@ class IssueReporter {
233
246
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
234
247
  oldMethod.apply(oldMethod, [date, consoleMessage]);
235
248
 
236
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
249
+ if (this._callback) {
250
+ this._callback(level, consoleMessage);
251
+ }
252
+
253
+ if (!skipSendToRemote) {
254
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
255
+ }
237
256
  }
238
257
 
239
258
  logRequest(url , options , response , start ) {
@@ -378,7 +397,11 @@ class IssueReporter {
378
397
  },
379
398
  // $FlowFixMe
380
399
  body,
381
- }).catch(() => {
400
+ }).catch((e ) => {
401
+ // $FlowFixMe
402
+ e.skipSendToRemote = true;
403
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
404
+
382
405
  setTimeout(() => {
383
406
  if (isArray) {
384
407
  payload = payload.map(message => {
@@ -2622,11 +2645,24 @@ class Meeting {
2622
2645
  });
2623
2646
  }
2624
2647
 
2648
+ static parseMany(items ) {
2649
+ return items.map(plain => Meeting.parse(plain));
2650
+ }
2651
+
2625
2652
  static newFrom(meeting ) {
2626
2653
  return newFrom(meeting, Meeting);
2627
2654
  }
2628
2655
 
2629
- constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
2656
+ constructor({
2657
+ uuid,
2658
+ name,
2659
+ guestSipAuthorization,
2660
+ ownerUuids,
2661
+ port,
2662
+ uri,
2663
+ number,
2664
+ persistent,
2665
+ } = {}) {
2630
2666
  this.guestSipAuthorization = guestSipAuthorization;
2631
2667
  this.uri = uri;
2632
2668
  this.name = name;
@@ -2712,8 +2748,11 @@ var confdMethods = (client , baseUrl ) => ({
2712
2748
  }
2713
2749
  },
2714
2750
 
2715
- createMyMeeting: (name ) =>
2716
- client.post(`${baseUrl}/users/me/meetings`, { name }).then(Meeting.parse),
2751
+ getMyMeetings: () =>
2752
+ client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
2753
+
2754
+ createMyMeeting: (name , persistent ) =>
2755
+ client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
2717
2756
 
2718
2757
  deleteMyMeeting: (meetingUuid ) =>
2719
2758
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),