@webex/plugin-meetings 3.6.0-next.9 → 3.7.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/README.md +2 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +24 -2
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +1 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +10 -3
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +12 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +28 -4
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +2 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/index.js +61 -3
- package/dist/locus-info/index.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +19 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +564 -441
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +2 -6
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/request.js +21 -29
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +94 -59
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +2 -0
- package/dist/meetings/index.js.map +1 -1
- package/dist/members/index.js +3 -2
- package/dist/members/index.js.map +1 -1
- package/dist/members/util.js +9 -5
- package/dist/members/util.js.map +1 -1
- package/dist/reachability/clusterReachability.js +0 -4
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +433 -136
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachability.types.js +7 -0
- package/dist/reachability/reachability.types.js.map +1 -0
- package/dist/reachability/request.js +23 -9
- package/dist/reachability/request.js.map +1 -1
- package/dist/roap/index.js +5 -7
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +45 -79
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +3 -6
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/types/config.d.ts +1 -0
- package/dist/types/constants.d.ts +19 -0
- package/dist/types/controls-options-manager/enums.d.ts +2 -1
- package/dist/types/controls-options-manager/index.d.ts +2 -1
- package/dist/types/controls-options-manager/types.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +9 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +18 -0
- package/dist/types/meeting/index.d.ts +14 -3
- package/dist/types/meeting/locusMediaRequest.d.ts +2 -3
- package/dist/types/meeting/request.d.ts +2 -2
- package/dist/types/meeting/util.d.ts +2 -2
- package/dist/types/meetings/index.d.ts +1 -1
- package/dist/types/members/index.d.ts +2 -1
- package/dist/types/members/util.d.ts +3 -1
- package/dist/types/reachability/clusterReachability.d.ts +1 -10
- package/dist/types/reachability/index.d.ts +74 -35
- package/dist/types/reachability/reachability.types.d.ts +64 -0
- package/dist/types/reachability/request.d.ts +5 -1
- package/dist/types/roap/request.d.ts +1 -13
- package/dist/webinar/index.js +32 -19
- package/dist/webinar/index.js.map +1 -1
- package/package.json +22 -22
- package/src/config.ts +1 -0
- package/src/constants.ts +25 -0
- package/src/controls-options-manager/enums.ts +1 -0
- package/src/controls-options-manager/index.ts +19 -2
- package/src/controls-options-manager/types.ts +2 -0
- package/src/controls-options-manager/util.ts +12 -0
- package/src/locus-info/controlsUtils.ts +46 -2
- package/src/locus-info/fullState.ts +1 -0
- package/src/locus-info/index.ts +60 -0
- package/src/meeting/in-meeting-actions.ts +37 -0
- package/src/meeting/index.ts +114 -11
- package/src/meeting/locusMediaRequest.ts +4 -8
- package/src/meeting/request.ts +4 -11
- package/src/meeting/util.ts +24 -4
- package/src/meetings/index.ts +46 -39
- package/src/members/index.ts +4 -2
- package/src/members/util.ts +3 -1
- package/src/reachability/clusterReachability.ts +1 -14
- package/src/reachability/index.ts +285 -77
- package/src/reachability/reachability.types.ts +85 -0
- package/src/reachability/request.ts +55 -30
- package/src/roap/index.ts +4 -5
- package/src/roap/request.ts +30 -44
- package/src/roap/turnDiscovery.ts +2 -4
- package/src/webinar/index.ts +31 -17
- package/test/unit/spec/controls-options-manager/index.js +56 -32
- package/test/unit/spec/controls-options-manager/util.js +44 -0
- package/test/unit/spec/locus-info/controlsUtils.js +80 -4
- package/test/unit/spec/locus-info/index.js +59 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +18 -0
- package/test/unit/spec/meeting/index.js +231 -100
- package/test/unit/spec/meeting/locusMediaRequest.ts +18 -11
- package/test/unit/spec/meeting/request.js +3 -26
- package/test/unit/spec/meeting/utils.js +53 -13
- package/test/unit/spec/meetings/index.js +16 -1
- package/test/unit/spec/members/index.js +25 -2
- package/test/unit/spec/members/request.js +37 -3
- package/test/unit/spec/members/utils.js +15 -1
- package/test/unit/spec/reachability/index.ts +265 -1
- package/test/unit/spec/reachability/request.js +56 -15
- package/test/unit/spec/roap/index.ts +1 -1
- package/test/unit/spec/roap/request.ts +51 -109
- package/test/unit/spec/roap/turnDiscovery.ts +202 -147
- package/test/unit/spec/webinar/index.ts +82 -16
|
@@ -737,6 +737,15 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
737
737
|
* @memberof Meeting
|
|
738
738
|
*/
|
|
739
739
|
private setUpLocusServicesListener;
|
|
740
|
+
/**
|
|
741
|
+
* Set up the locus info resources link listener
|
|
742
|
+
* update the locusInfo for webcast instance url
|
|
743
|
+
* @param {Object} payload - The event payload
|
|
744
|
+
* @returns {undefined}
|
|
745
|
+
* @private
|
|
746
|
+
* @memberof Meeting
|
|
747
|
+
*/
|
|
748
|
+
private setUpLocusResourcesListener;
|
|
740
749
|
/**
|
|
741
750
|
* Set up the locus info meeting info listener
|
|
742
751
|
* @returns {undefined}
|
|
@@ -1235,7 +1244,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1235
1244
|
* @public
|
|
1236
1245
|
* @memberof Meeting
|
|
1237
1246
|
*/
|
|
1238
|
-
moveTo(resourceId: string):
|
|
1247
|
+
moveTo(resourceId: string): Promise<void>;
|
|
1239
1248
|
/**
|
|
1240
1249
|
* Moves the call from the specified resourceId, back to computer
|
|
1241
1250
|
* @param {String} resourceId
|
|
@@ -1243,7 +1252,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1243
1252
|
* @public
|
|
1244
1253
|
* @memberof Meeting
|
|
1245
1254
|
*/
|
|
1246
|
-
moveFrom(resourceId: string): any
|
|
1255
|
+
moveFrom(resourceId: string): Promise<any>;
|
|
1247
1256
|
/**
|
|
1248
1257
|
* Handles ROAP_FAILURE event from the webrtc media connection
|
|
1249
1258
|
*
|
|
@@ -1391,6 +1400,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1391
1400
|
* @returns {Promise<void>}
|
|
1392
1401
|
*/
|
|
1393
1402
|
private cleanUpBeforeRetryWithTurnServer;
|
|
1403
|
+
private cleanUpBeforeReconnection;
|
|
1394
1404
|
/**
|
|
1395
1405
|
* Creates an instance of LocusMediaRequest for this meeting - it is needed for doing any calls
|
|
1396
1406
|
* to Locus /media API (these are used for sending Roap messages and updating audio/video mute status).
|
|
@@ -1605,10 +1615,11 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1605
1615
|
* @param {boolean} mutedEnabled
|
|
1606
1616
|
* @param {boolean} disallowUnmuteEnabled
|
|
1607
1617
|
* @param {boolean} muteOnEntryEnabled
|
|
1618
|
+
* @param {array} roles
|
|
1608
1619
|
* @public
|
|
1609
1620
|
* @memberof Meeting
|
|
1610
1621
|
*/
|
|
1611
|
-
setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean): Promise<any>;
|
|
1622
|
+
setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean, roles: Array<string>): Promise<any>;
|
|
1612
1623
|
/**
|
|
1613
1624
|
* End the recording of this meeting
|
|
1614
1625
|
* @returns {Promise}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { WebexPlugin } from '@webex/webex-core';
|
|
2
|
-
import {
|
|
2
|
+
import { ClientMediaPreferences } from '../reachability/reachability.types';
|
|
3
3
|
export type MediaRequestType = 'RoapMessage' | 'LocalMute';
|
|
4
4
|
export type RequestResult = any;
|
|
5
5
|
export type RoapRequest = {
|
|
@@ -8,9 +8,8 @@ export type RoapRequest = {
|
|
|
8
8
|
mediaId: string;
|
|
9
9
|
roapMessage: any;
|
|
10
10
|
reachability: any;
|
|
11
|
+
clientMediaPreferences: ClientMediaPreferences;
|
|
11
12
|
sequence?: any;
|
|
12
|
-
joinCookie: any;
|
|
13
|
-
ipVersion?: IP_VERSION;
|
|
14
13
|
};
|
|
15
14
|
export type LocalMuteRequest = {
|
|
16
15
|
type: 'LocalMute';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StatelessWebexPlugin } from '@webex/webex-core';
|
|
2
|
-
import { IP_VERSION } from '../constants';
|
|
3
2
|
import { SendReactionOptions, ToggleReactionsOptions } from './request.type';
|
|
4
3
|
import { AnnotationInfo } from '../annotation/annotation.types';
|
|
4
|
+
import { ClientMediaPreferences } from '../reachability/reachability.types';
|
|
5
5
|
/**
|
|
6
6
|
* @class MeetingRequest
|
|
7
7
|
*/
|
|
@@ -63,8 +63,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
63
63
|
locale?: string;
|
|
64
64
|
deviceCapabilities?: Array<string>;
|
|
65
65
|
liveAnnotationSupported: boolean;
|
|
66
|
-
ipVersion?: IP_VERSION;
|
|
67
66
|
alias?: string;
|
|
67
|
+
clientMediaPreferences: ClientMediaPreferences;
|
|
68
68
|
}): Promise<any>;
|
|
69
69
|
/**
|
|
70
70
|
* Send a request to refresh the captcha
|
|
@@ -14,7 +14,7 @@ declare const MeetingUtil: {
|
|
|
14
14
|
* @returns {IP_VERSION|undefined} ipver value to be passed to the backend APIs or undefined if we should not pass any value to the backend
|
|
15
15
|
*/
|
|
16
16
|
getIpVersion(webex: any): IP_VERSION | undefined;
|
|
17
|
-
joinMeeting: (meeting: any, options: any) => any
|
|
17
|
+
joinMeeting: (meeting: any, options: any) => Promise<any>;
|
|
18
18
|
cleanUp: (meeting: any) => any;
|
|
19
19
|
disconnectPhoneAudio: (meeting: any, phoneUrl: any) => any;
|
|
20
20
|
/**
|
|
@@ -30,7 +30,7 @@ declare const MeetingUtil: {
|
|
|
30
30
|
isUserInIdleState: (locusInfo: any) => boolean;
|
|
31
31
|
isUserInJoinedState: (locusInfo: any) => boolean;
|
|
32
32
|
isMediaEstablished: (currentMediaStatus: any) => any;
|
|
33
|
-
joinMeetingOptions: (meeting: any, options?: any) => any
|
|
33
|
+
joinMeetingOptions: (meeting: any, options?: any) => Promise<any>;
|
|
34
34
|
/**
|
|
35
35
|
* Returns request options for leaving a meeting.
|
|
36
36
|
* @param {any} meeting
|
|
@@ -290,7 +290,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
290
290
|
* @public
|
|
291
291
|
* @memberof Meetings
|
|
292
292
|
*/
|
|
293
|
-
startReachability(trigger?: string): Promise<import("../reachability").ReachabilityResults>;
|
|
293
|
+
startReachability(trigger?: string): Promise<import("../reachability/reachability.types").ReachabilityResults>;
|
|
294
294
|
/**
|
|
295
295
|
* Get geoHint for info for meetings
|
|
296
296
|
* @returns {Promise}
|
|
@@ -302,11 +302,12 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
302
302
|
/**
|
|
303
303
|
* Lower all hands of members in a meeting
|
|
304
304
|
* @param {String} requestingMemberId - id of the participant which requested the lower all hands
|
|
305
|
+
* @param {array} roles which should be lowered
|
|
305
306
|
* @returns {Promise}
|
|
306
307
|
* @public
|
|
307
308
|
* @memberof Members
|
|
308
309
|
*/
|
|
309
|
-
lowerAllHands(requestingMemberId: string): any;
|
|
310
|
+
lowerAllHands(requestingMemberId: string, roles: Array<string>): any;
|
|
310
311
|
/**
|
|
311
312
|
* Transfers the host to another member
|
|
312
313
|
* @param {String} memberId
|
|
@@ -95,7 +95,8 @@ declare const MembersUtil: {
|
|
|
95
95
|
* @returns {RoleAssignmentOptions}
|
|
96
96
|
*/
|
|
97
97
|
generateRoleAssignmentMemberOptions: (memberId: string, roles: Array<ServerRoleShape>, locusUrl: string) => RoleAssignmentOptions;
|
|
98
|
-
generateLowerAllHandsMemberOptions: (requestingParticipantId: any, locusUrl: any) => {
|
|
98
|
+
generateLowerAllHandsMemberOptions: (requestingParticipantId: any, locusUrl: any, roles: any) => {
|
|
99
|
+
roles: any;
|
|
99
100
|
requestingParticipantId: any;
|
|
100
101
|
locusUrl: any;
|
|
101
102
|
};
|
|
@@ -145,6 +146,7 @@ declare const MembersUtil: {
|
|
|
145
146
|
uri: string;
|
|
146
147
|
body: {
|
|
147
148
|
hand: {
|
|
149
|
+
roles: any;
|
|
148
150
|
raised: boolean;
|
|
149
151
|
};
|
|
150
152
|
requestingParticipantId: any;
|
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
import { ClusterNode } from './request';
|
|
2
2
|
import EventsScope from '../common/events/events-scope';
|
|
3
3
|
import { Enum } from '../constants';
|
|
4
|
-
|
|
5
|
-
result: 'reachable' | 'unreachable' | 'untested';
|
|
6
|
-
latencyInMilliseconds?: number;
|
|
7
|
-
clientMediaIPs?: string[];
|
|
8
|
-
};
|
|
9
|
-
export type ClusterReachabilityResult = {
|
|
10
|
-
udp: TransportResult;
|
|
11
|
-
tcp: TransportResult;
|
|
12
|
-
xtls: TransportResult;
|
|
13
|
-
};
|
|
4
|
+
import { ClusterReachabilityResult } from './reachability.types';
|
|
14
5
|
export type ResultEventData = {
|
|
15
6
|
protocol: 'udp' | 'tcp' | 'xtls';
|
|
16
7
|
result: 'reachable' | 'unreachable' | 'untested';
|
|
@@ -2,42 +2,11 @@
|
|
|
2
2
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
3
|
*/
|
|
4
4
|
import { Defer } from '@webex/common';
|
|
5
|
+
import { IP_VERSION } from '../constants';
|
|
5
6
|
import ReachabilityRequest, { ClusterList } from './request';
|
|
6
|
-
import {
|
|
7
|
+
import { ClusterReachabilityResult, ClientMediaPreferences, ReachabilityMetrics, ReachabilityReportV0, ReachabilityReportV1, ReachabilityResults, ReachabilityResultsForBackend, GetClustersTrigger } from './reachability.types';
|
|
8
|
+
import { ClusterReachability } from './clusterReachability';
|
|
7
9
|
import EventsScope from '../common/events/events-scope';
|
|
8
|
-
export type ReachabilityMetrics = {
|
|
9
|
-
reachability_public_udp_success: number;
|
|
10
|
-
reachability_public_udp_failed: number;
|
|
11
|
-
reachability_public_tcp_success: number;
|
|
12
|
-
reachability_public_tcp_failed: number;
|
|
13
|
-
reachability_public_xtls_success: number;
|
|
14
|
-
reachability_public_xtls_failed: number;
|
|
15
|
-
reachability_vmn_udp_success: number;
|
|
16
|
-
reachability_vmn_udp_failed: number;
|
|
17
|
-
reachability_vmn_tcp_success: number;
|
|
18
|
-
reachability_vmn_tcp_failed: number;
|
|
19
|
-
reachability_vmn_xtls_success: number;
|
|
20
|
-
reachability_vmn_xtls_failed: number;
|
|
21
|
-
};
|
|
22
|
-
/**
|
|
23
|
-
* This is the type that matches what backend expects us to send to them. It is a bit weird, because
|
|
24
|
-
* it uses strings instead of booleans and numbers, but that's what they require.
|
|
25
|
-
*/
|
|
26
|
-
export type TransportResultForBackend = {
|
|
27
|
-
reachable?: 'true' | 'false';
|
|
28
|
-
latencyInMilliseconds?: string;
|
|
29
|
-
clientMediaIPs?: string[];
|
|
30
|
-
untested?: 'true';
|
|
31
|
-
};
|
|
32
|
-
export type ReachabilityResultForBackend = {
|
|
33
|
-
udp: TransportResultForBackend;
|
|
34
|
-
tcp: TransportResultForBackend;
|
|
35
|
-
xtls: TransportResultForBackend;
|
|
36
|
-
};
|
|
37
|
-
export type ReachabilityResultsForBackend = Record<string, ReachabilityResultForBackend>;
|
|
38
|
-
export type ReachabilityResults = Record<string, ClusterReachabilityResult & {
|
|
39
|
-
isVideoMesh?: boolean;
|
|
40
|
-
}>;
|
|
41
10
|
/**
|
|
42
11
|
* @class Reachability
|
|
43
12
|
* @export
|
|
@@ -49,6 +18,8 @@ export default class Reachability extends EventsScope {
|
|
|
49
18
|
clusterReachability: {
|
|
50
19
|
[key: string]: ClusterReachability;
|
|
51
20
|
};
|
|
21
|
+
minRequiredClusters?: number;
|
|
22
|
+
orpheusApiVersion?: number;
|
|
52
23
|
reachabilityDefer?: Defer;
|
|
53
24
|
vmnTimer?: ReturnType<typeof setTimeout>;
|
|
54
25
|
publicCloudTimer?: ReturnType<typeof setTimeout>;
|
|
@@ -73,6 +44,8 @@ export default class Reachability extends EventsScope {
|
|
|
73
44
|
xtls: number;
|
|
74
45
|
};
|
|
75
46
|
};
|
|
47
|
+
startTime: any;
|
|
48
|
+
totalDuration: any;
|
|
76
49
|
protected lastTrigger?: string;
|
|
77
50
|
/**
|
|
78
51
|
* Creates an instance of Reachability.
|
|
@@ -82,11 +55,13 @@ export default class Reachability extends EventsScope {
|
|
|
82
55
|
constructor(webex: object);
|
|
83
56
|
/**
|
|
84
57
|
* Fetches the list of media clusters from the backend
|
|
58
|
+
* @param {string} trigger - explains the reason for starting reachability, used by Orpheus
|
|
59
|
+
* @param {Object} previousReport - last reachability report
|
|
85
60
|
* @param {boolean} isRetry
|
|
86
61
|
* @private
|
|
87
62
|
* @returns {Promise<{clusters: ClusterList, joinCookie: any}>}
|
|
88
63
|
*/
|
|
89
|
-
getClusters(isRetry?: boolean): Promise<{
|
|
64
|
+
getClusters(trigger: GetClustersTrigger, previousReport?: any, isRetry?: boolean): Promise<{
|
|
90
65
|
clusters: ClusterList;
|
|
91
66
|
joinCookie: any;
|
|
92
67
|
}>;
|
|
@@ -98,6 +73,32 @@ export default class Reachability extends EventsScope {
|
|
|
98
73
|
* @memberof Reachability
|
|
99
74
|
*/
|
|
100
75
|
gatherReachability(trigger: string): Promise<ReachabilityResults>;
|
|
76
|
+
/**
|
|
77
|
+
* Gets the last join cookie we got from Orpheus
|
|
78
|
+
*
|
|
79
|
+
* @returns {Promise<Object>} join cookie
|
|
80
|
+
*/
|
|
81
|
+
getJoinCookie(): Promise<any>;
|
|
82
|
+
/**
|
|
83
|
+
* Returns the reachability report that needs to be attached to the ROAP messages
|
|
84
|
+
* that we send to the backend.
|
|
85
|
+
*
|
|
86
|
+
* @returns {Promise<Object>}
|
|
87
|
+
*/
|
|
88
|
+
getReachabilityReport(): Promise<{
|
|
89
|
+
joinCookie: any;
|
|
90
|
+
reachability?: ReachabilityReportV1;
|
|
91
|
+
} | {
|
|
92
|
+
reachability: ReachabilityReportV0;
|
|
93
|
+
}>;
|
|
94
|
+
/**
|
|
95
|
+
* This method is called when we don't succeed in reaching the minimum number of clusters
|
|
96
|
+
* required by Orpheus. It sends the results to Orpheus and gets a new list that it tries to reach again.
|
|
97
|
+
* @returns {Promise<ReachabilityResults>} reachability results
|
|
98
|
+
* @public
|
|
99
|
+
* @memberof Reachability
|
|
100
|
+
*/
|
|
101
|
+
gatherReachabilityFallback(): Promise<void>;
|
|
101
102
|
/**
|
|
102
103
|
* Returns statistics about last reachability results. The returned value is an object
|
|
103
104
|
* with a flat list of properties so that it can be easily sent with metrics
|
|
@@ -142,6 +143,13 @@ export default class Reachability extends EventsScope {
|
|
|
142
143
|
* @memberof Reachability
|
|
143
144
|
*/
|
|
144
145
|
private getUnreachableClusters;
|
|
146
|
+
/**
|
|
147
|
+
* Gets the number of reachable clusters from last run reachability check
|
|
148
|
+
* @returns {number} reachable clusters count
|
|
149
|
+
* @private
|
|
150
|
+
* @memberof Reachability
|
|
151
|
+
*/
|
|
152
|
+
private getNumberOfReachableClusters;
|
|
145
153
|
/**
|
|
146
154
|
* Make a log of unreachable clusters.
|
|
147
155
|
* @returns {undefined}
|
|
@@ -165,6 +173,7 @@ export default class Reachability extends EventsScope {
|
|
|
165
173
|
private areAllResultsReady;
|
|
166
174
|
/**
|
|
167
175
|
* Resolves the promise returned by gatherReachability() method
|
|
176
|
+
* @param {boolean} checkMinRequiredClusters - if true, it will check if we have reached the minimum required clusters and do a fallback if needed
|
|
168
177
|
* @returns {void}
|
|
169
178
|
*/
|
|
170
179
|
private resolveReachabilityPromise;
|
|
@@ -214,10 +223,40 @@ export default class Reachability extends EventsScope {
|
|
|
214
223
|
* @returns {void}
|
|
215
224
|
*/
|
|
216
225
|
private resetResultCounters;
|
|
226
|
+
/**
|
|
227
|
+
* Clears the timer
|
|
228
|
+
*
|
|
229
|
+
* @param {string} timer name of the timer to clear
|
|
230
|
+
* @returns {void}
|
|
231
|
+
*/
|
|
232
|
+
private clearTimer;
|
|
233
|
+
/**
|
|
234
|
+
* Aborts current checks that are in progress
|
|
235
|
+
*
|
|
236
|
+
* @returns {void}
|
|
237
|
+
*/
|
|
238
|
+
private abortCurrentChecks;
|
|
217
239
|
/**
|
|
218
240
|
* Performs reachability checks for all clusters
|
|
219
241
|
* @param {ClusterList} clusterList
|
|
220
242
|
* @returns {Promise<void>} promise that's resolved as soon as the checks are started
|
|
221
243
|
*/
|
|
222
244
|
private performReachabilityChecks;
|
|
245
|
+
/**
|
|
246
|
+
* Returns the clientMediaPreferences object that needs to be sent to the backend
|
|
247
|
+
* when joining a meeting
|
|
248
|
+
*
|
|
249
|
+
* @param {boolean} isMultistream
|
|
250
|
+
* @param {IP_VERSION} ipver
|
|
251
|
+
* @returns {Object}
|
|
252
|
+
*/
|
|
253
|
+
getClientMediaPreferences(isMultistream: boolean, ipver?: IP_VERSION): Promise<ClientMediaPreferences>;
|
|
254
|
+
/**
|
|
255
|
+
* Returns the reachability report that needs to be attached to the ROAP messages
|
|
256
|
+
* that we send to the backend.
|
|
257
|
+
* It may return undefined, if reachability is not needed to be attached to ROAP messages (that's the case for v1 or Orpheus API)
|
|
258
|
+
*
|
|
259
|
+
* @returns {Promise<ReachabilityReportV0>} object that needs to be attached to Roap messages
|
|
260
|
+
*/
|
|
261
|
+
getReachabilityReportToAttachToRoap(): Promise<ReachabilityReportV0 | undefined>;
|
|
223
262
|
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { IP_VERSION } from '../constants';
|
|
2
|
+
export type TransportResult = {
|
|
3
|
+
result: 'reachable' | 'unreachable' | 'untested';
|
|
4
|
+
latencyInMilliseconds?: number;
|
|
5
|
+
clientMediaIPs?: string[];
|
|
6
|
+
};
|
|
7
|
+
export type ClusterReachabilityResult = {
|
|
8
|
+
udp: TransportResult;
|
|
9
|
+
tcp: TransportResult;
|
|
10
|
+
xtls: TransportResult;
|
|
11
|
+
};
|
|
12
|
+
export type ReachabilityMetrics = {
|
|
13
|
+
reachability_public_udp_success: number;
|
|
14
|
+
reachability_public_udp_failed: number;
|
|
15
|
+
reachability_public_tcp_success: number;
|
|
16
|
+
reachability_public_tcp_failed: number;
|
|
17
|
+
reachability_public_xtls_success: number;
|
|
18
|
+
reachability_public_xtls_failed: number;
|
|
19
|
+
reachability_vmn_udp_success: number;
|
|
20
|
+
reachability_vmn_udp_failed: number;
|
|
21
|
+
reachability_vmn_tcp_success: number;
|
|
22
|
+
reachability_vmn_tcp_failed: number;
|
|
23
|
+
reachability_vmn_xtls_success: number;
|
|
24
|
+
reachability_vmn_xtls_failed: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* This is the type that matches what backend expects us to send to them. It is a bit weird, because
|
|
28
|
+
* it uses strings instead of booleans and numbers, but that's what they require.
|
|
29
|
+
*/
|
|
30
|
+
export type TransportResultForBackend = {
|
|
31
|
+
reachable?: 'true' | 'false';
|
|
32
|
+
latencyInMilliseconds?: string;
|
|
33
|
+
clientMediaIPs?: string[];
|
|
34
|
+
untested?: 'true';
|
|
35
|
+
};
|
|
36
|
+
export type ReachabilityResultForBackend = {
|
|
37
|
+
udp: TransportResultForBackend;
|
|
38
|
+
tcp: TransportResultForBackend;
|
|
39
|
+
xtls: TransportResultForBackend;
|
|
40
|
+
};
|
|
41
|
+
export type ReachabilityResultsForBackend = Record<string, ReachabilityResultForBackend>;
|
|
42
|
+
export type ReachabilityResults = Record<string, ClusterReachabilityResult & {
|
|
43
|
+
isVideoMesh?: boolean;
|
|
44
|
+
}>;
|
|
45
|
+
export type ReachabilityReportV0 = ReachabilityResultsForBackend;
|
|
46
|
+
export type ReachabilityReportV1 = {
|
|
47
|
+
version: 1;
|
|
48
|
+
result: {
|
|
49
|
+
usedDiscoveryOptions: {
|
|
50
|
+
'early-call-min-clusters': number;
|
|
51
|
+
};
|
|
52
|
+
metrics: {
|
|
53
|
+
'total-duration-ms': number;
|
|
54
|
+
};
|
|
55
|
+
tests: Record<string, ReachabilityResultForBackend>;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
export interface ClientMediaPreferences {
|
|
59
|
+
ipver: IP_VERSION;
|
|
60
|
+
joinCookie: any;
|
|
61
|
+
preferTranscoding: boolean;
|
|
62
|
+
reachability?: ReachabilityReportV1;
|
|
63
|
+
}
|
|
64
|
+
export type GetClustersTrigger = 'startup' | 'early-call/no-min-reached';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { IP_VERSION } from '../constants';
|
|
2
|
+
import { GetClustersTrigger } from './reachability.types';
|
|
2
3
|
export interface ClusterNode {
|
|
3
4
|
isVideoMesh: boolean;
|
|
4
5
|
udp: Array<string>;
|
|
@@ -22,12 +23,15 @@ declare class ReachabilityRequest {
|
|
|
22
23
|
/**
|
|
23
24
|
* Gets the cluster information
|
|
24
25
|
*
|
|
26
|
+
* @param {string} trigger that's passed to Orpheus
|
|
25
27
|
* @param {IP_VERSION} ipVersion information about current ip network we're on
|
|
28
|
+
* @param {Object} previousReport last reachability result
|
|
26
29
|
* @returns {Promise}
|
|
27
30
|
*/
|
|
28
|
-
getClusters: (ipVersion?: IP_VERSION) => Promise<{
|
|
31
|
+
getClusters: (trigger: GetClustersTrigger, ipVersion?: IP_VERSION, previousReport?: any) => Promise<{
|
|
29
32
|
clusters: ClusterList;
|
|
30
33
|
joinCookie: any;
|
|
34
|
+
discoveryOptions?: Record<string, any>;
|
|
31
35
|
}>;
|
|
32
36
|
/**
|
|
33
37
|
* gets remote SDP For Clusters
|
|
@@ -1,19 +1,9 @@
|
|
|
1
1
|
import { StatelessWebexPlugin } from '@webex/webex-core';
|
|
2
|
-
import { IP_VERSION } from '../constants';
|
|
3
2
|
import { LocusMediaRequest } from '../meeting/locusMediaRequest';
|
|
4
3
|
/**
|
|
5
4
|
* @class RoapRequest
|
|
6
5
|
*/
|
|
7
6
|
export default class RoapRequest extends StatelessWebexPlugin {
|
|
8
|
-
/**
|
|
9
|
-
* Returns reachability data.
|
|
10
|
-
* @param {Object} localSdp
|
|
11
|
-
* @returns {Object}
|
|
12
|
-
*/
|
|
13
|
-
attachReachabilityData(localSdp: any): Promise<{
|
|
14
|
-
localSdp: any;
|
|
15
|
-
joinCookie: any;
|
|
16
|
-
}>;
|
|
17
7
|
/**
|
|
18
8
|
* Sends a ROAP message
|
|
19
9
|
* @param {Object} options
|
|
@@ -22,15 +12,13 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
|
22
12
|
* @param {String} options.mediaId
|
|
23
13
|
* @param {String} options.correlationId
|
|
24
14
|
* @param {String} options.meetingId
|
|
25
|
-
* @param {IP_VERSION} options.ipVersion only required for offers
|
|
26
15
|
* @returns {Promise} returns the response/failure of the request
|
|
27
16
|
*/
|
|
28
17
|
sendRoap(options: {
|
|
29
18
|
roapMessage: any;
|
|
30
19
|
locusSelfUrl: string;
|
|
31
20
|
mediaId: string;
|
|
32
|
-
|
|
33
|
-
ipVersion?: IP_VERSION;
|
|
21
|
+
isMultistream: boolean;
|
|
34
22
|
locusMediaRequest?: LocusMediaRequest;
|
|
35
23
|
}): Promise<{
|
|
36
24
|
mediaConnections: any;
|
package/dist/webinar/index.js
CHANGED
|
@@ -7,6 +7,7 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
var _webexCore = require("@webex/webex-core");
|
|
10
|
+
var _lodash = require("lodash");
|
|
10
11
|
var _constants = require("../constants");
|
|
11
12
|
var _collection = _interopRequireDefault(require("./collection"));
|
|
12
13
|
/*!
|
|
@@ -24,35 +25,29 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
24
25
|
props: {
|
|
25
26
|
locusUrl: 'string',
|
|
26
27
|
// appears current webinar's locus url
|
|
27
|
-
|
|
28
|
-
// current webinar's webcast url
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
|
|
28
|
+
webcastInstanceUrl: 'string',
|
|
29
|
+
// current webinar's webcast instance url
|
|
30
|
+
canManageWebcast: 'boolean',
|
|
31
|
+
// appears the ability to manage webcast
|
|
32
|
+
selfIsPanelist: 'boolean',
|
|
33
|
+
// self is panelist
|
|
34
|
+
selfIsAttendee: 'boolean' // self is attendee
|
|
32
35
|
},
|
|
33
36
|
/**
|
|
34
37
|
* Update the current locus url of the webinar
|
|
35
|
-
* @param {string} locusUrl
|
|
38
|
+
* @param {string} locusUrl
|
|
36
39
|
* @returns {void}
|
|
37
40
|
*/
|
|
38
41
|
locusUrlUpdate: function locusUrlUpdate(locusUrl) {
|
|
39
42
|
this.set('locusUrl', locusUrl);
|
|
40
43
|
},
|
|
41
44
|
/**
|
|
42
|
-
* Update the current webcast url of the meeting
|
|
43
|
-
* @param {
|
|
45
|
+
* Update the current webcast instance url of the meeting
|
|
46
|
+
* @param {object} payload
|
|
44
47
|
* @returns {void}
|
|
45
48
|
*/
|
|
46
|
-
|
|
47
|
-
this.set('
|
|
48
|
-
},
|
|
49
|
-
/**
|
|
50
|
-
* Update the current webinarAttendeesSearching url of the meeting
|
|
51
|
-
* @param {string} webinarAttendeesSearchingUrl // webinarAttendeesSearching url
|
|
52
|
-
* @returns {void}
|
|
53
|
-
*/
|
|
54
|
-
webinarAttendeesSearchingUrlUpdate: function webinarAttendeesSearchingUrlUpdate(webinarAttendeesSearchingUrl) {
|
|
55
|
-
this.set('webinarAttendeesSearchingUrl', webinarAttendeesSearchingUrl);
|
|
49
|
+
updateWebcastUrl: function updateWebcastUrl(payload) {
|
|
50
|
+
this.set('webcastInstanceUrl', (0, _lodash.get)(payload, 'resources.webcastInstance.url'));
|
|
56
51
|
},
|
|
57
52
|
/**
|
|
58
53
|
* Update whether self has capability to manage start/stop webcast (only host can manage it)
|
|
@@ -62,7 +57,25 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
62
57
|
updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
|
|
63
58
|
this.set('canManageWebcast', canManageWebcast);
|
|
64
59
|
},
|
|
65
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Updates user roles and manages associated state transitions
|
|
62
|
+
* @param {object} payload
|
|
63
|
+
* @param {string[]} payload.oldRoles - Previous roles of the user
|
|
64
|
+
* @param {string[]} payload.newRoles - New roles of the user
|
|
65
|
+
* @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states
|
|
66
|
+
*/
|
|
67
|
+
updateRoleChanged: function updateRoleChanged(payload) {
|
|
68
|
+
var isPromoted = (0, _lodash.get)(payload, 'oldRoles', []).includes(_constants.SELF_ROLES.ATTENDEE) && (0, _lodash.get)(payload, 'newRoles', []).includes(_constants.SELF_ROLES.PANELIST);
|
|
69
|
+
var isDemoted = (0, _lodash.get)(payload, 'oldRoles', []).includes(_constants.SELF_ROLES.PANELIST) && (0, _lodash.get)(payload, 'newRoles', []).includes(_constants.SELF_ROLES.ATTENDEE);
|
|
70
|
+
this.set('selfIsPanelist', (0, _lodash.get)(payload, 'newRoles', []).includes(_constants.SELF_ROLES.PANELIST));
|
|
71
|
+
this.set('selfIsAttendee', (0, _lodash.get)(payload, 'newRoles', []).includes(_constants.SELF_ROLES.ATTENDEE));
|
|
72
|
+
this.updateCanManageWebcast((0, _lodash.get)(payload, 'newRoles', []).includes(_constants.SELF_ROLES.MODERATOR));
|
|
73
|
+
return {
|
|
74
|
+
isPromoted: isPromoted,
|
|
75
|
+
isDemoted: isDemoted
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
version: "3.7.0-next.1"
|
|
66
79
|
});
|
|
67
80
|
var _default = exports.default = Webinar;
|
|
68
81
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_constants","_collection","_interopRequireDefault","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_lodash","_constants","_collection","_interopRequireDefault","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","locusUrlUpdate","set","updateWebcastUrl","payload","get","updateCanManageWebcast","updateRoleChanged","isPromoted","includes","SELF_ROLES","ATTENDEE","PANELIST","isDemoted","MODERATOR","version","_default","exports","default"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport {get} from 'lodash';\nimport {MEETINGS, SELF_ROLES} from '../constants';\n\nimport WebinarCollection from './collection';\n\n/**\n * @class Webinar\n */\nconst Webinar = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n webinar: WebinarCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current webinar's locus url\n webcastInstanceUrl: 'string', // current webinar's webcast instance url\n canManageWebcast: 'boolean', // appears the ability to manage webcast\n selfIsPanelist: 'boolean', // self is panelist\n selfIsAttendee: 'boolean', // self is attendee\n },\n\n /**\n * Update the current locus url of the webinar\n * @param {string} locusUrl\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n\n /**\n * Update the current webcast instance url of the meeting\n * @param {object} payload\n * @returns {void}\n */\n updateWebcastUrl(payload) {\n this.set('webcastInstanceUrl', get(payload, 'resources.webcastInstance.url'));\n },\n\n /**\n * Update whether self has capability to manage start/stop webcast (only host can manage it)\n * @param {boolean} canManageWebcast\n * @returns {void}\n */\n updateCanManageWebcast(canManageWebcast) {\n this.set('canManageWebcast', canManageWebcast);\n },\n\n /**\n * Updates user roles and manages associated state transitions\n * @param {object} payload\n * @param {string[]} payload.oldRoles - Previous roles of the user\n * @param {string[]} payload.newRoles - New roles of the user\n * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states\n */\n updateRoleChanged(payload) {\n const isPromoted =\n get(payload, 'oldRoles', []).includes(SELF_ROLES.ATTENDEE) &&\n get(payload, 'newRoles', []).includes(SELF_ROLES.PANELIST);\n const isDemoted =\n get(payload, 'oldRoles', []).includes(SELF_ROLES.PANELIST) &&\n get(payload, 'newRoles', []).includes(SELF_ROLES.ATTENDEE);\n this.set('selfIsPanelist', get(payload, 'newRoles', []).includes(SELF_ROLES.PANELIST));\n this.set('selfIsAttendee', get(payload, 'newRoles', []).includes(SELF_ROLES.ATTENDEE));\n this.updateCanManageWebcast(get(payload, 'newRoles', []).includes(SELF_ROLES.MODERATOR));\n\n return {isPromoted, isDemoted};\n },\n});\n\nexport default Webinar;\n"],"mappings":";;;;;;;;AAGA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAPA;AACA;AACA;;AAOA;AACA;AACA;AACA,IAAMK,OAAO,GAAGC,sBAAW,CAACC,MAAM,CAAC;EACjCC,SAAS,EAAEC,mBAAQ;EACnBC,WAAW,EAAE;IACXC,OAAO,EAAEC;EACX,CAAC;EAEDC,KAAK,EAAE;IACLC,QAAQ,EAAE,QAAQ;IAAE;IACpBC,kBAAkB,EAAE,QAAQ;IAAE;IAC9BC,gBAAgB,EAAE,SAAS;IAAE;IAC7BC,cAAc,EAAE,SAAS;IAAE;IAC3BC,cAAc,EAAE,SAAS,CAAE;EAC7B,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,cAAc,WAAAA,eAACL,QAAQ,EAAE;IACvB,IAAI,CAACM,GAAG,CAAC,UAAU,EAAEN,QAAQ,CAAC;EAChC,CAAC;EAED;AACF;AACA;AACA;AACA;EACEO,gBAAgB,WAAAA,iBAACC,OAAO,EAAE;IACxB,IAAI,CAACF,GAAG,CAAC,oBAAoB,EAAE,IAAAG,WAAG,EAACD,OAAO,EAAE,+BAA+B,CAAC,CAAC;EAC/E,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,sBAAsB,WAAAA,uBAACR,gBAAgB,EAAE;IACvC,IAAI,CAACI,GAAG,CAAC,kBAAkB,EAAEJ,gBAAgB,CAAC;EAChD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACES,iBAAiB,WAAAA,kBAACH,OAAO,EAAE;IACzB,IAAMI,UAAU,GACd,IAAAH,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACC,QAAQ,CAAC,IAC1D,IAAAN,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACE,QAAQ,CAAC;IAC5D,IAAMC,SAAS,GACb,IAAAR,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACE,QAAQ,CAAC,IAC1D,IAAAP,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACC,QAAQ,CAAC;IAC5D,IAAI,CAACT,GAAG,CAAC,gBAAgB,EAAE,IAAAG,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACE,QAAQ,CAAC,CAAC;IACtF,IAAI,CAACV,GAAG,CAAC,gBAAgB,EAAE,IAAAG,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACC,QAAQ,CAAC,CAAC;IACtF,IAAI,CAACL,sBAAsB,CAAC,IAAAD,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACI,SAAS,CAAC,CAAC;IAExF,OAAO;MAACN,UAAU,EAAVA,UAAU;MAAEK,SAAS,EAATA;IAAS,CAAC;EAChC,CAAC;EAAAE,OAAA;AACH,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEY/B,OAAO"}
|
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.6.0-next.
|
|
48
|
-
"@webex/test-helper-chai": "3.6.0-next.
|
|
49
|
-
"@webex/test-helper-mocha": "3.6.0-next.
|
|
50
|
-
"@webex/test-helper-mock-webex": "3.6.0-next.
|
|
51
|
-
"@webex/test-helper-retry": "3.6.0-next.
|
|
52
|
-
"@webex/test-helper-test-users": "3.6.0-next.
|
|
46
|
+
"@webex/plugin-meetings": "3.7.0-next.1",
|
|
47
|
+
"@webex/plugin-rooms": "3.6.0-next.8",
|
|
48
|
+
"@webex/test-helper-chai": "3.6.0-next.4",
|
|
49
|
+
"@webex/test-helper-mocha": "3.6.0-next.4",
|
|
50
|
+
"@webex/test-helper-mock-webex": "3.6.0-next.4",
|
|
51
|
+
"@webex/test-helper-retry": "3.6.0-next.4",
|
|
52
|
+
"@webex/test-helper-test-users": "3.6.0-next.4",
|
|
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.6.0-next.
|
|
65
|
-
"@webex/internal-media-core": "2.
|
|
66
|
-
"@webex/internal-plugin-conversation": "3.6.0-next.
|
|
67
|
-
"@webex/internal-plugin-device": "3.6.0-next.
|
|
68
|
-
"@webex/internal-plugin-llm": "3.6.0-next.
|
|
69
|
-
"@webex/internal-plugin-mercury": "3.6.0-next.
|
|
70
|
-
"@webex/internal-plugin-metrics": "3.6.0-next.
|
|
71
|
-
"@webex/internal-plugin-support": "3.6.0-next.
|
|
72
|
-
"@webex/internal-plugin-user": "3.6.0-next.
|
|
73
|
-
"@webex/internal-plugin-voicea": "3.
|
|
74
|
-
"@webex/media-helpers": "3.6.0-next.
|
|
75
|
-
"@webex/plugin-people": "3.6.0-next.
|
|
76
|
-
"@webex/plugin-rooms": "3.6.0-next.
|
|
64
|
+
"@webex/common": "3.6.0-next.4",
|
|
65
|
+
"@webex/internal-media-core": "2.12.2",
|
|
66
|
+
"@webex/internal-plugin-conversation": "3.6.0-next.8",
|
|
67
|
+
"@webex/internal-plugin-device": "3.6.0-next.4",
|
|
68
|
+
"@webex/internal-plugin-llm": "3.6.0-next.6",
|
|
69
|
+
"@webex/internal-plugin-mercury": "3.6.0-next.6",
|
|
70
|
+
"@webex/internal-plugin-metrics": "3.6.0-next.4",
|
|
71
|
+
"@webex/internal-plugin-support": "3.6.0-next.8",
|
|
72
|
+
"@webex/internal-plugin-user": "3.6.0-next.4",
|
|
73
|
+
"@webex/internal-plugin-voicea": "3.7.0-next.1",
|
|
74
|
+
"@webex/media-helpers": "3.6.0-next.5",
|
|
75
|
+
"@webex/plugin-people": "3.6.0-next.6",
|
|
76
|
+
"@webex/plugin-rooms": "3.6.0-next.8",
|
|
77
77
|
"@webex/web-capabilities": "^1.4.0",
|
|
78
|
-
"@webex/webex-core": "3.6.0-next.
|
|
78
|
+
"@webex/webex-core": "3.6.0-next.4",
|
|
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.7.0-next.1"
|
|
95
95
|
}
|