@wazo/sdk 0.37.19 → 0.37.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/wazo-sdk.js +5 -5
  2. package/esm/__tests__/api-client.test.js +70 -5
  3. package/esm/__tests__/web-rtc-client.test.js +111 -67
  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 +32 -2
  9. package/esm/api/calld.js +35 -2
  10. package/esm/api/chatd.js +32 -2
  11. package/esm/api/confd.js +47 -5
  12. package/esm/api/ctid-ng.js +35 -2
  13. package/esm/api/dird.js +28 -2
  14. package/esm/api/webhookd.js +25 -2
  15. package/esm/api-client.js +70 -5
  16. package/esm/checker/Checker.js +113 -67
  17. package/esm/checker/checks/aor.js +70 -5
  18. package/esm/checker/checks/api.js +70 -5
  19. package/esm/checker/checks/index.js +113 -67
  20. package/esm/checker/checks/wazo-websocket.js +27 -2
  21. package/esm/checker/checks/webrtc-transport.js +111 -67
  22. package/esm/checker/checks/webrtc.js +111 -67
  23. package/esm/domain/AdHocAPIConference.js +70 -5
  24. package/esm/domain/Call.js +3 -0
  25. package/esm/domain/CallLog.js +7 -0
  26. package/esm/domain/ChatMessage.js +4 -0
  27. package/esm/domain/ChatRoom.js +3 -0
  28. package/esm/domain/Contact.js +3 -0
  29. package/esm/domain/Features.js +70 -5
  30. package/esm/domain/Meeting.js +17 -1
  31. package/esm/domain/Phone/CTIPhone.js +74 -5
  32. package/esm/domain/Phone/WebRTCPhone.js +50 -16
  33. package/esm/domain/Recording.js +3 -0
  34. package/esm/domain/Voicemail.js +3 -0
  35. package/esm/domain/__tests__/Call.test.js +3 -0
  36. package/esm/domain/__tests__/CallLog.test.js +7 -0
  37. package/esm/domain/__tests__/Contact.test.js +3 -0
  38. package/esm/domain/__tests__/Voicemail.test.js +3 -0
  39. package/esm/index.js +147 -80
  40. package/esm/lib/WazoSessionDescriptionHandler.js +25 -40
  41. package/esm/service/CallApi.js +70 -5
  42. package/esm/service/IssueReporter.js +25 -2
  43. package/esm/service/__tests__/IssueReporter.test.js +25 -2
  44. package/esm/service/getApiClient.js +70 -5
  45. package/esm/simple/Auth.js +147 -80
  46. package/esm/simple/Configuration.js +147 -80
  47. package/esm/simple/Directory.js +70 -5
  48. package/esm/simple/Phone.js +147 -80
  49. package/esm/simple/Websocket.js +28 -2
  50. package/esm/simple/index.js +147 -80
  51. package/esm/simple/room/LocalParticipant.js +147 -80
  52. package/esm/simple/room/Participant.js +147 -80
  53. package/esm/simple/room/RemoteParticipant.js +147 -80
  54. package/esm/simple/room/Room.js +147 -80
  55. package/esm/simple/room/SipRoom.js +147 -80
  56. package/esm/simple/room/Stream.js +147 -80
  57. package/esm/simple/room/__tests__/RemoteParticipant.test.js +147 -80
  58. package/esm/simple/utils.js +147 -80
  59. package/esm/utils/__tests__/api-requester.test.js +25 -2
  60. package/esm/utils/api-requester.js +25 -2
  61. package/esm/web-rtc-client.js +111 -67
  62. package/esm/websocket-client.js +28 -3
  63. package/lib/__tests__/api-client.test.js +70 -5
  64. package/lib/__tests__/web-rtc-client.test.js +111 -67
  65. package/lib/api/agentd.js +25 -2
  66. package/lib/api/amid.js +25 -2
  67. package/lib/api/application.js +25 -2
  68. package/lib/api/auth.js +25 -2
  69. package/lib/api/call-logd.js +32 -2
  70. package/lib/api/calld.js +35 -2
  71. package/lib/api/chatd.js +32 -2
  72. package/lib/api/confd.js +47 -5
  73. package/lib/api/ctid-ng.js +35 -2
  74. package/lib/api/dird.js +28 -2
  75. package/lib/api/webhookd.js +25 -2
  76. package/lib/api-client.js +70 -5
  77. package/lib/checker/Checker.js +113 -67
  78. package/lib/checker/checks/aor.js +70 -5
  79. package/lib/checker/checks/api.js +70 -5
  80. package/lib/checker/checks/index.js +113 -67
  81. package/lib/checker/checks/wazo-websocket.js +27 -2
  82. package/lib/checker/checks/webrtc-transport.js +111 -67
  83. package/lib/checker/checks/webrtc.js +111 -67
  84. package/lib/domain/AdHocAPIConference.js +70 -5
  85. package/lib/domain/Call.js +3 -0
  86. package/lib/domain/CallLog.js +7 -0
  87. package/lib/domain/ChatMessage.js +4 -0
  88. package/lib/domain/ChatRoom.js +3 -0
  89. package/lib/domain/Contact.js +3 -0
  90. package/lib/domain/Features.js +70 -5
  91. package/lib/domain/Meeting.js +17 -1
  92. package/lib/domain/Phone/CTIPhone.js +74 -5
  93. package/lib/domain/Phone/WebRTCPhone.js +50 -16
  94. package/lib/domain/Recording.js +3 -0
  95. package/lib/domain/Voicemail.js +3 -0
  96. package/lib/domain/__tests__/Call.test.js +3 -0
  97. package/lib/domain/__tests__/CallLog.test.js +7 -0
  98. package/lib/domain/__tests__/Contact.test.js +3 -0
  99. package/lib/domain/__tests__/Voicemail.test.js +3 -0
  100. package/lib/index.js +147 -80
  101. package/lib/lib/WazoSessionDescriptionHandler.js +25 -40
  102. package/lib/service/CallApi.js +70 -5
  103. package/lib/service/IssueReporter.js +25 -2
  104. package/lib/service/__tests__/IssueReporter.test.js +25 -2
  105. package/lib/service/getApiClient.js +70 -5
  106. package/lib/simple/Auth.js +147 -80
  107. package/lib/simple/Configuration.js +147 -80
  108. package/lib/simple/Directory.js +70 -5
  109. package/lib/simple/Phone.js +147 -80
  110. package/lib/simple/Websocket.js +28 -2
  111. package/lib/simple/index.js +147 -80
  112. package/lib/simple/room/LocalParticipant.js +147 -80
  113. package/lib/simple/room/Participant.js +147 -80
  114. package/lib/simple/room/RemoteParticipant.js +147 -80
  115. package/lib/simple/room/Room.js +147 -80
  116. package/lib/simple/room/SipRoom.js +147 -80
  117. package/lib/simple/room/Stream.js +147 -80
  118. package/lib/simple/room/__tests__/RemoteParticipant.test.js +147 -80
  119. package/lib/simple/utils.js +147 -80
  120. package/lib/utils/__tests__/api-requester.test.js +25 -2
  121. package/lib/utils/api-requester.js +25 -2
  122. package/lib/web-rtc-client.js +111 -67
  123. package/lib/websocket-client.js +28 -2
  124. package/package.json +2 -2
  125. package/src/api/confd.js +5 -2
  126. package/src/domain/Call.js +3 -0
  127. package/src/domain/CallLog.js +4 -0
  128. package/src/domain/ChatMessage.js +4 -0
  129. package/src/domain/ChatRoom.js +3 -0
  130. package/src/domain/Contact.js +3 -0
  131. package/src/domain/Meeting.js +17 -1
  132. package/src/domain/Phone/CTIPhone.js +4 -0
  133. package/src/domain/Phone/Phone.js +2 -0
  134. package/src/domain/Phone/WebRTCPhone.js +25 -14
  135. package/src/domain/Recording.js +3 -0
  136. package/src/domain/Voicemail.js +3 -0
  137. package/src/lib/WazoSessionDescriptionHandler.js +1 -35
  138. package/src/service/IssueReporter.js +25 -2
  139. package/src/simple/Phone.js +5 -0
  140. package/src/types/WebSocketMessage.js +5 -1
  141. package/src/web-rtc-client.js +41 -24
  142. package/src/websocket-client.js +2 -0
@@ -25,6 +25,9 @@ export default class Recording {
25
25
  uuid: string;
26
26
 
27
27
  static parseMany(recordings: RecordingResponse[] = []): Recording[] {
28
+ if (!recordings) {
29
+ return [];
30
+ }
28
31
  return recordings.map(item => Recording.parse(item));
29
32
  }
30
33
 
@@ -61,6 +61,9 @@ export default class Voicemail {
61
61
  }
62
62
 
63
63
  static parseMany(plain: Response): Array<Voicemail> {
64
+ if (!plain) {
65
+ return [];
66
+ }
64
67
  const plainUnread = plain.folders.filter(folder => folder.type === 'new')[0].messages;
65
68
  const plainRead = plain.folders.filter(folder => folder.type === 'old')[0].messages;
66
69
 
@@ -12,11 +12,9 @@ import { SessionDescriptionHandler }
12
12
  import { SessionDescriptionHandlerOptions }
13
13
  from 'sip.js/lib/platform/web/session-description-handler/session-description-handler-options';
14
14
  import IssueReporter from '../service/IssueReporter';
15
- import { areCandidateValid, fixSdp, parseCandidate } from '../utils/sdp';
15
+ import { fixSdp, parseCandidate } from '../utils/sdp';
16
16
 
17
17
  const wazoLogger = IssueReporter ? IssueReporter.loggerFor('webrtc-sdh') : console;
18
- const MAX_WAIT_FOR_ICE_TRIES = 20;
19
- const WAIT_FOR_ICE_TIMEOUT = 500;
20
18
 
21
19
  // Customized mediaStreamFactory allowing to send screensharing stream directory when upgrading
22
20
  export const wazoMediaStreamFactory = (constraints: Object): Promise<MediaStream> => {
@@ -206,38 +204,6 @@ class WazoSessionDescriptionHandler extends SessionDescriptionHandler {
206
204
  this._peerConnection = undefined;
207
205
  }
208
206
 
209
- async _waitForValidGatheredIce(): Object {
210
- let tries = 0;
211
-
212
- while (!areCandidateValid(this.gatheredCandidates) && tries < MAX_WAIT_FOR_ICE_TRIES) {
213
- wazoLogger.trace('SessionDescriptionHandler._waitForValidGatheredIce, waiting for ice', {
214
- tries,
215
- max: MAX_WAIT_FOR_ICE_TRIES,
216
- });
217
-
218
- tries++;
219
-
220
- // eslint-disable-next-line no-await-in-loop
221
- await new Promise(resolve => setTimeout(resolve, WAIT_FOR_ICE_TIMEOUT));
222
- }
223
-
224
- if (tries >= MAX_WAIT_FOR_ICE_TRIES) {
225
- const errorMsg = 'No valid candidates found, can\'t answer the call';
226
- const error = new Error(errorMsg);
227
- wazoLogger.error(errorMsg, { tries, max: MAX_WAIT_FOR_ICE_TRIES });
228
-
229
- // Emit an error, because sip.js catches the exception and switch to status Terminated.
230
- this.eventEmitter.emit('error', error);
231
-
232
- wazoLogger.error('No valid candidates found', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
233
- }
234
-
235
- // eslint-disable-next-line
236
- wazoLogger.trace('Found valid candidates', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
237
-
238
- return this.getLocalSessionDescription();
239
- }
240
-
241
207
  // Overridden to send `inactive` in conference
242
208
  updateDirection(options?: SessionDescriptionHandlerOptions, isConference: boolean = false,
243
209
  audioOnly: boolean = false): Promise<void> {
@@ -64,6 +64,7 @@ class IssueReporter {
64
64
  bufferTimeout: ?TimeoutID;
65
65
  _boundProcessBuffer: Function;
66
66
  _boundParseLoggerBody: Function;
67
+ _callback: ?Function;
67
68
 
68
69
  constructor() {
69
70
  addLevelsTo(this);
@@ -75,12 +76,17 @@ class IssueReporter {
75
76
  this.bufferTimeout = null;
76
77
  this._boundProcessBuffer = this._processBuffer.bind(this);
77
78
  this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
79
+ this._callback = null;
78
80
  }
79
81
 
80
82
  init() {
81
83
  this._catchConsole();
82
84
  }
83
85
 
86
+ setCallback(cb: Function) {
87
+ this._callback = cb;
88
+ }
89
+
84
90
  configureRemoteClient(configuration: Object = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
85
91
  this.remoteClientConfiguration = configuration;
86
92
  }
@@ -116,6 +122,7 @@ class IssueReporter {
116
122
 
117
123
  // Handle category label
118
124
  let category = null;
125
+ let skipSendToRemote = false;
119
126
  let extra = {};
120
127
  if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
121
128
  category = args[0].split('=')[1];
@@ -131,6 +138,7 @@ class IssueReporter {
131
138
  errorMessage: lastArg.message,
132
139
  errorStack: lastArg.stack,
133
140
  errorType: lastArg.constructor.name,
141
+ skipSendToRemote: lastArg.skipSendToRemote,
134
142
  };
135
143
  } else {
136
144
  extra = lastArg;
@@ -139,6 +147,11 @@ class IssueReporter {
139
147
  args.splice(1, 1);
140
148
  }
141
149
 
150
+ if (extra.skipSendToRemote) {
151
+ skipSendToRemote = true;
152
+ delete extra.skipSendToRemote;
153
+ }
154
+
142
155
  const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
143
156
  const message = args.join(', ');
144
157
  let consoleMessage = message;
@@ -159,7 +172,13 @@ class IssueReporter {
159
172
  const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
160
173
  oldMethod.apply(oldMethod, [date, consoleMessage]);
161
174
 
162
- this._sendToRemoteLogger(level, { date, message, category, ...extra });
175
+ if (this._callback) {
176
+ this._callback(level, consoleMessage);
177
+ }
178
+
179
+ if (!skipSendToRemote) {
180
+ this._sendToRemoteLogger(level, { date, message, category, ...extra });
181
+ }
163
182
  }
164
183
 
165
184
  logRequest(url: string, options: Object, response: Object, start: Date) {
@@ -304,7 +323,11 @@ class IssueReporter {
304
323
  },
305
324
  // $FlowFixMe
306
325
  body,
307
- }).catch(() => {
326
+ }).catch((e: Error) => {
327
+ // $FlowFixMe
328
+ e.skipSendToRemote = true;
329
+ this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
330
+
308
331
  setTimeout(() => {
309
332
  if (isArray) {
310
333
  payload = payload.map(message => {
@@ -347,6 +347,11 @@ class Phone extends Emitter {
347
347
  return this.getRemoteVideoStream(callSession);
348
348
  }
349
349
 
350
+ // Useful in a react-native environment when remoteMediaStream is not updated
351
+ getRemoteVideoStreamFromPc(callSession: CallSession) {
352
+ return this.phone ? this.phone.getRemoteVideoStreamFromPc(callSession) : false;
353
+ }
354
+
350
355
  hasVideo(callSession: CallSession): boolean {
351
356
  return this.phone ? this.phone.hasVideo(callSession) : false;
352
357
  }
@@ -7,6 +7,7 @@ import type {
7
7
  } from '../domain/SwitchboardCall';
8
8
  import type { ChatMessageResponse } from '../domain/ChatMessage';
9
9
  import ChatRoom from '../domain/ChatRoom';
10
+ import Meeting from '../domain/Meeting';
10
11
 
11
12
  type WebSocketBaseMessage = {
12
13
  op: string,
@@ -187,6 +188,8 @@ type AgentStatusUpdate = WebSocketBaseMessage & { data: AgentStatusUpdateEvent,
187
188
  type AgentPaused = WebSocketBaseMessage & { data: any, name: 'agent_paused' };
188
189
  type AgentUnpaused = WebSocketBaseMessage & { data: any, name: 'agent_unpaused' };
189
190
 
191
+ type MeetingUserProgress = WebSocketBaseMessage & { data: Meeting, name: 'meeting_user_progress' };
192
+
190
193
  export type WebSocketMessage =
191
194
  | CallCreated
192
195
  | CallUpdated
@@ -219,4 +222,5 @@ export type WebSocketMessage =
219
222
  | FaxOutboundSucceeded
220
223
  | AgentStatusUpdate
221
224
  | AgentPaused
222
- | AgentUnpaused;
225
+ | AgentUnpaused
226
+ | MeetingUserProgress;
@@ -478,7 +478,9 @@ export default class WebRTCClient extends Emitter {
478
478
  const inviteOptions: InviterInviteOptions = {
479
479
  requestDelegate: {
480
480
  onAccept: (response: IncomingResponse) => {
481
- session.sessionDescriptionHandler.peerConnection.sfu = conference;
481
+ if (session.sessionDescriptionHandler.peerConnection) {
482
+ session.sessionDescriptionHandler.peerConnection.sfu = conference;
483
+ }
482
484
  this._onAccepted(session, response.session, true);
483
485
  },
484
486
  onReject: (response: IncomingResponse) => {
@@ -1350,6 +1352,16 @@ export default class WebRTCClient extends Emitter {
1350
1352
  return this.hasRemoteVideo(sessionId) ? this.getRemoteStream(sessionId) : null;
1351
1353
  }
1352
1354
 
1355
+ // Useful in a react-native environment when remoteMediaStream is not updated
1356
+ getRemoteVideoStreamFromPc(sessionId: string): ?MediaStream {
1357
+ const pc = this.getPeerConnection(sessionId);
1358
+ if (!pc) {
1359
+ return null;
1360
+ }
1361
+
1362
+ return pc.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
1363
+ }
1364
+
1353
1365
  hasVideo(sessionId: string): boolean {
1354
1366
  return this.hasLocalVideo(sessionId) || this.hasRemoteVideo(sessionId);
1355
1367
  }
@@ -1860,6 +1872,7 @@ export default class WebRTCClient extends Emitter {
1860
1872
  session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
1861
1873
 
1862
1874
  pc.oniceconnectionstatechange = () => {
1875
+ logger.info('on ice connection state changed', { state: pc.iceConnectionState });
1863
1876
  if (pc.iceConnectionState === 'disconnected') {
1864
1877
  this.eventEmitter.emit(ON_DISCONNECTED);
1865
1878
  }
@@ -2088,25 +2101,25 @@ export default class WebRTCClient extends Emitter {
2088
2101
 
2089
2102
  stats.forEach(report => {
2090
2103
  if (report.type === 'outbound-rtp' && report.kind === 'audio') {
2091
- audioBytesSent += report.bytesSent + report.headerBytesSent;
2104
+ audioBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
2092
2105
  }
2093
2106
  if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
2094
- audioBytesSent += report.bytesSent;
2107
+ audioBytesSent += Number(report.bytesSent);
2095
2108
  }
2096
2109
  if (report.type === 'outbound-rtp' && report.kind === 'video') {
2097
- videoBytesSent += report.bytesSent + report.headerBytesSent;
2110
+ videoBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
2098
2111
  }
2099
2112
  if (report.type === 'inbound-rtp' && report.kind === 'audio') {
2100
- packetsLost += report.packetsLost;
2101
- networkStats.packetsReceived = report.packetsReceived;
2102
- audioBytesReceived += report.bytesReceived + report.headerBytesReceived;
2113
+ packetsLost += Number(report.packetsLost);
2114
+ networkStats.packetsReceived = Number(report.packetsReceived);
2115
+ audioBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
2103
2116
  }
2104
2117
  if (report.type === 'inbound-rtp' && report.kind === 'video') {
2105
- videoBytesReceived += report.bytesReceived + report.headerBytesReceived;
2118
+ videoBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
2106
2119
  }
2107
2120
  if (report.type === 'outbound-rtp' && report.kind === 'video') {
2108
2121
  if ('framesPerSecond' in report) {
2109
- networkStats.framesPerSecond = report.framesPerSecond;
2122
+ networkStats.framesPerSecond = Number(report.framesPerSecond);
2110
2123
  }
2111
2124
  if ('framerateMean' in report) {
2112
2125
  // framerateMean is only available in FF
@@ -2114,32 +2127,36 @@ export default class WebRTCClient extends Emitter {
2114
2127
  }
2115
2128
  }
2116
2129
  if (report.type === 'remote-inbound-rtp' && report.kind === 'audio') {
2117
- packetsLost += report.packetsLost;
2118
- networkStats.roundTripTime = report.roundTripTime;
2119
- networkStats.jitter = report.jitter;
2130
+ packetsLost += Number(report.packetsLost);
2131
+ networkStats.roundTripTime = Number(report.roundTripTime);
2132
+ networkStats.jitter = Number(report.jitter);
2120
2133
  }
2121
2134
  if (report.type === 'remote-inbound-rtp' && report.kind === 'video') {
2122
- packetsLost += report.packetsLost;
2135
+ packetsLost += Number(report.packetsLost);
2123
2136
  }
2124
2137
  if (report.type === 'transport') {
2125
- transportSent += report.bytesSent;
2126
- transportReceived += report.bytesReceived;
2138
+ transportSent += Number(report.bytesSent);
2139
+ transportReceived += Number(report.bytesReceived);
2127
2140
  }
2128
2141
  });
2129
2142
 
2130
2143
  networkStats.packetsLost = packetsLost;
2131
- networkStats.audioBytesSent = audioBytesSent;
2144
+ networkStats.totalAudioBytesSent = audioBytesSent;
2145
+ networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
2146
+ networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
2132
2147
  networkStats.audioBytesReceived = audioBytesReceived;
2133
- networkStats.videoBytesSent = videoBytesSent;
2134
- networkStats.videoBytesReceived = videoBytesReceived;
2148
+ networkStats.totalVideoBytesSent = videoBytesSent;
2149
+ networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
2150
+ networkStats.totalVideoBytesReceived = videoBytesReceived;
2151
+ networkStats.videoBytesReceived = videoBytesReceived - lastVideoReceived;
2152
+ networkStats.totalTransportSent = transportSent - lastTransportSent;
2135
2153
  networkStats.transportSent = transportSent;
2136
- networkStats.transportReceived = transportReceived;
2137
-
2138
- const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
2139
- + (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
2140
- + (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
2154
+ networkStats.totalTransportReceived = transportReceived;
2155
+ networkStats.transportReceived = transportReceived - lastTransportReceived;
2141
2156
 
2142
- networkStats.bandwidth = bandwidth;
2157
+ networkStats.bandwidth = networkStats.audioBytesSent + networkStats.audioBytesReceived
2158
+ + networkStats.videoBytesSent + networkStats.videoBytesReceived + networkStats.transportReceived
2159
+ + networkStats.transportSent;
2143
2160
 
2144
2161
  this.eventEmitter.emit(ON_NETWORK_STATS, session, networkStats, this.sessionNetworkStats[sessionId]);
2145
2162
  this.sessionNetworkStats[sessionId].push(networkStats);
@@ -93,6 +93,7 @@ export const AGENT_PAUSED = 'agent_paused';
93
93
  export const AGENT_UNPAUSED = 'agent_unpaused';
94
94
  export const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
95
95
  export const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
96
+ export const MEETING_USER_PROGRESS = 'meeting_user_progress';
96
97
 
97
98
  const BLACKLIST_EVENTS = [
98
99
  CHAT_MESSAGE_SENT,
@@ -446,6 +447,7 @@ WebSocketClient.eventLists = [
446
447
  AGENT_UNPAUSED,
447
448
  CONFERENCE_ADHOC_PARTICIPANT_LEFT,
448
449
  CONFERENCE_ADHOC_DELETED,
450
+ MEETING_USER_PROGRESS,
449
451
  ];
450
452
 
451
453
  export default WebSocketClient;