@webex/plugin-meetings 2.35.2 → 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.
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +7 -0
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +8 -0
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +8 -0
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +7 -0
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +7 -0
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +7 -0
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +7 -0
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +7 -0
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -2
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +3 -0
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +43 -5
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +12 -3
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +12 -0
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.js +8 -1
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/index.js +151 -32
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +6 -0
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +54 -24
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +4 -1
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +5 -0
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +14 -2
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -0
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +4 -1
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +72 -20
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +4 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +30 -7
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +2 -1
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +1 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +12 -1
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +19 -9
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +8 -0
- package/dist/metrics/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +10 -2
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.js +11 -4
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +11 -0
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -1
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +17 -7
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +1 -0
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +21 -2
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/collection.js +1 -0
- package/dist/roap/collection.js.map +1 -1
- package/dist/roap/handler.js +14 -2
- package/dist/roap/handler.js.map +1 -1
- package/dist/roap/index.js +11 -1
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +7 -2
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.js.map +1 -1
- package/dist/roap/turnDiscovery.js +9 -1
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.js.map +1 -1
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +19 -1
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +9 -3
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +10 -3
- package/dist/transcription/index.js.map +1 -1
- package/package.json +19 -19
- package/src/common/{browser-detection.js → browser-detection.ts} +1 -1
- package/src/common/collection.ts +6 -6
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +5 -1
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +6 -1
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +6 -1
- package/src/common/errors/{media.js → media.ts} +5 -1
- package/src/common/errors/parameter.ts +3 -2
- package/src/common/errors/{password-error.js → password-error.ts} +5 -1
- package/src/common/errors/{permission.js → permission.ts} +5 -1
- package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
- package/src/common/errors/{reconnection.js → reconnection.ts} +5 -1
- package/src/common/errors/{stats.js → stats.ts} +5 -1
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +1 -2
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +3 -1
- package/src/common/events/{events-scope.js → events-scope.ts} +1 -1
- package/src/common/events/{events.js → events.ts} +0 -0
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +1 -2
- package/src/common/events/{util.js → util.ts} +1 -1
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/{logger-proxy.js → logger-proxy.ts} +1 -1
- package/src/common/logs/{request.js → request.ts} +12 -2
- package/src/common/queue.ts +1 -2
- package/src/{config.js → config.ts} +1 -0
- package/src/constants.ts +1 -0
- package/src/locus-info/{controlsUtils.js → controlsUtils.ts} +4 -4
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +1 -1
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +5 -5
- package/src/locus-info/{index.js → index.ts} +67 -32
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +3 -4
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +13 -13
- package/src/locus-info/{parser.js → parser.ts} +22 -12
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +17 -19
- package/src/media/{index.js → index.ts} +108 -39
- package/src/media/{properties.js → properties.ts} +16 -4
- package/src/media/{util.js → util.ts} +2 -3
- package/src/mediaQualityMetrics/{config.js → config.ts} +1 -1
- package/src/meeting/{effectsState.js → effectsState.ts} +12 -6
- package/src/meeting/{index.js → index.ts} +323 -147
- package/src/meeting/{muteState.js → muteState.ts} +16 -11
- package/src/meeting/{request.js → request.ts} +124 -36
- package/src/meeting/{state.js → state.ts} +6 -6
- package/src/meeting/{util.js → util.ts} +4 -4
- package/src/meeting-info/{collection.js → collection.ts} +4 -1
- package/src/meeting-info/{index.js → index.ts} +10 -6
- package/src/meeting-info/{meeting-info-v2.js → meeting-info-v2.ts} +28 -10
- package/src/meeting-info/{request.js → request.ts} +6 -2
- package/src/meeting-info/{util.js → util.ts} +6 -5
- package/src/meeting-info/{utilv2.js → utilv2.ts} +8 -7
- package/src/meetings/{collection.js → collection.ts} +5 -2
- package/src/meetings/{index.js → index.ts} +88 -22
- package/src/meetings/{request.js → request.ts} +6 -1
- package/src/meetings/{util.js → util.ts} +5 -3
- package/src/member/{index.js → index.ts} +46 -15
- package/src/member/{util.js → util.ts} +17 -16
- package/src/members/{collection.js → collection.ts} +2 -1
- package/src/members/{index.js → index.ts} +39 -26
- package/src/members/{request.js → request.ts} +16 -5
- package/src/members/{util.js → util.ts} +7 -7
- package/src/metrics/{config.js → config.ts} +0 -2
- package/src/metrics/{constants.js → constants.ts} +0 -0
- package/src/metrics/{index.js → index.ts} +27 -8
- package/src/networkQualityMonitor/{index.js → index.ts} +18 -3
- package/src/peer-connection-manager/{index.js → index.ts} +72 -28
- package/src/personal-meeting-room/{index.js → index.ts} +17 -4
- package/src/personal-meeting-room/{request.js → request.ts} +3 -1
- package/src/personal-meeting-room/{util.js → util.ts} +1 -1
- package/src/reachability/{index.js → index.ts} +28 -17
- package/src/reachability/request.ts +4 -2
- package/src/reconnection-manager/{index.js → index.ts} +42 -13
- package/src/roap/{collection.js → collection.ts} +1 -0
- package/src/roap/{handler.js → handler.ts} +15 -4
- package/src/roap/{index.js → index.ts} +23 -10
- package/src/roap/{request.js → request.ts} +19 -3
- package/src/roap/{state.js → state.ts} +3 -2
- package/src/roap/turnDiscovery.ts +14 -5
- package/src/roap/{util.js → util.ts} +1 -2
- package/src/statsAnalyzer/{global.js → global.ts} +0 -0
- package/src/statsAnalyzer/{index.js → index.ts} +36 -17
- package/src/statsAnalyzer/{mqaUtil.js → mqaUtil.ts} +6 -1
- package/src/transcription/{index.js → index.ts} +16 -11
- package/test/integration/spec/space-meeting.js +1 -2
- 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
|
-
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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 {
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
}
|