@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
@@ -148,6 +148,7 @@ class IssueReporter {
148
148
 
149
149
 
150
150
 
151
+
151
152
 
152
153
  constructor() {
153
154
  addLevelsTo(this);
@@ -159,12 +160,17 @@ class IssueReporter {
159
160
  this.bufferTimeout = null;
160
161
  this._boundProcessBuffer = this._processBuffer.bind(this);
161
162
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
163
+ this._callback = null;
162
164
  }
163
165
 
164
166
  init() {
165
167
  this._catchConsole();
166
168
  }
167
169
 
170
+ setCallback(cb ) {
171
+ this._callback = cb;
172
+ }
173
+
168
174
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
169
175
  this.remoteClientConfiguration = configuration;
170
176
  }
@@ -200,6 +206,7 @@ class IssueReporter {
200
206
 
201
207
  // Handle category label
202
208
  let category = null;
209
+ let skipSendToRemote = false;
203
210
  let extra = {};
204
211
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
205
212
  category = args[0].split('=')[1];
@@ -215,6 +222,7 @@ class IssueReporter {
215
222
  errorMessage: lastArg.message,
216
223
  errorStack: lastArg.stack,
217
224
  errorType: lastArg.constructor.name,
225
+ skipSendToRemote: lastArg.skipSendToRemote,
218
226
  };
219
227
  } else {
220
228
  extra = lastArg;
@@ -223,6 +231,11 @@ class IssueReporter {
223
231
  args.splice(1, 1);
224
232
  }
225
233
 
234
+ if (extra.skipSendToRemote) {
235
+ skipSendToRemote = true;
236
+ delete extra.skipSendToRemote;
237
+ }
238
+
226
239
  const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
227
240
  const message = args.join(', ');
228
241
  let consoleMessage = message;
@@ -243,7 +256,13 @@ class IssueReporter {
243
256
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
244
257
  oldMethod.apply(oldMethod, [date, consoleMessage]);
245
258
 
246
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
259
+ if (this._callback) {
260
+ this._callback(level, consoleMessage);
261
+ }
262
+
263
+ if (!skipSendToRemote) {
264
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
265
+ }
247
266
  }
248
267
 
249
268
  logRequest(url , options , response , start ) {
@@ -388,7 +407,11 @@ class IssueReporter {
388
407
  },
389
408
  // $FlowFixMe
390
409
  body,
391
- }).catch(() => {
410
+ }).catch((e ) => {
411
+ // $FlowFixMe
412
+ e.skipSendToRemote = true;
413
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
414
+
392
415
  setTimeout(() => {
393
416
  if (isArray) {
394
417
  payload = payload.map(message => {
@@ -400,7 +423,7 @@ class IssueReporter {
400
423
  payload._retry = retry + 1;
401
424
  }
402
425
 
403
- this._sendDebugToGrafana(body, retry + 1);
426
+ this._sendDebugToGrafana(payload, retry + 1);
404
427
  }, 5000 + retry * 1000);
405
428
  });
406
429
  }
@@ -2603,7 +2626,8 @@ class ExternalApp {
2603
2626
 
2604
2627
 
2605
2628
 
2606
-
2629
+
2630
+
2607
2631
 
2608
2632
 
2609
2633
  class Meeting {
@@ -2615,6 +2639,7 @@ class Meeting {
2615
2639
 
2616
2640
 
2617
2641
 
2642
+
2618
2643
 
2619
2644
 
2620
2645
  static parse(plain ) {
@@ -2626,14 +2651,28 @@ class Meeting {
2626
2651
  port: plain.port,
2627
2652
  uuid: plain.uuid,
2628
2653
  number: plain.number,
2654
+ persistent: plain.persistent,
2629
2655
  });
2630
2656
  }
2631
2657
 
2658
+ static parseMany(items ) {
2659
+ return items.map(plain => Meeting.parse(plain));
2660
+ }
2661
+
2632
2662
  static newFrom(meeting ) {
2633
2663
  return newFrom(meeting, Meeting);
2634
2664
  }
2635
2665
 
2636
- constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
2666
+ constructor({
2667
+ uuid,
2668
+ name,
2669
+ guestSipAuthorization,
2670
+ ownerUuids,
2671
+ port,
2672
+ uri,
2673
+ number,
2674
+ persistent,
2675
+ } = {}) {
2637
2676
  this.guestSipAuthorization = guestSipAuthorization;
2638
2677
  this.uri = uri;
2639
2678
  this.name = name;
@@ -2641,6 +2680,7 @@ class Meeting {
2641
2680
  this.port = port;
2642
2681
  this.uuid = uuid;
2643
2682
  this.number = number;
2683
+ this.persistent = persistent;
2644
2684
 
2645
2685
  // Useful to compare instead of instanceof with minified code
2646
2686
  this.type = 'Meeting';
@@ -2718,8 +2758,11 @@ var confdMethods = (client , baseUrl ) => ({
2718
2758
  }
2719
2759
  },
2720
2760
 
2721
- createMyMeeting: (name ) =>
2722
- client.post(`${baseUrl}/users/me/meetings`, { name }).then(Meeting.parse),
2761
+ getMyMeetings: () =>
2762
+ client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
2763
+
2764
+ createMyMeeting: (name , persistent ) =>
2765
+ client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
2723
2766
 
2724
2767
  deleteMyMeeting: (meetingUuid ) =>
2725
2768
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
@@ -3230,7 +3273,7 @@ class Recording {
3230
3273
 
3231
3274
 
3232
3275
 
3233
- static parseMany(recordings ) {
3276
+ static parseMany(recordings = []) {
3234
3277
  return recordings.map(item => Recording.parse(item));
3235
3278
  }
3236
3279
 
@@ -3356,7 +3399,7 @@ class CallLog {
3356
3399
  duration: (plain.duration || 0) * 1000, // duration is in seconds
3357
3400
  start: moment(plain.start).toDate(),
3358
3401
  end: plain.end ? moment(plain.end).toDate() : null,
3359
- recordings: Recording.parseMany(plain.recordings),
3402
+ recordings: Recording.parseMany(plain.recordings || []),
3360
3403
  });
3361
3404
  }
3362
3405
 
@@ -4899,6 +4942,7 @@ const AGENT_PAUSED = 'agent_paused';
4899
4942
  const AGENT_UNPAUSED = 'agent_unpaused';
4900
4943
  const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
4901
4944
  const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
4945
+ const MEETING_USER_PROGRESS = 'meeting_user_progress';
4902
4946
 
4903
4947
  const BLACKLIST_EVENTS = [
4904
4948
  CHAT_MESSAGE_SENT,
@@ -5249,6 +5293,7 @@ WebSocketClient.eventLists = [
5249
5293
  AGENT_UNPAUSED,
5250
5294
  CONFERENCE_ADHOC_PARTICIPANT_LEFT,
5251
5295
  CONFERENCE_ADHOC_DELETED,
5296
+ MEETING_USER_PROGRESS,
5252
5297
  ];
5253
5298
 
5254
5299
  var wazoWebsocket = {
@@ -6277,7 +6322,9 @@ class WebRTCClient extends Emitter {
6277
6322
  const inviteOptions = {
6278
6323
  requestDelegate: {
6279
6324
  onAccept: (response ) => {
6280
- session.sessionDescriptionHandler.peerConnection.sfu = conference;
6325
+ if (session.sessionDescriptionHandler.peerConnection) {
6326
+ session.sessionDescriptionHandler.peerConnection.sfu = conference;
6327
+ }
6281
6328
  this._onAccepted(session, response.session, true);
6282
6329
  },
6283
6330
  onReject: (response ) => {
@@ -6613,7 +6660,7 @@ class WebRTCClient extends Emitter {
6613
6660
  // We search for the last transceiver without `video-` in the mid (video- means remote transceiver)
6614
6661
  const transceivers = pc.getTransceivers();
6615
6662
  const transceiverIdx = lastIndexOf(transceivers, transceiver =>
6616
- transceiver.sender.track === null && transceiver.mid.indexOf('video') === -1);
6663
+ transceiver.sender.track === null && transceiver.mid && transceiver.mid.indexOf('video') === -1);
6617
6664
 
6618
6665
  videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
6619
6666
  } else {
@@ -7149,6 +7196,16 @@ class WebRTCClient extends Emitter {
7149
7196
  return this.hasRemoteVideo(sessionId) ? this.getRemoteStream(sessionId) : null;
7150
7197
  }
7151
7198
 
7199
+ // Useful in a react-native environment when remoteMediaStream is not updated
7200
+ getRemoteVideoStreamFromPc(sessionId ) {
7201
+ const pc = this.getPeerConnection(sessionId);
7202
+ if (!pc) {
7203
+ return null;
7204
+ }
7205
+
7206
+ return pc.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
7207
+ }
7208
+
7152
7209
  hasVideo(sessionId ) {
7153
7210
  return this.hasLocalVideo(sessionId) || this.hasRemoteVideo(sessionId);
7154
7211
  }
@@ -7659,6 +7716,7 @@ class WebRTCClient extends Emitter {
7659
7716
  session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
7660
7717
 
7661
7718
  pc.oniceconnectionstatechange = () => {
7719
+ logger$1.info('on ice connection state changed', { state: pc.iceConnectionState });
7662
7720
  if (pc.iceConnectionState === 'disconnected') {
7663
7721
  this.eventEmitter.emit(ON_DISCONNECTED);
7664
7722
  }
@@ -7927,18 +7985,22 @@ class WebRTCClient extends Emitter {
7927
7985
  });
7928
7986
 
7929
7987
  networkStats.packetsLost = packetsLost;
7930
- networkStats.audioBytesSent = audioBytesSent;
7988
+ networkStats.totalAudioBytesSent = audioBytesSent;
7989
+ networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
7990
+ networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
7931
7991
  networkStats.audioBytesReceived = audioBytesReceived;
7932
- networkStats.videoBytesSent = videoBytesSent;
7933
- networkStats.videoBytesReceived = videoBytesReceived;
7992
+ networkStats.totalVideoBytesSent = videoBytesSent;
7993
+ networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
7994
+ networkStats.totalVideoBytesReceived = videoBytesReceived;
7995
+ networkStats.videoBytesReceived = videoBytesReceived - lastVideoReceived;
7996
+ networkStats.totalTransportSent = transportSent - lastTransportSent;
7934
7997
  networkStats.transportSent = transportSent;
7935
- networkStats.transportReceived = transportReceived;
7936
-
7937
- const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
7938
- + (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
7939
- + (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
7998
+ networkStats.totalTransportReceived = transportReceived;
7999
+ networkStats.transportReceived = transportReceived - lastTransportReceived;
7940
8000
 
7941
- networkStats.bandwidth = bandwidth;
8001
+ networkStats.bandwidth = networkStats.audioBytesSent + networkStats.audioBytesReceived
8002
+ + networkStats.videoBytesSent + networkStats.videoBytesReceived + networkStats.transportReceived
8003
+ + networkStats.transportSent;
7942
8004
 
7943
8005
  this.eventEmitter.emit(ON_NETWORK_STATS, session, networkStats, this.sessionNetworkStats[sessionId]);
7944
8006
  this.sessionNetworkStats[sessionId].push(networkStats);
@@ -8282,4 +8344,4 @@ class Checker {
8282
8344
  }
8283
8345
  }
8284
8346
 
8285
- export { Checker as default };
8347
+ export default Checker;
@@ -1,6 +1,6 @@
1
1
  import { Base64 } from 'js-base64';
2
2
  import moment from 'moment';
3
- import { KEYUTIL, jws, b64utoutf8 } from 'jsrsasign';
3
+ import { jws, b64utoutf8, KEYUTIL } from 'jsrsasign';
4
4
  import 'sip.js/lib/api/session-state';
5
5
  import 'events';
6
6
  import { jsonToGraphQLQuery } from 'json-to-graphql-query/lib/jsonToGraphQLQuery';
@@ -130,6 +130,7 @@ class IssueReporter {
130
130
 
131
131
 
132
132
 
133
+
133
134
 
134
135
  constructor() {
135
136
  addLevelsTo(this);
@@ -141,12 +142,17 @@ class IssueReporter {
141
142
  this.bufferTimeout = null;
142
143
  this._boundProcessBuffer = this._processBuffer.bind(this);
143
144
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
145
+ this._callback = null;
144
146
  }
145
147
 
146
148
  init() {
147
149
  this._catchConsole();
148
150
  }
149
151
 
152
+ setCallback(cb ) {
153
+ this._callback = cb;
154
+ }
155
+
150
156
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
151
157
  this.remoteClientConfiguration = configuration;
152
158
  }
@@ -182,6 +188,7 @@ class IssueReporter {
182
188
 
183
189
  // Handle category label
184
190
  let category = null;
191
+ let skipSendToRemote = false;
185
192
  let extra = {};
186
193
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
187
194
  category = args[0].split('=')[1];
@@ -197,6 +204,7 @@ class IssueReporter {
197
204
  errorMessage: lastArg.message,
198
205
  errorStack: lastArg.stack,
199
206
  errorType: lastArg.constructor.name,
207
+ skipSendToRemote: lastArg.skipSendToRemote,
200
208
  };
201
209
  } else {
202
210
  extra = lastArg;
@@ -205,6 +213,11 @@ class IssueReporter {
205
213
  args.splice(1, 1);
206
214
  }
207
215
 
216
+ if (extra.skipSendToRemote) {
217
+ skipSendToRemote = true;
218
+ delete extra.skipSendToRemote;
219
+ }
220
+
208
221
  const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
209
222
  const message = args.join(', ');
210
223
  let consoleMessage = message;
@@ -225,7 +238,13 @@ class IssueReporter {
225
238
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
226
239
  oldMethod.apply(oldMethod, [date, consoleMessage]);
227
240
 
228
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
241
+ if (this._callback) {
242
+ this._callback(level, consoleMessage);
243
+ }
244
+
245
+ if (!skipSendToRemote) {
246
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
247
+ }
229
248
  }
230
249
 
231
250
  logRequest(url , options , response , start ) {
@@ -370,7 +389,11 @@ class IssueReporter {
370
389
  },
371
390
  // $FlowFixMe
372
391
  body,
373
- }).catch(() => {
392
+ }).catch((e ) => {
393
+ // $FlowFixMe
394
+ e.skipSendToRemote = true;
395
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
396
+
374
397
  setTimeout(() => {
375
398
  if (isArray) {
376
399
  payload = payload.map(message => {
@@ -382,7 +405,7 @@ class IssueReporter {
382
405
  payload._retry = retry + 1;
383
406
  }
384
407
 
385
- this._sendDebugToGrafana(body, retry + 1);
408
+ this._sendDebugToGrafana(payload, retry + 1);
386
409
  }, 5000 + retry * 1000);
387
410
  });
388
411
  }
@@ -2585,7 +2608,8 @@ class ExternalApp {
2585
2608
 
2586
2609
 
2587
2610
 
2588
-
2611
+
2612
+
2589
2613
 
2590
2614
 
2591
2615
  class Meeting {
@@ -2597,6 +2621,7 @@ class Meeting {
2597
2621
 
2598
2622
 
2599
2623
 
2624
+
2600
2625
 
2601
2626
 
2602
2627
  static parse(plain ) {
@@ -2608,14 +2633,28 @@ class Meeting {
2608
2633
  port: plain.port,
2609
2634
  uuid: plain.uuid,
2610
2635
  number: plain.number,
2636
+ persistent: plain.persistent,
2611
2637
  });
2612
2638
  }
2613
2639
 
2640
+ static parseMany(items ) {
2641
+ return items.map(plain => Meeting.parse(plain));
2642
+ }
2643
+
2614
2644
  static newFrom(meeting ) {
2615
2645
  return newFrom(meeting, Meeting);
2616
2646
  }
2617
2647
 
2618
- constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
2648
+ constructor({
2649
+ uuid,
2650
+ name,
2651
+ guestSipAuthorization,
2652
+ ownerUuids,
2653
+ port,
2654
+ uri,
2655
+ number,
2656
+ persistent,
2657
+ } = {}) {
2619
2658
  this.guestSipAuthorization = guestSipAuthorization;
2620
2659
  this.uri = uri;
2621
2660
  this.name = name;
@@ -2623,6 +2662,7 @@ class Meeting {
2623
2662
  this.port = port;
2624
2663
  this.uuid = uuid;
2625
2664
  this.number = number;
2665
+ this.persistent = persistent;
2626
2666
 
2627
2667
  // Useful to compare instead of instanceof with minified code
2628
2668
  this.type = 'Meeting';
@@ -2700,8 +2740,11 @@ var confdMethods = (client , baseUrl ) => ({
2700
2740
  }
2701
2741
  },
2702
2742
 
2703
- createMyMeeting: (name ) =>
2704
- client.post(`${baseUrl}/users/me/meetings`, { name }).then(Meeting.parse),
2743
+ getMyMeetings: () =>
2744
+ client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
2745
+
2746
+ createMyMeeting: (name , persistent ) =>
2747
+ client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
2705
2748
 
2706
2749
  deleteMyMeeting: (meetingUuid ) =>
2707
2750
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
@@ -3186,7 +3229,7 @@ class Recording {
3186
3229
 
3187
3230
 
3188
3231
 
3189
- static parseMany(recordings ) {
3232
+ static parseMany(recordings = []) {
3190
3233
  return recordings.map(item => Recording.parse(item));
3191
3234
  }
3192
3235
 
@@ -3312,7 +3355,7 @@ class CallLog {
3312
3355
  duration: (plain.duration || 0) * 1000, // duration is in seconds
3313
3356
  start: moment(plain.start).toDate(),
3314
3357
  end: plain.end ? moment(plain.end).toDate() : null,
3315
- recordings: Recording.parseMany(plain.recordings),
3358
+ recordings: Recording.parseMany(plain.recordings || []),
3316
3359
  });
3317
3360
  }
3318
3361
 
@@ -4597,4 +4640,4 @@ var aor = {
4597
4640
  },
4598
4641
  };
4599
4642
 
4600
- export { aor as default };
4643
+ export default aor;
@@ -1,6 +1,6 @@
1
1
  import { Base64 } from 'js-base64';
2
2
  import moment from 'moment';
3
- import { KEYUTIL, jws, b64utoutf8 } from 'jsrsasign';
3
+ import { jws, b64utoutf8, KEYUTIL } from 'jsrsasign';
4
4
  import 'sip.js/lib/api/session-state';
5
5
  import 'events';
6
6
  import { jsonToGraphQLQuery } from 'json-to-graphql-query/lib/jsonToGraphQLQuery';
@@ -130,6 +130,7 @@ class IssueReporter {
130
130
 
131
131
 
132
132
 
133
+
133
134
 
134
135
  constructor() {
135
136
  addLevelsTo(this);
@@ -141,12 +142,17 @@ class IssueReporter {
141
142
  this.bufferTimeout = null;
142
143
  this._boundProcessBuffer = this._processBuffer.bind(this);
143
144
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
145
+ this._callback = null;
144
146
  }
145
147
 
146
148
  init() {
147
149
  this._catchConsole();
148
150
  }
149
151
 
152
+ setCallback(cb ) {
153
+ this._callback = cb;
154
+ }
155
+
150
156
  configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
151
157
  this.remoteClientConfiguration = configuration;
152
158
  }
@@ -182,6 +188,7 @@ class IssueReporter {
182
188
 
183
189
  // Handle category label
184
190
  let category = null;
191
+ let skipSendToRemote = false;
185
192
  let extra = {};
186
193
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
187
194
  category = args[0].split('=')[1];
@@ -197,6 +204,7 @@ class IssueReporter {
197
204
  errorMessage: lastArg.message,
198
205
  errorStack: lastArg.stack,
199
206
  errorType: lastArg.constructor.name,
207
+ skipSendToRemote: lastArg.skipSendToRemote,
200
208
  };
201
209
  } else {
202
210
  extra = lastArg;
@@ -205,6 +213,11 @@ class IssueReporter {
205
213
  args.splice(1, 1);
206
214
  }
207
215
 
216
+ if (extra.skipSendToRemote) {
217
+ skipSendToRemote = true;
218
+ delete extra.skipSendToRemote;
219
+ }
220
+
208
221
  const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
209
222
  const message = args.join(', ');
210
223
  let consoleMessage = message;
@@ -225,7 +238,13 @@ class IssueReporter {
225
238
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
226
239
  oldMethod.apply(oldMethod, [date, consoleMessage]);
227
240
 
228
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
241
+ if (this._callback) {
242
+ this._callback(level, consoleMessage);
243
+ }
244
+
245
+ if (!skipSendToRemote) {
246
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
247
+ }
229
248
  }
230
249
 
231
250
  logRequest(url , options , response , start ) {
@@ -370,7 +389,11 @@ class IssueReporter {
370
389
  },
371
390
  // $FlowFixMe
372
391
  body,
373
- }).catch(() => {
392
+ }).catch((e ) => {
393
+ // $FlowFixMe
394
+ e.skipSendToRemote = true;
395
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
396
+
374
397
  setTimeout(() => {
375
398
  if (isArray) {
376
399
  payload = payload.map(message => {
@@ -382,7 +405,7 @@ class IssueReporter {
382
405
  payload._retry = retry + 1;
383
406
  }
384
407
 
385
- this._sendDebugToGrafana(body, retry + 1);
408
+ this._sendDebugToGrafana(payload, retry + 1);
386
409
  }, 5000 + retry * 1000);
387
410
  });
388
411
  }
@@ -2585,7 +2608,8 @@ class ExternalApp {
2585
2608
 
2586
2609
 
2587
2610
 
2588
-
2611
+
2612
+
2589
2613
 
2590
2614
 
2591
2615
  class Meeting {
@@ -2597,6 +2621,7 @@ class Meeting {
2597
2621
 
2598
2622
 
2599
2623
 
2624
+
2600
2625
 
2601
2626
 
2602
2627
  static parse(plain ) {
@@ -2608,14 +2633,28 @@ class Meeting {
2608
2633
  port: plain.port,
2609
2634
  uuid: plain.uuid,
2610
2635
  number: plain.number,
2636
+ persistent: plain.persistent,
2611
2637
  });
2612
2638
  }
2613
2639
 
2640
+ static parseMany(items ) {
2641
+ return items.map(plain => Meeting.parse(plain));
2642
+ }
2643
+
2614
2644
  static newFrom(meeting ) {
2615
2645
  return newFrom(meeting, Meeting);
2616
2646
  }
2617
2647
 
2618
- constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
2648
+ constructor({
2649
+ uuid,
2650
+ name,
2651
+ guestSipAuthorization,
2652
+ ownerUuids,
2653
+ port,
2654
+ uri,
2655
+ number,
2656
+ persistent,
2657
+ } = {}) {
2619
2658
  this.guestSipAuthorization = guestSipAuthorization;
2620
2659
  this.uri = uri;
2621
2660
  this.name = name;
@@ -2623,6 +2662,7 @@ class Meeting {
2623
2662
  this.port = port;
2624
2663
  this.uuid = uuid;
2625
2664
  this.number = number;
2665
+ this.persistent = persistent;
2626
2666
 
2627
2667
  // Useful to compare instead of instanceof with minified code
2628
2668
  this.type = 'Meeting';
@@ -2700,8 +2740,11 @@ var confdMethods = (client , baseUrl ) => ({
2700
2740
  }
2701
2741
  },
2702
2742
 
2703
- createMyMeeting: (name ) =>
2704
- client.post(`${baseUrl}/users/me/meetings`, { name }).then(Meeting.parse),
2743
+ getMyMeetings: () =>
2744
+ client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
2745
+
2746
+ createMyMeeting: (name , persistent ) =>
2747
+ client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
2705
2748
 
2706
2749
  deleteMyMeeting: (meetingUuid ) =>
2707
2750
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
@@ -3186,7 +3229,7 @@ class Recording {
3186
3229
 
3187
3230
 
3188
3231
 
3189
- static parseMany(recordings ) {
3232
+ static parseMany(recordings = []) {
3190
3233
  return recordings.map(item => Recording.parse(item));
3191
3234
  }
3192
3235
 
@@ -3312,7 +3355,7 @@ class CallLog {
3312
3355
  duration: (plain.duration || 0) * 1000, // duration is in seconds
3313
3356
  start: moment(plain.start).toDate(),
3314
3357
  end: plain.end ? moment(plain.end).toDate() : null,
3315
- recordings: Recording.parseMany(plain.recordings),
3358
+ recordings: Recording.parseMany(plain.recordings || []),
3316
3359
  });
3317
3360
  }
3318
3361
 
@@ -4643,4 +4686,4 @@ var api = {
4643
4686
  },
4644
4687
  };
4645
4688
 
4646
- export { api as default };
4689
+ export default api;
@@ -120,4 +120,4 @@ var iceIpv4 = {
120
120
  }),
121
121
  };
122
122
 
123
- export { iceIpv4 as default };
123
+ export default iceIpv4;