@webex/plugin-meetings 3.0.0-beta.7 → 3.0.0-beta.9

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 (204) hide show
  1. package/dist/common/browser-detection.js.map +1 -1
  2. package/dist/common/collection.js.map +1 -1
  3. package/dist/common/config.js.map +1 -1
  4. package/dist/common/errors/captcha-error.js +7 -0
  5. package/dist/common/errors/captcha-error.js.map +1 -1
  6. package/dist/common/errors/intent-to-join.js +8 -0
  7. package/dist/common/errors/intent-to-join.js.map +1 -1
  8. package/dist/common/errors/join-meeting.js +8 -0
  9. package/dist/common/errors/join-meeting.js.map +1 -1
  10. package/dist/common/errors/media.js +7 -0
  11. package/dist/common/errors/media.js.map +1 -1
  12. package/dist/common/errors/parameter.js.map +1 -1
  13. package/dist/common/errors/password-error.js +7 -0
  14. package/dist/common/errors/password-error.js.map +1 -1
  15. package/dist/common/errors/permission.js +7 -0
  16. package/dist/common/errors/permission.js.map +1 -1
  17. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  18. package/dist/common/errors/reconnection.js +7 -0
  19. package/dist/common/errors/reconnection.js.map +1 -1
  20. package/dist/common/errors/stats.js +7 -0
  21. package/dist/common/errors/stats.js.map +1 -1
  22. package/dist/common/errors/webex-errors.js.map +1 -1
  23. package/dist/common/errors/webex-meetings-error.js +5 -2
  24. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  25. package/dist/common/events/events-scope.js.map +1 -1
  26. package/dist/common/events/events.js.map +1 -1
  27. package/dist/common/events/trigger-proxy.js.map +1 -1
  28. package/dist/common/events/util.js.map +1 -1
  29. package/dist/common/logs/logger-config.js.map +1 -1
  30. package/dist/common/logs/logger-proxy.js.map +1 -1
  31. package/dist/common/logs/request.js +3 -0
  32. package/dist/common/logs/request.js.map +1 -1
  33. package/dist/common/queue.js.map +1 -1
  34. package/dist/config.js.map +1 -1
  35. package/dist/constants.js.map +1 -1
  36. package/dist/locus-info/controlsUtils.js.map +1 -1
  37. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  38. package/dist/locus-info/fullState.js.map +1 -1
  39. package/dist/locus-info/hostUtils.js.map +1 -1
  40. package/dist/locus-info/index.js +43 -5
  41. package/dist/locus-info/index.js.map +1 -1
  42. package/dist/locus-info/infoUtils.js.map +1 -1
  43. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  44. package/dist/locus-info/parser.js +12 -3
  45. package/dist/locus-info/parser.js.map +1 -1
  46. package/dist/locus-info/selfUtils.js.map +1 -1
  47. package/dist/media/index.js.map +1 -1
  48. package/dist/media/properties.js +12 -0
  49. package/dist/media/properties.js.map +1 -1
  50. package/dist/media/util.js.map +1 -1
  51. package/dist/mediaQualityMetrics/config.js.map +1 -1
  52. package/dist/meeting/effectsState.js +8 -1
  53. package/dist/meeting/effectsState.js.map +1 -1
  54. package/dist/meeting/index.js +173 -50
  55. package/dist/meeting/index.js.map +1 -1
  56. package/dist/meeting/muteState.js +6 -0
  57. package/dist/meeting/muteState.js.map +1 -1
  58. package/dist/meeting/request.js +54 -24
  59. package/dist/meeting/request.js.map +1 -1
  60. package/dist/meeting/state.js.map +1 -1
  61. package/dist/meeting/util.js.map +1 -1
  62. package/dist/meeting-info/collection.js +4 -1
  63. package/dist/meeting-info/collection.js.map +1 -1
  64. package/dist/meeting-info/index.js +5 -0
  65. package/dist/meeting-info/index.js.map +1 -1
  66. package/dist/meeting-info/meeting-info-v2.js +14 -2
  67. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  68. package/dist/meeting-info/request.js +3 -0
  69. package/dist/meeting-info/request.js.map +1 -1
  70. package/dist/meeting-info/util.js.map +1 -1
  71. package/dist/meeting-info/utilv2.js.map +1 -1
  72. package/dist/meetings/collection.js +4 -1
  73. package/dist/meetings/collection.js.map +1 -1
  74. package/dist/meetings/index.js +72 -20
  75. package/dist/meetings/index.js.map +1 -1
  76. package/dist/meetings/request.js +4 -0
  77. package/dist/meetings/request.js.map +1 -1
  78. package/dist/meetings/util.js.map +1 -1
  79. package/dist/member/index.js +30 -7
  80. package/dist/member/index.js.map +1 -1
  81. package/dist/member/util.js +2 -1
  82. package/dist/member/util.js.map +1 -1
  83. package/dist/members/collection.js +1 -0
  84. package/dist/members/collection.js.map +1 -1
  85. package/dist/members/index.js +14 -1
  86. package/dist/members/index.js.map +1 -1
  87. package/dist/members/request.js +19 -9
  88. package/dist/members/request.js.map +1 -1
  89. package/dist/members/util.js.map +1 -1
  90. package/dist/metrics/config.js.map +1 -1
  91. package/dist/metrics/constants.js.map +1 -1
  92. package/dist/metrics/index.js +8 -0
  93. package/dist/metrics/index.js.map +1 -1
  94. package/dist/networkQualityMonitor/index.js +10 -2
  95. package/dist/networkQualityMonitor/index.js.map +1 -1
  96. package/dist/personal-meeting-room/index.js +11 -0
  97. package/dist/personal-meeting-room/index.js.map +1 -1
  98. package/dist/personal-meeting-room/request.js +2 -1
  99. package/dist/personal-meeting-room/request.js.map +1 -1
  100. package/dist/personal-meeting-room/util.js.map +1 -1
  101. package/dist/reachability/index.js +17 -7
  102. package/dist/reachability/index.js.map +1 -1
  103. package/dist/reachability/request.js +1 -0
  104. package/dist/reachability/request.js.map +1 -1
  105. package/dist/reconnection-manager/index.js +21 -2
  106. package/dist/reconnection-manager/index.js.map +1 -1
  107. package/dist/roap/index.js +23 -13
  108. package/dist/roap/index.js.map +1 -1
  109. package/dist/roap/request.js +5 -2
  110. package/dist/roap/request.js.map +1 -1
  111. package/dist/roap/turnDiscovery.js +9 -1
  112. package/dist/roap/turnDiscovery.js.map +1 -1
  113. package/dist/statsAnalyzer/global.js.map +1 -1
  114. package/dist/statsAnalyzer/index.js +19 -1
  115. package/dist/statsAnalyzer/index.js.map +1 -1
  116. package/dist/statsAnalyzer/mqaUtil.js +9 -3
  117. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  118. package/dist/transcription/index.js +10 -3
  119. package/dist/transcription/index.js.map +1 -1
  120. package/package.json +17 -18
  121. package/src/common/{browser-detection.js → browser-detection.ts} +1 -1
  122. package/src/common/collection.ts +6 -6
  123. package/src/common/{config.js → config.ts} +1 -1
  124. package/src/common/errors/{captcha-error.js → captcha-error.ts} +5 -1
  125. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +6 -1
  126. package/src/common/errors/{join-meeting.js → join-meeting.ts} +6 -1
  127. package/src/common/errors/{media.js → media.ts} +5 -1
  128. package/src/common/errors/parameter.ts +3 -2
  129. package/src/common/errors/{password-error.js → password-error.ts} +5 -1
  130. package/src/common/errors/{permission.js → permission.ts} +5 -1
  131. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  132. package/src/common/errors/{reconnection.js → reconnection.ts} +5 -1
  133. package/src/common/errors/{stats.js → stats.ts} +5 -1
  134. package/src/common/errors/{webex-errors.js → webex-errors.ts} +1 -2
  135. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +3 -1
  136. package/src/common/events/{events-scope.js → events-scope.ts} +1 -1
  137. package/src/common/events/{events.js → events.ts} +0 -0
  138. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +1 -2
  139. package/src/common/events/{util.js → util.ts} +1 -1
  140. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  141. package/src/common/logs/{logger-proxy.js → logger-proxy.ts} +1 -1
  142. package/src/common/logs/{request.js → request.ts} +12 -2
  143. package/src/common/queue.ts +1 -2
  144. package/src/{config.js → config.ts} +1 -0
  145. package/src/constants.ts +2 -1
  146. package/src/locus-info/{controlsUtils.js → controlsUtils.ts} +4 -4
  147. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  148. package/src/locus-info/{fullState.js → fullState.ts} +1 -1
  149. package/src/locus-info/{hostUtils.js → hostUtils.ts} +5 -5
  150. package/src/locus-info/{index.js → index.ts} +67 -32
  151. package/src/locus-info/{infoUtils.js → infoUtils.ts} +3 -4
  152. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +13 -13
  153. package/src/locus-info/{parser.js → parser.ts} +22 -12
  154. package/src/locus-info/{selfUtils.js → selfUtils.ts} +17 -19
  155. package/src/media/{index.js → index.ts} +62 -16
  156. package/src/media/{properties.js → properties.ts} +16 -4
  157. package/src/media/{util.js → util.ts} +1 -1
  158. package/src/mediaQualityMetrics/{config.js → config.ts} +1 -1
  159. package/src/meeting/{effectsState.js → effectsState.ts} +12 -6
  160. package/src/meeting/{index.js → index.ts} +341 -156
  161. package/src/meeting/{muteState.js → muteState.ts} +16 -11
  162. package/src/meeting/{request.js → request.ts} +124 -36
  163. package/src/meeting/{state.js → state.ts} +6 -6
  164. package/src/meeting/{util.js → util.ts} +4 -4
  165. package/src/meeting-info/{collection.js → collection.ts} +4 -1
  166. package/src/meeting-info/{index.js → index.ts} +10 -6
  167. package/src/meeting-info/{meeting-info-v2.js → meeting-info-v2.ts} +28 -10
  168. package/src/meeting-info/{request.js → request.ts} +6 -2
  169. package/src/meeting-info/{util.js → util.ts} +6 -5
  170. package/src/meeting-info/{utilv2.js → utilv2.ts} +8 -7
  171. package/src/meetings/{collection.js → collection.ts} +5 -2
  172. package/src/meetings/{index.js → index.ts} +88 -21
  173. package/src/meetings/{request.js → request.ts} +6 -1
  174. package/src/meetings/{util.js → util.ts} +5 -3
  175. package/src/member/{index.js → index.ts} +46 -15
  176. package/src/member/{util.js → util.ts} +17 -16
  177. package/src/members/{collection.js → collection.ts} +2 -1
  178. package/src/members/{index.js → index.ts} +46 -26
  179. package/src/members/{request.js → request.ts} +16 -5
  180. package/src/members/{util.js → util.ts} +7 -7
  181. package/src/metrics/{config.js → config.ts} +0 -2
  182. package/src/metrics/{constants.js → constants.ts} +0 -0
  183. package/src/metrics/{index.js → index.ts} +27 -8
  184. package/src/networkQualityMonitor/{index.js → index.ts} +18 -3
  185. package/src/personal-meeting-room/{index.js → index.ts} +17 -4
  186. package/src/personal-meeting-room/{request.js → request.ts} +3 -1
  187. package/src/personal-meeting-room/{util.js → util.ts} +1 -1
  188. package/src/reachability/{index.js → index.ts} +28 -17
  189. package/src/reachability/request.ts +4 -2
  190. package/src/reconnection-manager/{index.js → index.ts} +41 -12
  191. package/src/roap/{index.js → index.ts} +27 -18
  192. package/src/roap/{request.js → request.ts} +14 -2
  193. package/src/roap/turnDiscovery.ts +14 -5
  194. package/src/statsAnalyzer/{global.js → global.ts} +0 -0
  195. package/src/statsAnalyzer/{index.js → index.ts} +36 -17
  196. package/src/statsAnalyzer/{mqaUtil.js → mqaUtil.ts} +6 -1
  197. package/src/transcription/{index.js → index.ts} +16 -11
  198. package/test/integration/spec/space-meeting.js +1 -2
  199. package/test/unit/spec/meeting/index.js +26 -14
  200. package/test/unit/spec/reconnection-manager/index.js +1 -0
  201. package/dist/peer-connection-manager/util.js +0 -124
  202. package/dist/peer-connection-manager/util.js.map +0 -1
  203. package/src/peer-connection-manager/util.ts +0 -117
  204. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
@@ -1,5 +1,6 @@
1
1
  import uuid from 'uuid';
2
2
  import {cloneDeep, isEqual, pick, isString} from 'lodash';
3
+ // @ts-ignore - Fix this
3
4
  import {StatelessWebexPlugin} from '@webex/webex-core';
4
5
  import {Media as WebRTCMedia, MediaConnection as MC} from '@webex/internal-media-core';
5
6
 
@@ -80,7 +81,7 @@ import InMeetingActions from './in-meeting-actions';
80
81
 
81
82
  const {isBrowser} = BrowserDetection();
82
83
 
83
- const logRequest = (request, {header = '', success = '', failure = ''}) => {
84
+ const logRequest = (request: any, { header = '', success = '', failure = '' }) => {
84
85
  LoggerProxy.logger.info(header);
85
86
 
86
87
  return request
@@ -391,6 +392,92 @@ export const MEDIA_UPDATE_TYPE = {
391
392
  * @class Meeting
392
393
  */
393
394
  export default class Meeting extends StatelessWebexPlugin {
395
+ attrs: any;
396
+ audio: any;
397
+ conversationUrl: string;
398
+ correlationId: string;
399
+ destination: string;
400
+ destinationType: string;
401
+ deviceUrl: string;
402
+ effects: any;
403
+ hostId: string;
404
+ id: string;
405
+ isMultistream: boolean;
406
+ locusUrl: string;
407
+ mediaConnections: any[];
408
+ mediaId?: string;
409
+ meetingFiniteStateMachine: any;
410
+ meetingInfo: object;
411
+ meetingRequest: any;
412
+ members: Members;
413
+ options: object;
414
+ orgId: string;
415
+ owner: string;
416
+ partner: any;
417
+ policy: string;
418
+ reconnectionManager: ReconnectionManager;
419
+ resource: string;
420
+ roap: Roap;
421
+ roapSeq: number;
422
+ sipUri: string;
423
+ type: string;
424
+ userId: string;
425
+ video: any;
426
+ callEvents: any[];
427
+ deferJoin: Promise<any>;
428
+ dialInDeviceStatus: string;
429
+ dialInUrl: string;
430
+ dialOutDeviceStatus: string;
431
+ dialOutUrl: string;
432
+ fetchMeetingInfoTimeoutId: NodeJS.Timeout;
433
+ floorGrantPending: boolean;
434
+ hasJoinedOnce: boolean;
435
+ hasWebsocketConnected: boolean;
436
+ inMeetingActions: InMeetingActions;
437
+ isLocalShareLive: boolean;
438
+ isRoapInProgress: boolean;
439
+ isSharing: boolean;
440
+ keepAliveTimerId: NodeJS.Timeout;
441
+ lastVideoLayoutInfo: any;
442
+ locusInfo: any;
443
+ media: MultistreamMedia;
444
+ mediaProperties: MediaProperties;
445
+ mediaRequestManagers: {
446
+ audio: MediaRequestManager;
447
+ video: MediaRequestManager;
448
+ };
449
+ meetingInfoFailureReason: string;
450
+ networkQualityMonitor: NetworkQualityMonitor;
451
+ networkStatus: string;
452
+ passwordStatus: string;
453
+ queuedMediaUpdates: any[];
454
+ recording: any;
455
+ remoteMediaManager: RemoteMediaManager | null;
456
+ requiredCaptcha: any;
457
+ receiveSlotManager: ReceiveSlotManager;
458
+ shareStatus: string;
459
+ statsAnalyzer: StatsAnalyzer;
460
+ transcription: Transcription;
461
+ updateMediaConnections: (mediaConnections: any[]) => void;
462
+ endCallInitiateJoinReq: any;
463
+ endJoinReqResp: any;
464
+ endLocalSDPGenRemoteSDPRecvDelay: any;
465
+ joinedWith: any;
466
+ locusId: any;
467
+ startCallInitiateJoinReq: any;
468
+ startJoinReqResp: any;
469
+ startLocalSDPGenRemoteSDPRecvDelay: any;
470
+ wirelessShare: any;
471
+ guest: any;
472
+ meetingJoinUrl: any;
473
+ meetingNumber: any;
474
+ meetingState: any;
475
+ permissionToken: any;
476
+ resourceId: any;
477
+ resourceUrl: string;
478
+ selfId: string;
479
+ state: any;
480
+
394
481
  namespace = MEETINGS;
395
482
 
396
483
  /**
@@ -399,7 +486,7 @@ export default class Meeting extends StatelessWebexPlugin {
399
486
  * @constructor
400
487
  * @memberof Meeting
401
488
  */
402
- constructor(attrs, options) {
489
+ constructor(attrs: any, options: object) {
403
490
  super({}, options);
404
491
  /**
405
492
  * @instance
@@ -512,6 +599,7 @@ export default class Meeting extends StatelessWebexPlugin {
512
599
  locusUrl: (attrs.locus && attrs.locus.url),
513
600
  receiveSlotManager: this.receiveSlotManager,
514
601
  mediaRequestManagers: this.mediaRequestManagers,
602
+ // @ts-ignore - Fix type
515
603
  }, {parent: this.webex});
516
604
  /**
517
605
  * @instance
@@ -520,6 +608,7 @@ export default class Meeting extends StatelessWebexPlugin {
520
608
  * @private
521
609
  * @memberof Meeting
522
610
  */
611
+ // @ts-ignore - Fix type
523
612
  this.roap = new Roap({}, {parent: this.webex});
524
613
  /**
525
614
  * indicates if an SDP exchange is happening
@@ -691,7 +780,7 @@ export default class Meeting extends StatelessWebexPlugin {
691
780
  * @private
692
781
  * @memberof Meeting
693
782
  */
694
- this.updateMediaConnections = (mediaConnections) => {
783
+ this.updateMediaConnections = (mediaConnections: any[]) => {
695
784
  if (!isEqual(this.mediaConnections, mediaConnections)) {
696
785
  // grab last/latest item in the new mediaConnections information
697
786
  this.mediaConnections = mediaConnections.slice(-1);
@@ -724,7 +813,7 @@ export default class Meeting extends StatelessWebexPlugin {
724
813
  this.isSharing = false;
725
814
  /**
726
815
  * @instance
727
- * @type {Boolean}
816
+ * @type {string}
728
817
  * @readonly
729
818
  * @public
730
819
  * @memberof Meeting
@@ -742,7 +831,7 @@ export default class Meeting extends StatelessWebexPlugin {
742
831
  /**
743
832
  * There is a pending floor requested by the user
744
833
  * @instance
745
- * @type {floorGrantPending}
834
+ * @type {boolean}
746
835
  * @private
747
836
  * @memberof Meeting
748
837
  */
@@ -810,6 +899,7 @@ export default class Meeting extends StatelessWebexPlugin {
810
899
  * @private
811
900
  * @memberof Meeting
812
901
  */
902
+ // @ts-ignore - Fix type
813
903
  this.locusInfo = new LocusInfo(this.updateMeetingObject.bind(this), this.webex, this.id);
814
904
  // We had to add listeners first before setting up the locus instance
815
905
  /**
@@ -837,6 +927,7 @@ export default class Meeting extends StatelessWebexPlugin {
837
927
  * @private
838
928
  * @memberof Meeting
839
929
  */
930
+ // @ts-ignore - Fix type
840
931
  this.hasWebsocketConnected = this.webex.internal.mercury.connected;
841
932
 
842
933
  /**
@@ -930,9 +1021,7 @@ export default class Meeting extends StatelessWebexPlugin {
930
1021
  * @memberof Meeting
931
1022
  * @returns {Promise}
932
1023
  */
933
- async fetchMeetingInfo({
934
- password = null, captchaCode = null
935
- }) {
1024
+ public async fetchMeetingInfo({ password = null, captchaCode = null }: { password?: string; captchaCode?: string }) {
936
1025
  // when fetch meeting info is called directly by the client, we want to clear out the random timer for sdk to do it
937
1026
  if (this.fetchMeetingInfoTimeoutId) {
938
1027
  clearTimeout(this.fetchMeetingInfoTimeoutId);
@@ -974,6 +1063,7 @@ export default class Meeting extends StatelessWebexPlugin {
974
1063
  }
975
1064
  catch (err) {
976
1065
  if (err instanceof MeetingInfoV2PasswordError) {
1066
+ // @ts-ignore
977
1067
  LoggerProxy.logger.info(`Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ${this.destination} - password required (code=${err?.body?.code}).`);
978
1068
 
979
1069
  // when wbxappapi requires password it still populates partial meeting info in the response
@@ -992,6 +1082,7 @@ export default class Meeting extends StatelessWebexPlugin {
992
1082
  throw (new PasswordError());
993
1083
  }
994
1084
  else if (err instanceof MeetingInfoV2CaptchaError) {
1085
+ // @ts-ignore
995
1086
  LoggerProxy.logger.info(`Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ${this.destination} - captcha required (code=${err?.body?.code}).`);
996
1087
 
997
1088
  this.meetingInfoFailureReason = (this.requiredCaptcha) ?
@@ -1021,7 +1112,7 @@ export default class Meeting extends StatelessWebexPlugin {
1021
1112
  * @memberof Meeting
1022
1113
  * @returns {Promise<{isPasswordValid: boolean, requiredCaptcha: boolean, failureReason: MEETING_INFO_FAILURE_REASON}>}
1023
1114
  */
1024
- verifyPassword(password, captchaCode) {
1115
+ public verifyPassword(password: string, captchaCode: string) {
1025
1116
  return this.fetchMeetingInfo({
1026
1117
  password, captchaCode
1027
1118
  })
@@ -1051,7 +1142,7 @@ export default class Meeting extends StatelessWebexPlugin {
1051
1142
  * @memberof Meeting
1052
1143
  * @returns {Promise}
1053
1144
  */
1054
- refreshCaptcha() {
1145
+ public refreshCaptcha() {
1055
1146
  if (!this.requiredCaptcha) {
1056
1147
  return Promise.reject(new Error('There is no captcha to refresh'));
1057
1148
  }
@@ -1081,7 +1172,7 @@ export default class Meeting extends StatelessWebexPlugin {
1081
1172
  * @private
1082
1173
  * @memberof Meeting
1083
1174
  */
1084
- setUpLocusInfoListeners() {
1175
+ private setUpLocusInfoListeners() {
1085
1176
  // meeting update listeners
1086
1177
  this.setUpLocusInfoSelfListener();
1087
1178
  this.setUpLocusInfoMeetingListener();
@@ -1099,14 +1190,13 @@ export default class Meeting extends StatelessWebexPlugin {
1099
1190
  this.setUpLocusInfoMediaInactiveListener();
1100
1191
  }
1101
1192
 
1102
-
1103
1193
  /**
1104
1194
  * Set up the locus info listener for meetings disconnected due to inactivity
1105
1195
  * @returns {undefined}
1106
1196
  * @private
1107
1197
  * @memberof Meeting
1108
1198
  */
1109
- setUpLocusInfoMediaInactiveListener() {
1199
+ private setUpLocusInfoMediaInactiveListener() {
1110
1200
  // User gets kicked off the meeting due to inactivity or user did a refresh
1111
1201
  this.locusInfo.on(EVENTS.DISCONNECT_DUE_TO_INACTIVITY, (res) => {
1112
1202
  // https:// jira-eng-gpk2.cisco.com/jira/browse/SPARK-240520
@@ -1134,6 +1224,7 @@ export default class Meeting extends StatelessWebexPlugin {
1134
1224
 
1135
1225
  LoggerProxy.logger.error(`Meeting:index#setUpLocusInfoMediaInactiveListener --> Meeting disconnected due to inactivity: ${res.reason}`);
1136
1226
 
1227
+ // @ts-ignore - config coming from registerPlugin
1137
1228
  if (this.config.reconnection.autoRejoin) {
1138
1229
  this.reconnect();
1139
1230
  }
@@ -1157,7 +1248,7 @@ export default class Meeting extends StatelessWebexPlugin {
1157
1248
  * @private
1158
1249
  * @memberof Meeting
1159
1250
  */
1160
- setUpLocusInfoAssignHostListener() {
1251
+ private setUpLocusInfoAssignHostListener() {
1161
1252
  this.locusInfo.on(EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST, (payload) => {
1162
1253
  const changed = this.inMeetingActions.set({
1163
1254
  canAssignHost: payload.canAssignHost,
@@ -1183,7 +1274,7 @@ export default class Meeting extends StatelessWebexPlugin {
1183
1274
  * @private
1184
1275
  * @memberof Meeting
1185
1276
  */
1186
- setUpLocusFullStateListener() {
1277
+ private setUpLocusFullStateListener() {
1187
1278
  this.locusInfo.on(LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE, (payload) => {
1188
1279
  Trigger.trigger(
1189
1280
  this,
@@ -1214,7 +1305,13 @@ export default class Meeting extends StatelessWebexPlugin {
1214
1305
  * @returns {Object}
1215
1306
  * @memberof Meeting
1216
1307
  */
1217
- getAnalyzerMetricsPrePayload(options) {
1308
+ getAnalyzerMetricsPrePayload(options: {
1309
+ event: string;
1310
+ trackingId: string;
1311
+ locus: object;
1312
+ mediaConnections: Array<any>;
1313
+ errors: object;
1314
+ } | any) {
1218
1315
  if (options) {
1219
1316
  const {
1220
1317
  event,
@@ -1228,11 +1325,12 @@ export default class Meeting extends StatelessWebexPlugin {
1228
1325
  return null;
1229
1326
  }
1230
1327
 
1231
- const identifiers = {
1328
+ const identifiers: any = {
1232
1329
  correlationId: this.correlationId,
1233
1330
  userId: this.userId,
1234
1331
  deviceId: this.deviceUrl,
1235
1332
  orgId: this.orgId,
1333
+ // @ts-ignore fix type
1236
1334
  locusUrl: this.webex.internal.services.get('locus')
1237
1335
  };
1238
1336
 
@@ -1354,12 +1452,14 @@ export default class Meeting extends StatelessWebexPlugin {
1354
1452
  * @private
1355
1453
  * @memberof Meeting
1356
1454
  */
1357
- sendCallAnalyzerMetrics(options) {
1455
+ private sendCallAnalyzerMetrics(options: { event: string; trackingId: string; locus: object; errors: object }) {
1358
1456
  const payload = this.getAnalyzerMetricsPrePayload({
1457
+ // @ts-ignore - config coming from registerPlugin
1359
1458
  ...pick(this.config.metrics, ['clientType', 'subClientType']),
1360
1459
  ...options
1361
1460
  });
1362
1461
 
1462
+ // @ts-ignore - fix type
1363
1463
  return this.webex.internal.metrics.submitCallDiagnosticEvents(payload);
1364
1464
  }
1365
1465
 
@@ -1373,13 +1473,15 @@ export default class Meeting extends StatelessWebexPlugin {
1373
1473
  * @private
1374
1474
  * @memberof Meeting
1375
1475
  */
1376
- sendMediaQualityAnalyzerMetrics(options) {
1476
+ private sendMediaQualityAnalyzerMetrics(options: { event: string; trackingId: string; locus: object }) {
1377
1477
  const payload = this.getAnalyzerMetricsPrePayload({
1378
1478
  type: MQA_STATS.CA_TYPE,
1479
+ // @ts-ignore - config coming from registerPlugin
1379
1480
  ...pick(this.config.metrics, ['clientType', 'subClientType']),
1380
1481
  ...options
1381
1482
  });
1382
1483
 
1484
+ // @ts-ignore
1383
1485
  return this.webex.internal.metrics.submitCallDiagnosticEvents(payload);
1384
1486
  }
1385
1487
 
@@ -1390,7 +1492,7 @@ export default class Meeting extends StatelessWebexPlugin {
1390
1492
  * @returns {undefined}
1391
1493
  * @memberof Meeting
1392
1494
  */
1393
- setNetworkStatus(networkStatus) {
1495
+ private setNetworkStatus(networkStatus: string) {
1394
1496
  if (networkStatus === NETWORK_STATUS.DISCONNECTED) {
1395
1497
  Trigger.trigger(
1396
1498
  this,
@@ -1423,14 +1525,14 @@ export default class Meeting extends StatelessWebexPlugin {
1423
1525
  * @private
1424
1526
  * @memberof Meeting
1425
1527
  */
1426
- setUpLocusSelfListener() {
1528
+ private setUpLocusSelfListener() {
1427
1529
  this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_SELF, (payload) => {
1428
1530
  this.members.locusSelfUpdate(payload);
1429
1531
  this.pstnUpdate(payload);
1430
1532
 
1431
1533
  // If user moved to a JOINED state and there is a pending floor grant trigger it
1432
1534
  if (this.floorGrantPending && payload.newSelf.state === MEETING_STATE.STATES.JOINED) {
1433
- this.share()
1535
+ this.requestScreenShareFloor()
1434
1536
  .then(() => { this.floorGrantPending = false; });
1435
1537
  }
1436
1538
  });
@@ -1443,7 +1545,7 @@ export default class Meeting extends StatelessWebexPlugin {
1443
1545
  * @private
1444
1546
  * @memberof Meeting
1445
1547
  */
1446
- pstnUpdate(payload) {
1548
+ private pstnUpdate(payload: any) {
1447
1549
  if (this.locusInfo.self) {
1448
1550
  const dialInPstnDevice = payload.newSelf?.pstnDevices.find((device) => device.url === this.dialInUrl);
1449
1551
  const dialOutPstnDevice = payload.newSelf?.pstnDevices.find((device) => device.url === this.dialOutUrl);
@@ -1498,7 +1600,7 @@ export default class Meeting extends StatelessWebexPlugin {
1498
1600
  * @private
1499
1601
  * @memberof Meeting
1500
1602
  */
1501
- setUpLocusHostListener() {
1603
+ private setUpLocusHostListener() {
1502
1604
  this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_HOST, (payload) => {
1503
1605
  this.members.locusHostUpdate(payload);
1504
1606
  });
@@ -1512,13 +1614,12 @@ export default class Meeting extends StatelessWebexPlugin {
1512
1614
  * @private
1513
1615
  * @memberof Meeting
1514
1616
  */
1515
- setUpLocusParticipantsListener() {
1617
+ private setUpLocusParticipantsListener() {
1516
1618
  this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS, (payload) => {
1517
1619
  this.members.locusParticipantsUpdate(payload);
1518
1620
  });
1519
1621
  }
1520
1622
 
1521
-
1522
1623
  /**
1523
1624
  * Set up the locus info recording update listener
1524
1625
  * update recording value for the meeting
@@ -1537,7 +1638,7 @@ export default class Meeting extends StatelessWebexPlugin {
1537
1638
  * @private
1538
1639
  * @memberof Meeting
1539
1640
  */
1540
- setupLocusControlsListener() {
1641
+ private setupLocusControlsListener() {
1541
1642
  this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,
1542
1643
  ({state, modifiedBy, lastModified}) => {
1543
1644
  let event;
@@ -1593,6 +1694,8 @@ export default class Meeting extends StatelessWebexPlugin {
1593
1694
 
1594
1695
  this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,
1595
1696
  ({caption, transcribing}) => {
1697
+
1698
+ // @ts-ignore - config coming from registerPlugin
1596
1699
  if (transcribing && this.transcription && this.config.receiveTranscription) {
1597
1700
  this.receiveTranscription();
1598
1701
  }
@@ -1631,7 +1734,7 @@ export default class Meeting extends StatelessWebexPlugin {
1631
1734
  * @private
1632
1735
  * @memberof Meeting
1633
1736
  */
1634
- setUpLocusMediaSharesListener() {
1737
+ private setUpLocusMediaSharesListener() {
1635
1738
  // Will get triggered on local and remote share
1636
1739
  this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, (payload) => {
1637
1740
  const {content: contentShare, whiteboard: whiteboardShare} = payload.current;
@@ -1719,7 +1822,7 @@ export default class Meeting extends StatelessWebexPlugin {
1719
1822
  this,
1720
1823
  {
1721
1824
  file: 'meeting/index',
1722
- function: 'stopFloorRequest'
1825
+ function: 'localShare'
1723
1826
  },
1724
1827
  EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,
1725
1828
  {
@@ -1862,7 +1965,7 @@ export default class Meeting extends StatelessWebexPlugin {
1862
1965
  * @private
1863
1966
  * @memberof Meeting
1864
1967
  */
1865
- setUpLocusUrlListener() {
1968
+ private setUpLocusUrlListener() {
1866
1969
  this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_URL, (payload) => {
1867
1970
  this.members.locusUrlUpdate(payload);
1868
1971
  this.locusUrl = payload;
@@ -1876,7 +1979,7 @@ export default class Meeting extends StatelessWebexPlugin {
1876
1979
  * @private
1877
1980
  * @memberof meeting
1878
1981
  */
1879
- setUpLocusInfoMeetingInfoListener() {
1982
+ private setUpLocusInfoMeetingInfoListener() {
1880
1983
  this.locusInfo.on(LOCUSINFO.EVENTS.MEETING_LOCKED, (payload) => {
1881
1984
  if (payload) {
1882
1985
  Trigger.trigger(
@@ -1954,7 +2057,7 @@ export default class Meeting extends StatelessWebexPlugin {
1954
2057
  * @private
1955
2058
  * @memberof meeting
1956
2059
  */
1957
- setUpLocusEmbeddedAppsListener() {
2060
+ private setUpLocusEmbeddedAppsListener() {
1958
2061
  this.locusInfo.on(LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED, (embeddedApps) => {
1959
2062
  if (embeddedApps) {
1960
2063
  Trigger.trigger(
@@ -1976,7 +2079,7 @@ export default class Meeting extends StatelessWebexPlugin {
1976
2079
  * @private
1977
2080
  * @memberof Meeting
1978
2081
  */
1979
- setUpLocusInfoSelfListener() {
2082
+ private setUpLocusInfoSelfListener() {
1980
2083
  this.locusInfo.on(LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED, (payload) => {
1981
2084
  if (this.audio) {
1982
2085
  this.audio.handleServerLocalUnmuteRequired(this);
@@ -2074,6 +2177,7 @@ export default class Meeting extends StatelessWebexPlugin {
2074
2177
  }
2075
2178
  });
2076
2179
 
2180
+ // @ts-ignore - check if MEDIA_INACTIVITY exists
2077
2181
  this.locusInfo.on(LOCUSINFO.EVENTS.MEDIA_INACTIVITY, () => {
2078
2182
  Metrics.sendBehavioralMetric(
2079
2183
  BEHAVIORAL_METRICS.MEETING_MEDIA_INACTIVE,
@@ -2140,7 +2244,7 @@ export default class Meeting extends StatelessWebexPlugin {
2140
2244
  * @private
2141
2245
  * @memberof Meeting
2142
2246
  */
2143
- setUpLocusInfoMeetingListener() {
2247
+ private setUpLocusInfoMeetingListener() {
2144
2248
  this.locusInfo.on(EVENTS.REMOTE_RESPONSE, (payload) => {
2145
2249
  this.meetingFiniteStateMachine.remote(payload);
2146
2250
 
@@ -2148,6 +2252,7 @@ export default class Meeting extends StatelessWebexPlugin {
2148
2252
  this.leave({reason: payload.reason}).then(() => {
2149
2253
  LoggerProxy.logger.info('Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Attempting to leave meeting.');
2150
2254
  }).catch((error) => {
2255
+ // @ts-ignore
2151
2256
  LoggerProxy.logger.error(`Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Issue with leave for meeting, meeting still in collection: ${this.meeting}, error: ${error}`);
2152
2257
  });
2153
2258
  }
@@ -2176,6 +2281,7 @@ export default class Meeting extends StatelessWebexPlugin {
2176
2281
  this.leave({reason: payload.reason}).then(() => {
2177
2282
  LoggerProxy.logger.warn('Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. The meeting has been left, but has not been destroyed, you should see a later event for leave.');
2178
2283
  }).catch((error) => {
2284
+ // @ts-ignore
2179
2285
  LoggerProxy.logger.error(`Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ${this.meeting}, error: ${error}`);
2180
2286
  });
2181
2287
  }
@@ -2207,7 +2313,7 @@ export default class Meeting extends StatelessWebexPlugin {
2207
2313
  * @memberof Meeting
2208
2314
  * // TODO: is this function necessary?
2209
2315
  */
2210
- updateMeetingObject(object) {
2316
+ private updateMeetingObject(object: object) {
2211
2317
  // Validate if these are valid meeting object property
2212
2318
  // TODO: add a check to make sure the value passed in the constructor
2213
2319
  // is not changed by any delta event
@@ -2229,7 +2335,14 @@ export default class Meeting extends StatelessWebexPlugin {
2229
2335
  * @public
2230
2336
  * @memberof Meeting
2231
2337
  */
2232
- invite(invitee, alertIfActive = true) {
2338
+ public invite(
2339
+ invitee: {
2340
+ emailAddress: string;
2341
+ email: string;
2342
+ phoneNumber: string;
2343
+ },
2344
+ alertIfActive: boolean = true
2345
+ ) {
2233
2346
  return this.members.addMember(invitee, alertIfActive);
2234
2347
  }
2235
2348
 
@@ -2241,7 +2354,7 @@ export default class Meeting extends StatelessWebexPlugin {
2241
2354
  * @public
2242
2355
  * @memberof Meeting
2243
2356
  */
2244
- cancelPhoneInvite(invitee) {
2357
+ public cancelPhoneInvite(invitee: { phoneNumber: string }) {
2245
2358
  return this.members.cancelPhoneInvite(invitee);
2246
2359
  }
2247
2360
 
@@ -2252,7 +2365,7 @@ export default class Meeting extends StatelessWebexPlugin {
2252
2365
  * @public
2253
2366
  * @memberof Meeting
2254
2367
  */
2255
- admit(memberIds) {
2368
+ public admit(memberIds: Array<any>) {
2256
2369
  return this.members.admitMembers(memberIds);
2257
2370
  }
2258
2371
 
@@ -2263,7 +2376,7 @@ export default class Meeting extends StatelessWebexPlugin {
2263
2376
  * @public
2264
2377
  * @memberof Meeting
2265
2378
  */
2266
- remove(memberId) {
2379
+ public remove(memberId: string) {
2267
2380
  return this.members.removeMember(memberId);
2268
2381
  }
2269
2382
 
@@ -2275,7 +2388,7 @@ export default class Meeting extends StatelessWebexPlugin {
2275
2388
  * @public
2276
2389
  * @memberof Meeting
2277
2390
  */
2278
- mute(memberId, mute = true) {
2391
+ public mute(memberId: string, mute: boolean = true) {
2279
2392
  return this.members.muteMember(memberId, mute);
2280
2393
  }
2281
2394
 
@@ -2287,7 +2400,7 @@ export default class Meeting extends StatelessWebexPlugin {
2287
2400
  * @public
2288
2401
  * @memberof Meeting
2289
2402
  */
2290
- transfer(memberId, moderator = true) {
2403
+ public transfer(memberId: string, moderator: boolean = true) {
2291
2404
  return this.members.transferHostToMember(memberId, moderator);
2292
2405
  }
2293
2406
 
@@ -2297,7 +2410,7 @@ export default class Meeting extends StatelessWebexPlugin {
2297
2410
  * @public
2298
2411
  * @memberof Meeting
2299
2412
  */
2300
- getMembers() {
2413
+ public getMembers() {
2301
2414
  return this.members;
2302
2415
  }
2303
2416
 
@@ -2307,7 +2420,7 @@ export default class Meeting extends StatelessWebexPlugin {
2307
2420
  * @public
2308
2421
  * @memberof Meeting
2309
2422
  */
2310
- isAudioConnected() {
2423
+ public isAudioConnected() {
2311
2424
  return !!this.audio;
2312
2425
  }
2313
2426
 
@@ -2317,7 +2430,7 @@ export default class Meeting extends StatelessWebexPlugin {
2317
2430
  * @public
2318
2431
  * @memberof Meeting
2319
2432
  */
2320
- isAudioMuted() {
2433
+ public isAudioMuted() {
2321
2434
  return this.audio && this.audio.isMuted();
2322
2435
  }
2323
2436
 
@@ -2327,7 +2440,7 @@ export default class Meeting extends StatelessWebexPlugin {
2327
2440
  * @public
2328
2441
  * @memberof Meeting
2329
2442
  */
2330
- isAudioSelf() {
2443
+ public isAudioSelf() {
2331
2444
  return this.audio && this.audio.isSelf();
2332
2445
  }
2333
2446
 
@@ -2337,7 +2450,7 @@ export default class Meeting extends StatelessWebexPlugin {
2337
2450
  * @public
2338
2451
  * @memberof Meeting
2339
2452
  */
2340
- isVideoConnected() {
2453
+ public isVideoConnected() {
2341
2454
  return !!this.video;
2342
2455
  }
2343
2456
 
@@ -2347,7 +2460,7 @@ export default class Meeting extends StatelessWebexPlugin {
2347
2460
  * @public
2348
2461
  * @memberof Meeting
2349
2462
  */
2350
- isVideoMuted() {
2463
+ public isVideoMuted() {
2351
2464
  return this.video && this.video.isMuted();
2352
2465
  }
2353
2466
 
@@ -2357,7 +2470,7 @@ export default class Meeting extends StatelessWebexPlugin {
2357
2470
  * @public
2358
2471
  * @memberof Meeting
2359
2472
  */
2360
- isVideoSelf() {
2473
+ public isVideoSelf() {
2361
2474
  return this.video && this.video.isSelf();
2362
2475
  }
2363
2476
 
@@ -2374,7 +2487,17 @@ export default class Meeting extends StatelessWebexPlugin {
2374
2487
  * @private
2375
2488
  * @memberof Meeting
2376
2489
  */
2377
- parseMeetingInfo(meetingInfo, destination = null) {
2490
+ parseMeetingInfo(
2491
+ meetingInfo: {
2492
+ body: {
2493
+ conversationUrl: string;
2494
+ locusUrl: string;
2495
+ sipUri: string;
2496
+ owner: object;
2497
+ };
2498
+ } | any,
2499
+ destination: object | string | null = null
2500
+ ) {
2378
2501
  const webexMeetingInfo = meetingInfo?.body;
2379
2502
  // We try to use as much info from Locus meeting object, stored in destination
2380
2503
 
@@ -2388,7 +2511,9 @@ export default class Meeting extends StatelessWebexPlugin {
2388
2511
  if (locusMeetingObject || (webexMeetingInfo && !(meetingInfo?.errors && meetingInfo?.errors.length > 0))) {
2389
2512
  this.conversationUrl = locusMeetingObject?.conversationUrl || webexMeetingInfo?.conversationUrl || this.conversationUrl;
2390
2513
  this.locusUrl = locusMeetingObject?.url || webexMeetingInfo?.locusUrl || this.locusUrl;
2514
+ // @ts-ignore - config coming from registerPlugin
2391
2515
  this.setSipUri(this.config.experimental.enableUnifiedMeetings ? locusMeetingObject?.info.sipUri || webexMeetingInfo?.sipUrl : locusMeetingObject?.info.sipUri || webexMeetingInfo?.sipMeetingUri || this.sipUri);
2516
+ // @ts-ignore - config coming from registerPlugin
2392
2517
  if (this.config.experimental.enableUnifiedMeetings) {
2393
2518
  this.meetingNumber = locusMeetingObject?.info.webExMeetingId || webexMeetingInfo?.meetingNumber;
2394
2519
  this.meetingJoinUrl = webexMeetingInfo?.meetingJoinUrl;
@@ -2408,7 +2533,7 @@ export default class Meeting extends StatelessWebexPlugin {
2408
2533
  * @private
2409
2534
  * @memberof Meeting
2410
2535
  */
2411
- parseLocus(locus) {
2536
+ private parseLocus(locus: { url: string; participants: Array<any>; self: object }) {
2412
2537
  if (locus) {
2413
2538
  this.locusUrl = locus.url;
2414
2539
  // TODO: move this to parse participants module
@@ -2435,7 +2560,7 @@ export default class Meeting extends StatelessWebexPlugin {
2435
2560
  * @private
2436
2561
  * @memberof Meeting
2437
2562
  */
2438
- setSipUri(sipUri) {
2563
+ setSipUri(sipUri: string) {
2439
2564
  // This can be tel no, device id or a sip uri, user Id
2440
2565
  this.sipUri = sipUri;
2441
2566
  }
@@ -2453,8 +2578,14 @@ export default class Meeting extends StatelessWebexPlugin {
2453
2578
  * @private
2454
2579
  * @memberof Meeting
2455
2580
  */
2456
- setLocus(locus) {
2457
- const mtgLocus = locus.locus || locus;
2581
+ private setLocus(locus: {
2582
+ mediaConnections: Array<any>;
2583
+ locusUrl: string;
2584
+ locusId: string;
2585
+ mediaId: string;
2586
+ host: object;
2587
+ } | any) {
2588
+ const mtgLocus: any = locus.locus || locus;
2458
2589
 
2459
2590
  // LocusInfo object saves the locus object
2460
2591
  // this.locus = mtgLocus;
@@ -2474,7 +2605,7 @@ export default class Meeting extends StatelessWebexPlugin {
2474
2605
  * @public
2475
2606
  * @memberof Meeting
2476
2607
  */
2477
- uploadLogs(options = {file: 'meeting/index', function: 'uploadLogs'}) {
2608
+ public uploadLogs(options: object = { file: 'meeting/index', function: 'uploadLogs' }) {
2478
2609
  Trigger.trigger(
2479
2610
  this,
2480
2611
  options,
@@ -2483,7 +2614,6 @@ export default class Meeting extends StatelessWebexPlugin {
2483
2614
  );
2484
2615
  }
2485
2616
 
2486
-
2487
2617
  /**
2488
2618
  * Removes remote audio and video stream on the class instance and triggers an event
2489
2619
  * to developers
@@ -2492,7 +2622,7 @@ export default class Meeting extends StatelessWebexPlugin {
2492
2622
  * @memberof Meeting
2493
2623
  * @deprecated after v1.89.3
2494
2624
  */
2495
- unsetRemoteStream() {
2625
+ public unsetRemoteStream() {
2496
2626
  LoggerProxy.logger.warn('Meeting:index#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3');
2497
2627
  this.mediaProperties.unsetRemoteMedia();
2498
2628
  }
@@ -2513,7 +2643,7 @@ export default class Meeting extends StatelessWebexPlugin {
2513
2643
  * @memberof Meeting
2514
2644
  * @deprecated after v1.89.3
2515
2645
  */
2516
- closeRemoteStream() {
2646
+ public closeRemoteStream() {
2517
2647
  LoggerProxy.logger.warn('Meeting:index#closeRemoteStream --> [DEPRECATION WARNING]: closeRemoteStream has been deprecated after v1.89.3');
2518
2648
  this.closeRemoteTracks();
2519
2649
  }
@@ -2537,7 +2667,7 @@ export default class Meeting extends StatelessWebexPlugin {
2537
2667
  * @returns {void}
2538
2668
  * @inner
2539
2669
  */
2540
- const triggerMediaStoppedEvent = (mediaType) => {
2670
+ const triggerMediaStoppedEvent = (mediaType: string) => {
2541
2671
  Trigger.trigger(
2542
2672
  this,
2543
2673
  {
@@ -2559,7 +2689,7 @@ export default class Meeting extends StatelessWebexPlugin {
2559
2689
  * @inner
2560
2690
  */
2561
2691
  // eslint-disable-next-line arrow-body-style
2562
- const stopTrack = (track, type) => {
2692
+ const stopTrack = (track: MediaStreamTrack, type: string) => {
2563
2693
  return Media.stopTracks(track)
2564
2694
  .then(() => {
2565
2695
  const isTrackStopped = track && track.readyState === ENDED;
@@ -2587,7 +2717,7 @@ export default class Meeting extends StatelessWebexPlugin {
2587
2717
  * @private
2588
2718
  * @memberof Meeting
2589
2719
  */
2590
- sendLocalMediaReadyEvent() {
2720
+ private sendLocalMediaReadyEvent() {
2591
2721
  Trigger.trigger(
2592
2722
  this,
2593
2723
  {
@@ -2610,7 +2740,7 @@ export default class Meeting extends StatelessWebexPlugin {
2610
2740
  * @private
2611
2741
  * @memberof Meeting
2612
2742
  */
2613
- setLocalAudioTrack(audioTrack, emitEvent = true) {
2743
+ private setLocalAudioTrack(audioTrack: MediaStreamTrack, emitEvent: boolean = true) {
2614
2744
  if (audioTrack) {
2615
2745
  const settings = audioTrack.getSettings();
2616
2746
 
@@ -2637,7 +2767,7 @@ export default class Meeting extends StatelessWebexPlugin {
2637
2767
  * @private
2638
2768
  * @memberof Meeting
2639
2769
  */
2640
- setLocalVideoTrack(videoTrack, emitEvent = true) {
2770
+ private setLocalVideoTrack(videoTrack: MediaStreamTrack, emitEvent: boolean = true) {
2641
2771
  if (videoTrack) {
2642
2772
  const {
2643
2773
  aspectRatio, frameRate, height, width, deviceId
@@ -2677,7 +2807,7 @@ export default class Meeting extends StatelessWebexPlugin {
2677
2807
  * @public
2678
2808
  * @memberof Meeting
2679
2809
  */
2680
- setLocalTracks(localStream) {
2810
+ public setLocalTracks(localStream: any) {
2681
2811
  if (localStream) {
2682
2812
  const {audioTrack, videoTrack} = MeetingUtil.getTrack(localStream);
2683
2813
 
@@ -2690,12 +2820,12 @@ export default class Meeting extends StatelessWebexPlugin {
2690
2820
 
2691
2821
  /**
2692
2822
  * Sets the local media stream on the class and emits an event to the developer
2693
- * @param {Stream} localShare the local media stream
2823
+ * @param {MediaStream} localShare the local media stream
2694
2824
  * @returns {undefined}
2695
2825
  * @public
2696
2826
  * @memberof Meeting
2697
2827
  */
2698
- setLocalShareTrack(localShare) {
2828
+ public setLocalShareTrack(localShare: MediaStream) {
2699
2829
  let settings = null;
2700
2830
 
2701
2831
  if (localShare) {
@@ -2739,7 +2869,7 @@ export default class Meeting extends StatelessWebexPlugin {
2739
2869
  * @public
2740
2870
  * @memberof Meeting
2741
2871
  */
2742
- closeLocalStream() {
2872
+ public closeLocalStream() {
2743
2873
  const {audioTrack, videoTrack} = this.mediaProperties;
2744
2874
 
2745
2875
  return Media.stopTracks(audioTrack)
@@ -2774,7 +2904,7 @@ export default class Meeting extends StatelessWebexPlugin {
2774
2904
  * @public
2775
2905
  * @memberof Meeting
2776
2906
  */
2777
- closeLocalShare() {
2907
+ public closeLocalShare() {
2778
2908
  const track = this.mediaProperties.shareTrack;
2779
2909
 
2780
2910
  return Media.stopTracks(track).then(() => {
@@ -2803,7 +2933,7 @@ export default class Meeting extends StatelessWebexPlugin {
2803
2933
  * @public
2804
2934
  * @memberof Meeting
2805
2935
  */
2806
- unsetLocalVideoTrack() {
2936
+ public unsetLocalVideoTrack() {
2807
2937
  this.mediaProperties.unsetLocalVideoTrack();
2808
2938
  }
2809
2939
 
@@ -2813,7 +2943,7 @@ export default class Meeting extends StatelessWebexPlugin {
2813
2943
  * @public
2814
2944
  * @memberof Meeting
2815
2945
  */
2816
- unsetLocalShareTrack() {
2946
+ public unsetLocalShareTrack() {
2817
2947
  this.mediaProperties.unsetLocalShareTrack();
2818
2948
  }
2819
2949
 
@@ -2823,9 +2953,10 @@ export default class Meeting extends StatelessWebexPlugin {
2823
2953
  * @public
2824
2954
  * @memberof Meeting
2825
2955
  */
2826
- setMercuryListener() {
2956
+ public setMercuryListener() {
2827
2957
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
2828
2958
  // if the meeting has active peer connections, it should try to reconnect.
2959
+ // @ts-ignore
2829
2960
  this.webex.internal.mercury.on(ONLINE, () => {
2830
2961
  LoggerProxy.logger.info('Meeting:index#setMercuryListener --> Web socket online');
2831
2962
 
@@ -2845,6 +2976,7 @@ export default class Meeting extends StatelessWebexPlugin {
2845
2976
  this.hasWebsocketConnected = true;
2846
2977
  });
2847
2978
 
2979
+ // @ts-ignore
2848
2980
  this.webex.internal.mercury.on(OFFLINE, () => {
2849
2981
  LoggerProxy.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
2850
2982
  Metrics.postEvent({
@@ -2868,7 +3000,7 @@ export default class Meeting extends StatelessWebexPlugin {
2868
3000
  * @public
2869
3001
  * @memberof Meeting
2870
3002
  */
2871
- closePeerConnections() {
3003
+ public closePeerConnections() {
2872
3004
  if (this.mediaProperties.webrtcMediaConnection) {
2873
3005
  if (this.remoteMediaManager) {
2874
3006
  this.remoteMediaManager.stop();
@@ -2891,9 +3023,11 @@ export default class Meeting extends StatelessWebexPlugin {
2891
3023
  * @public
2892
3024
  * @memberof Meeting
2893
3025
  */
2894
- unsetPeerConnections() {
3026
+ public unsetPeerConnections() {
2895
3027
  this.mediaProperties.unsetPeerConnection();
3028
+ // @ts-ignore - config coming from registerPlugin
2896
3029
  if (this.config.reconnection.detection) {
3030
+ // @ts-ignore
2897
3031
  this.webex.internal.mercury.off(ONLINE);
2898
3032
  }
2899
3033
  }
@@ -2905,7 +3039,7 @@ export default class Meeting extends StatelessWebexPlugin {
2905
3039
  * @private
2906
3040
  * @memberof Meeting
2907
3041
  */
2908
- setCorrelationId(id) {
3042
+ private setCorrelationId(id: string) {
2909
3043
  this.correlationId = id;
2910
3044
  }
2911
3045
 
@@ -2915,11 +3049,12 @@ export default class Meeting extends StatelessWebexPlugin {
2915
3049
  * @public
2916
3050
  * @memberof Meeting
2917
3051
  */
2918
- muteAudio() {
3052
+ public muteAudio() {
2919
3053
  if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {
2920
3054
  return Promise.reject(new UserNotJoinedError());
2921
3055
  }
2922
3056
 
3057
+ // @ts-ignore
2923
3058
  if (!this.mediaId) {
2924
3059
  // Happens when addMedia and mute are triggered in succession
2925
3060
  return Promise.reject(new NoMediaEstablishedYetError());
@@ -2966,11 +3101,12 @@ export default class Meeting extends StatelessWebexPlugin {
2966
3101
  * @public
2967
3102
  * @memberof Meeting
2968
3103
  */
2969
- unmuteAudio() {
3104
+ public unmuteAudio() {
2970
3105
  if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {
2971
3106
  return Promise.reject(new UserNotJoinedError());
2972
3107
  }
2973
3108
 
3109
+ // @ts-ignore
2974
3110
  if (!this.mediaId) {
2975
3111
  // Happens when addMedia and mute are triggered in succession
2976
3112
  return Promise.reject(new NoMediaEstablishedYetError());
@@ -3017,11 +3153,12 @@ export default class Meeting extends StatelessWebexPlugin {
3017
3153
  * @public
3018
3154
  * @memberof Meeting
3019
3155
  */
3020
- muteVideo() {
3156
+ public muteVideo() {
3021
3157
  if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {
3022
3158
  return Promise.reject(new UserNotJoinedError());
3023
3159
  }
3024
3160
 
3161
+ // @ts-ignore
3025
3162
  if (!this.mediaId) {
3026
3163
  // Happens when addMedia and mute are triggered in succession
3027
3164
  return Promise.reject(new NoMediaEstablishedYetError());
@@ -3067,11 +3204,12 @@ export default class Meeting extends StatelessWebexPlugin {
3067
3204
  * @public
3068
3205
  * @memberof Meeting
3069
3206
  */
3070
- unmuteVideo() {
3207
+ public unmuteVideo() {
3071
3208
  if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {
3072
3209
  return Promise.reject(new UserNotJoinedError());
3073
3210
  }
3074
3211
 
3212
+ // @ts-ignore
3075
3213
  if (!this.mediaId) {
3076
3214
  // Happens when addMedia and mute are triggered in succession
3077
3215
  return Promise.reject(new NoMediaEstablishedYetError());
@@ -3136,7 +3274,13 @@ export default class Meeting extends StatelessWebexPlugin {
3136
3274
  * video: 'videoDeviceId'
3137
3275
  * }})
3138
3276
  */
3139
- joinWithMedia(options = {}) {
3277
+ public joinWithMedia(
3278
+ options: {
3279
+ joinOptions?: any;
3280
+ mediaSettings: any;
3281
+ audioVideoOptions?: any;
3282
+ } = {} as any
3283
+ ) {
3140
3284
  // TODO: add validations for parameters
3141
3285
  const {mediaSettings, joinOptions, audioVideoOptions} = options;
3142
3286
 
@@ -3180,19 +3324,21 @@ export default class Meeting extends StatelessWebexPlugin {
3180
3324
  * @public
3181
3325
  * @memberof Meeting
3182
3326
  */
3183
- reconnect(options) {
3327
+ public reconnect(options?: object) {
3184
3328
  LoggerProxy.logger.log(`Meeting:index#reconnect --> attempting to reconnect meeting ${this.id}`);
3185
3329
 
3186
3330
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
3187
3331
  return Promise.reject(new ParameterError('Cannot reconnect, ReconnectionManager must first be defined.'));
3188
3332
  }
3189
3333
 
3334
+ // @ts-ignore - currentMediaStatus coming from SelfUtil
3190
3335
  if (!MeetingUtil.isMediaEstablished(this.currentMediaStatus)) {
3191
3336
  return Promise.reject(new ParameterError('Cannot reconnect, Media has not established to reconnect'));
3192
3337
  }
3193
3338
 
3194
3339
  try {
3195
3340
  LoggerProxy.logger.info('Meeting:index#reconnect --> Validating reconnect ability.');
3341
+ // @ts-ignore
3196
3342
  this.reconnectionManager.validate();
3197
3343
  }
3198
3344
  catch (error) {
@@ -3216,7 +3362,6 @@ export default class Meeting extends StatelessWebexPlugin {
3216
3362
  EVENT_TRIGGERS.MEETING_RECONNECTION_STARTING
3217
3363
  );
3218
3364
 
3219
-
3220
3365
  return this.reconnectionManager
3221
3366
  .reconnect(options)
3222
3367
  .then(() => {
@@ -3289,7 +3434,7 @@ export default class Meeting extends StatelessWebexPlugin {
3289
3434
  * @private
3290
3435
  * @returns {void}
3291
3436
  */
3292
- monitorTranscriptionSocketConnection() {
3437
+ private monitorTranscriptionSocketConnection() {
3293
3438
  this.transcription.onCloseSocket((event) => {
3294
3439
  LoggerProxy.logger.info(
3295
3440
  `Meeting:index#onCloseSocket -->
@@ -3327,7 +3472,7 @@ export default class Meeting extends StatelessWebexPlugin {
3327
3472
  * @private
3328
3473
  * @returns {Promise<void>} a promise to open the WebSocket connection
3329
3474
  */
3330
- async receiveTranscription() {
3475
+ private async receiveTranscription() {
3331
3476
  LoggerProxy.logger.info(
3332
3477
  `Meeting:index#receiveTranscription -->
3333
3478
  Attempting to generate a web socket url.`
@@ -3335,6 +3480,7 @@ export default class Meeting extends StatelessWebexPlugin {
3335
3480
 
3336
3481
  try {
3337
3482
  const {datachannelUrl} = this.locusInfo.info;
3483
+ // @ts-ignore - fix type
3338
3484
  const {body: {webSocketUrl}} = await this.request({
3339
3485
  method: HTTP_VERBS.POST,
3340
3486
  uri: datachannelUrl,
@@ -3348,6 +3494,7 @@ export default class Meeting extends StatelessWebexPlugin {
3348
3494
 
3349
3495
  this.transcription = new Transcription(
3350
3496
  webSocketUrl,
3497
+ // @ts-ignore - fix type
3351
3498
  this.webex.sessionId,
3352
3499
  this.members,
3353
3500
  );
@@ -3371,6 +3518,7 @@ export default class Meeting extends StatelessWebexPlugin {
3371
3518
  });
3372
3519
 
3373
3520
  this.monitorTranscriptionSocketConnection();
3521
+ // @ts-ignore - fix type
3374
3522
  this.transcription.connect(this.webex.credentials.supertoken.access_token);
3375
3523
  }
3376
3524
  catch (error) {
@@ -3403,12 +3551,11 @@ export default class Meeting extends StatelessWebexPlugin {
3403
3551
  * @private
3404
3552
  * @returns{void}
3405
3553
  */
3406
- triggerStopReceivingTranscriptionEvent() {
3554
+ private triggerStopReceivingTranscriptionEvent() {
3407
3555
  LoggerProxy.logger.info(`
3408
3556
  Meeting:index#stopReceivingTranscription -->
3409
3557
  closed transcription LLM web socket connection successfully.`);
3410
3558
 
3411
-
3412
3559
  Trigger.trigger(
3413
3560
  this,
3414
3561
  {
@@ -3431,7 +3578,8 @@ export default class Meeting extends StatelessWebexPlugin {
3431
3578
  * if joining as host on second loop, pass pin and pass moderator if joining as guest on second loop
3432
3579
  * Scenario D: Joining any other way (sip, pstn, conversationUrl, link just need to specify resourceId)
3433
3580
  */
3434
- join(options = {}) {
3581
+ public join(options: any = {}) {
3582
+ // @ts-ignore - fix type
3435
3583
  if (!this.webex.meetings.registered) {
3436
3584
  const errorMessage = 'Meeting:index#join --> Device not registered';
3437
3585
  const error = new Error(errorMessage);
@@ -3559,6 +3707,7 @@ export default class Meeting extends StatelessWebexPlugin {
3559
3707
  return join;
3560
3708
  }).then(async (join) => {
3561
3709
  if (isBrowser) {
3710
+ // @ts-ignore - config coming from registerPlugin
3562
3711
  if (this.config.receiveTranscription || options.receiveTranscription) {
3563
3712
  if (this.isTranscriptionSupported()) {
3564
3713
  await this.receiveTranscription();
@@ -3570,7 +3719,6 @@ export default class Meeting extends StatelessWebexPlugin {
3570
3719
  LoggerProxy.logger.error('Meeting:index#join --> Receving transcription is not supported on this platform');
3571
3720
  }
3572
3721
 
3573
-
3574
3722
  return join;
3575
3723
  })
3576
3724
  .catch((error) => {
@@ -3623,7 +3771,7 @@ export default class Meeting extends StatelessWebexPlugin {
3623
3771
  * @public
3624
3772
  * @memberof Meeting
3625
3773
  */
3626
- usePhoneAudio(phoneNumber) {
3774
+ public usePhoneAudio(phoneNumber: string) {
3627
3775
  if (!phoneNumber) {
3628
3776
  return this.dialInPstn();
3629
3777
  }
@@ -3638,7 +3786,7 @@ export default class Meeting extends StatelessWebexPlugin {
3638
3786
  * @private
3639
3787
  * @memberof Meeting
3640
3788
  */
3641
- isPhoneProvisioned(pstnStatus) {
3789
+ private isPhoneProvisioned(pstnStatus: string) {
3642
3790
  return [PSTN_STATUS.JOINED, PSTN_STATUS.CONNECTED, PSTN_STATUS.SUCCESS].includes(pstnStatus);
3643
3791
  }
3644
3792
 
@@ -3648,7 +3796,7 @@ export default class Meeting extends StatelessWebexPlugin {
3648
3796
  * @private
3649
3797
  * @memberof Meeting
3650
3798
  */
3651
- dialInPstn() {
3799
+ private dialInPstn() {
3652
3800
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return Promise.resolve(); // prevent multiple dial in devices from being provisioned
3653
3801
 
3654
3802
  const {correlationId, locusUrl} = this;
@@ -3686,7 +3834,7 @@ export default class Meeting extends StatelessWebexPlugin {
3686
3834
  * @private
3687
3835
  * @memberof Meeting
3688
3836
  */
3689
- dialOutPstn(phoneNumber) {
3837
+ private dialOutPstn(phoneNumber: string) {
3690
3838
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return Promise.resolve(); // prevent multiple dial out devices from being provisioned
3691
3839
 
3692
3840
  const {correlationId, locusUrl} = this;
@@ -3725,7 +3873,7 @@ export default class Meeting extends StatelessWebexPlugin {
3725
3873
  * @memberof Meeting
3726
3874
  * @returns {Promise}
3727
3875
  */
3728
- disconnectPhoneAudio() {
3876
+ public disconnectPhoneAudio() {
3729
3877
  return Promise.all([
3730
3878
  this.isPhoneProvisioned(this.dialInDeviceStatus) ?
3731
3879
  MeetingUtil.disconnectPhoneAudio(this, this.dialInUrl) :
@@ -3743,7 +3891,7 @@ export default class Meeting extends StatelessWebexPlugin {
3743
3891
  * @public
3744
3892
  * @memberof Meeting
3745
3893
  */
3746
- moveTo(resourceId) {
3894
+ public moveTo(resourceId: string) {
3747
3895
  if (!resourceId) {
3748
3896
  throw new ParameterError('Cannot move call without a resourceId.');
3749
3897
  }
@@ -3778,7 +3926,7 @@ export default class Meeting extends StatelessWebexPlugin {
3778
3926
 
3779
3927
  try {
3780
3928
  if (this.isSharing) {
3781
- await this.stopFloorRequest();
3929
+ await this.releaseScreenShareFloor();
3782
3930
  }
3783
3931
  const mediaSettings = {
3784
3932
  mediaDirection: {
@@ -3803,6 +3951,7 @@ export default class Meeting extends StatelessWebexPlugin {
3803
3951
 
3804
3952
  // when a move to is intiated by the client , Locus delets the existing media node from the server as soon the DX answers the meeting
3805
3953
  // once the DX answers we establish connection back the media server with only receiveShare enabled
3954
+ // @ts-ignore - reconnectMedia does not accept any argument
3806
3955
  await this.reconnectionManager.reconnectMedia(mediaSettings)
3807
3956
  .then(() => {
3808
3957
  Metrics.sendBehavioralMetric(
@@ -3852,7 +4001,7 @@ export default class Meeting extends StatelessWebexPlugin {
3852
4001
  * @public
3853
4002
  * @memberof Meeting
3854
4003
  */
3855
- moveFrom(resourceId) {
4004
+ public moveFrom(resourceId: string) {
3856
4005
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
3857
4006
  if (!resourceId) {
3858
4007
  throw new ParameterError('Cannot move call without a resourceId.');
@@ -3902,10 +4051,10 @@ export default class Meeting extends StatelessWebexPlugin {
3902
4051
  * @memberof Meeting
3903
4052
  */
3904
4053
  getMediaStreams = (
3905
- mediaDirection,
4054
+ mediaDirection: any,
3906
4055
  // This return an OBJECT {video: {height, widght}}
3907
- audioVideo = VIDEO_RESOLUTIONS[this.mediaProperties.localQualityLevel],
3908
- sharePreferences
4056
+ audioVideo: any = VIDEO_RESOLUTIONS[this.mediaProperties.localQualityLevel],
4057
+ sharePreferences?: any
3909
4058
  ) => {
3910
4059
  if (
3911
4060
  mediaDirection &&
@@ -3982,6 +4131,7 @@ export default class Meeting extends StatelessWebexPlugin {
3982
4131
  },
3983
4132
  audioVideo,
3984
4133
  sharePreferences,
4134
+ // @ts-ignore - config coming from registerPlugin
3985
4135
  this.config
3986
4136
  )
3987
4137
  .catch((error) => {
@@ -4019,7 +4169,7 @@ export default class Meeting extends StatelessWebexPlugin {
4019
4169
  * @returns {Object}
4020
4170
  * @memberof Meetings
4021
4171
  */
4022
- getSupportedDevices = ({sendAudio = true, sendVideo = true}) => Media.getSupportedDevice({sendAudio, sendVideo});
4172
+ getSupportedDevices = ({ sendAudio = true, sendVideo = true }: { sendAudio: boolean; sendVideo: boolean }) => Media.getSupportedDevice({ sendAudio, sendVideo });
4023
4173
 
4024
4174
  /**
4025
4175
  * Get the devices from the Media module
@@ -4059,7 +4209,7 @@ export default class Meeting extends StatelessWebexPlugin {
4059
4209
  data: {
4060
4210
  canProceed: false,
4061
4211
  errors: [
4062
- Metrics.generateErrorPayload(2001, true, MetricsError.name.MEDIA_ENGINE)]
4212
+ Metrics.generateErrorPayload(2001, true, MetricsError.name.MEDIA_ENGINE, undefined)]
4063
4213
  }
4064
4214
  });
4065
4215
  }
@@ -4071,7 +4221,7 @@ export default class Meeting extends StatelessWebexPlugin {
4071
4221
  meetingId: this.id,
4072
4222
  data: {
4073
4223
  canProceed: false,
4074
- errors: [Metrics.generateErrorPayload(2001, true, error.name.MEDIA_ENGINE)]
4224
+ errors: [Metrics.generateErrorPayload(2001, true, MetricsError.name.MEDIA_ENGINE, undefined)]
4075
4225
  }
4076
4226
  });
4077
4227
  }
@@ -4084,7 +4234,7 @@ export default class Meeting extends StatelessWebexPlugin {
4084
4234
  data: {
4085
4235
  canProceed: false,
4086
4236
  errors: [
4087
- Metrics.generateErrorPayload(2001, true, MetricsError.name.MEDIA_ENGINE)]
4237
+ Metrics.generateErrorPayload(2001, true, MetricsError.name.MEDIA_ENGINE, undefined)]
4088
4238
  }
4089
4239
  });
4090
4240
  }
@@ -4264,7 +4414,7 @@ export default class Meeting extends StatelessWebexPlugin {
4264
4414
  canProceed: false,
4265
4415
  errors: [
4266
4416
  Metrics.generateErrorPayload(
4267
- 2004, false, MetricsError.name.MEDIA_ENGINE
4417
+ 2004, false, MetricsError.name.MEDIA_ENGINE, undefined
4268
4418
  )]
4269
4419
  }
4270
4420
  });
@@ -4376,6 +4526,7 @@ export default class Meeting extends StatelessWebexPlugin {
4376
4526
  this.statsAnalyzer.on(StatsAnalyzerEvents.MEDIA_QUALITY, (options) => {
4377
4527
  // TODO: might have to send the same event to the developer
4378
4528
  // Add ip address info if geo hint is present
4529
+ // @ts-ignore fix type
4379
4530
  options.data.intervalMetadata.peerReflexiveIP = this.webex.meetings.geoHintInfo?.clientAddress || options.data.intervalMetadata.peerReflexiveIP || MQA_STATS.DEFAULT_IP;
4380
4531
  Metrics.postEvent({event: eventType.MEDIA_QUALITY, meeting: this, data: {intervalData: options.data, networkType: options.networkType}});
4381
4532
  });
@@ -4446,7 +4597,9 @@ export default class Meeting extends StatelessWebexPlugin {
4446
4597
  {
4447
4598
  mediaProperties: this.mediaProperties,
4448
4599
  remoteQualityLevel: this.mediaProperties.remoteQualityLevel,
4600
+ // @ts-ignore - config coming from registerPlugin
4449
4601
  enableRtx: this.config.enableRtx,
4602
+ // @ts-ignore - config coming from registerPlugin
4450
4603
  enableExtmap: this.config.enableExtmap,
4451
4604
  turnServerInfo
4452
4605
  }
@@ -4491,7 +4644,7 @@ export default class Meeting extends StatelessWebexPlugin {
4491
4644
  * @public
4492
4645
  * @memberof Meeting
4493
4646
  */
4494
- addMedia(options = {}) {
4647
+ addMedia(options: any = {}) {
4495
4648
  const LOG_HEADER = 'Meeting:index#addMedia -->';
4496
4649
 
4497
4650
  let turnDiscoverySkippedReason;
@@ -4505,6 +4658,7 @@ export default class Meeting extends StatelessWebexPlugin {
4505
4658
  return Promise.reject(new UserNotJoinedError());
4506
4659
  }
4507
4660
  // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
4661
+ // @ts-ignore - isUserUnadmitted coming from SelfUtil
4508
4662
  if (this.isUserUnadmitted && !this.wirelessShare) {
4509
4663
  return Promise.reject(new UserInLobbyError());
4510
4664
  }
@@ -4577,8 +4731,11 @@ export default class Meeting extends StatelessWebexPlugin {
4577
4731
  this.handleMediaLogging(this.mediaProperties);
4578
4732
  LoggerProxy.logger.info(`${LOG_HEADER} media connection created`);
4579
4733
 
4734
+ // @ts-ignore - config coming from registerPlugin
4580
4735
  if (this.config.stats.enableStatsAnalyzer) {
4736
+ // @ts-ignore - config coming from registerPlugin
4581
4737
  this.networkQualityMonitor = new NetworkQualityMonitor(this.config.stats);
4738
+ // @ts-ignore - config coming from registerPlugin
4582
4739
  this.statsAnalyzer = new StatsAnalyzer(this.config.stats, this.networkQualityMonitor);
4583
4740
  this.setupStatsAnalyzerEventHandlers();
4584
4741
  this.networkQualityMonitor.on(EVENT_TRIGGERS.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
@@ -4589,7 +4746,7 @@ export default class Meeting extends StatelessWebexPlugin {
4589
4746
 
4590
4747
  throw error;
4591
4748
  })
4592
- .then(() => new Promise((resolve, reject) => {
4749
+ .then(() => new Promise<void>((resolve, reject) => {
4593
4750
  let timerCount = 0;
4594
4751
 
4595
4752
  // eslint-disable-next-line func-names
@@ -4620,7 +4777,7 @@ export default class Meeting extends StatelessWebexPlugin {
4620
4777
  LoggerProxy.logger.info(`${LOG_HEADER} PeerConnection CONNECTED`);
4621
4778
  if (mediaSettings && mediaSettings.sendShare && localShare) {
4622
4779
  if (this.state === MEETING_STATE.STATES.JOINED) {
4623
- return this.share();
4780
+ return this.requestScreenShareFloor();
4624
4781
  }
4625
4782
 
4626
4783
  // When the self state changes to JOINED then request the floor
@@ -4707,7 +4864,7 @@ export default class Meeting extends StatelessWebexPlugin {
4707
4864
  * @private
4708
4865
  * @memberof Meeting
4709
4866
  */
4710
- enqueueMediaUpdate(mediaUpdateType, options) {
4867
+ private enqueueMediaUpdate(mediaUpdateType: string, options: object) {
4711
4868
  return new Promise((resolve, reject) => {
4712
4869
  const queueItem = {
4713
4870
  pendingPromiseResolve: resolve, pendingPromiseReject: reject, mediaUpdateType, options
@@ -4725,6 +4882,7 @@ export default class Meeting extends StatelessWebexPlugin {
4725
4882
  * @memberof Meeting
4726
4883
  */
4727
4884
  mediaNegotiatedEvent = () => {
4885
+ // @ts-ignore - config coming from registerPlugin
4728
4886
  if (this.config.experimental.enableMediaNegotiatedEvent) {
4729
4887
  LoggerProxy.logger.info('Meeting:mediaNegotiatedEvent --> Media server negotiated');
4730
4888
  Trigger.trigger(
@@ -4783,7 +4941,13 @@ export default class Meeting extends StatelessWebexPlugin {
4783
4941
  * @public
4784
4942
  * @memberof Meeting
4785
4943
  */
4786
- updateMedia(options = {}) {
4944
+ public updateMedia(
4945
+ options: {
4946
+ localStream?: MediaStream;
4947
+ localShare?: MediaStream;
4948
+ mediaSettings?: any;
4949
+ } = {} as any
4950
+ ) {
4787
4951
  const LOG_HEADER = 'Meeting:index#updateMedia -->';
4788
4952
 
4789
4953
  if (!this.canUpdateMedia()) {
@@ -4842,7 +5006,7 @@ export default class Meeting extends StatelessWebexPlugin {
4842
5006
  // we actually get a OFFER from the server and a GLAR condition happens
4843
5007
  if (startShare) {
4844
5008
  // We are assuming that the clients are connected when doing an update
4845
- return this.share();
5009
+ return this.requestScreenShareFloor();
4846
5010
  }
4847
5011
 
4848
5012
  return Promise.resolve();
@@ -4862,7 +5026,7 @@ export default class Meeting extends StatelessWebexPlugin {
4862
5026
  * @public
4863
5027
  * @memberof Meeting
4864
5028
  */
4865
- async updateAudio(options) {
5029
+ public async updateAudio(options: { sendAudio: boolean; receiveAudio: boolean; stream: MediaStream }) {
4866
5030
  if (!this.canUpdateMedia()) {
4867
5031
  return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.AUDIO, options);
4868
5032
  }
@@ -4921,7 +5085,7 @@ export default class Meeting extends StatelessWebexPlugin {
4921
5085
  * @public
4922
5086
  * @memberof Meeting
4923
5087
  */
4924
- updateVideo(options) {
5088
+ public updateVideo(options: { sendVideo: boolean; receiveVideo: boolean; stream: MediaStream }) {
4925
5089
  if (!this.canUpdateMedia()) {
4926
5090
  return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.VIDEO, options);
4927
5091
  }
@@ -4964,7 +5128,7 @@ export default class Meeting extends StatelessWebexPlugin {
4964
5128
  * @private
4965
5129
  * @memberof Meeting
4966
5130
  */
4967
- checkForStopShare(sendShare, previousShareStatus) {
5131
+ private checkForStopShare(sendShare: boolean, previousShareStatus: boolean) {
4968
5132
  if (sendShare && !previousShareStatus) {
4969
5133
  // When user starts sharing
4970
5134
  return Promise.resolve(true);
@@ -4972,7 +5136,7 @@ export default class Meeting extends StatelessWebexPlugin {
4972
5136
 
4973
5137
  if (!sendShare && previousShareStatus) {
4974
5138
  // When user stops sharing
4975
- return this.stopFloorRequest()
5139
+ return this.releaseScreenShareFloor()
4976
5140
  .then(() => Promise.resolve(false));
4977
5141
  }
4978
5142
 
@@ -4991,7 +5155,7 @@ export default class Meeting extends StatelessWebexPlugin {
4991
5155
  * @public
4992
5156
  * @memberof Meeting
4993
5157
  */
4994
- updateShare(options) {
5158
+ public updateShare(options: { sendShare?: boolean; receiveShare?: boolean, stream?: any, skipSignalingCheck?: boolean }) {
4995
5159
  if (!options.skipSignalingCheck && !this.canUpdateMedia()) {
4996
5160
  return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.SHARE, options);
4997
5161
  }
@@ -5023,7 +5187,7 @@ export default class Meeting extends StatelessWebexPlugin {
5023
5187
  })
5024
5188
  .then(() => {
5025
5189
  if (startShare) {
5026
- return this.share();
5190
+ return this.requestScreenShareFloor();
5027
5191
  }
5028
5192
 
5029
5193
  return Promise.resolve();
@@ -5033,7 +5197,7 @@ export default class Meeting extends StatelessWebexPlugin {
5033
5197
  this.mediaProperties.mediaDirection.receiveShare = receiveShare;
5034
5198
  })
5035
5199
  .catch((error) => {
5036
- this.unsetLocalShareTrack(stream);
5200
+ this.unsetLocalShareTrack();
5037
5201
  throw error;
5038
5202
  });
5039
5203
  }
@@ -5047,9 +5211,10 @@ export default class Meeting extends StatelessWebexPlugin {
5047
5211
  * @private
5048
5212
  * @memberof Meeting
5049
5213
  */
5050
- preMedia(localStream, localShare, mediaSettings) {
5214
+ private preMedia(localStream: MediaStream, localShare: MediaStream, mediaSettings: any) {
5051
5215
  // eslint-disable-next-line no-warning-comments
5052
5216
  // TODO wire into default config. There's currently an issue with the stateless plugin or how we register
5217
+ // @ts-ignore - config coming from registerPlugin
5053
5218
  this.mediaProperties.setMediaDirection(Object.assign(this.config.mediaSettings, mediaSettings));
5054
5219
  // add a setup a function move the create and setup media in future
5055
5220
  // TODO: delete old audio and video if stale
@@ -5067,7 +5232,7 @@ export default class Meeting extends StatelessWebexPlugin {
5067
5232
  * @public
5068
5233
  * @memberof Meeting
5069
5234
  */
5070
- acknowledge(type) {
5235
+ public acknowledge(type: string) {
5071
5236
  if (!type) {
5072
5237
  return Promise.reject(new ParameterError('Type must be set to acknowledge the meeting.'));
5073
5238
  }
@@ -5102,7 +5267,7 @@ export default class Meeting extends StatelessWebexPlugin {
5102
5267
  * @public
5103
5268
  * @memberof Meeting
5104
5269
  */
5105
- decline(reason) {
5270
+ public decline(reason: string) {
5106
5271
  return MeetingUtil.declineMeeting(this, reason).then((decline) => {
5107
5272
  this.meetingFiniteStateMachine.decline();
5108
5273
 
@@ -5122,7 +5287,7 @@ export default class Meeting extends StatelessWebexPlugin {
5122
5287
  * @public
5123
5288
  * @memberof Meeting
5124
5289
  */
5125
- leave(options = {}) {
5290
+ public leave(options: { resourceId?: string, reason?: any } = {} as any) {
5126
5291
  Metrics.postEvent({event: eventType.LEAVE, meeting: this, data: {trigger: trigger.USER_INTERACTION, canProceed: false}});
5127
5292
  const leaveReason = options.reason || MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
5128
5293
 
@@ -5199,7 +5364,7 @@ export default class Meeting extends StatelessWebexPlugin {
5199
5364
  * @public
5200
5365
  * @memberof Meeting
5201
5366
  */
5202
- startWhiteboardShare(channelUrl, resourceToken) {
5367
+ public startWhiteboardShare(channelUrl: string, resourceToken: string) {
5203
5368
  const whiteboard = this.locusInfo.mediaShares.find((element) => element.name === 'whiteboard');
5204
5369
 
5205
5370
  if (!channelUrl) {
@@ -5209,7 +5374,7 @@ export default class Meeting extends StatelessWebexPlugin {
5209
5374
  if (whiteboard) {
5210
5375
  Metrics.postEvent({event: eventType.WHITEBOARD_SHARE_INITIATED, meeting: this});
5211
5376
 
5212
- const body = {
5377
+ const body: any = {
5213
5378
  disposition: FLOOR_ACTION.GRANTED,
5214
5379
  personUrl: this.locusInfo.self.url,
5215
5380
  deviceUrl: this.deviceUrl,
@@ -5255,7 +5420,7 @@ export default class Meeting extends StatelessWebexPlugin {
5255
5420
  * @public
5256
5421
  * @memberof Meeting
5257
5422
  */
5258
- stopWhiteboardShare(channelUrl) {
5423
+ public stopWhiteboardShare(channelUrl: string) {
5259
5424
  const whiteboard = this.locusInfo.mediaShares.find((element) => element.name === 'whiteboard');
5260
5425
 
5261
5426
  if (whiteboard) {
@@ -5271,6 +5436,7 @@ export default class Meeting extends StatelessWebexPlugin {
5271
5436
  LoggerProxy.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
5272
5437
 
5273
5438
  Metrics.sendBehavioralMetric(
5439
+ // @ts-ignore - check if STOP_WHITEBOARD_SHARE_FAILURE exists
5274
5440
  BEHAVIORAL_METRICS.STOP_WHITEBOARD_SHARE_FAILURE,
5275
5441
  {
5276
5442
  correlation_id: this.correlationId,
@@ -5291,12 +5457,12 @@ export default class Meeting extends StatelessWebexPlugin {
5291
5457
  }
5292
5458
 
5293
5459
  /**
5294
- * Start sharing content with server
5460
+ * Sends a request to Locus to obtain the screen share floor
5295
5461
  * @returns {Promise} see #meetingRequest.changeMeetingFloor
5296
5462
  * @private
5297
5463
  * @memberof Meeting
5298
5464
  */
5299
- share() {
5465
+ private requestScreenShareFloor() {
5300
5466
  const content = this.locusInfo.mediaShares.find((element) => element.name === CONTENT);
5301
5467
 
5302
5468
  if (content && (this.shareStatus !== SHARE_STATUS.LOCAL_SHARE_ACTIVE)) {
@@ -5342,7 +5508,7 @@ export default class Meeting extends StatelessWebexPlugin {
5342
5508
  */
5343
5509
  // Internal only, temporarily allows optional params
5344
5510
  // eslint-disable-next-line valid-jsdoc
5345
- stopShare(options = {}) {
5511
+ public stopShare(options = {}) {
5346
5512
  return this.updateShare({
5347
5513
  sendShare: false,
5348
5514
  receiveShare: this.mediaProperties.mediaDirection.receiveShare,
@@ -5351,12 +5517,12 @@ export default class Meeting extends StatelessWebexPlugin {
5351
5517
  }
5352
5518
 
5353
5519
  /**
5354
- * sends stops floor request
5520
+ * Sends a request to Locus to release the screen share floor.
5355
5521
  * @returns {Promise} see #meetingRequest.changeMeetingFloor
5356
5522
  * @private
5357
5523
  * @memberof Meeting
5358
5524
  */
5359
- stopFloorRequest() {
5525
+ private releaseScreenShareFloor() {
5360
5526
  const content = this.locusInfo.mediaShares.find((element) => element.name === CONTENT);
5361
5527
 
5362
5528
  if (content && (this.mediaProperties.mediaDirection.sendShare)) {
@@ -5378,7 +5544,7 @@ export default class Meeting extends StatelessWebexPlugin {
5378
5544
  resourceUrl: this.resourceUrl
5379
5545
  })
5380
5546
  .catch((error) => {
5381
- LoggerProxy.logger.error('Meeting:index#stopFloorRequest --> Error ', error);
5547
+ LoggerProxy.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
5382
5548
 
5383
5549
  Metrics.sendBehavioralMetric(
5384
5550
  BEHAVIORAL_METRICS.STOP_FLOOR_REQUEST_FAILURE,
@@ -5406,7 +5572,7 @@ export default class Meeting extends StatelessWebexPlugin {
5406
5572
  * @public
5407
5573
  * @memberof Meeting
5408
5574
  */
5409
- startRecording() {
5575
+ public startRecording() {
5410
5576
  return MeetingUtil.startRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5411
5577
  }
5412
5578
 
@@ -5416,7 +5582,7 @@ export default class Meeting extends StatelessWebexPlugin {
5416
5582
  * @public
5417
5583
  * @memberof Meeting
5418
5584
  */
5419
- stopRecording() {
5585
+ public stopRecording() {
5420
5586
  return MeetingUtil.stopRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5421
5587
  }
5422
5588
 
@@ -5426,7 +5592,7 @@ export default class Meeting extends StatelessWebexPlugin {
5426
5592
  * @public
5427
5593
  * @memberof Meeting
5428
5594
  */
5429
- pauseRecording() {
5595
+ public pauseRecording() {
5430
5596
  return MeetingUtil.pauseRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5431
5597
  }
5432
5598
 
@@ -5436,7 +5602,7 @@ export default class Meeting extends StatelessWebexPlugin {
5436
5602
  * @public
5437
5603
  * @memberof Meeting
5438
5604
  */
5439
- resumeRecording() {
5605
+ public resumeRecording() {
5440
5606
  return MeetingUtil.resumeRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5441
5607
  }
5442
5608
 
@@ -5446,7 +5612,7 @@ export default class Meeting extends StatelessWebexPlugin {
5446
5612
  * @public
5447
5613
  * @memberof Meeting
5448
5614
  */
5449
- lockMeeting() {
5615
+ public lockMeeting() {
5450
5616
  return MeetingUtil.lockMeeting(this.inMeetingActions, this.meetingRequest, this.locusUrl);
5451
5617
  }
5452
5618
 
@@ -5456,7 +5622,7 @@ export default class Meeting extends StatelessWebexPlugin {
5456
5622
  * @public
5457
5623
  * @memberof Meeting
5458
5624
  */
5459
- unlockMeeting() {
5625
+ public unlockMeeting() {
5460
5626
  return MeetingUtil.unlockMeeting(this.inMeetingActions, this.meetingRequest, this.locusUrl);
5461
5627
  }
5462
5628
 
@@ -5467,7 +5633,7 @@ export default class Meeting extends StatelessWebexPlugin {
5467
5633
  * @private
5468
5634
  * @memberof Meeting
5469
5635
  */
5470
- rejectWithErrorLog(message) {
5636
+ private rejectWithErrorLog(message: string) {
5471
5637
  LoggerProxy.logger.error(message);
5472
5638
 
5473
5639
  return Promise.reject(new Error(message));
@@ -5480,7 +5646,7 @@ export default class Meeting extends StatelessWebexPlugin {
5480
5646
  * @public
5481
5647
  * @memberof Meeting
5482
5648
  */
5483
- sendDTMF(tones) {
5649
+ public sendDTMF(tones: string) {
5484
5650
  if (this.locusInfo && this.locusInfo.self) {
5485
5651
  if (this.locusInfo.self.enableDTMF) {
5486
5652
  return this.meetingRequest
@@ -5511,7 +5677,19 @@ export default class Meeting extends StatelessWebexPlugin {
5511
5677
  * @public
5512
5678
  * @memberof Meeting
5513
5679
  */
5514
- changeVideoLayout(layoutType, renderInfo = {}) {
5680
+ public changeVideoLayout(
5681
+ layoutType?: string,
5682
+ renderInfo: {
5683
+ main: {
5684
+ width: number;
5685
+ height: number;
5686
+ };
5687
+ content: {
5688
+ width: number;
5689
+ height: number;
5690
+ };
5691
+ } = {} as any
5692
+ ) {
5515
5693
  const {main, content} = renderInfo;
5516
5694
  const {mediaDirection, remoteShare, remoteVideoTrack} = this.mediaProperties;
5517
5695
 
@@ -5607,7 +5785,7 @@ export default class Meeting extends StatelessWebexPlugin {
5607
5785
  * @param {String} level {LOW|MEDIUM|HIGH}
5608
5786
  * @returns {Promise<MediaStream>} localStream
5609
5787
  */
5610
- setLocalVideoQuality(level) {
5788
+ setLocalVideoQuality(level: string) {
5611
5789
  LoggerProxy.logger.log(`Meeting:index#setLocalVideoQuality --> Setting quality to ${level}`);
5612
5790
 
5613
5791
  if (!VIDEO_RESOLUTIONS[level]) {
@@ -5657,7 +5835,7 @@ export default class Meeting extends StatelessWebexPlugin {
5657
5835
  * @param {String} level {LOW|MEDIUM|HIGH}
5658
5836
  * @returns {Promise}
5659
5837
  */
5660
- setRemoteQualityLevel(level) {
5838
+ setRemoteQualityLevel(level: string) {
5661
5839
  LoggerProxy.logger.log(`Meeting:index#setRemoteQualityLevel --> Setting quality to ${level}`);
5662
5840
 
5663
5841
  if (!QUALITY_LEVELS[level]) {
@@ -5687,7 +5865,7 @@ export default class Meeting extends StatelessWebexPlugin {
5687
5865
  * @returns {Promise}
5688
5866
  * @deprecated After FHD support
5689
5867
  */
5690
- setMeetingQuality(level) {
5868
+ setMeetingQuality(level: string) {
5691
5869
  LoggerProxy.logger.log(`Meeting:index#setMeetingQuality --> Setting quality to ${level}`);
5692
5870
 
5693
5871
  if (!QUALITY_LEVELS[level]) {
@@ -5754,7 +5932,13 @@ export default class Meeting extends StatelessWebexPlugin {
5754
5932
  * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean
5755
5933
  * @returns {Promise}
5756
5934
  */
5757
- shareScreen(options = {}) {
5935
+ shareScreen(
5936
+ options: {
5937
+ sendAudio: boolean;
5938
+ sendShare: boolean;
5939
+ sharePreferences: { shareConstraints: MediaTrackConstraints };
5940
+ } = {} as any
5941
+ ) {
5758
5942
  LoggerProxy.logger.log('Meeting:index#shareScreen --> Getting local share');
5759
5943
 
5760
5944
  const shareConstraints = {
@@ -5763,6 +5947,7 @@ export default class Meeting extends StatelessWebexPlugin {
5763
5947
  ...options
5764
5948
  };
5765
5949
 
5950
+ // @ts-ignore - config coming from registerPlugin
5766
5951
  return Media.getDisplayMedia(shareConstraints, this.config)
5767
5952
  .then((shareStream) => this.updateShare({
5768
5953
  sendShare: true,
@@ -5800,7 +5985,7 @@ export default class Meeting extends StatelessWebexPlugin {
5800
5985
  * @param {MediaStream} localShare
5801
5986
  * @returns {undefined}
5802
5987
  */
5803
- handleShareTrackEnded(localShare) {
5988
+ private handleShareTrackEnded(localShare: MediaStream) {
5804
5989
  if (this.wirelessShare) {
5805
5990
  this.leave({reason: MEETING_REMOVED_REASON.USER_ENDED_SHARE_STREAMS});
5806
5991
  }
@@ -5840,7 +6025,7 @@ export default class Meeting extends StatelessWebexPlugin {
5840
6025
  * @private
5841
6026
  * @memberof Meeting
5842
6027
  */
5843
- sendNetworkQualityEvent(res) {
6028
+ private sendNetworkQualityEvent(res: any) {
5844
6029
  Trigger.trigger(
5845
6030
  this,
5846
6031
  {
@@ -5862,7 +6047,7 @@ export default class Meeting extends StatelessWebexPlugin {
5862
6047
  * @private
5863
6048
  * @returns {undefined}
5864
6049
  */
5865
- handleMediaLogging({audioTrack, videoTrack}) {
6050
+ private handleMediaLogging({ audioTrack, videoTrack }: any) {
5866
6051
  MeetingUtil.handleVideoLogging(videoTrack);
5867
6052
  MeetingUtil.handleAudioLogging(audioTrack);
5868
6053
  }
@@ -5871,7 +6056,7 @@ export default class Meeting extends StatelessWebexPlugin {
5871
6056
  * @param {string} typeMedia 'audio' or 'video'
5872
6057
  * @returns {undefined}
5873
6058
  */
5874
- setStartSetupDelay(typeMedia) {
6059
+ setStartSetupDelay(typeMedia: string) {
5875
6060
  this[`startSetupDelay${typeMedia}`] = performance.now();
5876
6061
  this[`endSetupDelay${typeMedia}`] = undefined;
5877
6062
  }
@@ -5880,7 +6065,7 @@ export default class Meeting extends StatelessWebexPlugin {
5880
6065
  * @param {string} typeMedia 'audio' or 'video'
5881
6066
  * @returns {undefined}
5882
6067
  */
5883
- setEndSetupDelay(typeMedia) {
6068
+ setEndSetupDelay(typeMedia: string) {
5884
6069
  this[`endSetupDelay${typeMedia}`] = performance.now();
5885
6070
  }
5886
6071
 
@@ -5888,7 +6073,7 @@ export default class Meeting extends StatelessWebexPlugin {
5888
6073
  * @param {string} typeMedia 'audio' or 'video'
5889
6074
  * @returns {string} duration between start and end of setup
5890
6075
  */
5891
- getSetupDelayDuration(typeMedia) {
6076
+ getSetupDelayDuration(typeMedia: string) {
5892
6077
  const start = this[`startSetupDelay${typeMedia}`];
5893
6078
  const end = this[`endSetupDelay${typeMedia}`];
5894
6079
 
@@ -5899,7 +6084,7 @@ export default class Meeting extends StatelessWebexPlugin {
5899
6084
  * @param {string} typeMedia 'audio' or 'video'
5900
6085
  * @returns {undefined}
5901
6086
  */
5902
- setStartSendingMediaDelay(typeMedia) {
6087
+ setStartSendingMediaDelay(typeMedia: string) {
5903
6088
  this[`startSendingMediaDelay${typeMedia}`] = performance.now();
5904
6089
  this[`endSendingMediaDelay${typeMedia}`] = undefined;
5905
6090
  }
@@ -5908,7 +6093,7 @@ export default class Meeting extends StatelessWebexPlugin {
5908
6093
  * @param {string} typeMedia 'audio' or 'video'
5909
6094
  * @returns {undefined}
5910
6095
  */
5911
- setEndSendingMediaDelay(typeMedia) {
6096
+ setEndSendingMediaDelay(typeMedia: string) {
5912
6097
  this[`endSendingMediaDelay${typeMedia}`] = performance.now();
5913
6098
  }
5914
6099
 
@@ -5916,7 +6101,7 @@ export default class Meeting extends StatelessWebexPlugin {
5916
6101
  * @param {string} typeMedia 'audio' or 'video'
5917
6102
  * @returns {string} duration between join response and first media tx
5918
6103
  */
5919
- getSendingMediaDelayDuration(typeMedia) {
6104
+ getSendingMediaDelayDuration(typeMedia: string) {
5920
6105
  const start = this[`startSendingMediaDelay${typeMedia}`];
5921
6106
  const end = this[`endSendingMediaDelay${typeMedia}`];
5922
6107
 
@@ -5927,7 +6112,7 @@ export default class Meeting extends StatelessWebexPlugin {
5927
6112
  *
5928
6113
  * @returns {undefined}
5929
6114
  */
5930
- setStartLocalSDPGenRemoteSDPRecvDelay() {
6115
+ setStartLocalSDPGenRemoteSDPRecvDelay() {
5931
6116
  if (!this.startLocalSDPGenRemoteSDPRecvDelay) {
5932
6117
  this.startLocalSDPGenRemoteSDPRecvDelay = performance.now();
5933
6118
  this.endLocalSDPGenRemoteSDPRecvDelay = undefined;
@@ -6053,7 +6238,7 @@ export default class Meeting extends StatelessWebexPlugin {
6053
6238
  * @public
6054
6239
  * @memberof Meeting
6055
6240
  */
6056
- endMeetingForAll() {
6241
+ public endMeetingForAll() {
6057
6242
  Metrics.postEvent({event: eventType.LEAVE, meeting: this, data: {trigger: trigger.USER_INTERACTION, canProceed: false}});
6058
6243
 
6059
6244
  LoggerProxy.logger.log('Meeting:index#endMeetingForAll --> End meeting for All');
@@ -6138,7 +6323,7 @@ export default class Meeting extends StatelessWebexPlugin {
6138
6323
  * @public
6139
6324
  * @memberof Meeting
6140
6325
  */
6141
- isBnrEnabled() {
6326
+ public isBnrEnabled() {
6142
6327
  return this.effects && this.effects.isBnrEnabled();
6143
6328
  }
6144
6329
 
@@ -6149,7 +6334,7 @@ export default class Meeting extends StatelessWebexPlugin {
6149
6334
  * @param {MedaiStreamTrack} audioTrack from updateAudio
6150
6335
  * @memberof Meeting
6151
6336
  */
6152
- async internal_enableBNR(audioTrack) {
6337
+ private async internal_enableBNR(audioTrack: any) {
6153
6338
  try {
6154
6339
  LoggerProxy.logger.info('Meeting:index#internal_enableBNR. Internal enable BNR called');
6155
6340
  const bnrAudioTrack = await WebRTCMedia.Effects.BNR.enableBNR(audioTrack);
@@ -6170,7 +6355,7 @@ export default class Meeting extends StatelessWebexPlugin {
6170
6355
  * @public
6171
6356
  * @memberof Meeting
6172
6357
  */
6173
- enableBNR() {
6358
+ public enableBNR() {
6174
6359
  if (typeof this.mediaProperties === 'undefined' || typeof this.mediaProperties.audioTrack === 'undefined') {
6175
6360
  return Promise.reject(new Error("Meeting doesn't have an audioTrack attached"));
6176
6361
  }
@@ -6205,7 +6390,7 @@ export default class Meeting extends StatelessWebexPlugin {
6205
6390
  * @public
6206
6391
  * @memberof Meeting
6207
6392
  */
6208
- disableBNR() {
6393
+ public disableBNR() {
6209
6394
  if (typeof this.mediaProperties === 'undefined' || typeof this.mediaProperties.audioTrack === 'undefined') {
6210
6395
  return Promise.reject(new Error("Meeting doesn't have an audioTrack attached"));
6211
6396
  }