@webex/plugin-meetings 3.8.0-next.8 → 3.8.0-next.81
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 +70 -6
- package/dist/breakouts/index.js.map +1 -1
- package/dist/common/errors/webex-errors.js +12 -2
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +20 -123
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +2 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +52 -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 -10
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +62 -12
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/selfUtils.js +432 -418
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +17 -17
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +94 -6
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/brbState.js +6 -0
- package/dist/meeting/brbState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +17 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +570 -302
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +0 -17
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +0 -2
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +30 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +13 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +373 -68
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +5 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/index.js +136 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +14 -0
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +10 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +330 -353
- package/dist/member/util.js.map +1 -1
- package/dist/members/index.js +42 -0
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +38 -0
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +36 -1
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +9 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/reachability/clusterReachability.js +63 -27
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +112 -47
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachability.types.js +14 -0
- package/dist/reachability/reachability.types.js.map +1 -1
- package/dist/reachability/request.js +19 -3
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +2 -2
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/turnDiscovery.js +45 -27
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/types.js +17 -0
- package/dist/roap/types.js.map +1 -0
- package/dist/types/common/errors/webex-errors.d.ts +7 -1
- package/dist/types/config.d.ts +3 -0
- package/dist/types/constants.d.ts +13 -85
- package/dist/types/controls-options-manager/enums.d.ts +3 -1
- package/dist/types/controls-options-manager/types.d.ts +7 -1
- package/dist/types/locus-info/index.d.ts +3 -3
- package/dist/types/locus-info/selfUtils.d.ts +216 -1
- package/dist/types/media/properties.d.ts +15 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +16 -0
- package/dist/types/meeting/index.d.ts +43 -1
- package/dist/types/meeting/muteState.d.ts +0 -1
- package/dist/types/meeting/request.d.ts +12 -1
- package/dist/types/meeting/request.type.d.ts +6 -0
- package/dist/types/meeting/util.d.ts +3 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
- package/dist/types/meetings/index.d.ts +57 -0
- package/dist/types/member/index.d.ts +1 -0
- package/dist/types/member/util.d.ts +159 -1
- package/dist/types/members/index.d.ts +15 -0
- package/dist/types/members/request.d.ts +26 -0
- package/dist/types/members/util.d.ts +27 -0
- package/dist/types/metrics/constants.d.ts +9 -0
- package/dist/types/reachability/clusterReachability.d.ts +15 -7
- package/dist/types/reachability/index.d.ts +10 -1
- package/dist/types/reachability/reachability.types.d.ts +5 -0
- package/dist/types/roap/index.d.ts +3 -2
- package/dist/types/roap/turnDiscovery.d.ts +5 -17
- package/dist/types/roap/types.d.ts +16 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +24 -23
- package/src/breakouts/index.ts +69 -0
- package/src/common/errors/webex-errors.ts +8 -1
- package/src/config.ts +3 -0
- package/src/constants.ts +20 -90
- package/src/controls-options-manager/enums.ts +2 -0
- package/src/controls-options-manager/types.ts +11 -1
- package/src/controls-options-manager/util.ts +62 -0
- package/src/locus-info/controlsUtils.ts +44 -14
- package/src/locus-info/index.ts +56 -13
- package/src/locus-info/selfUtils.ts +496 -442
- package/src/media/index.ts +23 -21
- package/src/media/properties.ts +96 -0
- package/src/meeting/brbState.ts +7 -0
- package/src/meeting/in-meeting-actions.ts +32 -0
- package/src/meeting/index.ts +382 -93
- package/src/meeting/locusMediaRequest.ts +0 -18
- package/src/meeting/muteState.ts +0 -2
- package/src/meeting/request.ts +36 -1
- package/src/meeting/request.type.ts +7 -0
- package/src/meeting/util.ts +11 -2
- package/src/meeting-info/meeting-info-v2.ts +254 -8
- package/src/meeting-info/utilv2.ts +5 -0
- package/src/meetings/index.ts +148 -1
- package/src/meetings/util.ts +18 -0
- package/src/member/index.ts +13 -2
- package/src/member/util.ts +351 -348
- package/src/members/index.ts +47 -0
- package/src/members/request.ts +44 -0
- package/src/members/util.ts +43 -1
- package/src/metrics/constants.ts +9 -0
- package/src/reachability/clusterReachability.ts +73 -26
- package/src/reachability/index.ts +70 -1
- package/src/reachability/reachability.types.ts +6 -0
- package/src/reachability/request.ts +7 -0
- package/src/reconnection-manager/index.ts +2 -2
- package/src/roap/index.ts +3 -7
- package/src/roap/turnDiscovery.ts +34 -39
- package/src/roap/types.ts +23 -0
- package/test/unit/spec/breakouts/index.ts +167 -95
- package/test/unit/spec/controls-options-manager/util.js +120 -0
- package/test/unit/spec/locus-info/controlsUtils.js +103 -9
- package/test/unit/spec/locus-info/index.js +167 -73
- package/test/unit/spec/locus-info/selfUtils.js +98 -24
- package/test/unit/spec/media/index.ts +150 -18
- package/test/unit/spec/media/properties.ts +130 -0
- package/test/unit/spec/meeting/brbState.ts +19 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +19 -4
- package/test/unit/spec/meeting/index.js +557 -35
- package/test/unit/spec/meeting/locusMediaRequest.ts +0 -30
- package/test/unit/spec/meeting/muteState.js +0 -2
- package/test/unit/spec/meeting/request.js +32 -1
- package/test/unit/spec/meeting/utils.js +119 -18
- package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
- package/test/unit/spec/meeting-info/utilv2.js +19 -0
- package/test/unit/spec/meetings/index.js +146 -2
- package/test/unit/spec/member/index.js +7 -0
- package/test/unit/spec/member/util.js +24 -0
- package/test/unit/spec/members/index.js +140 -26
- package/test/unit/spec/members/request.js +68 -22
- package/test/unit/spec/members/utils.js +75 -0
- package/test/unit/spec/reachability/clusterReachability.ts +88 -56
- package/test/unit/spec/reachability/index.ts +101 -0
- package/test/unit/spec/reachability/request.js +47 -2
- package/test/unit/spec/reconnection-manager/index.js +4 -4
- package/test/unit/spec/roap/turnDiscovery.ts +110 -28
@@ -124,6 +124,19 @@ declare const MembersUtil: {
|
|
124
124
|
};
|
125
125
|
};
|
126
126
|
};
|
127
|
+
getMoveMemberToLobbyRequestBody: (memberId: string) => {
|
128
|
+
moveToLobby: {
|
129
|
+
participantIds: string[];
|
130
|
+
};
|
131
|
+
};
|
132
|
+
getMoveMemberToLobbyRequestParams: (options: {
|
133
|
+
memberId: string;
|
134
|
+
locusUrl: string;
|
135
|
+
}, body: any) => {
|
136
|
+
method: string;
|
137
|
+
uri: string;
|
138
|
+
body: any;
|
139
|
+
};
|
127
140
|
/**
|
128
141
|
* @param {ServerRoleShape} role
|
129
142
|
* @returns {ServerRoleShape} the role shape to be added to the body
|
@@ -215,5 +228,19 @@ declare const MembersUtil: {
|
|
215
228
|
}[];
|
216
229
|
};
|
217
230
|
};
|
231
|
+
cancelSIPInviteOptions: (invitee: any, locusUrl: any) => {
|
232
|
+
invitee: any;
|
233
|
+
locusUrl: any;
|
234
|
+
};
|
235
|
+
generateCancelSIPInviteRequestParams: (options: any) => {
|
236
|
+
method: string;
|
237
|
+
uri: any;
|
238
|
+
body: {
|
239
|
+
actionType: string;
|
240
|
+
invitees: {
|
241
|
+
address: any;
|
242
|
+
}[];
|
243
|
+
};
|
244
|
+
};
|
218
245
|
};
|
219
246
|
export default MembersUtil;
|
@@ -45,10 +45,19 @@ declare const BEHAVIORAL_METRICS: {
|
|
45
45
|
UPLOAD_LOGS_FAILURE: string;
|
46
46
|
UPLOAD_LOGS_SUCCESS: string;
|
47
47
|
RECEIVE_TRANSCRIPTION_FAILURE: string;
|
48
|
+
MEETING_IS_IN_PROGRESS_ERROR: string;
|
49
|
+
STATIC_MEETING_LINK_ALREADY_EXISTS_ERROR: string;
|
48
50
|
FETCH_MEETING_INFO_V1_SUCCESS: string;
|
49
51
|
FETCH_MEETING_INFO_V1_FAILURE: string;
|
52
|
+
ENABLE_STATIC_METTING_LINK_SUCCESS: string;
|
53
|
+
ENABLE_STATIC_METTING_LINK_FAILURE: string;
|
54
|
+
DISABLE_STATIC_MEETING_LINK_SUCCESS: string;
|
55
|
+
DISABLE_STATIC_MEETING_LINK_FAILURE: string;
|
50
56
|
ADHOC_MEETING_SUCCESS: string;
|
51
57
|
ADHOC_MEETING_FAILURE: string;
|
58
|
+
FETCH_STATIC_MEETING_LINK_SUCCESS: string;
|
59
|
+
FETCH_STATIC_MEETING_LINK_FAILURE: string;
|
60
|
+
MEETING_LINK_DOES_NOT_EXIST_ERROR: string;
|
52
61
|
VERIFY_PASSWORD_SUCCESS: string;
|
53
62
|
VERIFY_PASSWORD_ERROR: string;
|
54
63
|
VERIFY_CAPTCHA_ERROR: string;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { ClusterNode } from './request';
|
2
2
|
import EventsScope from '../common/events/events-scope';
|
3
3
|
import { Enum } from '../constants';
|
4
|
-
import { ClusterReachabilityResult } from './reachability.types';
|
4
|
+
import { ClusterReachabilityResult, NatType } from './reachability.types';
|
5
5
|
export type ResultEventData = {
|
6
6
|
protocol: 'udp' | 'tcp' | 'xtls';
|
7
7
|
result: 'reachable' | 'unreachable' | 'untested';
|
@@ -12,9 +12,13 @@ export type ClientMediaIpsUpdatedEventData = {
|
|
12
12
|
protocol: 'udp' | 'tcp' | 'xtls';
|
13
13
|
clientMediaIPs: string[];
|
14
14
|
};
|
15
|
+
export type NatTypeUpdatedEventData = {
|
16
|
+
natType: NatType;
|
17
|
+
};
|
15
18
|
export declare const Events: {
|
16
19
|
readonly resultReady: "resultReady";
|
17
20
|
readonly clientMediaIpsUpdated: "clientMediaIpsUpdated";
|
21
|
+
readonly natTypeUpdated: "natTypeUpdated";
|
18
22
|
};
|
19
23
|
export type Events = Enum<typeof Events>;
|
20
24
|
/**
|
@@ -29,8 +33,10 @@ export declare class ClusterReachability extends EventsScope {
|
|
29
33
|
private pc?;
|
30
34
|
private defer;
|
31
35
|
private startTimestamp;
|
36
|
+
private srflxIceCandidates;
|
32
37
|
readonly isVideoMesh: boolean;
|
33
38
|
readonly name: any;
|
39
|
+
readonly reachedSubnets: Set<string>;
|
34
40
|
/**
|
35
41
|
* Constructor for ClusterReachability
|
36
42
|
* @param {string} name cluster name
|
@@ -89,12 +95,6 @@ export declare class ClusterReachability extends EventsScope {
|
|
89
95
|
* @returns {void}
|
90
96
|
*/
|
91
97
|
private registerIceGatheringStateChangeListener;
|
92
|
-
/**
|
93
|
-
* Checks if we have the results for all the protocols (UDP and TCP)
|
94
|
-
*
|
95
|
-
* @returns {boolean} true if we have all results, false otherwise
|
96
|
-
*/
|
97
|
-
private haveWeGotAllResults;
|
98
98
|
/**
|
99
99
|
* Saves the latency in the result for the given protocol and marks it as reachable,
|
100
100
|
* emits the "resultReady" event if this is the first result for that protocol,
|
@@ -104,9 +104,17 @@ export declare class ClusterReachability extends EventsScope {
|
|
104
104
|
* @param {string} protocol
|
105
105
|
* @param {number} latency
|
106
106
|
* @param {string|null} [publicIp]
|
107
|
+
* @param {string|null} [serverIp]
|
107
108
|
* @returns {void}
|
108
109
|
*/
|
109
110
|
private saveResult;
|
111
|
+
/**
|
112
|
+
* Determines NAT Type.
|
113
|
+
*
|
114
|
+
* @param {RTCIceCandidate} candidate
|
115
|
+
* @returns {void}
|
116
|
+
*/
|
117
|
+
private determineNatType;
|
110
118
|
/**
|
111
119
|
* Registers a listener for the icecandidate event
|
112
120
|
*
|
@@ -4,7 +4,7 @@
|
|
4
4
|
import { Defer } from '@webex/common';
|
5
5
|
import { IP_VERSION } from '../constants';
|
6
6
|
import ReachabilityRequest, { ClusterList } from './request';
|
7
|
-
import { ClusterReachabilityResult, ClientMediaPreferences, ReachabilityMetrics, ReachabilityReportV0, ReachabilityReportV1, ReachabilityResults, ReachabilityResultsForBackend, GetClustersTrigger } from './reachability.types';
|
7
|
+
import { ClusterReachabilityResult, ClientMediaPreferences, ReachabilityMetrics, ReachabilityReportV0, ReachabilityReportV1, ReachabilityResults, ReachabilityResultsForBackend, GetClustersTrigger, NatType } from './reachability.types';
|
8
8
|
import { ClusterReachability } from './clusterReachability';
|
9
9
|
import EventsScope from '../common/events/events-scope';
|
10
10
|
/**
|
@@ -46,6 +46,7 @@ export default class Reachability extends EventsScope {
|
|
46
46
|
};
|
47
47
|
startTime: any;
|
48
48
|
totalDuration: any;
|
49
|
+
natType: NatType;
|
49
50
|
protected lastTrigger?: string;
|
50
51
|
/**
|
51
52
|
* Creates an instance of Reachability.
|
@@ -65,6 +66,14 @@ export default class Reachability extends EventsScope {
|
|
65
66
|
clusters: ClusterList;
|
66
67
|
joinCookie: any;
|
67
68
|
}>;
|
69
|
+
/**
|
70
|
+
* Checks if the given subnet is reachable
|
71
|
+
* @param {string} mediaServerIp - media server ip
|
72
|
+
* @returns {boolean | null} true if reachable, false if not reachable, null if mediaServerIp is not provided
|
73
|
+
* @public
|
74
|
+
* @memberof Reachability
|
75
|
+
*/
|
76
|
+
isSubnetReachable(mediaServerIp?: string): boolean | null;
|
68
77
|
/**
|
69
78
|
* Gets a list of media clusters from the backend and performs reachability checks on all the clusters
|
70
79
|
* @param {string} trigger - explains the reason for starting reachability
|
@@ -4,6 +4,10 @@ export type TransportResult = {
|
|
4
4
|
latencyInMilliseconds?: number;
|
5
5
|
clientMediaIPs?: string[];
|
6
6
|
};
|
7
|
+
export declare enum NatType {
|
8
|
+
Unknown = "unknown",
|
9
|
+
SymmetricNat = "symmetric-nat"
|
10
|
+
}
|
7
11
|
export type ClusterReachabilityResult = {
|
8
12
|
udp: TransportResult;
|
9
13
|
tcp: TransportResult;
|
@@ -22,6 +26,7 @@ export type ReachabilityMetrics = {
|
|
22
26
|
reachability_vmn_tcp_failed: number;
|
23
27
|
reachability_vmn_xtls_success: number;
|
24
28
|
reachability_vmn_xtls_failed: number;
|
29
|
+
natType: NatType;
|
25
30
|
};
|
26
31
|
/**
|
27
32
|
* This is the type that matches what backend expects us to send to them. It is a bit weird, because
|
@@ -1,7 +1,8 @@
|
|
1
1
|
import { StatelessWebexPlugin } from '@webex/webex-core';
|
2
|
-
import TurnDiscovery
|
2
|
+
import TurnDiscovery from './turnDiscovery';
|
3
|
+
import { TurnDiscoveryResult } from './types';
|
3
4
|
import Meeting from '../meeting';
|
4
|
-
export { type TurnDiscoveryResult, type TurnServerInfo, type TurnDiscoverySkipReason
|
5
|
+
export { type TurnDiscoveryResult, type TurnServerInfo, type TurnDiscoverySkipReason } from './types';
|
5
6
|
/**
|
6
7
|
* Roap options
|
7
8
|
* @typedef {Object} RoapOptions
|
@@ -1,21 +1,6 @@
|
|
1
|
-
import { Enum } from '../constants';
|
2
1
|
import RoapRequest from './request';
|
3
2
|
import Meeting from '../meeting';
|
4
|
-
|
5
|
-
readonly missingHttpResponse: "missing http response";
|
6
|
-
readonly reachability: "reachability";
|
7
|
-
readonly alreadyInProgress: "already in progress";
|
8
|
-
};
|
9
|
-
export type TurnDiscoverySkipReason = Enum<typeof TurnDiscoverySkipReason> | string | undefined;
|
10
|
-
export type TurnServerInfo = {
|
11
|
-
url: string;
|
12
|
-
username: string;
|
13
|
-
password: string;
|
14
|
-
};
|
15
|
-
export type TurnDiscoveryResult = {
|
16
|
-
turnServerInfo?: TurnServerInfo;
|
17
|
-
turnDiscoverySkippedReason: TurnDiscoverySkipReason;
|
18
|
-
};
|
3
|
+
import { TurnDiscoverySkipReason, TurnDiscoveryResult } from './types';
|
19
4
|
/**
|
20
5
|
* Handles the process of finding out TURN server information from Linus.
|
21
6
|
* This is achieved by sending a TURN_DISCOVERY_REQUEST.
|
@@ -25,6 +10,10 @@ export default class TurnDiscovery {
|
|
25
10
|
private defer?;
|
26
11
|
private turnInfo;
|
27
12
|
private responseTimer?;
|
13
|
+
/** Resets the turnInfo structure to the defaults
|
14
|
+
* @returns {void}
|
15
|
+
*/
|
16
|
+
private resetTurnInfo;
|
28
17
|
/**
|
29
18
|
* Constructor
|
30
19
|
*
|
@@ -152,4 +141,3 @@ export default class TurnDiscovery {
|
|
152
141
|
*/
|
153
142
|
doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean, isForced?: boolean): Promise<TurnDiscoveryResult>;
|
154
143
|
}
|
155
|
-
export {};
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { Enum } from '../constants';
|
2
|
+
export declare const TurnDiscoverySkipReason: {
|
3
|
+
readonly missingHttpResponse: "missing http response";
|
4
|
+
readonly reachability: "reachability";
|
5
|
+
readonly alreadyInProgress: "already in progress";
|
6
|
+
};
|
7
|
+
export type TurnDiscoverySkipReason = Enum<typeof TurnDiscoverySkipReason> | string | undefined;
|
8
|
+
export type TurnServerInfo = {
|
9
|
+
urls: string[];
|
10
|
+
username: string;
|
11
|
+
password: string;
|
12
|
+
};
|
13
|
+
export type TurnDiscoveryResult = {
|
14
|
+
turnServerInfo?: TurnServerInfo;
|
15
|
+
turnDiscoverySkippedReason: TurnDiscoverySkipReason;
|
16
|
+
};
|
package/dist/webinar/index.js
CHANGED
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.8.0-next.
|
47
|
-
"@webex/plugin-rooms": "3.8.0-next.
|
48
|
-
"@webex/test-helper-chai": "3.8.0-next.
|
49
|
-
"@webex/test-helper-mocha": "3.8.0-next.
|
50
|
-
"@webex/test-helper-mock-webex": "3.8.0-next.
|
51
|
-
"@webex/test-helper-retry": "3.8.0-next.
|
52
|
-
"@webex/test-helper-test-users": "3.8.0-next.
|
46
|
+
"@webex/plugin-meetings": "3.8.0-next.81",
|
47
|
+
"@webex/plugin-rooms": "3.8.0-next.27",
|
48
|
+
"@webex/test-helper-chai": "3.8.0-next.22",
|
49
|
+
"@webex/test-helper-mocha": "3.8.0-next.22",
|
50
|
+
"@webex/test-helper-mock-webex": "3.8.0-next.22",
|
51
|
+
"@webex/test-helper-retry": "3.8.0-next.22",
|
52
|
+
"@webex/test-helper-test-users": "3.8.0-next.22",
|
53
53
|
"chai": "^4.3.4",
|
54
54
|
"chai-as-promised": "^7.1.1",
|
55
55
|
"eslint": "^8.24.0",
|
@@ -61,22 +61,23 @@
|
|
61
61
|
"typescript": "^4.7.4"
|
62
62
|
},
|
63
63
|
"dependencies": {
|
64
|
-
"@webex/common": "3.8.0-next.
|
65
|
-
"@webex/event-dictionary-ts": "^1.0.
|
66
|
-
"@webex/internal-media-core": "2.
|
67
|
-
"@webex/internal-plugin-conversation": "3.8.0-next.
|
68
|
-
"@webex/internal-plugin-device": "3.8.0-next.
|
69
|
-
"@webex/internal-plugin-llm": "3.8.0-next.
|
70
|
-
"@webex/internal-plugin-mercury": "3.8.0-next.
|
71
|
-
"@webex/internal-plugin-metrics": "3.8.0-next.
|
72
|
-
"@webex/internal-plugin-support": "3.8.0-next.
|
73
|
-
"@webex/internal-plugin-user": "3.8.0-next.
|
74
|
-
"@webex/internal-plugin-voicea": "3.8.0-next.
|
75
|
-
"@webex/media-helpers": "3.8.0-next.
|
76
|
-
"@webex/plugin-people": "3.8.0-next.
|
77
|
-
"@webex/plugin-rooms": "3.8.0-next.
|
64
|
+
"@webex/common": "3.8.0-next.22",
|
65
|
+
"@webex/event-dictionary-ts": "^1.0.1753",
|
66
|
+
"@webex/internal-media-core": "2.17.1",
|
67
|
+
"@webex/internal-plugin-conversation": "3.8.0-next.27",
|
68
|
+
"@webex/internal-plugin-device": "3.8.0-next.22",
|
69
|
+
"@webex/internal-plugin-llm": "3.8.0-next.25",
|
70
|
+
"@webex/internal-plugin-mercury": "3.8.0-next.24",
|
71
|
+
"@webex/internal-plugin-metrics": "3.8.0-next.22",
|
72
|
+
"@webex/internal-plugin-support": "3.8.0-next.27",
|
73
|
+
"@webex/internal-plugin-user": "3.8.0-next.22",
|
74
|
+
"@webex/internal-plugin-voicea": "3.8.0-next.81",
|
75
|
+
"@webex/media-helpers": "3.8.0-next.28",
|
76
|
+
"@webex/plugin-people": "3.8.0-next.24",
|
77
|
+
"@webex/plugin-rooms": "3.8.0-next.27",
|
78
|
+
"@webex/ts-sdp": "^1.8.1",
|
78
79
|
"@webex/web-capabilities": "^1.4.0",
|
79
|
-
"@webex/webex-core": "3.8.0-next.
|
80
|
+
"@webex/webex-core": "3.8.0-next.22",
|
80
81
|
"ampersand-collection": "^2.0.2",
|
81
82
|
"bowser": "^2.11.0",
|
82
83
|
"btoa": "^1.2.1",
|
@@ -92,5 +93,5 @@
|
|
92
93
|
"//": [
|
93
94
|
"TODO: upgrade jwt-decode when moving to node 18"
|
94
95
|
],
|
95
|
-
"version": "3.8.0-next.
|
96
|
+
"version": "3.8.0-next.81"
|
96
97
|
}
|
package/src/breakouts/index.ts
CHANGED
@@ -45,6 +45,8 @@ const Breakouts = WebexPlugin.extend({
|
|
45
45
|
intervalID: 'number',
|
46
46
|
meetingId: 'string',
|
47
47
|
canManageBreakouts: 'boolean', // appear the ability to manage breakouts
|
48
|
+
mainGroupId: 'string', // appears from the moment you enable breakouts
|
49
|
+
mainSessionId: 'string', // appears from the moment you enable breakouts
|
48
50
|
},
|
49
51
|
children: {
|
50
52
|
currentBreakoutSession: Breakout,
|
@@ -544,6 +546,28 @@ const Breakouts = WebexPlugin.extend({
|
|
544
546
|
}
|
545
547
|
},
|
546
548
|
|
549
|
+
/**
|
550
|
+
* set main group id
|
551
|
+
* @param {Object} breakoutInfo -- breakout groups
|
552
|
+
* @returns {void}
|
553
|
+
*/
|
554
|
+
_setMainGroupId(breakoutInfo) {
|
555
|
+
if (breakoutInfo?.body?.mainGroupId) {
|
556
|
+
this.set('mainGroupId', breakoutInfo.body.mainGroupId);
|
557
|
+
}
|
558
|
+
},
|
559
|
+
|
560
|
+
/**
|
561
|
+
* set main session id
|
562
|
+
* @param {Object} breakoutInfo -- breakout groups
|
563
|
+
* @returns {void}
|
564
|
+
*/
|
565
|
+
_setMainSessionId(breakoutInfo) {
|
566
|
+
if (breakoutInfo?.body?.mainSessionId) {
|
567
|
+
this.set('mainSessionId', breakoutInfo.body.mainSessionId);
|
568
|
+
}
|
569
|
+
},
|
570
|
+
|
547
571
|
/**
|
548
572
|
* Create new breakout sessions
|
549
573
|
* @param {object} params -- breakout session group
|
@@ -567,6 +591,8 @@ const Breakouts = WebexPlugin.extend({
|
|
567
591
|
});
|
568
592
|
|
569
593
|
this._setManageGroups(breakoutInfo);
|
594
|
+
this._setMainGroupId(breakoutInfo);
|
595
|
+
this._setMainSessionId(breakoutInfo);
|
570
596
|
|
571
597
|
// clear edit lock info after save breakout session info
|
572
598
|
this._clearEditLockInfo();
|
@@ -630,6 +656,8 @@ const Breakouts = WebexPlugin.extend({
|
|
630
656
|
});
|
631
657
|
|
632
658
|
this._setManageGroups(breakoutInfo);
|
659
|
+
this._setMainGroupId(breakoutInfo);
|
660
|
+
this._setMainSessionId(breakoutInfo);
|
633
661
|
|
634
662
|
return breakoutInfo;
|
635
663
|
},
|
@@ -665,6 +693,8 @@ const Breakouts = WebexPlugin.extend({
|
|
665
693
|
});
|
666
694
|
|
667
695
|
this._setManageGroups(breakoutInfo);
|
696
|
+
this._setMainGroupId(breakoutInfo);
|
697
|
+
this._setMainSessionId(breakoutInfo);
|
668
698
|
|
669
699
|
return breakoutInfo;
|
670
700
|
},
|
@@ -718,6 +748,9 @@ const Breakouts = WebexPlugin.extend({
|
|
718
748
|
});
|
719
749
|
|
720
750
|
this._setManageGroups(breakout);
|
751
|
+
this._setMainGroupId(breakout);
|
752
|
+
this._setMainSessionId(breakout);
|
753
|
+
|
721
754
|
if (editlock && breakout.body?.editlock?.token) {
|
722
755
|
this.set('editLock', breakout.body.editlock);
|
723
756
|
this.keepEditLockAlive();
|
@@ -916,6 +949,42 @@ const Breakouts = WebexPlugin.extend({
|
|
916
949
|
body,
|
917
950
|
});
|
918
951
|
},
|
952
|
+
/**
|
953
|
+
* Move participants to main session lobby
|
954
|
+
* @param {Array} sessions
|
955
|
+
* @param {string} sessions[].participants - Participant IDs to move
|
956
|
+
* @returns {void}
|
957
|
+
*/
|
958
|
+
moveToLobby(sessions: Array<{participants: string[]}>) {
|
959
|
+
if (!this.mainGroupId || !this.mainSessionId) {
|
960
|
+
throw new Error(
|
961
|
+
'Main group ID and session ID must be available to move participants to lobby'
|
962
|
+
);
|
963
|
+
}
|
964
|
+
|
965
|
+
const updatedSessions = sessions.map((item) => {
|
966
|
+
return {
|
967
|
+
id: this.mainSessionId,
|
968
|
+
participants: item.participants,
|
969
|
+
targetState: 'LOBBY',
|
970
|
+
};
|
971
|
+
});
|
972
|
+
|
973
|
+
const body = {
|
974
|
+
groups: [
|
975
|
+
{
|
976
|
+
id: this.mainGroupId,
|
977
|
+
sessions: updatedSessions,
|
978
|
+
},
|
979
|
+
],
|
980
|
+
};
|
981
|
+
|
982
|
+
return this.request({
|
983
|
+
method: HTTP_VERBS.PUT,
|
984
|
+
uri: `${this.url}/dynamicAssign`,
|
985
|
+
body,
|
986
|
+
});
|
987
|
+
},
|
919
988
|
/**
|
920
989
|
* trigger ASK_RETURN_TO_MAIN event when main session requested
|
921
990
|
* @param {Object} breakout
|
@@ -152,12 +152,19 @@ WebExMeetingsErrors[IceGatheringFailed.CODE] = IceGatheringFailed;
|
|
152
152
|
* @extends WebexMeetingsError
|
153
153
|
* @property {number} code - 30203
|
154
154
|
* @property {string} message - 'Failed to add media'
|
155
|
+
* @property {Error} [cause] - The underlying error that caused the failure
|
155
156
|
*/
|
156
157
|
class AddMediaFailed extends WebexMeetingsError {
|
157
158
|
static CODE = 30203;
|
159
|
+
cause?: Error;
|
158
160
|
|
159
|
-
|
161
|
+
/**
|
162
|
+
* Creates a new AddMediaFailed error
|
163
|
+
* @param {Error} [cause] - The underlying error that caused the media addition to fail
|
164
|
+
*/
|
165
|
+
constructor(cause?: Error) {
|
160
166
|
super(AddMediaFailed.CODE, 'Failed to add media');
|
167
|
+
this.cause = cause;
|
161
168
|
}
|
162
169
|
}
|
163
170
|
export {AddMediaFailed};
|
package/src/config.ts
CHANGED
@@ -95,7 +95,10 @@ export default {
|
|
95
95
|
// This only applies to non-multistream meetings
|
96
96
|
iceCandidatesGatheringTimeout: undefined,
|
97
97
|
backendIpv6NativeSupport: false,
|
98
|
+
enableReachabilityChecks: true,
|
98
99
|
reachabilityGetClusterTimeout: 5000,
|
99
100
|
logUploadIntervalMultiplicationFactor: 0, // if set to 0 or undefined, logs won't be uploaded periodically, if you want periodic logs, recommended value is 1
|
101
|
+
stopIceGatheringAfterFirstRelayCandidate: false,
|
102
|
+
enableAudioTwccForMultistream: false,
|
100
103
|
},
|
101
104
|
};
|
package/src/constants.ts
CHANGED
@@ -369,6 +369,9 @@ export const EVENT_TRIGGERS = {
|
|
369
369
|
MEETING_CONTROLS_MEETING_FULL_UPDATED: 'meeting:controls:meeting-full:updated',
|
370
370
|
MEETING_CONTROLS_PRACTICE_SESSION_STATUS_UPDATED:
|
371
371
|
'meeting:controls:practice-session-status:updated',
|
372
|
+
MEETING_CONTROLS_ANNOTATION_UPDATED: 'meeting:controls:annotation:updated',
|
373
|
+
MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED:
|
374
|
+
'meeting:controls:remote-desktop-control:updated',
|
372
375
|
// Locus URL changed
|
373
376
|
MEETING_LOCUS_URL_UPDATE: 'meeting:locus:locusUrl:update',
|
374
377
|
MEETING_STREAM_PUBLISH_STATE_CHANGED: 'meeting:streamPublishStateChanged',
|
@@ -378,6 +381,7 @@ export const EVENT_TRIGGERS = {
|
|
378
381
|
MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',
|
379
382
|
MEETING_MANUAL_CAPTION_UPDATED: 'meeting:manualCaptionControl:updated',
|
380
383
|
MEETING_CAPTION_RECEIVED: 'meeting:caption-received',
|
384
|
+
MEETING_PARTICIPANT_REASON_CHANGED: 'meeting:participant-reason-changed',
|
381
385
|
};
|
382
386
|
|
383
387
|
export const EVENT_TYPES = {
|
@@ -711,6 +715,8 @@ export const LOCUSINFO = {
|
|
711
715
|
CONTROLS_PRACTICE_SESSION_STATUS_UPDATED: 'CONTROLS_PRACTICE_SESSION_STATUS_UPDATED',
|
712
716
|
CONTROLS_VIDEO_CHANGED: 'CONTROLS_VIDEO_CHANGED',
|
713
717
|
CONTROLS_STAGE_VIEW_UPDATED: 'CONTROLS_STAGE_VIEW_UPDATED',
|
718
|
+
CONTROLS_ANNOTATION_CHANGED: 'CONTROLS_ANNOTATION_CHANGED',
|
719
|
+
CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED: 'CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED',
|
714
720
|
SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',
|
715
721
|
SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',
|
716
722
|
SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: 'SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED',
|
@@ -738,6 +744,7 @@ export const LOCUSINFO = {
|
|
738
744
|
MEDIA_INACTIVITY: 'MEDIA_INACTIVITY',
|
739
745
|
LINKS_SERVICES: 'LINKS_SERVICES',
|
740
746
|
LINKS_RESOURCES: 'LINKS_RESOURCES',
|
747
|
+
PARTICIPANT_REASON_CHANGED: 'PARTICIPANT_REASON_CHANGED',
|
741
748
|
},
|
742
749
|
};
|
743
750
|
|
@@ -906,6 +913,7 @@ export enum SELF_POLICY {
|
|
906
913
|
SUPPORT_NETWORK_BASED_RECORD = 'supportNetworkBasedRecord',
|
907
914
|
SUPPORT_PREMISE_RECORD = 'supportPremiseRecord',
|
908
915
|
SUPPORT_REALTIME_CLOSE_CAPTION = 'supportRealtimeCloseCaption',
|
916
|
+
SUPPORT_REALTIME_CLOSE_CAPTION_MANUAL = 'supportRealtimeCloseCaptionManual',
|
909
917
|
SUPPORT_CHAT = 'supportChat',
|
910
918
|
SUPPORT_DESKTOP_SHARE_REMOTE = 'supportDesktopShareRemote',
|
911
919
|
SUPPORT_DESKTOP_SHARE = 'supportDesktopShare',
|
@@ -973,6 +981,7 @@ export const DISPLAY_HINTS = {
|
|
973
981
|
PRESENTER_CONTROL: 'PRESENTER_CONTROL',
|
974
982
|
CAN_RENAME_SELF_AND_OBSERVED: 'CAN_RENAME_SELF_AND_OBSERVED',
|
975
983
|
CAN_RENAME_OTHERS: 'CAN_RENAME_OTHERS',
|
984
|
+
MOVE_TO_LOBBY: 'MOVE_TO_LOBBY',
|
976
985
|
|
977
986
|
// breakout session
|
978
987
|
BREAKOUT_MANAGEMENT: 'BREAKOUT_MANAGEMENT',
|
@@ -1026,6 +1035,17 @@ export const DISPLAY_HINTS = {
|
|
1026
1035
|
PRACTICE_SESSION_OFF: 'PRACTICE_SESSION_OFF',
|
1027
1036
|
SHOW_PRACTICE_SESSION_START: 'SHOW_PRACTICE_SESSION_START',
|
1028
1037
|
SHOW_PRACTICE_SESSION_STOP: 'SHOW_PRACTICE_SESSION_STOP',
|
1038
|
+
|
1039
|
+
// Explicit consent for post meeting data
|
1040
|
+
SHOW_POST_MEETING_DATA_CONSENT_PROMPT: 'SHOW_POST_MEETING_DATA_CONSENT_PROMPT',
|
1041
|
+
|
1042
|
+
// Annotations
|
1043
|
+
ENABLE_ANNOTATION_MEETING_OPTION: 'ENABLE_ANNOTATION_MEETING_OPTION',
|
1044
|
+
DISABLE_ANNOTATION_MEETING_OPTION: 'DISABLE_ANNOTATION_MEETING_OPTION',
|
1045
|
+
|
1046
|
+
// Remote Desktop Control
|
1047
|
+
ENABLE_RDC_MEETING_OPTION: 'ENABLE_RDC_MEETING_OPTION',
|
1048
|
+
DISABLE_RDC_MEETING_OPTION: 'DISABLE_RDC_MEETING_OPTION',
|
1029
1049
|
};
|
1030
1050
|
|
1031
1051
|
export const INTERSTITIAL_DISPLAY_HINTS = [DISPLAY_HINTS.VOIP_IS_ENABLED];
|
@@ -1150,96 +1170,6 @@ export const NETWORK_STATUS = {
|
|
1150
1170
|
|
1151
1171
|
export type NETWORK_STATUS = Enum<typeof NETWORK_STATUS>;
|
1152
1172
|
|
1153
|
-
export const NETWORK_TYPE = {
|
1154
|
-
VPN: 'vpn',
|
1155
|
-
UNKNOWN: 'unknown',
|
1156
|
-
WIFI: 'wifi',
|
1157
|
-
ETHERNET: 'ethernet',
|
1158
|
-
};
|
1159
|
-
|
1160
|
-
export const STATS = {
|
1161
|
-
SEND_DIRECTION: 'send',
|
1162
|
-
RECEIVE_DIRECTION: 'recv',
|
1163
|
-
REMOTE: 'remote',
|
1164
|
-
LOCAL: 'local',
|
1165
|
-
};
|
1166
|
-
|
1167
|
-
export const MQA_STATS = {
|
1168
|
-
MQA_SIZE: 120, // MQA is done on 60 second intervals by server def, add a buffer for missed events
|
1169
|
-
CA_TYPE: 'MQA',
|
1170
|
-
DEFAULT_IP: '0.0.0.0',
|
1171
|
-
DEFAULT_SHARE_SENDER_STATS: {
|
1172
|
-
common: {
|
1173
|
-
common: {
|
1174
|
-
direction: 'sendrecv', // TODO: parse from SDP and save globally
|
1175
|
-
isMain: false, // always true for share sender
|
1176
|
-
mariFecEnabled: false, // unavailable
|
1177
|
-
mariRtxEnabled: false, // unavailable
|
1178
|
-
mariLiteEnabled: false, // unavailable
|
1179
|
-
mariQosEnabled: false, // unavailable
|
1180
|
-
multistreamEnabled: false, // unavailable
|
1181
|
-
},
|
1182
|
-
availableBitrate: 0,
|
1183
|
-
dtlsBitrate: 0, // unavailable
|
1184
|
-
dtlsPackets: 0, // unavailable
|
1185
|
-
fecBitrate: 0, // unavailable
|
1186
|
-
fecPackets: 0, // unavailable
|
1187
|
-
maxBitrate: 0, // unavailable
|
1188
|
-
queueDelay: 0, // unavailable
|
1189
|
-
remoteJitter: 0, // unavailable
|
1190
|
-
remoteLossRate: 0,
|
1191
|
-
roundTripTime: 0,
|
1192
|
-
rtcpBitrate: 0, // unavailable
|
1193
|
-
rtcpPackets: 0, // unavailable
|
1194
|
-
rtpBitrate: 0, // unavailable
|
1195
|
-
rtpPackets: 0,
|
1196
|
-
stunBitrate: 0, // unavailable
|
1197
|
-
stunPackets: 0, // unavailable
|
1198
|
-
transportType: 'UDP', // TODO: parse the transport type from the SDP and save globally
|
1199
|
-
},
|
1200
|
-
streams: [
|
1201
|
-
{
|
1202
|
-
common: {
|
1203
|
-
codec: 'H264', // TODO: parse the codec from the SDP and save globally
|
1204
|
-
duplicateSsci: 0, // unavailable
|
1205
|
-
requestedBitrate: 0, // unavailable
|
1206
|
-
requestedFrames: 0, // unavailable
|
1207
|
-
rtpPackets: 0,
|
1208
|
-
ssci: 0, // unavailable
|
1209
|
-
transmittedBitrate: 0,
|
1210
|
-
transmittedFrameRate: 0,
|
1211
|
-
},
|
1212
|
-
h264CodecProfile: 'BP', // TODO: parse the profile level from h264 in the SDP and save globally
|
1213
|
-
localConfigurationChanges: 0, // unavailable
|
1214
|
-
remoteConfigurationChanges: 0, // unavailable
|
1215
|
-
requestedFrameSize: 0, // unavailable
|
1216
|
-
requestedKeyFrames: 0, // unavailable
|
1217
|
-
transmittedFrameSize: 0, // unavailable
|
1218
|
-
transmittedHeight: 0,
|
1219
|
-
transmittedKeyFrames: 0,
|
1220
|
-
transmittedWidth: 0,
|
1221
|
-
},
|
1222
|
-
],
|
1223
|
-
},
|
1224
|
-
intervalMetadata: {
|
1225
|
-
memoryUsage: {
|
1226
|
-
cpuBitWidth: 0,
|
1227
|
-
mainProcessMaximumMemoryBytes: 0,
|
1228
|
-
osBitWidth: 0,
|
1229
|
-
processAverageMemoryUsage: 0,
|
1230
|
-
processMaximumMemoryBytes: 0,
|
1231
|
-
processMaximumMemoryUsage: 0,
|
1232
|
-
systemAverageMemoryUsage: 0,
|
1233
|
-
systemMaximumMemoryUsage: 0,
|
1234
|
-
},
|
1235
|
-
peerReflexiveIP: 'NULL', // TODO: save after ice trickling completes and use as a global variable
|
1236
|
-
processAverageCPU: 0,
|
1237
|
-
processMaximumCPU: 0,
|
1238
|
-
systemAverageCPU: 0,
|
1239
|
-
systemMaximumCPU: 0,
|
1240
|
-
},
|
1241
|
-
};
|
1242
|
-
|
1243
1173
|
// ****** MEDIA QUALITY CONSTANTS ****** //
|
1244
1174
|
|
1245
1175
|
// these values must match allowed values of RemoteQualityLevel from the @webex/internal-media-core lib
|
@@ -40,13 +40,23 @@ export interface ViewTheParticipantListProperties {
|
|
40
40
|
attendeeCount?: boolean;
|
41
41
|
}
|
42
42
|
|
43
|
+
export interface AnnotationProperties {
|
44
|
+
enabled?: boolean;
|
45
|
+
}
|
46
|
+
|
47
|
+
export interface RemoteDesktopControlProperties {
|
48
|
+
enabled?: boolean;
|
49
|
+
}
|
50
|
+
|
43
51
|
export type Properties =
|
44
52
|
| AudioProperties
|
45
53
|
| RaiseHandProperties
|
46
54
|
| ReactionsProperties
|
47
55
|
| ShareControlProperties
|
48
56
|
| VideoProperties
|
49
|
-
| ViewTheParticipantListProperties
|
57
|
+
| ViewTheParticipantListProperties
|
58
|
+
| AnnotationProperties
|
59
|
+
| RemoteDesktopControlProperties;
|
50
60
|
|
51
61
|
export interface ControlConfig<Props = Properties> {
|
52
62
|
/**
|