@webex/plugin-meetings 2.35.3 → 2.35.4

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 (212) 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 +151 -32
  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 +12 -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/peer-connection-manager/index.js +11 -4
  97. package/dist/peer-connection-manager/index.js.map +1 -1
  98. package/dist/personal-meeting-room/index.js +11 -0
  99. package/dist/personal-meeting-room/index.js.map +1 -1
  100. package/dist/personal-meeting-room/request.js +2 -1
  101. package/dist/personal-meeting-room/request.js.map +1 -1
  102. package/dist/personal-meeting-room/util.js.map +1 -1
  103. package/dist/reachability/index.js +17 -7
  104. package/dist/reachability/index.js.map +1 -1
  105. package/dist/reachability/request.js +1 -0
  106. package/dist/reachability/request.js.map +1 -1
  107. package/dist/reconnection-manager/index.js +21 -2
  108. package/dist/reconnection-manager/index.js.map +1 -1
  109. package/dist/roap/collection.js +1 -0
  110. package/dist/roap/collection.js.map +1 -1
  111. package/dist/roap/handler.js +14 -2
  112. package/dist/roap/handler.js.map +1 -1
  113. package/dist/roap/index.js +11 -1
  114. package/dist/roap/index.js.map +1 -1
  115. package/dist/roap/request.js +7 -2
  116. package/dist/roap/request.js.map +1 -1
  117. package/dist/roap/state.js.map +1 -1
  118. package/dist/roap/turnDiscovery.js +9 -1
  119. package/dist/roap/turnDiscovery.js.map +1 -1
  120. package/dist/roap/util.js.map +1 -1
  121. package/dist/statsAnalyzer/global.js.map +1 -1
  122. package/dist/statsAnalyzer/index.js +19 -1
  123. package/dist/statsAnalyzer/index.js.map +1 -1
  124. package/dist/statsAnalyzer/mqaUtil.js +9 -3
  125. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  126. package/dist/transcription/index.js +10 -3
  127. package/dist/transcription/index.js.map +1 -1
  128. package/package.json +17 -17
  129. package/src/common/{browser-detection.js → browser-detection.ts} +1 -1
  130. package/src/common/collection.ts +6 -6
  131. package/src/common/{config.js → config.ts} +1 -1
  132. package/src/common/errors/{captcha-error.js → captcha-error.ts} +5 -1
  133. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +6 -1
  134. package/src/common/errors/{join-meeting.js → join-meeting.ts} +6 -1
  135. package/src/common/errors/{media.js → media.ts} +5 -1
  136. package/src/common/errors/parameter.ts +3 -2
  137. package/src/common/errors/{password-error.js → password-error.ts} +5 -1
  138. package/src/common/errors/{permission.js → permission.ts} +5 -1
  139. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  140. package/src/common/errors/{reconnection.js → reconnection.ts} +5 -1
  141. package/src/common/errors/{stats.js → stats.ts} +5 -1
  142. package/src/common/errors/{webex-errors.js → webex-errors.ts} +1 -2
  143. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +3 -1
  144. package/src/common/events/{events-scope.js → events-scope.ts} +1 -1
  145. package/src/common/events/{events.js → events.ts} +0 -0
  146. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +1 -2
  147. package/src/common/events/{util.js → util.ts} +1 -1
  148. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  149. package/src/common/logs/{logger-proxy.js → logger-proxy.ts} +1 -1
  150. package/src/common/logs/{request.js → request.ts} +12 -2
  151. package/src/common/queue.ts +1 -2
  152. package/src/{config.js → config.ts} +1 -0
  153. package/src/constants.ts +1 -0
  154. package/src/locus-info/{controlsUtils.js → controlsUtils.ts} +4 -4
  155. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  156. package/src/locus-info/{fullState.js → fullState.ts} +1 -1
  157. package/src/locus-info/{hostUtils.js → hostUtils.ts} +5 -5
  158. package/src/locus-info/{index.js → index.ts} +67 -32
  159. package/src/locus-info/{infoUtils.js → infoUtils.ts} +3 -4
  160. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +13 -13
  161. package/src/locus-info/{parser.js → parser.ts} +22 -12
  162. package/src/locus-info/{selfUtils.js → selfUtils.ts} +17 -19
  163. package/src/media/{index.js → index.ts} +108 -39
  164. package/src/media/{properties.js → properties.ts} +16 -4
  165. package/src/media/{util.js → util.ts} +2 -3
  166. package/src/mediaQualityMetrics/{config.js → config.ts} +1 -1
  167. package/src/meeting/{effectsState.js → effectsState.ts} +12 -6
  168. package/src/meeting/{index.js → index.ts} +323 -147
  169. package/src/meeting/{muteState.js → muteState.ts} +16 -11
  170. package/src/meeting/{request.js → request.ts} +124 -36
  171. package/src/meeting/{state.js → state.ts} +6 -6
  172. package/src/meeting/{util.js → util.ts} +4 -4
  173. package/src/meeting-info/{collection.js → collection.ts} +4 -1
  174. package/src/meeting-info/{index.js → index.ts} +10 -6
  175. package/src/meeting-info/{meeting-info-v2.js → meeting-info-v2.ts} +28 -10
  176. package/src/meeting-info/{request.js → request.ts} +6 -2
  177. package/src/meeting-info/{util.js → util.ts} +6 -5
  178. package/src/meeting-info/{utilv2.js → utilv2.ts} +8 -7
  179. package/src/meetings/{collection.js → collection.ts} +5 -2
  180. package/src/meetings/{index.js → index.ts} +88 -22
  181. package/src/meetings/{request.js → request.ts} +6 -1
  182. package/src/meetings/{util.js → util.ts} +5 -3
  183. package/src/member/{index.js → index.ts} +46 -15
  184. package/src/member/{util.js → util.ts} +17 -16
  185. package/src/members/{collection.js → collection.ts} +2 -1
  186. package/src/members/{index.js → index.ts} +39 -26
  187. package/src/members/{request.js → request.ts} +16 -5
  188. package/src/members/{util.js → util.ts} +7 -7
  189. package/src/metrics/{config.js → config.ts} +0 -2
  190. package/src/metrics/{constants.js → constants.ts} +0 -0
  191. package/src/metrics/{index.js → index.ts} +27 -8
  192. package/src/networkQualityMonitor/{index.js → index.ts} +18 -3
  193. package/src/peer-connection-manager/{index.js → index.ts} +72 -28
  194. package/src/personal-meeting-room/{index.js → index.ts} +17 -4
  195. package/src/personal-meeting-room/{request.js → request.ts} +3 -1
  196. package/src/personal-meeting-room/{util.js → util.ts} +1 -1
  197. package/src/reachability/{index.js → index.ts} +28 -17
  198. package/src/reachability/request.ts +4 -2
  199. package/src/reconnection-manager/{index.js → index.ts} +42 -13
  200. package/src/roap/{collection.js → collection.ts} +1 -0
  201. package/src/roap/{handler.js → handler.ts} +15 -4
  202. package/src/roap/{index.js → index.ts} +23 -10
  203. package/src/roap/{request.js → request.ts} +19 -3
  204. package/src/roap/{state.js → state.ts} +3 -2
  205. package/src/roap/turnDiscovery.ts +14 -5
  206. package/src/roap/{util.js → util.ts} +1 -2
  207. package/src/statsAnalyzer/{global.js → global.ts} +0 -0
  208. package/src/statsAnalyzer/{index.js → index.ts} +36 -17
  209. package/src/statsAnalyzer/{mqaUtil.js → mqaUtil.ts} +6 -1
  210. package/src/transcription/{index.js → index.ts} +16 -11
  211. package/test/integration/spec/space-meeting.js +1 -2
  212. package/test/unit/spec/roap/util.js +1 -1
@@ -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} from '@webex/internal-media-core';
5
6
 
@@ -82,7 +83,7 @@ import InMeetingActions from './in-meeting-actions';
82
83
 
83
84
  const {isBrowser} = BrowserDetection();
84
85
 
85
- const logRequest = (request, {header = '', success = '', failure = ''}) => {
86
+ const logRequest = (request: any, { header = '', success = '', failure = '' }) => {
86
87
  LoggerProxy.logger.info(header);
87
88
 
88
89
  return request
@@ -392,6 +393,82 @@ export const MEDIA_UPDATE_TYPE = {
392
393
  * @class Meeting
393
394
  */
394
395
  export default class Meeting extends StatelessWebexPlugin {
396
+ attrs: any;
397
+ audio: any;
398
+ conversationUrl: string;
399
+ correlationId: string;
400
+ destination: string;
401
+ destinationType: string;
402
+ deviceUrl: string;
403
+ effects: any;
404
+ hostId: string;
405
+ id: string;
406
+ locusUrl: string;
407
+ mediaConnections: any[];
408
+ meetingFiniteStateMachine: any;
409
+ meetingInfo: object;
410
+ meetingRequest: any;
411
+ members: Members;
412
+ options: object;
413
+ orgId: string;
414
+ owner: string;
415
+ partner: any;
416
+ policy: string;
417
+ reconnectionManager: ReconnectionManager;
418
+ resource: string;
419
+ roap: Roap;
420
+ roapSeq: number;
421
+ sipUri: string;
422
+ type: string;
423
+ userId: string;
424
+ video: any;
425
+ callEvents: any[];
426
+ deferJoin: Promise<any>;
427
+ dialInDeviceStatus: string;
428
+ dialInUrl: string;
429
+ dialOutDeviceStatus: string;
430
+ dialOutUrl: string;
431
+ fetchMeetingInfoTimeoutId: NodeJS.Timeout;
432
+ floorGrantPending: boolean;
433
+ hasJoinedOnce: boolean;
434
+ hasWebsocketConnected: boolean;
435
+ inMeetingActions: InMeetingActions;
436
+ isLocalShareLive: boolean;
437
+ isSharing: boolean;
438
+ keepAliveTimerId: NodeJS.Timeout;
439
+ lastVideoLayoutInfo: any;
440
+ locusInfo: any;
441
+ mediaProperties: MediaProperties;
442
+ meetingInfoFailureReason: string;
443
+ networkQualityMonitor: NetworkQualityMonitor;
444
+ networkStatus: string;
445
+ passwordStatus: string;
446
+ queuedMediaUpdates: any[];
447
+ recording: any;
448
+ requiredCaptcha: any;
449
+ shareStatus: string;
450
+ statsAnalyzer: StatsAnalyzer;
451
+ transcription: Transcription;
452
+ updateMediaConnections: (mediaConnections: any[]) => void;
453
+ endCallInitiateJoinReq: any;
454
+ endJoinReqResp: any;
455
+ endLocalSDPGenRemoteSDPRecvDelay: any;
456
+ joinedWith: any;
457
+ locusId: any;
458
+ startCallInitiateJoinReq: any;
459
+ startJoinReqResp: any;
460
+ startLocalSDPGenRemoteSDPRecvDelay: any;
461
+ wirelessShare: any;
462
+ guest: any;
463
+ meetingJoinUrl: any;
464
+ meetingNumber: any;
465
+ meetingState: any;
466
+ permissionToken: any;
467
+ resourceId: any;
468
+ resourceUrl: string;
469
+ selfId: string;
470
+ state: any;
471
+
395
472
  namespace = MEETINGS;
396
473
 
397
474
  /**
@@ -400,7 +477,7 @@ export default class Meeting extends StatelessWebexPlugin {
400
477
  * @constructor
401
478
  * @memberof Meeting
402
479
  */
403
- constructor(attrs, options) {
480
+ constructor(attrs: any, options: object) {
404
481
  super({}, options);
405
482
  /**
406
483
  * @instance
@@ -492,7 +569,8 @@ export default class Meeting extends StatelessWebexPlugin {
492
569
  * @public
493
570
  * @memberof Meeting
494
571
  */
495
- this.members = new Members({locusUrl: (attrs.locus && attrs.locus.url)}, {parent: this.webex});
572
+ // @ts-ignore - Fix type
573
+ this.members = new Members({locusUrl: attrs.locus && attrs.locus.url}, {parent: this.webex});
496
574
  /**
497
575
  * @instance
498
576
  * @type {Roap}
@@ -500,6 +578,7 @@ export default class Meeting extends StatelessWebexPlugin {
500
578
  * @private
501
579
  * @memberof Meeting
502
580
  */
581
+ // @ts-ignore - Fix type
503
582
  this.roap = new Roap({}, {parent: this.webex});
504
583
  /**
505
584
  * created later
@@ -656,7 +735,7 @@ export default class Meeting extends StatelessWebexPlugin {
656
735
  * @private
657
736
  * @memberof Meeting
658
737
  */
659
- this.updateMediaConnections = (mediaConnections) => {
738
+ this.updateMediaConnections = (mediaConnections: any[]) => {
660
739
  if (!isEqual(this.mediaConnections, mediaConnections)) {
661
740
  // grab last/latest item in the new mediaConnections information
662
741
  this.mediaConnections = mediaConnections.slice(-1);
@@ -689,7 +768,7 @@ export default class Meeting extends StatelessWebexPlugin {
689
768
  this.isSharing = false;
690
769
  /**
691
770
  * @instance
692
- * @type {Boolean}
771
+ * @type {string}
693
772
  * @readonly
694
773
  * @public
695
774
  * @memberof Meeting
@@ -729,7 +808,7 @@ export default class Meeting extends StatelessWebexPlugin {
729
808
  /**
730
809
  * There is a pending floor requested by the user
731
810
  * @instance
732
- * @type {floorGrantPending}
811
+ * @type {boolean}
733
812
  * @private
734
813
  * @memberof Meeting
735
814
  */
@@ -797,6 +876,7 @@ export default class Meeting extends StatelessWebexPlugin {
797
876
  * @private
798
877
  * @memberof Meeting
799
878
  */
879
+ // @ts-ignore - Fix type
800
880
  this.locusInfo = new LocusInfo(this.updateMeetingObject.bind(this), this.webex, this.id);
801
881
  // We had to add listeners first before setting up the locus instance
802
882
  /**
@@ -824,6 +904,7 @@ export default class Meeting extends StatelessWebexPlugin {
824
904
  * @private
825
905
  * @memberof Meeting
826
906
  */
907
+ // @ts-ignore - Fix type
827
908
  this.hasWebsocketConnected = this.webex.internal.mercury.connected;
828
909
 
829
910
  /**
@@ -910,9 +991,7 @@ export default class Meeting extends StatelessWebexPlugin {
910
991
  * @memberof Meeting
911
992
  * @returns {Promise}
912
993
  */
913
- async fetchMeetingInfo({
914
- password = null, captchaCode = null
915
- }) {
994
+ public async fetchMeetingInfo({ password = null, captchaCode = null }: { password?: string; captchaCode?: string }) {
916
995
  // when fetch meeting info is called directly by the client, we want to clear out the random timer for sdk to do it
917
996
  if (this.fetchMeetingInfoTimeoutId) {
918
997
  clearTimeout(this.fetchMeetingInfoTimeoutId);
@@ -954,6 +1033,7 @@ export default class Meeting extends StatelessWebexPlugin {
954
1033
  }
955
1034
  catch (err) {
956
1035
  if (err instanceof MeetingInfoV2PasswordError) {
1036
+ // @ts-ignore
957
1037
  LoggerProxy.logger.info(`Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ${this.destination} - password required (code=${err?.body?.code}).`);
958
1038
 
959
1039
  // when wbxappapi requires password it still populates partial meeting info in the response
@@ -972,6 +1052,7 @@ export default class Meeting extends StatelessWebexPlugin {
972
1052
  throw (new PasswordError());
973
1053
  }
974
1054
  else if (err instanceof MeetingInfoV2CaptchaError) {
1055
+ // @ts-ignore
975
1056
  LoggerProxy.logger.info(`Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ${this.destination} - captcha required (code=${err?.body?.code}).`);
976
1057
 
977
1058
  this.meetingInfoFailureReason = (this.requiredCaptcha) ?
@@ -1001,7 +1082,7 @@ export default class Meeting extends StatelessWebexPlugin {
1001
1082
  * @memberof Meeting
1002
1083
  * @returns {Promise<{isPasswordValid: boolean, requiredCaptcha: boolean, failureReason: MEETING_INFO_FAILURE_REASON}>}
1003
1084
  */
1004
- verifyPassword(password, captchaCode) {
1085
+ public verifyPassword(password: string, captchaCode: string) {
1005
1086
  return this.fetchMeetingInfo({
1006
1087
  password, captchaCode
1007
1088
  })
@@ -1031,7 +1112,7 @@ export default class Meeting extends StatelessWebexPlugin {
1031
1112
  * @memberof Meeting
1032
1113
  * @returns {Promise}
1033
1114
  */
1034
- refreshCaptcha() {
1115
+ public refreshCaptcha() {
1035
1116
  if (!this.requiredCaptcha) {
1036
1117
  return Promise.reject(new Error('There is no captcha to refresh'));
1037
1118
  }
@@ -1061,7 +1142,7 @@ export default class Meeting extends StatelessWebexPlugin {
1061
1142
  * @private
1062
1143
  * @memberof Meeting
1063
1144
  */
1064
- setUpLocusInfoListeners() {
1145
+ private setUpLocusInfoListeners() {
1065
1146
  // meeting update listeners
1066
1147
  this.setUpLocusInfoSelfListener();
1067
1148
  this.setUpLocusInfoMeetingListener();
@@ -1079,14 +1160,13 @@ export default class Meeting extends StatelessWebexPlugin {
1079
1160
  this.setUpLocusInfoMediaInactiveListener();
1080
1161
  }
1081
1162
 
1082
-
1083
1163
  /**
1084
1164
  * Set up the locus info listener for meetings disconnected due to inactivity
1085
1165
  * @returns {undefined}
1086
1166
  * @private
1087
1167
  * @memberof Meeting
1088
1168
  */
1089
- setUpLocusInfoMediaInactiveListener() {
1169
+ private setUpLocusInfoMediaInactiveListener() {
1090
1170
  // User gets kicked off the meeting due to inactivity or user did a refresh
1091
1171
  this.locusInfo.on(EVENTS.DISCONNECT_DUE_TO_INACTIVITY, (res) => {
1092
1172
  // https:// jira-eng-gpk2.cisco.com/jira/browse/SPARK-240520
@@ -1114,6 +1194,7 @@ export default class Meeting extends StatelessWebexPlugin {
1114
1194
 
1115
1195
  LoggerProxy.logger.error(`Meeting:index#setUpLocusInfoMediaInactiveListener --> Meeting disconnected due to inactivity: ${res.reason}`);
1116
1196
 
1197
+ // @ts-ignore - config coming from registerPlugin
1117
1198
  if (this.config.reconnection.autoRejoin) {
1118
1199
  this.reconnect();
1119
1200
  }
@@ -1137,7 +1218,7 @@ export default class Meeting extends StatelessWebexPlugin {
1137
1218
  * @private
1138
1219
  * @memberof Meeting
1139
1220
  */
1140
- setUpLocusInfoAssignHostListener() {
1221
+ private setUpLocusInfoAssignHostListener() {
1141
1222
  this.locusInfo.on(EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST, (payload) => {
1142
1223
  const changed = this.inMeetingActions.set({
1143
1224
  canAssignHost: payload.canAssignHost,
@@ -1163,7 +1244,7 @@ export default class Meeting extends StatelessWebexPlugin {
1163
1244
  * @private
1164
1245
  * @memberof Meeting
1165
1246
  */
1166
- setUpLocusFullStateListener() {
1247
+ private setUpLocusFullStateListener() {
1167
1248
  this.locusInfo.on(LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE, (payload) => {
1168
1249
  Trigger.trigger(
1169
1250
  this,
@@ -1194,7 +1275,13 @@ export default class Meeting extends StatelessWebexPlugin {
1194
1275
  * @returns {Object}
1195
1276
  * @memberof Meeting
1196
1277
  */
1197
- getAnalyzerMetricsPrePayload(options) {
1278
+ getAnalyzerMetricsPrePayload(options: {
1279
+ event: string;
1280
+ trackingId: string;
1281
+ locus: object;
1282
+ mediaConnections: Array<any>;
1283
+ errors: object;
1284
+ } | any) {
1198
1285
  if (options) {
1199
1286
  const {
1200
1287
  event,
@@ -1208,11 +1295,12 @@ export default class Meeting extends StatelessWebexPlugin {
1208
1295
  return null;
1209
1296
  }
1210
1297
 
1211
- const identifiers = {
1298
+ const identifiers: any = {
1212
1299
  correlationId: this.correlationId,
1213
1300
  userId: this.userId,
1214
1301
  deviceId: this.deviceUrl,
1215
1302
  orgId: this.orgId,
1303
+ // @ts-ignore fix type
1216
1304
  locusUrl: this.webex.internal.services.get('locus')
1217
1305
  };
1218
1306
 
@@ -1334,12 +1422,14 @@ export default class Meeting extends StatelessWebexPlugin {
1334
1422
  * @private
1335
1423
  * @memberof Meeting
1336
1424
  */
1337
- sendCallAnalyzerMetrics(options) {
1425
+ private sendCallAnalyzerMetrics(options: { event: string; trackingId: string; locus: object; errors: object }) {
1338
1426
  const payload = this.getAnalyzerMetricsPrePayload({
1427
+ // @ts-ignore - config coming from registerPlugin
1339
1428
  ...pick(this.config.metrics, ['clientType', 'subClientType']),
1340
1429
  ...options
1341
1430
  });
1342
1431
 
1432
+ // @ts-ignore - fix type
1343
1433
  return this.webex.internal.metrics.submitCallDiagnosticEvents(payload);
1344
1434
  }
1345
1435
 
@@ -1353,13 +1443,15 @@ export default class Meeting extends StatelessWebexPlugin {
1353
1443
  * @private
1354
1444
  * @memberof Meeting
1355
1445
  */
1356
- sendMediaQualityAnalyzerMetrics(options) {
1446
+ private sendMediaQualityAnalyzerMetrics(options: { event: string; trackingId: string; locus: object }) {
1357
1447
  const payload = this.getAnalyzerMetricsPrePayload({
1358
1448
  type: MQA_STATS.CA_TYPE,
1449
+ // @ts-ignore - config coming from registerPlugin
1359
1450
  ...pick(this.config.metrics, ['clientType', 'subClientType']),
1360
1451
  ...options
1361
1452
  });
1362
1453
 
1454
+ // @ts-ignore
1363
1455
  return this.webex.internal.metrics.submitCallDiagnosticEvents(payload);
1364
1456
  }
1365
1457
 
@@ -1370,7 +1462,7 @@ export default class Meeting extends StatelessWebexPlugin {
1370
1462
  * @returns {undefined}
1371
1463
  * @memberof Meeting
1372
1464
  */
1373
- setNetworkStatus(networkStatus) {
1465
+ private setNetworkStatus(networkStatus: string) {
1374
1466
  if (networkStatus === NETWORK_STATUS.DISCONNECTED) {
1375
1467
  Trigger.trigger(
1376
1468
  this,
@@ -1403,7 +1495,7 @@ export default class Meeting extends StatelessWebexPlugin {
1403
1495
  * @private
1404
1496
  * @memberof Meeting
1405
1497
  */
1406
- setUpLocusSelfListener() {
1498
+ private setUpLocusSelfListener() {
1407
1499
  this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_SELF, (payload) => {
1408
1500
  this.members.locusSelfUpdate(payload);
1409
1501
  this.pstnUpdate(payload);
@@ -1423,7 +1515,7 @@ export default class Meeting extends StatelessWebexPlugin {
1423
1515
  * @private
1424
1516
  * @memberof Meeting
1425
1517
  */
1426
- pstnUpdate(payload) {
1518
+ private pstnUpdate(payload: any) {
1427
1519
  if (this.locusInfo.self) {
1428
1520
  const dialInPstnDevice = payload.newSelf?.pstnDevices.find((device) => device.url === this.dialInUrl);
1429
1521
  const dialOutPstnDevice = payload.newSelf?.pstnDevices.find((device) => device.url === this.dialOutUrl);
@@ -1478,7 +1570,7 @@ export default class Meeting extends StatelessWebexPlugin {
1478
1570
  * @private
1479
1571
  * @memberof Meeting
1480
1572
  */
1481
- setUpLocusHostListener() {
1573
+ private setUpLocusHostListener() {
1482
1574
  this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_HOST, (payload) => {
1483
1575
  this.members.locusHostUpdate(payload);
1484
1576
  });
@@ -1492,13 +1584,12 @@ export default class Meeting extends StatelessWebexPlugin {
1492
1584
  * @private
1493
1585
  * @memberof Meeting
1494
1586
  */
1495
- setUpLocusParticipantsListener() {
1587
+ private setUpLocusParticipantsListener() {
1496
1588
  this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS, (payload) => {
1497
1589
  this.members.locusParticipantsUpdate(payload);
1498
1590
  });
1499
1591
  }
1500
1592
 
1501
-
1502
1593
  /**
1503
1594
  * Set up the locus info recording update listener
1504
1595
  * update recording value for the meeting
@@ -1517,7 +1608,7 @@ export default class Meeting extends StatelessWebexPlugin {
1517
1608
  * @private
1518
1609
  * @memberof Meeting
1519
1610
  */
1520
- setupLocusControlsListener() {
1611
+ private setupLocusControlsListener() {
1521
1612
  this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,
1522
1613
  ({state, modifiedBy, lastModified}) => {
1523
1614
  let event;
@@ -1573,6 +1664,8 @@ export default class Meeting extends StatelessWebexPlugin {
1573
1664
 
1574
1665
  this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,
1575
1666
  ({caption, transcribing}) => {
1667
+
1668
+ // @ts-ignore - config coming from registerPlugin
1576
1669
  if (transcribing && this.transcription && this.config.receiveTranscription) {
1577
1670
  this.receiveTranscription();
1578
1671
  }
@@ -1611,7 +1704,7 @@ export default class Meeting extends StatelessWebexPlugin {
1611
1704
  * @private
1612
1705
  * @memberof Meeting
1613
1706
  */
1614
- setUpLocusMediaSharesListener() {
1707
+ private setUpLocusMediaSharesListener() {
1615
1708
  // Will get triggered on local and remote share
1616
1709
  this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, (payload) => {
1617
1710
  const {content: contentShare, whiteboard: whiteboardShare} = payload.current;
@@ -1842,7 +1935,7 @@ export default class Meeting extends StatelessWebexPlugin {
1842
1935
  * @private
1843
1936
  * @memberof Meeting
1844
1937
  */
1845
- setUpLocusUrlListener() {
1938
+ private setUpLocusUrlListener() {
1846
1939
  this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_URL, (payload) => {
1847
1940
  this.members.locusUrlUpdate(payload);
1848
1941
  this.locusUrl = payload;
@@ -1856,7 +1949,7 @@ export default class Meeting extends StatelessWebexPlugin {
1856
1949
  * @private
1857
1950
  * @memberof meeting
1858
1951
  */
1859
- setUpLocusInfoMeetingInfoListener() {
1952
+ private setUpLocusInfoMeetingInfoListener() {
1860
1953
  this.locusInfo.on(LOCUSINFO.EVENTS.MEETING_LOCKED, (payload) => {
1861
1954
  if (payload) {
1862
1955
  Trigger.trigger(
@@ -1934,7 +2027,7 @@ export default class Meeting extends StatelessWebexPlugin {
1934
2027
  * @private
1935
2028
  * @memberof meeting
1936
2029
  */
1937
- setUpLocusEmbeddedAppsListener() {
2030
+ private setUpLocusEmbeddedAppsListener() {
1938
2031
  this.locusInfo.on(LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED, (embeddedApps) => {
1939
2032
  if (embeddedApps) {
1940
2033
  Trigger.trigger(
@@ -1956,7 +2049,7 @@ export default class Meeting extends StatelessWebexPlugin {
1956
2049
  * @private
1957
2050
  * @memberof Meeting
1958
2051
  */
1959
- setUpLocusInfoSelfListener() {
2052
+ private setUpLocusInfoSelfListener() {
1960
2053
  this.locusInfo.on(LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED, (payload) => {
1961
2054
  if (this.audio) {
1962
2055
  this.audio.handleServerLocalUnmuteRequired(this);
@@ -2054,6 +2147,7 @@ export default class Meeting extends StatelessWebexPlugin {
2054
2147
  }
2055
2148
  });
2056
2149
 
2150
+ // @ts-ignore - check if MEDIA_INACTIVITY exists
2057
2151
  this.locusInfo.on(LOCUSINFO.EVENTS.MEDIA_INACTIVITY, () => {
2058
2152
  Metrics.sendBehavioralMetric(
2059
2153
  BEHAVIORAL_METRICS.MEETING_MEDIA_INACTIVE,
@@ -2120,7 +2214,7 @@ export default class Meeting extends StatelessWebexPlugin {
2120
2214
  * @private
2121
2215
  * @memberof Meeting
2122
2216
  */
2123
- setUpLocusInfoMeetingListener() {
2217
+ private setUpLocusInfoMeetingListener() {
2124
2218
  this.locusInfo.on(EVENTS.REMOTE_RESPONSE, (payload) => {
2125
2219
  this.meetingFiniteStateMachine.remote(payload);
2126
2220
 
@@ -2128,6 +2222,7 @@ export default class Meeting extends StatelessWebexPlugin {
2128
2222
  this.leave({reason: payload.reason}).then(() => {
2129
2223
  LoggerProxy.logger.info('Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Attempting to leave meeting.');
2130
2224
  }).catch((error) => {
2225
+ // @ts-ignore
2131
2226
  LoggerProxy.logger.error(`Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Issue with leave for meeting, meeting still in collection: ${this.meeting}, error: ${error}`);
2132
2227
  });
2133
2228
  }
@@ -2156,6 +2251,7 @@ export default class Meeting extends StatelessWebexPlugin {
2156
2251
  this.leave({reason: payload.reason}).then(() => {
2157
2252
  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.');
2158
2253
  }).catch((error) => {
2254
+ // @ts-ignore
2159
2255
  LoggerProxy.logger.error(`Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ${this.meeting}, error: ${error}`);
2160
2256
  });
2161
2257
  }
@@ -2187,7 +2283,7 @@ export default class Meeting extends StatelessWebexPlugin {
2187
2283
  * @memberof Meeting
2188
2284
  * // TODO: is this function necessary?
2189
2285
  */
2190
- updateMeetingObject(object) {
2286
+ private updateMeetingObject(object: object) {
2191
2287
  // Validate if these are valid meeting object property
2192
2288
  // TODO: add a check to make sure the value passed in the constructor
2193
2289
  // is not changed by any delta event
@@ -2209,7 +2305,14 @@ export default class Meeting extends StatelessWebexPlugin {
2209
2305
  * @public
2210
2306
  * @memberof Meeting
2211
2307
  */
2212
- invite(invitee, alertIfActive = true) {
2308
+ public invite(
2309
+ invitee: {
2310
+ emailAddress: string;
2311
+ email: string;
2312
+ phoneNumber: string;
2313
+ },
2314
+ alertIfActive: boolean = true
2315
+ ) {
2213
2316
  return this.members.addMember(invitee, alertIfActive);
2214
2317
  }
2215
2318
 
@@ -2221,7 +2324,7 @@ export default class Meeting extends StatelessWebexPlugin {
2221
2324
  * @public
2222
2325
  * @memberof Meeting
2223
2326
  */
2224
- cancelPhoneInvite(invitee) {
2327
+ public cancelPhoneInvite(invitee: { phoneNumber: string }) {
2225
2328
  return this.members.cancelPhoneInvite(invitee);
2226
2329
  }
2227
2330
 
@@ -2232,7 +2335,7 @@ export default class Meeting extends StatelessWebexPlugin {
2232
2335
  * @public
2233
2336
  * @memberof Meeting
2234
2337
  */
2235
- admit(memberIds) {
2338
+ public admit(memberIds: Array<any>) {
2236
2339
  return this.members.admitMembers(memberIds);
2237
2340
  }
2238
2341
 
@@ -2243,7 +2346,7 @@ export default class Meeting extends StatelessWebexPlugin {
2243
2346
  * @public
2244
2347
  * @memberof Meeting
2245
2348
  */
2246
- remove(memberId) {
2349
+ public remove(memberId: string) {
2247
2350
  return this.members.removeMember(memberId);
2248
2351
  }
2249
2352
 
@@ -2255,7 +2358,7 @@ export default class Meeting extends StatelessWebexPlugin {
2255
2358
  * @public
2256
2359
  * @memberof Meeting
2257
2360
  */
2258
- mute(memberId, mute = true) {
2361
+ public mute(memberId: string, mute: boolean = true) {
2259
2362
  return this.members.muteMember(memberId, mute);
2260
2363
  }
2261
2364
 
@@ -2267,7 +2370,7 @@ export default class Meeting extends StatelessWebexPlugin {
2267
2370
  * @public
2268
2371
  * @memberof Meeting
2269
2372
  */
2270
- transfer(memberId, moderator = true) {
2373
+ public transfer(memberId: string, moderator: boolean = true) {
2271
2374
  return this.members.transferHostToMember(memberId, moderator);
2272
2375
  }
2273
2376
 
@@ -2277,7 +2380,7 @@ export default class Meeting extends StatelessWebexPlugin {
2277
2380
  * @public
2278
2381
  * @memberof Meeting
2279
2382
  */
2280
- getMembers() {
2383
+ public getMembers() {
2281
2384
  return this.members;
2282
2385
  }
2283
2386
 
@@ -2287,7 +2390,7 @@ export default class Meeting extends StatelessWebexPlugin {
2287
2390
  * @public
2288
2391
  * @memberof Meeting
2289
2392
  */
2290
- isAudioConnected() {
2393
+ public isAudioConnected() {
2291
2394
  return !!this.audio;
2292
2395
  }
2293
2396
 
@@ -2297,7 +2400,7 @@ export default class Meeting extends StatelessWebexPlugin {
2297
2400
  * @public
2298
2401
  * @memberof Meeting
2299
2402
  */
2300
- isAudioMuted() {
2403
+ public isAudioMuted() {
2301
2404
  return this.audio && this.audio.isMuted();
2302
2405
  }
2303
2406
 
@@ -2307,7 +2410,7 @@ export default class Meeting extends StatelessWebexPlugin {
2307
2410
  * @public
2308
2411
  * @memberof Meeting
2309
2412
  */
2310
- isAudioSelf() {
2413
+ public isAudioSelf() {
2311
2414
  return this.audio && this.audio.isSelf();
2312
2415
  }
2313
2416
 
@@ -2317,7 +2420,7 @@ export default class Meeting extends StatelessWebexPlugin {
2317
2420
  * @public
2318
2421
  * @memberof Meeting
2319
2422
  */
2320
- isVideoConnected() {
2423
+ public isVideoConnected() {
2321
2424
  return !!this.video;
2322
2425
  }
2323
2426
 
@@ -2327,7 +2430,7 @@ export default class Meeting extends StatelessWebexPlugin {
2327
2430
  * @public
2328
2431
  * @memberof Meeting
2329
2432
  */
2330
- isVideoMuted() {
2433
+ public isVideoMuted() {
2331
2434
  return this.video && this.video.isMuted();
2332
2435
  }
2333
2436
 
@@ -2337,7 +2440,7 @@ export default class Meeting extends StatelessWebexPlugin {
2337
2440
  * @public
2338
2441
  * @memberof Meeting
2339
2442
  */
2340
- isVideoSelf() {
2443
+ public isVideoSelf() {
2341
2444
  return this.video && this.video.isSelf();
2342
2445
  }
2343
2446
 
@@ -2354,7 +2457,17 @@ export default class Meeting extends StatelessWebexPlugin {
2354
2457
  * @private
2355
2458
  * @memberof Meeting
2356
2459
  */
2357
- parseMeetingInfo(meetingInfo, destination = null) {
2460
+ parseMeetingInfo(
2461
+ meetingInfo: {
2462
+ body: {
2463
+ conversationUrl: string;
2464
+ locusUrl: string;
2465
+ sipUri: string;
2466
+ owner: object;
2467
+ };
2468
+ } | any,
2469
+ destination: object | string | null = null
2470
+ ) {
2358
2471
  const webexMeetingInfo = meetingInfo?.body;
2359
2472
  // We try to use as much info from Locus meeting object, stored in destination
2360
2473
 
@@ -2368,7 +2481,9 @@ export default class Meeting extends StatelessWebexPlugin {
2368
2481
  if (locusMeetingObject || (webexMeetingInfo && !(meetingInfo?.errors && meetingInfo?.errors.length > 0))) {
2369
2482
  this.conversationUrl = locusMeetingObject?.conversationUrl || webexMeetingInfo?.conversationUrl || this.conversationUrl;
2370
2483
  this.locusUrl = locusMeetingObject?.url || webexMeetingInfo?.locusUrl || this.locusUrl;
2484
+ // @ts-ignore - config coming from registerPlugin
2371
2485
  this.setSipUri(this.config.experimental.enableUnifiedMeetings ? locusMeetingObject?.info.sipUri || webexMeetingInfo?.sipUrl : locusMeetingObject?.info.sipUri || webexMeetingInfo?.sipMeetingUri || this.sipUri);
2486
+ // @ts-ignore - config coming from registerPlugin
2372
2487
  if (this.config.experimental.enableUnifiedMeetings) {
2373
2488
  this.meetingNumber = locusMeetingObject?.info.webExMeetingId || webexMeetingInfo?.meetingNumber;
2374
2489
  this.meetingJoinUrl = webexMeetingInfo?.meetingJoinUrl;
@@ -2388,7 +2503,7 @@ export default class Meeting extends StatelessWebexPlugin {
2388
2503
  * @private
2389
2504
  * @memberof Meeting
2390
2505
  */
2391
- parseLocus(locus) {
2506
+ private parseLocus(locus: { url: string; participants: Array<any>; self: object }) {
2392
2507
  if (locus) {
2393
2508
  this.locusUrl = locus.url;
2394
2509
  // TODO: move this to parse participants module
@@ -2415,7 +2530,7 @@ export default class Meeting extends StatelessWebexPlugin {
2415
2530
  * @private
2416
2531
  * @memberof Meeting
2417
2532
  */
2418
- setSipUri(sipUri) {
2533
+ setSipUri(sipUri: string) {
2419
2534
  // This can be tel no, device id or a sip uri, user Id
2420
2535
  this.sipUri = sipUri;
2421
2536
  }
@@ -2427,7 +2542,7 @@ export default class Meeting extends StatelessWebexPlugin {
2427
2542
  * @private
2428
2543
  * @memberof Meeting
2429
2544
  */
2430
- setRoapSeq(seq) {
2545
+ setRoapSeq(seq: number) {
2431
2546
  if (seq >= 0) {
2432
2547
  this.roapSeq = seq;
2433
2548
  }
@@ -2446,8 +2561,14 @@ export default class Meeting extends StatelessWebexPlugin {
2446
2561
  * @private
2447
2562
  * @memberof Meeting
2448
2563
  */
2449
- setLocus(locus) {
2450
- const mtgLocus = locus.locus || locus;
2564
+ private setLocus(locus: {
2565
+ mediaConnections: Array<any>;
2566
+ locusUrl: string;
2567
+ locusId: string;
2568
+ mediaId: string;
2569
+ host: object;
2570
+ } | any) {
2571
+ const mtgLocus: any = locus.locus || locus;
2451
2572
 
2452
2573
  // LocusInfo object saves the locus object
2453
2574
  // this.locus = mtgLocus;
@@ -2455,6 +2576,7 @@ export default class Meeting extends StatelessWebexPlugin {
2455
2576
  this.locusUrl = locus.locusUrl || locus.url;
2456
2577
  this.locusId = locus.locusId;
2457
2578
  this.selfId = locus.selfId;
2579
+ // @ts-ignore
2458
2580
  this.mediaId = locus.mediaId;
2459
2581
  this.hostId = mtgLocus.host ? mtgLocus.host.id : this.hostId;
2460
2582
  this.locusInfo.initialSetup(mtgLocus);
@@ -2468,7 +2590,7 @@ export default class Meeting extends StatelessWebexPlugin {
2468
2590
  * @public
2469
2591
  * @memberof Meeting
2470
2592
  */
2471
- setRemoteStream(pc) {
2593
+ public setRemoteStream(pc: any) {
2472
2594
  if (!pc) {
2473
2595
  return;
2474
2596
  }
@@ -2490,7 +2612,6 @@ export default class Meeting extends StatelessWebexPlugin {
2490
2612
  const mediaTrack = event.track;
2491
2613
  let trackMediaID = null;
2492
2614
 
2493
-
2494
2615
  // In case of safari some time the transceiver is not present for specific os version
2495
2616
  // sdk tries to determine the transceive using the track id present
2496
2617
  if (event.transceiver && event.transceiver.mid) {
@@ -2523,7 +2644,6 @@ export default class Meeting extends StatelessWebexPlugin {
2523
2644
  }
2524
2645
  }
2525
2646
 
2526
-
2527
2647
  switch (trackMediaID) {
2528
2648
  case MEDIA_ID.AUDIO_TRACK:
2529
2649
  eventType = EVENT_TYPES.REMOTE_AUDIO;
@@ -2572,7 +2692,7 @@ export default class Meeting extends StatelessWebexPlugin {
2572
2692
  * @public
2573
2693
  * @memberof Meeting
2574
2694
  */
2575
- uploadLogs(options = {file: 'meeting/index', function: 'uploadLogs'}) {
2695
+ public uploadLogs(options: object = { file: 'meeting/index', function: 'uploadLogs' }) {
2576
2696
  Trigger.trigger(
2577
2697
  this,
2578
2698
  options,
@@ -2581,7 +2701,6 @@ export default class Meeting extends StatelessWebexPlugin {
2581
2701
  );
2582
2702
  }
2583
2703
 
2584
-
2585
2704
  /**
2586
2705
  * Removes remote audio and video stream on the class instance and triggers an event
2587
2706
  * to developers
@@ -2590,7 +2709,7 @@ export default class Meeting extends StatelessWebexPlugin {
2590
2709
  * @memberof Meeting
2591
2710
  * @deprecated after v1.89.3
2592
2711
  */
2593
- unsetRemoteStream() {
2712
+ public unsetRemoteStream() {
2594
2713
  LoggerProxy.logger.warn('Meeting:index#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3');
2595
2714
  this.mediaProperties.unsetRemoteMedia();
2596
2715
  }
@@ -2611,7 +2730,7 @@ export default class Meeting extends StatelessWebexPlugin {
2611
2730
  * @memberof Meeting
2612
2731
  * @deprecated after v1.89.3
2613
2732
  */
2614
- closeRemoteStream() {
2733
+ public closeRemoteStream() {
2615
2734
  LoggerProxy.logger.warn('Meeting:index#closeRemoteStream --> [DEPRECATION WARNING]: closeRemoteStream has been deprecated after v1.89.3');
2616
2735
  this.closeRemoteTracks();
2617
2736
  }
@@ -2635,7 +2754,7 @@ export default class Meeting extends StatelessWebexPlugin {
2635
2754
  * @returns {void}
2636
2755
  * @inner
2637
2756
  */
2638
- const triggerMediaStoppedEvent = (mediaType) => {
2757
+ const triggerMediaStoppedEvent = (mediaType: string) => {
2639
2758
  Trigger.trigger(
2640
2759
  this,
2641
2760
  {
@@ -2657,7 +2776,7 @@ export default class Meeting extends StatelessWebexPlugin {
2657
2776
  * @inner
2658
2777
  */
2659
2778
  // eslint-disable-next-line arrow-body-style
2660
- const stopTrack = (track, type) => {
2779
+ const stopTrack = (track: MediaStreamTrack, type: string) => {
2661
2780
  return Media.stopTracks(track)
2662
2781
  .then(() => {
2663
2782
  const isTrackStopped = track && track.readyState === ENDED;
@@ -2685,7 +2804,7 @@ export default class Meeting extends StatelessWebexPlugin {
2685
2804
  * @private
2686
2805
  * @memberof Meeting
2687
2806
  */
2688
- sendLocalMediaReadyEvent() {
2807
+ private sendLocalMediaReadyEvent() {
2689
2808
  Trigger.trigger(
2690
2809
  this,
2691
2810
  {
@@ -2708,7 +2827,7 @@ export default class Meeting extends StatelessWebexPlugin {
2708
2827
  * @private
2709
2828
  * @memberof Meeting
2710
2829
  */
2711
- setLocalAudioTrack(audioTrack, emitEvent = true) {
2830
+ private setLocalAudioTrack(audioTrack: MediaStreamTrack, emitEvent: boolean = true) {
2712
2831
  if (audioTrack) {
2713
2832
  const settings = audioTrack.getSettings();
2714
2833
 
@@ -2735,7 +2854,7 @@ export default class Meeting extends StatelessWebexPlugin {
2735
2854
  * @private
2736
2855
  * @memberof Meeting
2737
2856
  */
2738
- setLocalVideoTrack(videoTrack, emitEvent = true) {
2857
+ private setLocalVideoTrack(videoTrack: MediaStreamTrack, emitEvent: boolean = true) {
2739
2858
  if (videoTrack) {
2740
2859
  const {
2741
2860
  aspectRatio, frameRate, height, width, deviceId
@@ -2775,7 +2894,7 @@ export default class Meeting extends StatelessWebexPlugin {
2775
2894
  * @public
2776
2895
  * @memberof Meeting
2777
2896
  */
2778
- setLocalTracks(localStream) {
2897
+ public setLocalTracks(localStream: any) {
2779
2898
  if (localStream) {
2780
2899
  const {audioTrack, videoTrack} = MeetingUtil.getTrack(localStream);
2781
2900
 
@@ -2788,12 +2907,12 @@ export default class Meeting extends StatelessWebexPlugin {
2788
2907
 
2789
2908
  /**
2790
2909
  * Sets the local media stream on the class and emits an event to the developer
2791
- * @param {Stream} localShare the local media stream
2910
+ * @param {MediaStream} localShare the local media stream
2792
2911
  * @returns {undefined}
2793
2912
  * @public
2794
2913
  * @memberof Meeting
2795
2914
  */
2796
- setLocalShareTrack(localShare) {
2915
+ public setLocalShareTrack(localShare: MediaStream) {
2797
2916
  let settings = null;
2798
2917
 
2799
2918
  if (localShare) {
@@ -2837,7 +2956,7 @@ export default class Meeting extends StatelessWebexPlugin {
2837
2956
  * @public
2838
2957
  * @memberof Meeting
2839
2958
  */
2840
- closeLocalStream() {
2959
+ public closeLocalStream() {
2841
2960
  const {audioTrack, videoTrack} = this.mediaProperties;
2842
2961
 
2843
2962
  return Media.stopTracks(audioTrack)
@@ -2872,7 +2991,7 @@ export default class Meeting extends StatelessWebexPlugin {
2872
2991
  * @public
2873
2992
  * @memberof Meeting
2874
2993
  */
2875
- closeLocalShare() {
2994
+ public closeLocalShare() {
2876
2995
  const track = this.mediaProperties.shareTrack;
2877
2996
 
2878
2997
  return Media.stopTracks(track).then(() => {
@@ -2901,7 +3020,7 @@ export default class Meeting extends StatelessWebexPlugin {
2901
3020
  * @public
2902
3021
  * @memberof Meeting
2903
3022
  */
2904
- unsetLocalVideoTrack() {
3023
+ public unsetLocalVideoTrack() {
2905
3024
  this.mediaProperties.unsetLocalVideoTrack();
2906
3025
  }
2907
3026
 
@@ -2911,7 +3030,7 @@ export default class Meeting extends StatelessWebexPlugin {
2911
3030
  * @public
2912
3031
  * @memberof Meeting
2913
3032
  */
2914
- unsetLocalShareTrack() {
3033
+ public unsetLocalShareTrack() {
2915
3034
  this.mediaProperties.unsetLocalShareTrack();
2916
3035
  }
2917
3036
 
@@ -2921,9 +3040,10 @@ export default class Meeting extends StatelessWebexPlugin {
2921
3040
  * @public
2922
3041
  * @memberof Meeting
2923
3042
  */
2924
- setMercuryListener() {
3043
+ public setMercuryListener() {
2925
3044
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
2926
3045
  // if the meeting has active peer connections, it should try to reconnect.
3046
+ // @ts-ignore
2927
3047
  this.webex.internal.mercury.on(ONLINE, () => {
2928
3048
  LoggerProxy.logger.info('Meeting:index#setMercuryListener --> Web socket online');
2929
3049
 
@@ -2943,6 +3063,7 @@ export default class Meeting extends StatelessWebexPlugin {
2943
3063
  this.hasWebsocketConnected = true;
2944
3064
  });
2945
3065
 
3066
+ // @ts-ignore
2946
3067
  this.webex.internal.mercury.on(OFFLINE, () => {
2947
3068
  LoggerProxy.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
2948
3069
  Metrics.postEvent({
@@ -2965,7 +3086,7 @@ export default class Meeting extends StatelessWebexPlugin {
2965
3086
  * @public
2966
3087
  * @memberof Meeting
2967
3088
  */
2968
- closePeerConnections() {
3089
+ public closePeerConnections() {
2969
3090
  return PeerConnectionManager.close(this.mediaProperties.peerConnection);
2970
3091
  }
2971
3092
 
@@ -2977,9 +3098,11 @@ export default class Meeting extends StatelessWebexPlugin {
2977
3098
  * @public
2978
3099
  * @memberof Meeting
2979
3100
  */
2980
- unsetPeerConnections() {
3101
+ public unsetPeerConnections() {
2981
3102
  this.mediaProperties.unsetPeerConnection();
3103
+ // @ts-ignore - config coming from registerPlugin
2982
3104
  if (this.config.reconnection.detection) {
3105
+ // @ts-ignore
2983
3106
  this.webex.internal.mercury.off(ONLINE);
2984
3107
  }
2985
3108
  }
@@ -2991,7 +3114,7 @@ export default class Meeting extends StatelessWebexPlugin {
2991
3114
  * @private
2992
3115
  * @memberof Meeting
2993
3116
  */
2994
- setCorrelationId(id) {
3117
+ private setCorrelationId(id: string) {
2995
3118
  this.correlationId = id;
2996
3119
  }
2997
3120
 
@@ -3001,11 +3124,12 @@ export default class Meeting extends StatelessWebexPlugin {
3001
3124
  * @public
3002
3125
  * @memberof Meeting
3003
3126
  */
3004
- muteAudio() {
3127
+ public muteAudio() {
3005
3128
  if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {
3006
3129
  return Promise.reject(new UserNotJoinedError());
3007
3130
  }
3008
3131
 
3132
+ // @ts-ignore
3009
3133
  if (!this.mediaId) {
3010
3134
  // Happens when addMedia and mute are triggered in succession
3011
3135
  return Promise.reject(new NoMediaEstablishedYetError());
@@ -3052,11 +3176,12 @@ export default class Meeting extends StatelessWebexPlugin {
3052
3176
  * @public
3053
3177
  * @memberof Meeting
3054
3178
  */
3055
- unmuteAudio() {
3179
+ public unmuteAudio() {
3056
3180
  if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {
3057
3181
  return Promise.reject(new UserNotJoinedError());
3058
3182
  }
3059
3183
 
3184
+ // @ts-ignore
3060
3185
  if (!this.mediaId) {
3061
3186
  // Happens when addMedia and mute are triggered in succession
3062
3187
  return Promise.reject(new NoMediaEstablishedYetError());
@@ -3103,11 +3228,12 @@ export default class Meeting extends StatelessWebexPlugin {
3103
3228
  * @public
3104
3229
  * @memberof Meeting
3105
3230
  */
3106
- muteVideo() {
3231
+ public muteVideo() {
3107
3232
  if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {
3108
3233
  return Promise.reject(new UserNotJoinedError());
3109
3234
  }
3110
3235
 
3236
+ // @ts-ignore
3111
3237
  if (!this.mediaId) {
3112
3238
  // Happens when addMedia and mute are triggered in succession
3113
3239
  return Promise.reject(new NoMediaEstablishedYetError());
@@ -3153,11 +3279,12 @@ export default class Meeting extends StatelessWebexPlugin {
3153
3279
  * @public
3154
3280
  * @memberof Meeting
3155
3281
  */
3156
- unmuteVideo() {
3282
+ public unmuteVideo() {
3157
3283
  if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {
3158
3284
  return Promise.reject(new UserNotJoinedError());
3159
3285
  }
3160
3286
 
3287
+ // @ts-ignore
3161
3288
  if (!this.mediaId) {
3162
3289
  // Happens when addMedia and mute are triggered in succession
3163
3290
  return Promise.reject(new NoMediaEstablishedYetError());
@@ -3222,7 +3349,13 @@ export default class Meeting extends StatelessWebexPlugin {
3222
3349
  * video: 'videoDeviceId'
3223
3350
  * }})
3224
3351
  */
3225
- joinWithMedia(options = {}) {
3352
+ public joinWithMedia(
3353
+ options: {
3354
+ joinOptions?: any;
3355
+ mediaSettings: any;
3356
+ audioVideoOptions?: any;
3357
+ } = {} as any
3358
+ ) {
3226
3359
  // TODO: add validations for parameters
3227
3360
  const {mediaSettings, joinOptions, audioVideoOptions} = options;
3228
3361
 
@@ -3266,19 +3399,21 @@ export default class Meeting extends StatelessWebexPlugin {
3266
3399
  * @public
3267
3400
  * @memberof Meeting
3268
3401
  */
3269
- reconnect(options) {
3402
+ public reconnect(options?: object) {
3270
3403
  LoggerProxy.logger.log(`Meeting:index#reconnect --> attempting to reconnect meeting ${this.id}`);
3271
3404
 
3272
3405
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
3273
3406
  return Promise.reject(new ParameterError('Cannot reconnect, ReconnectionManager must first be defined.'));
3274
3407
  }
3275
3408
 
3409
+ // @ts-ignore - currentMediaStatus coming from SelfUtil
3276
3410
  if (!MeetingUtil.isMediaEstablished(this.currentMediaStatus)) {
3277
3411
  return Promise.reject(new ParameterError('Cannot reconnect, Media has not established to reconnect'));
3278
3412
  }
3279
3413
 
3280
3414
  try {
3281
3415
  LoggerProxy.logger.info('Meeting:index#reconnect --> Validating reconnect ability.');
3416
+ // @ts-ignore
3282
3417
  this.reconnectionManager.validate();
3283
3418
  }
3284
3419
  catch (error) {
@@ -3302,7 +3437,6 @@ export default class Meeting extends StatelessWebexPlugin {
3302
3437
  EVENT_TRIGGERS.MEETING_RECONNECTION_STARTING
3303
3438
  );
3304
3439
 
3305
-
3306
3440
  return this.reconnectionManager
3307
3441
  .reconnect(options)
3308
3442
  .then(() => {
@@ -3375,7 +3509,7 @@ export default class Meeting extends StatelessWebexPlugin {
3375
3509
  * @private
3376
3510
  * @returns {void}
3377
3511
  */
3378
- monitorTranscriptionSocketConnection() {
3512
+ private monitorTranscriptionSocketConnection() {
3379
3513
  this.transcription.onCloseSocket((event) => {
3380
3514
  LoggerProxy.logger.info(
3381
3515
  `Meeting:index#onCloseSocket -->
@@ -3413,7 +3547,7 @@ export default class Meeting extends StatelessWebexPlugin {
3413
3547
  * @private
3414
3548
  * @returns {Promise<void>} a promise to open the WebSocket connection
3415
3549
  */
3416
- async receiveTranscription() {
3550
+ private async receiveTranscription() {
3417
3551
  LoggerProxy.logger.info(
3418
3552
  `Meeting:index#receiveTranscription -->
3419
3553
  Attempting to generate a web socket url.`
@@ -3421,6 +3555,7 @@ export default class Meeting extends StatelessWebexPlugin {
3421
3555
 
3422
3556
  try {
3423
3557
  const {datachannelUrl} = this.locusInfo.info;
3558
+ // @ts-ignore - fix type
3424
3559
  const {body: {webSocketUrl}} = await this.request({
3425
3560
  method: HTTP_VERBS.POST,
3426
3561
  uri: datachannelUrl,
@@ -3434,6 +3569,7 @@ export default class Meeting extends StatelessWebexPlugin {
3434
3569
 
3435
3570
  this.transcription = new Transcription(
3436
3571
  webSocketUrl,
3572
+ // @ts-ignore - fix type
3437
3573
  this.webex.sessionId,
3438
3574
  this.members,
3439
3575
  );
@@ -3457,6 +3593,7 @@ export default class Meeting extends StatelessWebexPlugin {
3457
3593
  });
3458
3594
 
3459
3595
  this.monitorTranscriptionSocketConnection();
3596
+ // @ts-ignore - fix type
3460
3597
  this.transcription.connect(this.webex.credentials.supertoken.access_token);
3461
3598
  }
3462
3599
  catch (error) {
@@ -3489,12 +3626,11 @@ export default class Meeting extends StatelessWebexPlugin {
3489
3626
  * @private
3490
3627
  * @returns{void}
3491
3628
  */
3492
- triggerStopReceivingTranscriptionEvent() {
3629
+ private triggerStopReceivingTranscriptionEvent() {
3493
3630
  LoggerProxy.logger.info(`
3494
3631
  Meeting:index#stopReceivingTranscription -->
3495
3632
  closed transcription LLM web socket connection successfully.`);
3496
3633
 
3497
-
3498
3634
  Trigger.trigger(
3499
3635
  this,
3500
3636
  {
@@ -3517,7 +3653,8 @@ export default class Meeting extends StatelessWebexPlugin {
3517
3653
  * if joining as host on second loop, pass pin and pass moderator if joining as guest on second loop
3518
3654
  * Scenario D: Joining any other way (sip, pstn, conversationUrl, link just need to specify resourceId)
3519
3655
  */
3520
- join(options = {}) {
3656
+ public join(options: any = {}) {
3657
+ // @ts-ignore - fix type
3521
3658
  if (!this.webex.meetings.registered) {
3522
3659
  const errorMessage = 'Meeting:index#join --> Device not registered';
3523
3660
  const error = new Error(errorMessage);
@@ -3643,6 +3780,7 @@ export default class Meeting extends StatelessWebexPlugin {
3643
3780
  return join;
3644
3781
  }).then(async (join) => {
3645
3782
  if (isBrowser) {
3783
+ // @ts-ignore - config coming from registerPlugin
3646
3784
  if (this.config.receiveTranscription || options.receiveTranscription) {
3647
3785
  if (this.isTranscriptionSupported()) {
3648
3786
  await this.receiveTranscription();
@@ -3654,7 +3792,6 @@ export default class Meeting extends StatelessWebexPlugin {
3654
3792
  LoggerProxy.logger.error('Meeting:index#join --> Receving transcription is not supported on this platform');
3655
3793
  }
3656
3794
 
3657
-
3658
3795
  return join;
3659
3796
  })
3660
3797
  .catch((error) => {
@@ -3707,7 +3844,7 @@ export default class Meeting extends StatelessWebexPlugin {
3707
3844
  * @public
3708
3845
  * @memberof Meeting
3709
3846
  */
3710
- usePhoneAudio(phoneNumber) {
3847
+ public usePhoneAudio(phoneNumber: string) {
3711
3848
  if (!phoneNumber) {
3712
3849
  return this.dialInPstn();
3713
3850
  }
@@ -3722,7 +3859,7 @@ export default class Meeting extends StatelessWebexPlugin {
3722
3859
  * @private
3723
3860
  * @memberof Meeting
3724
3861
  */
3725
- isPhoneProvisioned(pstnStatus) {
3862
+ private isPhoneProvisioned(pstnStatus: string) {
3726
3863
  return [PSTN_STATUS.JOINED, PSTN_STATUS.CONNECTED, PSTN_STATUS.SUCCESS].includes(pstnStatus);
3727
3864
  }
3728
3865
 
@@ -3732,7 +3869,7 @@ export default class Meeting extends StatelessWebexPlugin {
3732
3869
  * @private
3733
3870
  * @memberof Meeting
3734
3871
  */
3735
- dialInPstn() {
3872
+ private dialInPstn() {
3736
3873
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return Promise.resolve(); // prevent multiple dial in devices from being provisioned
3737
3874
 
3738
3875
  const {correlationId, locusUrl} = this;
@@ -3770,7 +3907,7 @@ export default class Meeting extends StatelessWebexPlugin {
3770
3907
  * @private
3771
3908
  * @memberof Meeting
3772
3909
  */
3773
- dialOutPstn(phoneNumber) {
3910
+ private dialOutPstn(phoneNumber: string) {
3774
3911
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return Promise.resolve(); // prevent multiple dial out devices from being provisioned
3775
3912
 
3776
3913
  const {correlationId, locusUrl} = this;
@@ -3809,7 +3946,7 @@ export default class Meeting extends StatelessWebexPlugin {
3809
3946
  * @memberof Meeting
3810
3947
  * @returns {Promise}
3811
3948
  */
3812
- disconnectPhoneAudio() {
3949
+ public disconnectPhoneAudio() {
3813
3950
  return Promise.all([
3814
3951
  this.isPhoneProvisioned(this.dialInDeviceStatus) ?
3815
3952
  MeetingUtil.disconnectPhoneAudio(this, this.dialInUrl) :
@@ -3827,7 +3964,7 @@ export default class Meeting extends StatelessWebexPlugin {
3827
3964
  * @public
3828
3965
  * @memberof Meeting
3829
3966
  */
3830
- moveTo(resourceId) {
3967
+ public moveTo(resourceId: string) {
3831
3968
  if (!resourceId) {
3832
3969
  throw new ParameterError('Cannot move call without a resourceId.');
3833
3970
  }
@@ -3887,6 +4024,7 @@ export default class Meeting extends StatelessWebexPlugin {
3887
4024
 
3888
4025
  // 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
3889
4026
  // once the DX answers we establish connection back the media server with only receiveShare enabled
4027
+ // @ts-ignore - reconnectMedia does not accept any argument
3890
4028
  await this.reconnectionManager.reconnectMedia(mediaSettings)
3891
4029
  .then(() => {
3892
4030
  Metrics.sendBehavioralMetric(
@@ -3936,7 +4074,7 @@ export default class Meeting extends StatelessWebexPlugin {
3936
4074
  * @public
3937
4075
  * @memberof Meeting
3938
4076
  */
3939
- moveFrom(resourceId) {
4077
+ public moveFrom(resourceId: string) {
3940
4078
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
3941
4079
  if (!resourceId) {
3942
4080
  throw new ParameterError('Cannot move call without a resourceId.');
@@ -3983,10 +4121,10 @@ export default class Meeting extends StatelessWebexPlugin {
3983
4121
  * @memberof Meeting
3984
4122
  */
3985
4123
  getMediaStreams = (
3986
- mediaDirection,
4124
+ mediaDirection: any,
3987
4125
  // This return an OBJECT {video: {height, widght}}
3988
- audioVideo = VIDEO_RESOLUTIONS[this.mediaProperties.localQualityLevel],
3989
- sharePreferences
4126
+ audioVideo: any = VIDEO_RESOLUTIONS[this.mediaProperties.localQualityLevel],
4127
+ sharePreferences?: any
3990
4128
  ) => {
3991
4129
  if (
3992
4130
  mediaDirection &&
@@ -4063,6 +4201,7 @@ export default class Meeting extends StatelessWebexPlugin {
4063
4201
  },
4064
4202
  audioVideo,
4065
4203
  sharePreferences,
4204
+ // @ts-ignore - config coming from registerPlugin
4066
4205
  this.config
4067
4206
  )
4068
4207
  .catch((error) => {
@@ -4100,7 +4239,7 @@ export default class Meeting extends StatelessWebexPlugin {
4100
4239
  * @returns {Object}
4101
4240
  * @memberof Meetings
4102
4241
  */
4103
- getSupportedDevices = ({sendAudio = true, sendVideo = true}) => Media.getSupportedDevice({sendAudio, sendVideo});
4242
+ getSupportedDevices = ({ sendAudio = true, sendVideo = true }: { sendAudio: boolean; sendVideo: boolean }) => Media.getSupportedDevice({ sendAudio, sendVideo });
4104
4243
 
4105
4244
  /**
4106
4245
  * Get the devices from the Media module
@@ -4119,6 +4258,7 @@ export default class Meeting extends StatelessWebexPlugin {
4119
4258
  this.statsAnalyzer.on(StatsAnalyzerEvents.MEDIA_QUALITY, (options) => {
4120
4259
  // TODO: might have to send the same event to the developer
4121
4260
  // Add ip address info if geo hint is present
4261
+ // @ts-ignore fix type
4122
4262
  options.data.intervalMetadata.peerReflexiveIP = this.webex.meetings.geoHintInfo?.clientAddress || options.data.intervalMetadata.peerReflexiveIP || MQA_STATS.DEFAULT_IP;
4123
4263
  Metrics.postEvent({event: eventType.MEDIA_QUALITY, meeting: this, data: {intervalData: options.data, networkType: options.networkType}});
4124
4264
  });
@@ -4189,7 +4329,7 @@ export default class Meeting extends StatelessWebexPlugin {
4189
4329
  * @public
4190
4330
  * @memberof Meeting
4191
4331
  */
4192
- addMedia(options = {}) {
4332
+ addMedia(options: any = {}) {
4193
4333
  const LOG_HEADER = 'Meeting:index#addMedia -->';
4194
4334
 
4195
4335
  let turnDiscoverySkippedReason;
@@ -4203,6 +4343,7 @@ export default class Meeting extends StatelessWebexPlugin {
4203
4343
  return Promise.reject(new UserNotJoinedError());
4204
4344
  }
4205
4345
  // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
4346
+ // @ts-ignore - isUserUnadmitted coming from SelfUtil
4206
4347
  if (this.isUserUnadmitted && !this.wirelessShare) {
4207
4348
  return Promise.reject(new UserInLobbyError());
4208
4349
  }
@@ -4251,7 +4392,9 @@ export default class Meeting extends StatelessWebexPlugin {
4251
4392
  .then(() => Media.attachMedia(this.mediaProperties, {
4252
4393
  meetingId: this.id,
4253
4394
  remoteQualityLevel: this.mediaProperties.remoteQualityLevel,
4395
+ // @ts-ignore - config coming from registerPlugin
4254
4396
  enableRtx: this.config.enableRtx,
4397
+ // @ts-ignore - config coming from registerPlugin
4255
4398
  enableExtmap: this.config.enableExtmap,
4256
4399
  setStartLocalSDPGenRemoteSDPRecvDelay: this.setStartLocalSDPGenRemoteSDPRecvDelay.bind(this)
4257
4400
  }))
@@ -4265,9 +4408,12 @@ export default class Meeting extends StatelessWebexPlugin {
4265
4408
  LoggerProxy.logger.info(`${LOG_HEADER} PeerConnection Received from attachMedia `);
4266
4409
 
4267
4410
  this.setRemoteStream(peerConnection);
4411
+ // @ts-ignore - config coming from registerPlugin
4268
4412
  if (this.config.stats.enableStatsAnalyzer) {
4269
4413
  // TODO: ** Dont re create StatsAnalyzer on reconnect or rejoin
4414
+ // @ts-ignore - config coming from registerPlugin
4270
4415
  this.networkQualityMonitor = new NetworkQualityMonitor(this.config.stats);
4416
+ // @ts-ignore - config coming from registerPlugin
4271
4417
  this.statsAnalyzer = new StatsAnalyzer(this.config.stats, this.networkQualityMonitor);
4272
4418
  this.setupStatsAnalyzerEventHandlers();
4273
4419
  this.networkQualityMonitor.on(EVENT_TRIGGERS.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
@@ -4290,7 +4436,7 @@ export default class Meeting extends StatelessWebexPlugin {
4290
4436
 
4291
4437
  throw error;
4292
4438
  })
4293
- .then(() => new Promise((resolve, reject) => {
4439
+ .then(() => new Promise<void>((resolve, reject) => {
4294
4440
  let timerCount = 0;
4295
4441
 
4296
4442
  // eslint-disable-next-line func-names
@@ -4420,7 +4566,7 @@ export default class Meeting extends StatelessWebexPlugin {
4420
4566
  * @private
4421
4567
  * @memberof Meeting
4422
4568
  */
4423
- enqueueMediaUpdate(mediaUpdateType, options) {
4569
+ private enqueueMediaUpdate(mediaUpdateType: string, options: object) {
4424
4570
  return new Promise((resolve, reject) => {
4425
4571
  const queueItem = {
4426
4572
  pendingPromiseResolve: resolve, pendingPromiseReject: reject, mediaUpdateType, options
@@ -4438,6 +4584,7 @@ export default class Meeting extends StatelessWebexPlugin {
4438
4584
  * @memberof Meeting
4439
4585
  */
4440
4586
  mediaNegotiatedEvent = () => {
4587
+ // @ts-ignore - config coming from registerPlugin
4441
4588
  if (this.config.experimental.enableMediaNegotiatedEvent) {
4442
4589
  LoggerProxy.logger.info('Meeting:mediaNegotiatedEvent --> Media server negotiated');
4443
4590
  Trigger.trigger(
@@ -4497,7 +4644,13 @@ export default class Meeting extends StatelessWebexPlugin {
4497
4644
  * @public
4498
4645
  * @memberof Meeting
4499
4646
  */
4500
- updateMedia(options = {}) {
4647
+ public updateMedia(
4648
+ options: {
4649
+ localStream?: MediaStream;
4650
+ localShare?: MediaStream;
4651
+ mediaSettings?: any;
4652
+ } = {} as any
4653
+ ) {
4501
4654
  const LOG_HEADER = 'Meeting:index#updateMedia -->';
4502
4655
 
4503
4656
  if (!this.canUpdateMedia()) {
@@ -4514,7 +4667,9 @@ export default class Meeting extends StatelessWebexPlugin {
4514
4667
  .then(() => Media.updateMedia(this.mediaProperties, {
4515
4668
  meetingId: this.id,
4516
4669
  remoteQualityLevel: this.mediaProperties.remoteQualityLevel,
4670
+ // @ts-ignore - config coming from registerPlugin
4517
4671
  enableRtx: this.config.enableRtx,
4672
+ // @ts-ignore - config coming from registerPlugin
4518
4673
  enableExtmap: this.config.enableExtmap,
4519
4674
  })
4520
4675
  .then((peerConnection) => {
@@ -4574,7 +4729,7 @@ export default class Meeting extends StatelessWebexPlugin {
4574
4729
  * @public
4575
4730
  * @memberof Meeting
4576
4731
  */
4577
- async updateAudio(options) {
4732
+ public async updateAudio(options: { sendAudio: boolean; receiveAudio: boolean; stream: MediaStream }) {
4578
4733
  if (!this.canUpdateMedia()) {
4579
4734
  return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.AUDIO, options);
4580
4735
  }
@@ -4650,7 +4805,7 @@ export default class Meeting extends StatelessWebexPlugin {
4650
4805
  * @public
4651
4806
  * @memberof Meeting
4652
4807
  */
4653
- updateVideo(options) {
4808
+ public updateVideo(options: { sendVideo: boolean; receiveVideo: boolean; stream: MediaStream }) {
4654
4809
  if (!this.canUpdateMedia()) {
4655
4810
  return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.VIDEO, options);
4656
4811
  }
@@ -4698,7 +4853,7 @@ export default class Meeting extends StatelessWebexPlugin {
4698
4853
  * @private
4699
4854
  * @memberof Meeting
4700
4855
  */
4701
- checkForStopShare(sendShare, previousShareStatus) {
4856
+ private checkForStopShare(sendShare: boolean, previousShareStatus: boolean) {
4702
4857
  if (sendShare && !previousShareStatus) {
4703
4858
  // When user starts sharing
4704
4859
  return Promise.resolve(true);
@@ -4722,7 +4877,7 @@ export default class Meeting extends StatelessWebexPlugin {
4722
4877
  * @public
4723
4878
  * @memberof Meeting
4724
4879
  */
4725
- updateShare(options) {
4880
+ public updateShare(options: { sendShare?: boolean; receiveShare?: boolean, stream?: any, skipSignalingCheck?: boolean }) {
4726
4881
  if (!options.skipSignalingCheck && !this.canUpdateMedia()) {
4727
4882
  return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.SHARE, options);
4728
4883
  }
@@ -4768,7 +4923,7 @@ export default class Meeting extends StatelessWebexPlugin {
4768
4923
  this.mediaProperties.mediaDirection.receiveShare = receiveShare;
4769
4924
  })
4770
4925
  .catch((error) => {
4771
- this.unsetLocalShareTrack(stream);
4926
+ this.unsetLocalShareTrack();
4772
4927
  throw error;
4773
4928
  })
4774
4929
  .finally(() => {
@@ -4798,9 +4953,10 @@ export default class Meeting extends StatelessWebexPlugin {
4798
4953
  * @private
4799
4954
  * @memberof Meeting
4800
4955
  */
4801
- preMedia(localStream, localShare, mediaSettings) {
4956
+ private preMedia(localStream: MediaStream, localShare: MediaStream, mediaSettings: any) {
4802
4957
  // eslint-disable-next-line no-warning-comments
4803
4958
  // TODO wire into default config. There's currently an issue with the stateless plugin or how we register
4959
+ // @ts-ignore - config coming from registerPlugin
4804
4960
  this.mediaProperties.setMediaDirection(Object.assign(this.config.mediaSettings, mediaSettings));
4805
4961
  // add a setup a function move the create and setup media in future
4806
4962
  // TODO: delete old audio and video if stale
@@ -4818,7 +4974,7 @@ export default class Meeting extends StatelessWebexPlugin {
4818
4974
  * @public
4819
4975
  * @memberof Meeting
4820
4976
  */
4821
- acknowledge(type) {
4977
+ public acknowledge(type: string) {
4822
4978
  if (!type) {
4823
4979
  return Promise.reject(new ParameterError('Type must be set to acknowledge the meeting.'));
4824
4980
  }
@@ -4853,7 +5009,7 @@ export default class Meeting extends StatelessWebexPlugin {
4853
5009
  * @public
4854
5010
  * @memberof Meeting
4855
5011
  */
4856
- decline(reason) {
5012
+ public decline(reason: string) {
4857
5013
  return MeetingUtil.declineMeeting(this, reason).then((decline) => {
4858
5014
  this.meetingFiniteStateMachine.decline();
4859
5015
 
@@ -4873,7 +5029,7 @@ export default class Meeting extends StatelessWebexPlugin {
4873
5029
  * @public
4874
5030
  * @memberof Meeting
4875
5031
  */
4876
- leave(options = {}) {
5032
+ public leave(options: { resourceId?: string, reason?: any } = {} as any) {
4877
5033
  Metrics.postEvent({event: eventType.LEAVE, meeting: this, data: {trigger: trigger.USER_INTERACTION, canProceed: false}});
4878
5034
  const leaveReason = options.reason || MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
4879
5035
 
@@ -4950,7 +5106,7 @@ export default class Meeting extends StatelessWebexPlugin {
4950
5106
  * @public
4951
5107
  * @memberof Meeting
4952
5108
  */
4953
- startWhiteboardShare(channelUrl, resourceToken) {
5109
+ public startWhiteboardShare(channelUrl: string, resourceToken: string) {
4954
5110
  const whiteboard = this.locusInfo.mediaShares.find((element) => element.name === 'whiteboard');
4955
5111
 
4956
5112
  if (!channelUrl) {
@@ -4960,7 +5116,7 @@ export default class Meeting extends StatelessWebexPlugin {
4960
5116
  if (whiteboard) {
4961
5117
  Metrics.postEvent({event: eventType.WHITEBOARD_SHARE_INITIATED, meeting: this});
4962
5118
 
4963
- const body = {
5119
+ const body: any = {
4964
5120
  disposition: FLOOR_ACTION.GRANTED,
4965
5121
  personUrl: this.locusInfo.self.url,
4966
5122
  deviceUrl: this.deviceUrl,
@@ -5006,7 +5162,7 @@ export default class Meeting extends StatelessWebexPlugin {
5006
5162
  * @public
5007
5163
  * @memberof Meeting
5008
5164
  */
5009
- stopWhiteboardShare(channelUrl) {
5165
+ public stopWhiteboardShare(channelUrl: string) {
5010
5166
  const whiteboard = this.locusInfo.mediaShares.find((element) => element.name === 'whiteboard');
5011
5167
 
5012
5168
  if (whiteboard) {
@@ -5022,6 +5178,7 @@ export default class Meeting extends StatelessWebexPlugin {
5022
5178
  LoggerProxy.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
5023
5179
 
5024
5180
  Metrics.sendBehavioralMetric(
5181
+ // @ts-ignore - check if STOP_WHITEBOARD_SHARE_FAILURE exists
5025
5182
  BEHAVIORAL_METRICS.STOP_WHITEBOARD_SHARE_FAILURE,
5026
5183
  {
5027
5184
  correlation_id: this.correlationId,
@@ -5047,7 +5204,7 @@ export default class Meeting extends StatelessWebexPlugin {
5047
5204
  * @private
5048
5205
  * @memberof Meeting
5049
5206
  */
5050
- share() {
5207
+ private share() {
5051
5208
  const content = this.locusInfo.mediaShares.find((element) => element.name === CONTENT);
5052
5209
 
5053
5210
  if (content && (this.shareStatus !== SHARE_STATUS.LOCAL_SHARE_ACTIVE)) {
@@ -5093,7 +5250,7 @@ export default class Meeting extends StatelessWebexPlugin {
5093
5250
  */
5094
5251
  // Internal only, temporarily allows optional params
5095
5252
  // eslint-disable-next-line valid-jsdoc
5096
- stopShare(options = {}) {
5253
+ public stopShare(options = {}) {
5097
5254
  return this.updateShare({
5098
5255
  sendShare: false,
5099
5256
  receiveShare: this.mediaProperties.mediaDirection.receiveShare,
@@ -5107,7 +5264,7 @@ export default class Meeting extends StatelessWebexPlugin {
5107
5264
  * @private
5108
5265
  * @memberof Meeting
5109
5266
  */
5110
- stopFloorRequest() {
5267
+ private stopFloorRequest() {
5111
5268
  const content = this.locusInfo.mediaShares.find((element) => element.name === CONTENT);
5112
5269
 
5113
5270
  if (content && (this.mediaProperties.mediaDirection.sendShare)) {
@@ -5157,7 +5314,7 @@ export default class Meeting extends StatelessWebexPlugin {
5157
5314
  * @public
5158
5315
  * @memberof Meeting
5159
5316
  */
5160
- startRecording() {
5317
+ public startRecording() {
5161
5318
  return MeetingUtil.startRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5162
5319
  }
5163
5320
 
@@ -5167,7 +5324,7 @@ export default class Meeting extends StatelessWebexPlugin {
5167
5324
  * @public
5168
5325
  * @memberof Meeting
5169
5326
  */
5170
- stopRecording() {
5327
+ public stopRecording() {
5171
5328
  return MeetingUtil.stopRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5172
5329
  }
5173
5330
 
@@ -5177,7 +5334,7 @@ export default class Meeting extends StatelessWebexPlugin {
5177
5334
  * @public
5178
5335
  * @memberof Meeting
5179
5336
  */
5180
- pauseRecording() {
5337
+ public pauseRecording() {
5181
5338
  return MeetingUtil.pauseRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5182
5339
  }
5183
5340
 
@@ -5187,7 +5344,7 @@ export default class Meeting extends StatelessWebexPlugin {
5187
5344
  * @public
5188
5345
  * @memberof Meeting
5189
5346
  */
5190
- resumeRecording() {
5347
+ public resumeRecording() {
5191
5348
  return MeetingUtil.resumeRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5192
5349
  }
5193
5350
 
@@ -5197,7 +5354,7 @@ export default class Meeting extends StatelessWebexPlugin {
5197
5354
  * @public
5198
5355
  * @memberof Meeting
5199
5356
  */
5200
- lockMeeting() {
5357
+ public lockMeeting() {
5201
5358
  return MeetingUtil.lockMeeting(this.inMeetingActions, this.meetingRequest, this.locusUrl);
5202
5359
  }
5203
5360
 
@@ -5207,7 +5364,7 @@ export default class Meeting extends StatelessWebexPlugin {
5207
5364
  * @public
5208
5365
  * @memberof Meeting
5209
5366
  */
5210
- unlockMeeting() {
5367
+ public unlockMeeting() {
5211
5368
  return MeetingUtil.unlockMeeting(this.inMeetingActions, this.meetingRequest, this.locusUrl);
5212
5369
  }
5213
5370
 
@@ -5218,7 +5375,7 @@ export default class Meeting extends StatelessWebexPlugin {
5218
5375
  * @private
5219
5376
  * @memberof Meeting
5220
5377
  */
5221
- rejectWithErrorLog(message) {
5378
+ private rejectWithErrorLog(message: string) {
5222
5379
  LoggerProxy.logger.error(message);
5223
5380
 
5224
5381
  return Promise.reject(new Error(message));
@@ -5231,7 +5388,7 @@ export default class Meeting extends StatelessWebexPlugin {
5231
5388
  * @public
5232
5389
  * @memberof Meeting
5233
5390
  */
5234
- sendDTMF(tones) {
5391
+ public sendDTMF(tones: string) {
5235
5392
  if (this.locusInfo && this.locusInfo.self) {
5236
5393
  if (this.locusInfo.self.enableDTMF) {
5237
5394
  return this.meetingRequest
@@ -5262,7 +5419,19 @@ export default class Meeting extends StatelessWebexPlugin {
5262
5419
  * @public
5263
5420
  * @memberof Meeting
5264
5421
  */
5265
- changeVideoLayout(layoutType, renderInfo = {}) {
5422
+ public changeVideoLayout(
5423
+ layoutType?: string,
5424
+ renderInfo: {
5425
+ main: {
5426
+ width: number;
5427
+ height: number;
5428
+ };
5429
+ content: {
5430
+ width: number;
5431
+ height: number;
5432
+ };
5433
+ } = {} as any
5434
+ ) {
5266
5435
  const {main, content} = renderInfo;
5267
5436
  const {mediaDirection, remoteShare, remoteVideoTrack} = this.mediaProperties;
5268
5437
 
@@ -5358,7 +5527,7 @@ export default class Meeting extends StatelessWebexPlugin {
5358
5527
  * @param {String} level {LOW|MEDIUM|HIGH}
5359
5528
  * @returns {Promise<MediaStream>} localStream
5360
5529
  */
5361
- setLocalVideoQuality(level) {
5530
+ setLocalVideoQuality(level: string) {
5362
5531
  LoggerProxy.logger.log(`Meeting:index#setLocalVideoQuality --> Setting quality to ${level}`);
5363
5532
 
5364
5533
  if (!VIDEO_RESOLUTIONS[level]) {
@@ -5408,7 +5577,7 @@ export default class Meeting extends StatelessWebexPlugin {
5408
5577
  * @param {String} level {LOW|MEDIUM|HIGH}
5409
5578
  * @returns {Promise}
5410
5579
  */
5411
- setRemoteQualityLevel(level) {
5580
+ setRemoteQualityLevel(level: string) {
5412
5581
  LoggerProxy.logger.log(`Meeting:index#setRemoteQualityLevel --> Setting quality to ${level}`);
5413
5582
 
5414
5583
  if (!QUALITY_LEVELS[level]) {
@@ -5438,7 +5607,7 @@ export default class Meeting extends StatelessWebexPlugin {
5438
5607
  * @returns {Promise}
5439
5608
  * @deprecated After FHD support
5440
5609
  */
5441
- setMeetingQuality(level) {
5610
+ setMeetingQuality(level: string) {
5442
5611
  LoggerProxy.logger.log(`Meeting:index#setMeetingQuality --> Setting quality to ${level}`);
5443
5612
 
5444
5613
  if (!QUALITY_LEVELS[level]) {
@@ -5502,7 +5671,13 @@ export default class Meeting extends StatelessWebexPlugin {
5502
5671
  * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean
5503
5672
  * @returns {Promise}
5504
5673
  */
5505
- shareScreen(options = {}) {
5674
+ shareScreen(
5675
+ options: {
5676
+ sendAudio: boolean;
5677
+ sendShare: boolean;
5678
+ sharePreferences: { shareConstraints: MediaTrackConstraints };
5679
+ } = {} as any
5680
+ ) {
5506
5681
  LoggerProxy.logger.log('Meeting:index#shareScreen --> Getting local share');
5507
5682
 
5508
5683
  const shareConstraints = {
@@ -5511,6 +5686,7 @@ export default class Meeting extends StatelessWebexPlugin {
5511
5686
  ...options
5512
5687
  };
5513
5688
 
5689
+ // @ts-ignore - config coming from registerPlugin
5514
5690
  return Media.getDisplayMedia(shareConstraints, this.config)
5515
5691
  .then((shareStream) => this.updateShare({
5516
5692
  sendShare: true,
@@ -5548,7 +5724,7 @@ export default class Meeting extends StatelessWebexPlugin {
5548
5724
  * @param {MediaStream} localShare
5549
5725
  * @returns {undefined}
5550
5726
  */
5551
- handleShareTrackEnded(localShare) {
5727
+ private handleShareTrackEnded(localShare: MediaStream) {
5552
5728
  if (this.wirelessShare) {
5553
5729
  this.leave({reason: MEETING_REMOVED_REASON.USER_ENDED_SHARE_STREAMS});
5554
5730
  }
@@ -5588,7 +5764,7 @@ export default class Meeting extends StatelessWebexPlugin {
5588
5764
  * @private
5589
5765
  * @memberof Meeting
5590
5766
  */
5591
- sendNetworkQualityEvent(res) {
5767
+ private sendNetworkQualityEvent(res: any) {
5592
5768
  Trigger.trigger(
5593
5769
  this,
5594
5770
  {
@@ -5610,7 +5786,7 @@ export default class Meeting extends StatelessWebexPlugin {
5610
5786
  * @private
5611
5787
  * @returns {undefined}
5612
5788
  */
5613
- handleMediaLogging({audioTrack, videoTrack}) {
5789
+ private handleMediaLogging({ audioTrack, videoTrack }: any) {
5614
5790
  MeetingUtil.handleVideoLogging(videoTrack);
5615
5791
  MeetingUtil.handleAudioLogging(audioTrack);
5616
5792
  }
@@ -5619,7 +5795,7 @@ export default class Meeting extends StatelessWebexPlugin {
5619
5795
  * @param {string} typeMedia 'audio' or 'video'
5620
5796
  * @returns {undefined}
5621
5797
  */
5622
- setStartSetupDelay(typeMedia) {
5798
+ setStartSetupDelay(typeMedia: string) {
5623
5799
  this[`startSetupDelay${typeMedia}`] = performance.now();
5624
5800
  this[`endSetupDelay${typeMedia}`] = undefined;
5625
5801
  }
@@ -5628,7 +5804,7 @@ export default class Meeting extends StatelessWebexPlugin {
5628
5804
  * @param {string} typeMedia 'audio' or 'video'
5629
5805
  * @returns {undefined}
5630
5806
  */
5631
- setEndSetupDelay(typeMedia) {
5807
+ setEndSetupDelay(typeMedia: string) {
5632
5808
  this[`endSetupDelay${typeMedia}`] = performance.now();
5633
5809
  }
5634
5810
 
@@ -5636,7 +5812,7 @@ export default class Meeting extends StatelessWebexPlugin {
5636
5812
  * @param {string} typeMedia 'audio' or 'video'
5637
5813
  * @returns {string} duration between start and end of setup
5638
5814
  */
5639
- getSetupDelayDuration(typeMedia) {
5815
+ getSetupDelayDuration(typeMedia: string) {
5640
5816
  const start = this[`startSetupDelay${typeMedia}`];
5641
5817
  const end = this[`endSetupDelay${typeMedia}`];
5642
5818
 
@@ -5647,7 +5823,7 @@ export default class Meeting extends StatelessWebexPlugin {
5647
5823
  * @param {string} typeMedia 'audio' or 'video'
5648
5824
  * @returns {undefined}
5649
5825
  */
5650
- setStartSendingMediaDelay(typeMedia) {
5826
+ setStartSendingMediaDelay(typeMedia: string) {
5651
5827
  this[`startSendingMediaDelay${typeMedia}`] = performance.now();
5652
5828
  this[`endSendingMediaDelay${typeMedia}`] = undefined;
5653
5829
  }
@@ -5656,7 +5832,7 @@ export default class Meeting extends StatelessWebexPlugin {
5656
5832
  * @param {string} typeMedia 'audio' or 'video'
5657
5833
  * @returns {undefined}
5658
5834
  */
5659
- setEndSendingMediaDelay(typeMedia) {
5835
+ setEndSendingMediaDelay(typeMedia: string) {
5660
5836
  this[`endSendingMediaDelay${typeMedia}`] = performance.now();
5661
5837
  }
5662
5838
 
@@ -5664,7 +5840,7 @@ export default class Meeting extends StatelessWebexPlugin {
5664
5840
  * @param {string} typeMedia 'audio' or 'video'
5665
5841
  * @returns {string} duration between join response and first media tx
5666
5842
  */
5667
- getSendingMediaDelayDuration(typeMedia) {
5843
+ getSendingMediaDelayDuration(typeMedia: string) {
5668
5844
  const start = this[`startSendingMediaDelay${typeMedia}`];
5669
5845
  const end = this[`endSendingMediaDelay${typeMedia}`];
5670
5846
 
@@ -5675,7 +5851,7 @@ export default class Meeting extends StatelessWebexPlugin {
5675
5851
  *
5676
5852
  * @returns {undefined}
5677
5853
  */
5678
- setStartLocalSDPGenRemoteSDPRecvDelay() {
5854
+ setStartLocalSDPGenRemoteSDPRecvDelay() {
5679
5855
  if (!this.startLocalSDPGenRemoteSDPRecvDelay) {
5680
5856
  this.startLocalSDPGenRemoteSDPRecvDelay = performance.now();
5681
5857
  this.endLocalSDPGenRemoteSDPRecvDelay = undefined;
@@ -5801,7 +5977,7 @@ export default class Meeting extends StatelessWebexPlugin {
5801
5977
  * @public
5802
5978
  * @memberof Meeting
5803
5979
  */
5804
- endMeetingForAll() {
5980
+ public endMeetingForAll() {
5805
5981
  Metrics.postEvent({event: eventType.LEAVE, meeting: this, data: {trigger: trigger.USER_INTERACTION, canProceed: false}});
5806
5982
 
5807
5983
  LoggerProxy.logger.log('Meeting:index#endMeetingForAll --> End meeting for All');
@@ -5886,7 +6062,7 @@ export default class Meeting extends StatelessWebexPlugin {
5886
6062
  * @public
5887
6063
  * @memberof Meeting
5888
6064
  */
5889
- isBnrEnabled() {
6065
+ public isBnrEnabled() {
5890
6066
  return this.effects && this.effects.isBnrEnabled();
5891
6067
  }
5892
6068
 
@@ -5897,7 +6073,7 @@ export default class Meeting extends StatelessWebexPlugin {
5897
6073
  * @param {MedaiStreamTrack} audioTrack from updateAudio
5898
6074
  * @memberof Meeting
5899
6075
  */
5900
- async internal_enableBNR(audioTrack) {
6076
+ private async internal_enableBNR(audioTrack: any) {
5901
6077
  try {
5902
6078
  LoggerProxy.logger.info('Meeting:index#internal_enableBNR. Internal enable BNR called');
5903
6079
  const bnrAudioTrack = await WebRTCMedia.Effects.BNR.enableBNR(audioTrack);
@@ -5918,7 +6094,7 @@ export default class Meeting extends StatelessWebexPlugin {
5918
6094
  * @public
5919
6095
  * @memberof Meeting
5920
6096
  */
5921
- enableBNR() {
6097
+ public enableBNR() {
5922
6098
  if (typeof this.mediaProperties === 'undefined' || typeof this.mediaProperties.audioTrack === 'undefined') {
5923
6099
  return Promise.reject(new Error("Meeting doesn't have an audioTrack attached"));
5924
6100
  }
@@ -5953,7 +6129,7 @@ export default class Meeting extends StatelessWebexPlugin {
5953
6129
  * @public
5954
6130
  * @memberof Meeting
5955
6131
  */
5956
- disableBNR() {
6132
+ public disableBNR() {
5957
6133
  if (typeof this.mediaProperties === 'undefined' || typeof this.mediaProperties.audioTrack === 'undefined') {
5958
6134
  return Promise.reject(new Error("Meeting doesn't have an audioTrack attached"));
5959
6135
  }