@webex/plugin-meetings 2.37.2 → 2.38.1

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 (77) hide show
  1. package/dist/config.js +1 -1
  2. package/dist/config.js.map +1 -1
  3. package/dist/constants.js +2 -1
  4. package/dist/constants.js.map +1 -1
  5. package/dist/locus-info/index.js +24 -0
  6. package/dist/locus-info/index.js.map +1 -1
  7. package/dist/locus-info/parser.js +1 -0
  8. package/dist/locus-info/parser.js.map +1 -1
  9. package/dist/media/properties.js.map +1 -1
  10. package/dist/meeting/index.js +405 -352
  11. package/dist/meeting/index.js.map +1 -1
  12. package/dist/meeting/muteState.js +13 -0
  13. package/dist/meeting/muteState.js.map +1 -1
  14. package/dist/meeting/request.js +0 -27
  15. package/dist/meeting/request.js.map +1 -1
  16. package/dist/meeting/util.js +0 -56
  17. package/dist/meeting/util.js.map +1 -1
  18. package/dist/meeting-info/meeting-info-v2.js +2 -0
  19. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  20. package/dist/meetings/index.js +27 -17
  21. package/dist/meetings/index.js.map +1 -1
  22. package/dist/meetings/request.js +14 -12
  23. package/dist/meetings/request.js.map +1 -1
  24. package/dist/member/util.js +3 -1
  25. package/dist/member/util.js.map +1 -1
  26. package/dist/members/request.js +3 -1
  27. package/dist/members/request.js.map +1 -1
  28. package/dist/reachability/index.js +4 -4
  29. package/dist/reachability/index.js.map +1 -1
  30. package/dist/reactions/reactions.type.js +1 -0
  31. package/dist/reactions/reactions.type.js.map +1 -1
  32. package/dist/recording-controller/enums.js +17 -0
  33. package/dist/recording-controller/enums.js.map +1 -0
  34. package/dist/recording-controller/index.js +343 -0
  35. package/dist/recording-controller/index.js.map +1 -0
  36. package/dist/recording-controller/util.js +63 -0
  37. package/dist/recording-controller/util.js.map +1 -0
  38. package/dist/roap/index.js +16 -10
  39. package/dist/roap/index.js.map +1 -1
  40. package/dist/roap/turnDiscovery.js +6 -4
  41. package/dist/roap/turnDiscovery.js.map +1 -1
  42. package/dist/statsAnalyzer/mqaUtil.js +18 -6
  43. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  44. package/package.json +23 -18
  45. package/src/config.ts +1 -1
  46. package/src/constants.ts +1 -0
  47. package/src/locus-info/index.ts +24 -0
  48. package/src/locus-info/parser.ts +1 -0
  49. package/src/media/properties.ts +1 -1
  50. package/src/meeting/index.ts +121 -70
  51. package/src/meeting/muteState.ts +11 -0
  52. package/src/meeting/request.ts +0 -31
  53. package/src/meeting/util.ts +0 -60
  54. package/src/meeting-info/meeting-info-v2.ts +2 -0
  55. package/src/meetings/index.ts +8 -3
  56. package/src/meetings/request.ts +1 -1
  57. package/src/member/util.ts +2 -1
  58. package/src/members/request.ts +1 -0
  59. package/src/reachability/index.ts +2 -1
  60. package/src/reactions/reactions.type.ts +2 -1
  61. package/src/recording-controller/enums.ts +8 -0
  62. package/src/recording-controller/index.ts +315 -0
  63. package/src/recording-controller/util.ts +58 -0
  64. package/src/roap/index.ts +8 -8
  65. package/src/roap/turnDiscovery.ts +5 -5
  66. package/src/statsAnalyzer/mqaUtil.ts +6 -0
  67. package/test/integration/spec/journey.js +1 -1
  68. package/test/integration/spec/space-meeting.js +1 -1
  69. package/test/integration/spec/transcription.js +1 -1
  70. package/test/unit/spec/meeting/index.js +33 -6
  71. package/test/unit/spec/meeting/muteState.js +11 -0
  72. package/test/unit/spec/meeting/utils.js +0 -127
  73. package/test/unit/spec/recording-controller/index.js +231 -0
  74. package/test/unit/spec/recording-controller/util.js +102 -0
  75. package/test/unit/spec/roap/index.ts +10 -5
  76. package/test/unit/spec/roap/turnDiscovery.ts +13 -8
  77. package/tsconfig.json +6 -0
@@ -221,6 +221,7 @@ export default class Meetings extends WebexPlugin {
221
221
  // @ts-ignore
222
222
  this.meetingCollection.getByKey(
223
223
  CORRELATION_ID,
224
+ // @ts-ignore
224
225
  MeetingsUtil.checkForCorrelationId(this.webex.internal.device.url, data.locus)
225
226
  ) ||
226
227
  this.meetingCollection.getByKey(
@@ -440,11 +441,14 @@ export default class Meetings extends WebexPlugin {
440
441
  */
441
442
  // @ts-ignore
442
443
  this.meetingInfo = this.config.experimental.enableUnifiedMeetings
443
- ? new MeetingInfoV2(this.webex)
444
- : new MeetingInfo(this.webex);
444
+ ? // @ts-ignore
445
+ new MeetingInfoV2(this.webex)
446
+ : // @ts-ignore
447
+ new MeetingInfo(this.webex);
445
448
  // @ts-ignore
446
449
  this.personalMeetingRoom = new PersonalMeetingRoom(
447
450
  {meetingInfo: this.meetingInfo},
451
+ // @ts-ignore
448
452
  {parent: this.webex}
449
453
  );
450
454
 
@@ -554,6 +558,7 @@ export default class Meetings extends WebexPlugin {
554
558
  // @ts-ignore
555
559
  .then(() =>
556
560
  LoggerProxy.logger.info(
561
+ // @ts-ignore
557
562
  `Meetings:index#register --> INFO, Device registered ${this.webex.internal.device.url}`
558
563
  )
559
564
  )
@@ -607,8 +612,8 @@ export default class Meetings extends WebexPlugin {
607
612
 
608
613
  this.stopListeningForEvents();
609
614
 
610
- // @ts-ignore
611
615
  return (
616
+ // @ts-ignore
612
617
  this.webex.internal.mercury
613
618
  .disconnect()
614
619
  // @ts-ignore
@@ -53,9 +53,9 @@ export default class MeetingRequest extends StatelessWebexPlugin {
53
53
  */
54
54
  determineRedirections(responseBody: any) {
55
55
  if (responseBody.remoteLocusClusterUrls && responseBody.remoteLocusClusterUrls.length) {
56
- // @ts-ignore
57
56
  return Promise.all(
58
57
  responseBody.remoteLocusClusterUrls.map((url) =>
58
+ // @ts-ignore
59
59
  this.request({
60
60
  method: HTTP_VERBS.GET,
61
61
  url,
@@ -72,7 +72,7 @@ MemberUtil.isAssociatedSame = (participant: any, id: string) =>
72
72
  * @param {String} status
73
73
  * @returns {Boolean}
74
74
  */
75
- MemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string) =>
75
+ MemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string): boolean =>
76
76
  participant &&
77
77
  participant.guest &&
78
78
  ((participant.devices &&
@@ -82,6 +82,7 @@ MemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string)
82
82
  // @ts-ignore
83
83
  isGuest &&
84
84
  status === _IN_LOBBY_) ||
85
+ // @ts-ignore
85
86
  !status === _IN_MEETING_);
86
87
 
87
88
  /**
@@ -140,6 +140,7 @@ export default class MembersRequest extends StatelessWebexPlugin {
140
140
  !options.locusUrl ||
141
141
  !options.memberId ||
142
142
  !options.url ||
143
+ // @ts-ignore
143
144
  (!options.tones && options.tones !== 0)
144
145
  ) {
145
146
  throw new ParameterError(
@@ -261,6 +261,7 @@ export default class Reachability {
261
261
 
262
262
  // @ts-ignore
263
263
  LoggerProxy.logger.log(
264
+ // @ts-ignore
264
265
  `Reachability:index#onIceGatheringStateChange --> Successfully pinged ${peerConnection.key}:`,
265
266
  elapsed
266
267
  );
@@ -284,8 +285,8 @@ export default class Reachability {
284
285
  if (e.candidate && String(e.candidate.type).toLowerCase() === SERVER_REFLEXIVE) {
285
286
  const elapsed = this.getElapsedTime(peerConnection);
286
287
 
287
- // @ts-ignore
288
288
  LoggerProxy.logger.log(
289
+ // @ts-ignore
289
290
  `Reachability:index#onIceCandidate --> Successfully pinged ${peerConnection.key}:`,
290
291
  elapsed
291
292
  );
@@ -5,7 +5,8 @@ export type EmoticonData = {
5
5
  };
6
6
 
7
7
  export type SkinTone = EmoticonData;
8
- export type Reaction = ReactionData & {
8
+ // @ts-ignore
9
+ export type Reaction = EmoticonData & {
9
10
  tone?: SkinTone;
10
11
  };
11
12
 
@@ -0,0 +1,8 @@
1
+ enum RecordingAction {
2
+ Start = 'Start',
3
+ Stop = 'Stop',
4
+ Pause = 'Pause',
5
+ Resume = 'Resume',
6
+ }
7
+
8
+ export default RecordingAction;
@@ -0,0 +1,315 @@
1
+ import PermissionError from '../common/errors/permission';
2
+ import {CONTROLS, HTTP_VERBS} from '../constants';
3
+ import MeetingRequest from '../meeting/request';
4
+ import RecordingAction from './enums';
5
+ import Util from './util';
6
+ import LoggerProxy from '../common/logs/logger-proxy';
7
+
8
+ /**
9
+ * @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting
10
+ * @export
11
+ * @private
12
+ * @class Recording
13
+ */
14
+ export default class RecordingController {
15
+ /**
16
+ * @instance
17
+ * @type {MeetingRequest}
18
+ * @private
19
+ * @memberof RecordingController
20
+ */
21
+ private request: MeetingRequest;
22
+
23
+ /**
24
+ * @instance
25
+ * @type {Array}
26
+ * @private
27
+ * @memberof RecordingInfo
28
+ */
29
+ private displayHints: Array<string> = [];
30
+
31
+ /**
32
+ * @instance
33
+ * @type {string}
34
+ * @private
35
+ * @memberof RecordingInfo
36
+ */
37
+ private serviceUrl: string;
38
+
39
+ /**
40
+ * @instance
41
+ * @type {string}
42
+ * @private
43
+ * @memberof RecordingInfo
44
+ */
45
+ private sessionId: string;
46
+
47
+ /**
48
+ * @instance
49
+ * @type {string}
50
+ * @private
51
+ * @memberof RecordingInfo
52
+ */
53
+ private locusUrl: string;
54
+
55
+ /**
56
+ * @instance
57
+ * @type {string}
58
+ * @private
59
+ * @memberof RecordingInfo
60
+ */
61
+ private locusId: string;
62
+
63
+ /**
64
+ * @param {MeetingRequest} request
65
+ * @param {Object} options
66
+ * @constructor
67
+ * @memberof RecordingController
68
+ */
69
+ constructor(
70
+ request: MeetingRequest,
71
+ options?: {
72
+ serviceUrl?: string;
73
+ sessionId: string;
74
+ locusUrl: string;
75
+ displayHints?: Array<string>;
76
+ }
77
+ ) {
78
+ this.initialize(request);
79
+ this.set(options);
80
+ }
81
+
82
+ /**
83
+ * @param {MeetingRequest} request
84
+ * @param {LocusInfo} info
85
+ * @returns {void}
86
+ * @private
87
+ * @memberof RecordingController
88
+ */
89
+ private initialize(request: MeetingRequest) {
90
+ this.request = request;
91
+ }
92
+
93
+ /**
94
+ * @param {Object} options
95
+ * @returns {void}
96
+ * @public
97
+ * @memberof RecordingController
98
+ */
99
+ public set(options?: {
100
+ serviceUrl?: string;
101
+ sessionId: string;
102
+ locusUrl: string;
103
+ displayHints?: Array<string>;
104
+ }) {
105
+ this.extract(options);
106
+ }
107
+
108
+ /**
109
+ * @param {string} url
110
+ * @returns {void}
111
+ * @public
112
+ * @memberof RecordingController
113
+ */
114
+ public setLocusUrl(url: string) {
115
+ this.locusUrl = url;
116
+ this.locusId = Util.extractLocusId(this.locusUrl);
117
+ }
118
+
119
+ /**
120
+ * @param {Array} hints
121
+ * @returns {void}
122
+ * @public
123
+ * @memberof RecordingController
124
+ */
125
+ public setDisplayHints(hints: Array<string>) {
126
+ this.displayHints = hints;
127
+ }
128
+
129
+ /**
130
+ * @param {string} id
131
+ * @returns {void}
132
+ * @public
133
+ * @memberof RecordingController
134
+ */
135
+ public setSessionId(id: string) {
136
+ this.sessionId = id;
137
+ }
138
+
139
+ /**
140
+ * @param {string} url
141
+ * @returns {void}
142
+ * @public
143
+ * @memberof RecordingController
144
+ */
145
+ public setServiceUrl(url: string) {
146
+ this.serviceUrl = url;
147
+ }
148
+
149
+ /**
150
+ * @returns {string}
151
+ * @public
152
+ * @memberof RecordingController
153
+ */
154
+ public getLocusUrl() {
155
+ return this.locusUrl;
156
+ }
157
+
158
+ /**
159
+ * @returns {string}
160
+ * @public
161
+ * @memberof RecordingController
162
+ */
163
+ public getLocusId() {
164
+ return this.locusId;
165
+ }
166
+
167
+ /**
168
+ * @returns {string}
169
+ * @public
170
+ * @memberof RecordingController
171
+ */
172
+ public getSessionId() {
173
+ return this.sessionId;
174
+ }
175
+
176
+ /**
177
+ * @returns {string}
178
+ * @public
179
+ * @memberof RecordingController
180
+ */
181
+ public getServiceUrl() {
182
+ return this.serviceUrl;
183
+ }
184
+
185
+ /**
186
+ * @returns {Array}
187
+ * @public
188
+ * @memberof RecordingController
189
+ */
190
+ public getDisplayHints() {
191
+ return this.displayHints;
192
+ }
193
+
194
+ /**
195
+ * @param {Object} options
196
+ * @returns {void}
197
+ * @private
198
+ * @memberof RecordingController
199
+ */
200
+ private extract(options?: {
201
+ serviceUrl?: string;
202
+ sessionId: string;
203
+ locusUrl: string;
204
+ displayHints?: Array<string>;
205
+ }) {
206
+ this.setServiceUrl(options?.serviceUrl);
207
+ this.setSessionId(options?.sessionId);
208
+ this.setDisplayHints(options?.displayHints);
209
+ this.setLocusUrl(options?.locusUrl);
210
+ }
211
+
212
+ /**
213
+ * @param {RecordingAction} action
214
+ * @private
215
+ * @memberof RecordingController
216
+ * @returns {Promise}
217
+ */
218
+ private recordingService(action: RecordingAction): Promise<any> {
219
+ // @ts-ignore
220
+ return this.request.request({
221
+ body: {
222
+ meetingInfo: {
223
+ locusSessionId: this.sessionId,
224
+ },
225
+ recording: {
226
+ action: action.toLowerCase(),
227
+ },
228
+ },
229
+ uri: `${this.serviceUrl}/loci/${this.locusId}/recording`,
230
+ method: HTTP_VERBS.PUT,
231
+ });
232
+ }
233
+
234
+ /**
235
+ * @param {RecordingAction} action
236
+ * @private
237
+ * @memberof RecordingController
238
+ * @returns {Promise}
239
+ */
240
+ private recordingControls(action: RecordingAction): Promise<any> {
241
+ const record = Util.deriveRecordingStates(action);
242
+
243
+ LoggerProxy.logger.log(`RecordingController:index#recordingControls --> ${record}`);
244
+
245
+ // @ts-ignore
246
+ return this.request.request({
247
+ uri: `${this.locusUrl}/${CONTROLS}`,
248
+ body: {
249
+ record,
250
+ },
251
+ method: HTTP_VERBS.PATCH,
252
+ });
253
+ }
254
+
255
+ /**
256
+ * @param {RecordingAction} action
257
+ * @private
258
+ * @memberof RecordingController
259
+ * @returns {Promise}
260
+ */
261
+ private recordingFacade(action: RecordingAction): Promise<any> {
262
+ LoggerProxy.logger.log(
263
+ `RecordingController:index#recordingFacade --> recording action [${action}]`
264
+ );
265
+
266
+ // assumes action is proper cased (i.e., Example)
267
+ if (Util?.[`canUser${action}`](this.displayHints)) {
268
+ if (this.serviceUrl) {
269
+ return this.recordingService(action);
270
+ }
271
+
272
+ return this.recordingControls(action);
273
+ }
274
+
275
+ return Promise.reject(
276
+ new PermissionError(`${action} recording not allowed, due to moderator property.`)
277
+ );
278
+ }
279
+
280
+ /**
281
+ * @private
282
+ * @memberof RecordingController
283
+ * @returns {Promise}
284
+ */
285
+ public startRecording(): Promise<any> {
286
+ return this.recordingFacade(RecordingAction.Start);
287
+ }
288
+
289
+ /**
290
+ * @private
291
+ * @memberof RecordingController
292
+ * @returns {Promise}
293
+ */
294
+ public stopRecording(): Promise<any> {
295
+ return this.recordingFacade(RecordingAction.Stop);
296
+ }
297
+
298
+ /**
299
+ * @private
300
+ * @memberof RecordingController
301
+ * @returns {Promise}
302
+ */
303
+ public pauseRecording(): Promise<any> {
304
+ return this.recordingFacade(RecordingAction.Pause);
305
+ }
306
+
307
+ /**
308
+ * @private
309
+ * @memberof RecordingController
310
+ * @returns {Promise}
311
+ */
312
+ public resumeRecording(): Promise<any> {
313
+ return this.recordingFacade(RecordingAction.Resume);
314
+ }
315
+ }
@@ -0,0 +1,58 @@
1
+ import {DISPLAY_HINTS} from '../constants';
2
+ import RecordingAction from './enums';
3
+
4
+ const canUserStart = (displayHints: Array<string>): boolean =>
5
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);
6
+
7
+ const canUserPause = (displayHints: Array<string>): boolean =>
8
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);
9
+
10
+ const canUserResume = (displayHints: Array<string>): boolean =>
11
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME);
12
+
13
+ const canUserStop = (displayHints: Array<string>): boolean =>
14
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP);
15
+
16
+ const extractLocusId = (url: string) => {
17
+ return url?.split('/').pop();
18
+ };
19
+
20
+ const deriveRecordingStates = (action: RecordingAction): {recording: boolean; paused: boolean} => {
21
+ let recording;
22
+ let paused;
23
+
24
+ switch (action) {
25
+ case RecordingAction.Start:
26
+ recording = true;
27
+ paused = false;
28
+ break;
29
+ case RecordingAction.Stop:
30
+ recording = false;
31
+ paused = false;
32
+ break;
33
+ case RecordingAction.Resume:
34
+ recording = true;
35
+ paused = false;
36
+ break;
37
+ case RecordingAction.Pause:
38
+ recording = true;
39
+ paused = true;
40
+ break;
41
+ default:
42
+ throw new Error(`Recording state cannot be derived from invalid action: ${action}`);
43
+ }
44
+
45
+ return {
46
+ recording,
47
+ paused,
48
+ };
49
+ };
50
+
51
+ export default {
52
+ canUserStart,
53
+ canUserPause,
54
+ canUserResume,
55
+ canUserStop,
56
+ deriveRecordingStates,
57
+ extractLocusId,
58
+ };
package/src/roap/index.ts CHANGED
@@ -170,8 +170,8 @@ export default class Roap extends StatelessWebexPlugin {
170
170
  locusSelfUrl: meeting.selfUrl,
171
171
  mediaId: options.mediaId,
172
172
  correlationId: options.correlationId,
173
- audioMuted: meeting.isAudioMuted(),
174
- videoMuted: meeting.isVideoMuted(),
173
+ audioMuted: meeting.audio?.isLocallyMuted(),
174
+ videoMuted: meeting.video?.isLocallyMuted(),
175
175
  meetingId: meeting.id,
176
176
  })
177
177
  .then(() => {
@@ -222,8 +222,8 @@ export default class Roap extends StatelessWebexPlugin {
222
222
  locusSelfUrl: meeting.selfUrl,
223
223
  mediaId: options.mediaId,
224
224
  correlationId: options.correlationId,
225
- audioMuted: options.audioMuted,
226
- videoMuted: options.videoMuted,
225
+ audioMuted: meeting.audio?.isLocallyMuted(),
226
+ videoMuted: meeting.video?.isLocallyMuted(),
227
227
  meetingId: meeting.id,
228
228
  })
229
229
  .then(() => {
@@ -295,8 +295,8 @@ export default class Roap extends StatelessWebexPlugin {
295
295
  correlationId: meeting.correlationId,
296
296
  locusSelfUrl: meeting.selfUrl,
297
297
  mediaId: sendEmptyMediaId ? '' : meeting.mediaId,
298
- audioMuted: meeting.isAudioMuted(),
299
- videoMuted: meeting.isVideoMuted(),
298
+ audioMuted: meeting.audio?.isLocallyMuted(),
299
+ videoMuted: meeting.video?.isLocallyMuted(),
300
300
  meetingId: meeting.id,
301
301
  })
302
302
  .then(({locus, mediaConnections}) => {
@@ -353,8 +353,8 @@ export default class Roap extends StatelessWebexPlugin {
353
353
  roapMessage,
354
354
  // eslint-disable-next-line no-warning-comments
355
355
  // TODO: check whats the need for video and audiomute
356
- audioMuted: !!meeting.isAudioMuted(),
357
- videoMuted: !!meeting.isVideoMuted(),
356
+ audioMuted: meeting.audio?.isLocallyMuted(),
357
+ videoMuted: meeting.video?.isLocallyMuted(),
358
358
  })
359
359
  ),
360
360
  // mediaId: meeting.mediaId
@@ -177,8 +177,8 @@ export default class TurnDiscovery {
177
177
  locusSelfUrl: meeting.selfUrl,
178
178
  // @ts-ignore - Fix missing type
179
179
  mediaId: isReconnecting ? '' : meeting.mediaId,
180
- audioMuted: meeting.isAudioMuted(),
181
- videoMuted: meeting.isVideoMuted(),
180
+ audioMuted: meeting.audio?.isLocallyMuted(),
181
+ videoMuted: meeting.video?.isLocallyMuted(),
182
182
  meetingId: meeting.id,
183
183
  })
184
184
  .then(({mediaConnections}) => {
@@ -211,8 +211,8 @@ export default class TurnDiscovery {
211
211
  // @ts-ignore - fix type
212
212
  mediaId: meeting.mediaId,
213
213
  correlationId: meeting.correlationId,
214
- audioMuted: meeting.isAudioMuted(),
215
- videoMuted: meeting.isVideoMuted(),
214
+ audioMuted: meeting.audio?.isLocallyMuted(),
215
+ videoMuted: meeting.video?.isLocallyMuted(),
216
216
  meetingId: meeting.id,
217
217
  });
218
218
  }
@@ -230,7 +230,7 @@ export default class TurnDiscovery {
230
230
  * media connection just after a reconnection
231
231
  * @returns {Promise}
232
232
  */
233
- doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {
233
+ doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
234
234
  // @ts-ignore - fix type
235
235
  const isAnyClusterReachable = meeting.webex.meetings.reachability.isAnyClusterReachable();
236
236
 
@@ -26,6 +26,7 @@ export const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSen
26
26
 
27
27
  // @ts-ignore
28
28
  audioReceiver.streams[0].common.maxRtpJitter =
29
+ // @ts-ignore
29
30
  max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
30
31
  audioReceiver.streams[0].common.meanRtpJitter =
31
32
  mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
@@ -72,6 +73,7 @@ export const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent})
72
73
 
73
74
  // @ts-ignore
74
75
  audioSender.common.maxRemoteJitter =
76
+ // @ts-ignore
75
77
  max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
76
78
  audioSender.common.meanRemoteJitter =
77
79
  mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
@@ -96,6 +98,7 @@ export const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent})
96
98
 
97
99
  // @ts-ignore
98
100
  audioSender.common.maxRoundTripTime =
101
+ // @ts-ignore
99
102
  max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
100
103
  audioSender.common.meanRoundTripTime =
101
104
  mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
@@ -152,6 +155,7 @@ export const getVideoReceiverMqa = ({
152
155
 
153
156
  // @ts-ignore
154
157
  videoReceiver.common.maxRemoteJitter =
158
+ // @ts-ignore
155
159
  max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
156
160
  videoReceiver.common.meanRemoteJitter =
157
161
  mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
@@ -217,6 +221,7 @@ export const getVideoSenderMqa = ({
217
221
 
218
222
  // @ts-ignore
219
223
  videoSender.common.maxRemoteJitter =
224
+ // @ts-ignore
220
225
  max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
221
226
  videoSender.common.meanRemoteJitter =
222
227
  mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
@@ -239,6 +244,7 @@ export const getVideoSenderMqa = ({
239
244
 
240
245
  // @ts-ignore
241
246
  videoSender.common.maxRoundTripTime =
247
+ // @ts-ignore
242
248
  max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
243
249
  videoSender.common.meanRoundTripTime =
244
250
  mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
@@ -5,7 +5,7 @@ import {assert} from '@webex/test-helper-chai';
5
5
  import {skipInNode} from '@webex/test-helper-mocha';
6
6
  import sinon from 'sinon';
7
7
 
8
- import BrowserDetection from '@webex/plugin-meetings/src/common/browser-detection';
8
+ import BrowserDetection from '@webex/plugin-meetings/dist/common/browser-detection';
9
9
 
10
10
  import DEFAULT_RESOLUTIONS from '../../../src/config';
11
11
  import testUtils from '../../utils/testUtils';
@@ -2,7 +2,7 @@
2
2
  import {assert} from '@webex/test-helper-chai';
3
3
  import {skipInNode, jenkinsOnly} from '@webex/test-helper-mocha';
4
4
  import {patterns} from '@webex/common';
5
- import MeetingInfoUtil from '@webex/plugin-meetings/src/meeting-info/utilv2';
5
+ import MeetingInfoUtil from '@webex/plugin-meetings/dist/meeting-info/utilv2';
6
6
 
7
7
  import CMR from '../../utils/cmr';
8
8
  import testUtils from '../../utils/testUtils';
@@ -1,4 +1,4 @@
1
- import Transcription from '@webex/plugin-meetings/src/transcription';
1
+ import Transcription from '@webex/plugin-meetings/dist/transcription';
2
2
  import {assert} from '@webex/test-helper-chai';
3
3
  import sinon from 'sinon';
4
4