@webex/plugin-meetings 3.5.0-wxcc.1 → 3.6.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/config.js +4 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/media/index.js +3 -1
- package/dist/media/index.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +3 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +39 -4
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +8 -10
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +100 -26
- package/dist/meetings/index.js.map +1 -1
- package/dist/roap/request.js +1 -1
- package/dist/roap/request.js.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/constants.d.ts +2 -1
- package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
- package/dist/types/meeting/index.d.ts +11 -0
- package/dist/types/meetings/index.d.ts +43 -2
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/config.ts +3 -0
- package/src/constants.ts +1 -0
- package/src/media/index.ts +4 -1
- package/src/meeting/in-meeting-actions.ts +3 -0
- package/src/meeting/index.ts +42 -2
- package/src/meeting/util.ts +27 -31
- package/src/meetings/index.ts +126 -37
- package/src/roap/request.ts +3 -1
- package/test/unit/spec/media/index.ts +4 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
- package/test/unit/spec/meeting/index.js +58 -17
- package/test/unit/spec/meeting/utils.js +50 -85
- package/test/unit/spec/meetings/index.js +128 -13
- package/dist/networkQualityMonitor/index.js +0 -227
- package/dist/networkQualityMonitor/index.js.map +0 -1
- package/dist/rtcMetrics/constants.js +0 -11
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.js +0 -197
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/types/networkQualityMonitor/index.d.ts +0 -70
- package/dist/types/rtcMetrics/constants.d.ts +0 -4
- package/dist/types/rtcMetrics/index.d.ts +0 -71
- package/src/rtcMetrics/constants.ts +0 -3
- package/src/rtcMetrics/index.ts +0 -186
- package/test/unit/spec/rtcMetrics/index.ts +0 -154
|
@@ -714,7 +714,8 @@ export declare enum SELF_POLICY {
|
|
|
714
714
|
SUPPORT_HQV = "supportHQV",
|
|
715
715
|
SUPPORT_HDV = "supportHDV",
|
|
716
716
|
SUPPORT_PARTICIPANT_LIST = "supportParticipantList",
|
|
717
|
-
SUPPORT_VOIP = "supportVoIP"
|
|
717
|
+
SUPPORT_VOIP = "supportVoIP",
|
|
718
|
+
SUPPORT_POLLING_AND_QA = "supportPollingAndQA"
|
|
718
719
|
}
|
|
719
720
|
export declare const DISPLAY_HINTS: {
|
|
720
721
|
ADD_GUEST: string;
|
|
@@ -79,6 +79,7 @@ interface IInMeetingActions {
|
|
|
79
79
|
supportHDV?: boolean;
|
|
80
80
|
canShareWhiteBoard?: boolean;
|
|
81
81
|
enforceVirtualBackground?: boolean;
|
|
82
|
+
canPollingAndQA?: boolean;
|
|
82
83
|
}
|
|
83
84
|
/**
|
|
84
85
|
* @class InMeetingActions
|
|
@@ -158,6 +159,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
158
159
|
enforceVirtualBackground: any;
|
|
159
160
|
supportHDV: any;
|
|
160
161
|
canShareWhiteBoard: any;
|
|
162
|
+
canPollingAndQA: any;
|
|
161
163
|
/**
|
|
162
164
|
* Returns all meeting action options
|
|
163
165
|
* @returns {Object}
|
|
@@ -67,6 +67,7 @@ export type AddMediaOptions = {
|
|
|
67
67
|
};
|
|
68
68
|
export type CallStateForMetrics = {
|
|
69
69
|
correlationId?: string;
|
|
70
|
+
sessionCorrelationId?: string;
|
|
70
71
|
joinTrigger?: string;
|
|
71
72
|
loginType?: string;
|
|
72
73
|
};
|
|
@@ -488,6 +489,16 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
488
489
|
* @param {string} correlationId
|
|
489
490
|
*/
|
|
490
491
|
set correlationId(correlationId: string);
|
|
492
|
+
/**
|
|
493
|
+
* Getter - Returns callStateForMetrics.sessionCorrelationId
|
|
494
|
+
* @returns {string}
|
|
495
|
+
*/
|
|
496
|
+
get sessionCorrelationId(): string;
|
|
497
|
+
/**
|
|
498
|
+
* Setter - sets callStateForMetrics.sessionCorrelationId
|
|
499
|
+
* @param {string} sessionCorrelationId
|
|
500
|
+
*/
|
|
501
|
+
set sessionCorrelationId(sessionCorrelationId: string);
|
|
491
502
|
/**
|
|
492
503
|
* Getter - Returns isoLocalClientMeetingJoinTime
|
|
493
504
|
* This will be set once on meeting join, and not updated again
|
|
@@ -2,6 +2,7 @@ import '@webex/internal-plugin-mercury';
|
|
|
2
2
|
import '@webex/internal-plugin-conversation';
|
|
3
3
|
import '@webex/internal-plugin-metrics';
|
|
4
4
|
import { WebexPlugin } from '@webex/webex-core';
|
|
5
|
+
import { DeviceRegistrationOptions } from '@webex/internal-plugin-device';
|
|
5
6
|
import * as mediaHelpersModule from '@webex/media-helpers';
|
|
6
7
|
import 'webrtc-adapter';
|
|
7
8
|
import { DESTINATION_TYPE } from '../constants';
|
|
@@ -51,6 +52,26 @@ import { INoiseReductionEffect, IVirtualBackgroundEffect } from './meetings.type
|
|
|
51
52
|
* @property {String} type what type of meeting it was
|
|
52
53
|
* @memberof Meetings
|
|
53
54
|
*/
|
|
55
|
+
/**
|
|
56
|
+
* Object containing only the most basic information about a meeting.
|
|
57
|
+
* This is the information that is kept even after the meeting is deleted from the MeetingCollection
|
|
58
|
+
*/
|
|
59
|
+
export type BasicMeetingInformation = {
|
|
60
|
+
allowMediaInLobby: boolean;
|
|
61
|
+
correlationId: string;
|
|
62
|
+
environment: string;
|
|
63
|
+
id: string;
|
|
64
|
+
locusUrl: string;
|
|
65
|
+
locusInfo: {
|
|
66
|
+
url: string;
|
|
67
|
+
fullState: {
|
|
68
|
+
lastActive: string;
|
|
69
|
+
sessionId: string;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
meetingInfo: any;
|
|
73
|
+
sessionCorrelationId: string;
|
|
74
|
+
};
|
|
54
75
|
/**
|
|
55
76
|
* Maintain a cache of meetings and sync with services.
|
|
56
77
|
* @class
|
|
@@ -59,6 +80,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
59
80
|
loggerRequest: any;
|
|
60
81
|
media: any;
|
|
61
82
|
meetingCollection: any;
|
|
83
|
+
deletedMeetings: Map<string, BasicMeetingInformation>;
|
|
62
84
|
personalMeetingRoom: any;
|
|
63
85
|
preferredWebexSite: any;
|
|
64
86
|
reachability: Reachability;
|
|
@@ -185,15 +207,25 @@ export default class Meetings extends WebexPlugin {
|
|
|
185
207
|
* @returns {undefined}
|
|
186
208
|
*/
|
|
187
209
|
private _toggleTlsReachability;
|
|
210
|
+
/**
|
|
211
|
+
* API to toggle backend ipv6 native support config, needs to be called before webex.meetings.register()
|
|
212
|
+
*
|
|
213
|
+
* @param {Boolean} newValue
|
|
214
|
+
* @private
|
|
215
|
+
* @memberof Meetings
|
|
216
|
+
* @returns {undefined}
|
|
217
|
+
*/
|
|
218
|
+
private _toggleIpv6BackendNativeSupport;
|
|
188
219
|
/**
|
|
189
220
|
* Explicitly sets up the meetings plugin by registering
|
|
190
221
|
* the device, connecting to mercury, and listening for locus events.
|
|
191
222
|
*
|
|
223
|
+
* @param {DeviceRegistrationOptions} [deviceRegistrationOptions] - The options for registering the device (optional)
|
|
192
224
|
* @returns {Promise}
|
|
193
225
|
* @public
|
|
194
226
|
* @memberof Meetings
|
|
195
227
|
*/
|
|
196
|
-
register(): Promise<
|
|
228
|
+
register(deviceRegistrationOptions?: DeviceRegistrationOptions): Promise<any>;
|
|
197
229
|
/**
|
|
198
230
|
* Explicitly tears down the meetings plugin by deregistering
|
|
199
231
|
* the device, disconnecting from mercury, and stops listening to locus events
|
|
@@ -281,6 +313,14 @@ export default class Meetings extends WebexPlugin {
|
|
|
281
313
|
* @memberof Meetings
|
|
282
314
|
*/
|
|
283
315
|
getPersonalMeetingRoom(): any;
|
|
316
|
+
/**
|
|
317
|
+
* Returns basic information about a meeting that exists or
|
|
318
|
+
* used to exist in the MeetingCollection
|
|
319
|
+
*
|
|
320
|
+
* @param {string} meetingId
|
|
321
|
+
* @returns {BasicMeetingInformation|undefined}
|
|
322
|
+
*/
|
|
323
|
+
getBasicMeetingInformation(meetingId: string): BasicMeetingInformation;
|
|
284
324
|
/**
|
|
285
325
|
* @param {Meeting} meeting
|
|
286
326
|
* @param {Object} reason
|
|
@@ -304,11 +344,12 @@ export default class Meetings extends WebexPlugin {
|
|
|
304
344
|
* @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics
|
|
305
345
|
* @param {Object} [meetingInfo] - Pre-fetched complete meeting info
|
|
306
346
|
* @param {String} [meetingLookupUrl] - meeting info prefetch url
|
|
347
|
+
* @param {string} sessionCorrelationId - the optional specified sessionCorrelationId (callStateForMetrics.sessionCorrelationId) can be provided instead
|
|
307
348
|
* @returns {Promise<Meeting>} A new Meeting.
|
|
308
349
|
* @public
|
|
309
350
|
* @memberof Meetings
|
|
310
351
|
*/
|
|
311
|
-
create(destination: string, type?: DESTINATION_TYPE, useRandomDelayForInfo?: boolean, infoExtraParams?: {}, correlationId?: string, failOnMissingMeetingInfo?: boolean, callStateForMetrics?: CallStateForMetrics, meetingInfo?: any, meetingLookupUrl?: any): any;
|
|
352
|
+
create(destination: string, type?: DESTINATION_TYPE, useRandomDelayForInfo?: boolean, infoExtraParams?: {}, correlationId?: string, failOnMissingMeetingInfo?: boolean, callStateForMetrics?: CallStateForMetrics, meetingInfo?: any, meetingLookupUrl?: any, sessionCorrelationId?: string): any;
|
|
312
353
|
/**
|
|
313
354
|
* Create meeting
|
|
314
355
|
*
|
package/dist/webinar/index.js
CHANGED
|
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
62
62
|
updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
|
|
63
63
|
this.set('canManageWebcast', canManageWebcast);
|
|
64
64
|
},
|
|
65
|
-
version: "3.
|
|
65
|
+
version: "3.6.0-next.1"
|
|
66
66
|
});
|
|
67
67
|
var _default = exports.default = Webinar;
|
|
68
68
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
44
44
|
"@webex/jest-config-legacy": "0.0.0",
|
|
45
45
|
"@webex/legacy-tools": "0.0.0",
|
|
46
|
-
"@webex/plugin-meetings": "3.
|
|
47
|
-
"@webex/plugin-rooms": "3.5.0-
|
|
48
|
-
"@webex/test-helper-chai": "3.5.0-
|
|
49
|
-
"@webex/test-helper-mocha": "3.5.0-
|
|
50
|
-
"@webex/test-helper-mock-webex": "3.5.0-
|
|
51
|
-
"@webex/test-helper-retry": "3.5.0-
|
|
52
|
-
"@webex/test-helper-test-users": "3.5.0-
|
|
46
|
+
"@webex/plugin-meetings": "3.6.0-next.1",
|
|
47
|
+
"@webex/plugin-rooms": "3.5.0-next.23",
|
|
48
|
+
"@webex/test-helper-chai": "3.5.0-next.21",
|
|
49
|
+
"@webex/test-helper-mocha": "3.5.0-next.21",
|
|
50
|
+
"@webex/test-helper-mock-webex": "3.5.0-next.21",
|
|
51
|
+
"@webex/test-helper-retry": "3.5.0-next.21",
|
|
52
|
+
"@webex/test-helper-test-users": "3.5.0-next.21",
|
|
53
53
|
"chai": "^4.3.4",
|
|
54
54
|
"chai-as-promised": "^7.1.1",
|
|
55
55
|
"eslint": "^8.24.0",
|
|
@@ -61,21 +61,21 @@
|
|
|
61
61
|
"typescript": "^4.7.4"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@webex/common": "3.5.0-
|
|
65
|
-
"@webex/internal-media-core": "2.11.
|
|
66
|
-
"@webex/internal-plugin-conversation": "3.5.0-
|
|
67
|
-
"@webex/internal-plugin-device": "3.5.0-
|
|
68
|
-
"@webex/internal-plugin-llm": "3.5.0-
|
|
69
|
-
"@webex/internal-plugin-mercury": "3.5.0-
|
|
70
|
-
"@webex/internal-plugin-metrics": "3.5.0-
|
|
71
|
-
"@webex/internal-plugin-support": "3.5.0-
|
|
72
|
-
"@webex/internal-plugin-user": "3.5.0-
|
|
73
|
-
"@webex/internal-plugin-voicea": "3.
|
|
74
|
-
"@webex/media-helpers": "3.5.0-
|
|
75
|
-
"@webex/plugin-people": "3.5.0-
|
|
76
|
-
"@webex/plugin-rooms": "3.5.0-
|
|
64
|
+
"@webex/common": "3.5.0-next.21",
|
|
65
|
+
"@webex/internal-media-core": "2.11.3",
|
|
66
|
+
"@webex/internal-plugin-conversation": "3.5.0-next.23",
|
|
67
|
+
"@webex/internal-plugin-device": "3.5.0-next.21",
|
|
68
|
+
"@webex/internal-plugin-llm": "3.5.0-next.21",
|
|
69
|
+
"@webex/internal-plugin-mercury": "3.5.0-next.21",
|
|
70
|
+
"@webex/internal-plugin-metrics": "3.5.0-next.21",
|
|
71
|
+
"@webex/internal-plugin-support": "3.5.0-next.23",
|
|
72
|
+
"@webex/internal-plugin-user": "3.5.0-next.21",
|
|
73
|
+
"@webex/internal-plugin-voicea": "3.6.0-next.1",
|
|
74
|
+
"@webex/media-helpers": "3.5.0-next.22",
|
|
75
|
+
"@webex/plugin-people": "3.5.0-next.21",
|
|
76
|
+
"@webex/plugin-rooms": "3.5.0-next.23",
|
|
77
77
|
"@webex/web-capabilities": "^1.4.0",
|
|
78
|
-
"@webex/webex-core": "3.5.0-
|
|
78
|
+
"@webex/webex-core": "3.5.0-next.21",
|
|
79
79
|
"ampersand-collection": "^2.0.2",
|
|
80
80
|
"bowser": "^2.11.0",
|
|
81
81
|
"btoa": "^1.2.1",
|
|
@@ -91,5 +91,5 @@
|
|
|
91
91
|
"//": [
|
|
92
92
|
"TODO: upgrade jwt-decode when moving to node 18"
|
|
93
93
|
],
|
|
94
|
-
"version": "3.
|
|
94
|
+
"version": "3.6.0-next.1"
|
|
95
95
|
}
|
package/src/config.ts
CHANGED
package/src/constants.ts
CHANGED
package/src/media/index.ts
CHANGED
|
@@ -15,12 +15,12 @@ import {
|
|
|
15
15
|
LocalSystemAudioStream,
|
|
16
16
|
LocalMicrophoneStream,
|
|
17
17
|
} from '@webex/media-helpers';
|
|
18
|
+
import {RtcMetrics} from '@webex/internal-plugin-metrics';
|
|
18
19
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
19
20
|
import {MEDIA_TRACK_CONSTRAINT} from '../constants';
|
|
20
21
|
import Config from '../config';
|
|
21
22
|
import StaticConfig from '../common/config';
|
|
22
23
|
import BrowserDetection from '../common/browser-detection';
|
|
23
|
-
import RtcMetrics from '../rtcMetrics';
|
|
24
24
|
|
|
25
25
|
const {isBrowser} = BrowserDetection();
|
|
26
26
|
|
|
@@ -144,6 +144,7 @@ Media.createMediaConnection = (
|
|
|
144
144
|
password: string;
|
|
145
145
|
};
|
|
146
146
|
bundlePolicy?: BundlePolicy;
|
|
147
|
+
iceCandidatesTimeout?: number;
|
|
147
148
|
}
|
|
148
149
|
) => {
|
|
149
150
|
const {
|
|
@@ -154,6 +155,7 @@ Media.createMediaConnection = (
|
|
|
154
155
|
enableExtmap,
|
|
155
156
|
turnServerInfo,
|
|
156
157
|
bundlePolicy,
|
|
158
|
+
iceCandidatesTimeout,
|
|
157
159
|
} = options;
|
|
158
160
|
|
|
159
161
|
const iceServers = [];
|
|
@@ -210,6 +212,7 @@ Media.createMediaConnection = (
|
|
|
210
212
|
return new RoapMediaConnection(
|
|
211
213
|
{
|
|
212
214
|
iceServers,
|
|
215
|
+
iceCandidatesTimeout,
|
|
213
216
|
skipInactiveTransceivers: false,
|
|
214
217
|
requireH264: true,
|
|
215
218
|
sdpMunging: {
|
|
@@ -82,6 +82,7 @@ interface IInMeetingActions {
|
|
|
82
82
|
supportHDV?: boolean;
|
|
83
83
|
canShareWhiteBoard?: boolean;
|
|
84
84
|
enforceVirtualBackground?: boolean;
|
|
85
|
+
canPollingAndQA?: boolean;
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
/**
|
|
@@ -236,6 +237,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
236
237
|
|
|
237
238
|
canShareWhiteBoard = null;
|
|
238
239
|
|
|
240
|
+
canPollingAndQA = null;
|
|
239
241
|
/**
|
|
240
242
|
* Returns all meeting action options
|
|
241
243
|
* @returns {Object}
|
|
@@ -314,6 +316,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
314
316
|
supportHQV: this.supportHQV,
|
|
315
317
|
supportHDV: this.supportHDV,
|
|
316
318
|
canShareWhiteBoard: this.canShareWhiteBoard,
|
|
319
|
+
canPollingAndQA: this.canPollingAndQA,
|
|
317
320
|
});
|
|
318
321
|
|
|
319
322
|
/**
|
package/src/meeting/index.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
ClientEventLeaveReason,
|
|
11
11
|
CallDiagnosticUtils,
|
|
12
12
|
CALL_DIAGNOSTIC_CONFIG,
|
|
13
|
+
RtcMetrics,
|
|
13
14
|
} from '@webex/internal-plugin-metrics';
|
|
14
15
|
import {ClientEvent as RawClientEvent} from '@webex/event-dictionary-ts';
|
|
15
16
|
|
|
@@ -155,7 +156,6 @@ import ControlsOptionsManager from '../controls-options-manager';
|
|
|
155
156
|
import PermissionError from '../common/errors/permission';
|
|
156
157
|
import {LocusMediaRequest} from './locusMediaRequest';
|
|
157
158
|
import {ConnectionStateHandler, ConnectionStateEvent} from './connectionStateHandler';
|
|
158
|
-
import RtcMetrics from '../rtcMetrics';
|
|
159
159
|
|
|
160
160
|
// default callback so we don't call an undefined function, but in practice it should never be used
|
|
161
161
|
const DEFAULT_ICE_PHASE_CALLBACK = () => 'JOIN_MEETING_FINAL';
|
|
@@ -227,6 +227,7 @@ export type AddMediaOptions = {
|
|
|
227
227
|
|
|
228
228
|
export type CallStateForMetrics = {
|
|
229
229
|
correlationId?: string;
|
|
230
|
+
sessionCorrelationId?: string;
|
|
230
231
|
joinTrigger?: string;
|
|
231
232
|
loginType?: string;
|
|
232
233
|
};
|
|
@@ -742,12 +743,29 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
742
743
|
*/
|
|
743
744
|
this.callStateForMetrics = attrs.callStateForMetrics || {};
|
|
744
745
|
const correlationId = attrs.correlationId || attrs.callStateForMetrics?.correlationId;
|
|
746
|
+
const sessionCorrelationId =
|
|
747
|
+
attrs.sessionCorrelationId || attrs.callStateForMetrics?.sessionCorrelationId;
|
|
748
|
+
if (sessionCorrelationId) {
|
|
749
|
+
LoggerProxy.logger.log(
|
|
750
|
+
`Meetings:index#constructor --> Initializing the meeting object with session correlation id from app ${correlationId}`
|
|
751
|
+
);
|
|
752
|
+
this.callStateForMetrics.sessionCorrelationId = sessionCorrelationId;
|
|
753
|
+
} else {
|
|
754
|
+
LoggerProxy.logger.log(
|
|
755
|
+
`Meetings:index#constructor --> No session correlation id supplied. None will be generated and this field will remain blank`
|
|
756
|
+
);
|
|
757
|
+
// TODO: supply a session from the meetings instance
|
|
758
|
+
this.callStateForMetrics.sessionCorrelationId = '';
|
|
759
|
+
}
|
|
745
760
|
if (correlationId) {
|
|
746
761
|
LoggerProxy.logger.log(
|
|
747
762
|
`Meetings:index#constructor --> Initializing the meeting object with correlation id from app ${correlationId}`
|
|
748
763
|
);
|
|
749
764
|
this.callStateForMetrics.correlationId = correlationId;
|
|
750
765
|
} else {
|
|
766
|
+
LoggerProxy.logger.log(
|
|
767
|
+
`Meetings:index#constructor --> Initializing the meeting object with generated correlation id from sdk ${this.id}`
|
|
768
|
+
);
|
|
751
769
|
this.callStateForMetrics.correlationId = this.id;
|
|
752
770
|
}
|
|
753
771
|
/**
|
|
@@ -1581,6 +1599,22 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1581
1599
|
this.callStateForMetrics.correlationId = correlationId;
|
|
1582
1600
|
}
|
|
1583
1601
|
|
|
1602
|
+
/**
|
|
1603
|
+
* Getter - Returns callStateForMetrics.sessionCorrelationId
|
|
1604
|
+
* @returns {string}
|
|
1605
|
+
*/
|
|
1606
|
+
get sessionCorrelationId() {
|
|
1607
|
+
return this.callStateForMetrics.sessionCorrelationId;
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1610
|
+
/**
|
|
1611
|
+
* Setter - sets callStateForMetrics.sessionCorrelationId
|
|
1612
|
+
* @param {string} sessionCorrelationId
|
|
1613
|
+
*/
|
|
1614
|
+
set sessionCorrelationId(sessionCorrelationId: string) {
|
|
1615
|
+
this.callStateForMetrics.sessionCorrelationId = sessionCorrelationId;
|
|
1616
|
+
}
|
|
1617
|
+
|
|
1584
1618
|
/**
|
|
1585
1619
|
* Getter - Returns isoLocalClientMeetingJoinTime
|
|
1586
1620
|
* This will be set once on meeting join, and not updated again
|
|
@@ -3792,6 +3826,10 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3792
3826
|
requiredPolicies: [SELF_POLICY.SUPPORT_CHAT],
|
|
3793
3827
|
policies: this.selfUserPolicies,
|
|
3794
3828
|
}),
|
|
3829
|
+
canPollingAndQA: ControlsOptionsUtil.hasPolicies({
|
|
3830
|
+
requiredPolicies: [SELF_POLICY.SUPPORT_POLLING_AND_QA],
|
|
3831
|
+
policies: this.selfUserPolicies,
|
|
3832
|
+
}),
|
|
3795
3833
|
canShareApplication:
|
|
3796
3834
|
(ControlsOptionsUtil.hasHints({
|
|
3797
3835
|
requiredHints: [DISPLAY_HINTS.SHARE_APPLICATION],
|
|
@@ -6338,7 +6376,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6338
6376
|
private async createMediaConnection(turnServerInfo, bundlePolicy?: BundlePolicy) {
|
|
6339
6377
|
this.rtcMetrics = this.isMultistream
|
|
6340
6378
|
? // @ts-ignore
|
|
6341
|
-
new RtcMetrics(this.webex, this.id, this.correlationId)
|
|
6379
|
+
new RtcMetrics(this.webex, {meetingId: this.id}, this.correlationId)
|
|
6342
6380
|
: undefined;
|
|
6343
6381
|
|
|
6344
6382
|
const mc = Media.createMediaConnection(
|
|
@@ -6355,6 +6393,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6355
6393
|
enableExtmap: this.config.enableExtmap,
|
|
6356
6394
|
turnServerInfo,
|
|
6357
6395
|
bundlePolicy,
|
|
6396
|
+
// @ts-ignore - config coming from registerPlugin
|
|
6397
|
+
iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout,
|
|
6358
6398
|
}
|
|
6359
6399
|
);
|
|
6360
6400
|
|
package/src/meeting/util.ts
CHANGED
|
@@ -89,8 +89,12 @@ const MeetingUtil = {
|
|
|
89
89
|
getIpVersion(webex: any): IP_VERSION | undefined {
|
|
90
90
|
const {supportsIpV4, supportsIpV6} = webex.internal.device.ipNetworkDetector;
|
|
91
91
|
|
|
92
|
-
if (
|
|
93
|
-
|
|
92
|
+
if (
|
|
93
|
+
!webex.config.meetings.backendIpv6NativeSupport &&
|
|
94
|
+
BrowserDetection().isBrowser('firefox')
|
|
95
|
+
) {
|
|
96
|
+
// when backend doesn't support native ipv6,
|
|
97
|
+
// then our NAT64/DNS64 based solution relies on FQDN ICE candidates, but Firefox doesn't support them,
|
|
94
98
|
// see https://bugzilla.mozilla.org/show_bug.cgi?id=1713128
|
|
95
99
|
// so for Firefox we don't want the backend to activate the "ipv6 feature"
|
|
96
100
|
return undefined;
|
|
@@ -150,7 +154,9 @@ const MeetingUtil = {
|
|
|
150
154
|
ipVersion: MeetingUtil.getIpVersion(meeting.getWebexObject()),
|
|
151
155
|
})
|
|
152
156
|
.then((res) => {
|
|
153
|
-
|
|
157
|
+
const parsed = MeetingUtil.parseLocusJoin(res);
|
|
158
|
+
meeting.setLocus(parsed);
|
|
159
|
+
|
|
154
160
|
webex.internal.newMetrics.submitClientEvent({
|
|
155
161
|
name: 'client.locus.join.response',
|
|
156
162
|
payload: {
|
|
@@ -161,11 +167,11 @@ const MeetingUtil = {
|
|
|
161
167
|
},
|
|
162
168
|
options: {
|
|
163
169
|
meetingId: meeting.id,
|
|
164
|
-
mediaConnections:
|
|
170
|
+
mediaConnections: parsed.mediaConnections,
|
|
165
171
|
},
|
|
166
172
|
});
|
|
167
173
|
|
|
168
|
-
return
|
|
174
|
+
return parsed;
|
|
169
175
|
});
|
|
170
176
|
},
|
|
171
177
|
|
|
@@ -313,34 +319,24 @@ const MeetingUtil = {
|
|
|
313
319
|
}
|
|
314
320
|
|
|
315
321
|
// normal join meeting, scenario A, D
|
|
316
|
-
return MeetingUtil.joinMeeting(meeting, options)
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
// @ts-ignore
|
|
326
|
-
webex.internal.newMetrics.submitClientEvent({
|
|
327
|
-
name: 'client.pin.prompt',
|
|
328
|
-
options: {
|
|
329
|
-
meetingId: meeting.id,
|
|
330
|
-
},
|
|
331
|
-
});
|
|
322
|
+
return MeetingUtil.joinMeeting(meeting, options).catch((err) => {
|
|
323
|
+
// joining a claimed PMR that is not my own, scenario B
|
|
324
|
+
if (MeetingUtil.isPinOrGuest(err)) {
|
|
325
|
+
webex.internal.newMetrics.submitClientEvent({
|
|
326
|
+
name: 'client.pin.prompt',
|
|
327
|
+
options: {
|
|
328
|
+
meetingId: meeting.id,
|
|
329
|
+
},
|
|
330
|
+
});
|
|
332
331
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
'Meeting:util#joinMeetingOptions --> Error joining the call, ',
|
|
339
|
-
err
|
|
340
|
-
);
|
|
332
|
+
// request host pin or non host for unclaimed PMR, start of Scenario C
|
|
333
|
+
// see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature
|
|
334
|
+
return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));
|
|
335
|
+
}
|
|
336
|
+
LoggerProxy.logger.error('Meeting:util#joinMeetingOptions --> Error joining the call, ', err);
|
|
341
337
|
|
|
342
|
-
|
|
343
|
-
|
|
338
|
+
return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));
|
|
339
|
+
});
|
|
344
340
|
},
|
|
345
341
|
|
|
346
342
|
/**
|