@webex/plugin-meetings 3.0.0-beta.115 → 3.0.0-beta.117
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 +23 -6
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/index.js +178 -139
- package/dist/breakouts/index.js.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +15 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/meeting/index.js +73 -103
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +3 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +1 -1
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +27 -20
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +463 -426
- package/dist/meeting/util.js.map +1 -1
- package/dist/members/index.js +4 -1
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +75 -45
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +308 -317
- package/dist/members/util.js.map +1 -1
- package/dist/types/constants.d.ts +1 -0
- package/dist/types/meeting/index.d.ts +20 -21
- package/dist/types/meeting/locusMediaRequest.d.ts +2 -0
- package/dist/types/meeting/request.d.ts +16 -8
- package/dist/types/meeting/util.d.ts +75 -1
- package/dist/types/members/request.d.ts +56 -11
- package/dist/types/members/util.d.ts +209 -1
- package/package.json +19 -19
- package/src/breakouts/breakout.ts +26 -4
- package/src/breakouts/index.ts +32 -17
- package/src/constants.ts +1 -0
- package/src/locus-info/mediaSharesUtils.ts +16 -0
- package/src/meeting/index.ts +20 -42
- package/src/meeting/locusMediaRequest.ts +6 -0
- package/src/meeting/muteState.ts +1 -1
- package/src/meeting/request.ts +26 -17
- package/src/meeting/util.ts +446 -410
- package/src/members/index.ts +7 -1
- package/src/members/request.ts +61 -21
- package/src/members/util.ts +316 -326
- package/test/unit/spec/breakouts/breakout.ts +26 -7
- package/test/unit/spec/breakouts/index.ts +48 -3
- package/test/unit/spec/meeting/index.js +53 -33
- package/test/unit/spec/meeting/locusMediaRequest.ts +25 -3
- package/test/unit/spec/meeting/muteState.js +5 -2
- package/test/unit/spec/meeting/request.js +215 -42
- package/test/unit/spec/meeting/utils.js +151 -7
- package/test/unit/spec/members/index.js +22 -1
- package/test/unit/spec/members/request.js +167 -35
|
@@ -1,2 +1,210 @@
|
|
|
1
|
-
|
|
1
|
+
import { RoleAssignmentOptions, RoleAssignmentRequest, ServerRoleShape } from './types';
|
|
2
|
+
declare const MembersUtil: {
|
|
3
|
+
/**
|
|
4
|
+
* @param {Object} invitee with emailAddress, email or phoneNumber
|
|
5
|
+
* @param {String} locusUrl
|
|
6
|
+
* @param {Boolean} alertIfActive
|
|
7
|
+
* @returns {Object} the format object
|
|
8
|
+
*/
|
|
9
|
+
generateAddMemberOptions: (invitee: object, locusUrl: string, alertIfActive: boolean) => {
|
|
10
|
+
invitee: object;
|
|
11
|
+
locusUrl: string;
|
|
12
|
+
alertIfActive: boolean;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* @param {Array} memberIds
|
|
16
|
+
* @param {String} locusUrl
|
|
17
|
+
* @returns {Object} the format object
|
|
18
|
+
*/
|
|
19
|
+
generateAdmitMemberOptions: (memberIds: Array<any>, locusUrl: string) => {
|
|
20
|
+
locusUrl: string;
|
|
21
|
+
memberIds: any[];
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}
|
|
25
|
+
* @returns {Object} with {invitees: [{address}], alertIfActive}
|
|
26
|
+
*/
|
|
27
|
+
getAddMemberBody: (options: any) => {
|
|
28
|
+
invitees: {
|
|
29
|
+
address: any;
|
|
30
|
+
}[];
|
|
31
|
+
alertIfActive: any;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* @param {Object} options with {memberIds, authorizingLocusUrl}
|
|
35
|
+
* @returns {Object} admit with {memberIds}
|
|
36
|
+
*/
|
|
37
|
+
getAdmitMemberRequestBody: (options: any) => any;
|
|
38
|
+
/**
|
|
39
|
+
* @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}
|
|
40
|
+
* @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request
|
|
41
|
+
* if a host/cohost is in a breakout session, the locus url should be the main session locus url
|
|
42
|
+
*/
|
|
43
|
+
getAdmitMemberRequestParams: (format: any) => {
|
|
44
|
+
method: string;
|
|
45
|
+
uri: string;
|
|
46
|
+
body: any;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}
|
|
50
|
+
* @returns {Object} the request parameters (method, uri, body) needed to make a addMember request
|
|
51
|
+
*/
|
|
52
|
+
getAddMemberRequestParams: (format: any) => {
|
|
53
|
+
method: string;
|
|
54
|
+
uri: any;
|
|
55
|
+
body: {
|
|
56
|
+
invitees: {
|
|
57
|
+
address: any;
|
|
58
|
+
}[];
|
|
59
|
+
alertIfActive: any;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
isInvalidInvitee: (invitee: any) => boolean;
|
|
63
|
+
getRemoveMemberRequestParams: (options: any) => {
|
|
64
|
+
method: string;
|
|
65
|
+
uri: string;
|
|
66
|
+
body: {
|
|
67
|
+
reason: any;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
generateTransferHostMemberOptions: (transfer: any, moderator: any, locusUrl: any) => {
|
|
71
|
+
moderator: any;
|
|
72
|
+
locusUrl: any;
|
|
73
|
+
memberId: any;
|
|
74
|
+
};
|
|
75
|
+
generateRemoveMemberOptions: (removal: any, locusUrl: any) => {
|
|
76
|
+
reason: string;
|
|
77
|
+
memberId: any;
|
|
78
|
+
locusUrl: any;
|
|
79
|
+
};
|
|
80
|
+
generateMuteMemberOptions: (memberId: any, status: any, locusUrl: any, isAudio: any) => {
|
|
81
|
+
memberId: any;
|
|
82
|
+
muted: any;
|
|
83
|
+
locusUrl: any;
|
|
84
|
+
isAudio: any;
|
|
85
|
+
};
|
|
86
|
+
generateRaiseHandMemberOptions: (memberId: any, status: any, locusUrl: any) => {
|
|
87
|
+
memberId: any;
|
|
88
|
+
raised: any;
|
|
89
|
+
locusUrl: any;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* @param {String} memberId
|
|
93
|
+
* @param {[ServerRoleShape]} roles
|
|
94
|
+
* @param {String} locusUrl
|
|
95
|
+
* @returns {RoleAssignmentOptions}
|
|
96
|
+
*/
|
|
97
|
+
generateRoleAssignmentMemberOptions: (memberId: string, roles: Array<ServerRoleShape>, locusUrl: string) => RoleAssignmentOptions;
|
|
98
|
+
generateLowerAllHandsMemberOptions: (requestingParticipantId: any, locusUrl: any) => {
|
|
99
|
+
requestingParticipantId: any;
|
|
100
|
+
locusUrl: any;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* @param {String} memberId id of the participant who is receiving request
|
|
104
|
+
* @param {String} requestingParticipantId id of the participant who is sending request (optional)
|
|
105
|
+
* @param {String} alias alias name
|
|
106
|
+
* @param {String} locusUrl url
|
|
107
|
+
* @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}
|
|
108
|
+
*/
|
|
109
|
+
generateEditDisplayNameMemberOptions: (memberId: any, requestingParticipantId: any, alias: any, locusUrl: any) => {
|
|
110
|
+
memberId: any;
|
|
111
|
+
requestingParticipantId: any;
|
|
112
|
+
alias: any;
|
|
113
|
+
locusUrl: any;
|
|
114
|
+
};
|
|
115
|
+
getMuteMemberRequestParams: (options: any) => {
|
|
116
|
+
method: string;
|
|
117
|
+
uri: string;
|
|
118
|
+
body: {
|
|
119
|
+
[x: string]: {
|
|
120
|
+
muted: any;
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* @param {RoleAssignmentOptions} options
|
|
126
|
+
* @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request
|
|
127
|
+
*/
|
|
128
|
+
getRoleAssignmentMemberRequestParams: (options: RoleAssignmentOptions) => RoleAssignmentRequest;
|
|
129
|
+
getRaiseHandMemberRequestParams: (options: any) => {
|
|
130
|
+
method: string;
|
|
131
|
+
uri: string;
|
|
132
|
+
body: {
|
|
133
|
+
hand: {
|
|
134
|
+
raised: any;
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
getLowerAllHandsMemberRequestParams: (options: any) => {
|
|
139
|
+
method: string;
|
|
140
|
+
uri: string;
|
|
141
|
+
body: {
|
|
142
|
+
hand: {
|
|
143
|
+
raised: boolean;
|
|
144
|
+
};
|
|
145
|
+
requestingParticipantId: any;
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}
|
|
150
|
+
* @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request
|
|
151
|
+
*/
|
|
152
|
+
editDisplayNameMemberRequestParams: (options: any) => {
|
|
153
|
+
method: string;
|
|
154
|
+
uri: string;
|
|
155
|
+
body: {
|
|
156
|
+
aliasValue: any;
|
|
157
|
+
requestingParticipantId: any;
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
getTransferHostToMemberRequestParams: (options: any) => {
|
|
161
|
+
method: string;
|
|
162
|
+
uri: string;
|
|
163
|
+
body: {
|
|
164
|
+
role: {
|
|
165
|
+
moderator: any;
|
|
166
|
+
};
|
|
167
|
+
};
|
|
168
|
+
};
|
|
169
|
+
genderateSendDTMFOptions: (url: any, tones: any, memberId: any, locusUrl: any) => {
|
|
170
|
+
url: any;
|
|
171
|
+
tones: any;
|
|
172
|
+
memberId: any;
|
|
173
|
+
locusUrl: any;
|
|
174
|
+
};
|
|
175
|
+
generateSendDTMFRequestParams: ({ url, tones, memberId, locusUrl }: {
|
|
176
|
+
url: any;
|
|
177
|
+
tones: any;
|
|
178
|
+
memberId: any;
|
|
179
|
+
locusUrl: any;
|
|
180
|
+
}) => {
|
|
181
|
+
method: string;
|
|
182
|
+
uri: string;
|
|
183
|
+
body: {
|
|
184
|
+
device: {
|
|
185
|
+
url: any;
|
|
186
|
+
};
|
|
187
|
+
memberId: any;
|
|
188
|
+
dtmf: {
|
|
189
|
+
correlationId: any;
|
|
190
|
+
tones: any;
|
|
191
|
+
direction: string;
|
|
192
|
+
};
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
cancelPhoneInviteOptions: (invitee: any, locusUrl: any) => {
|
|
196
|
+
invitee: any;
|
|
197
|
+
locusUrl: any;
|
|
198
|
+
};
|
|
199
|
+
generateCancelInviteRequestParams: (options: any) => {
|
|
200
|
+
method: string;
|
|
201
|
+
uri: any;
|
|
202
|
+
body: {
|
|
203
|
+
actionType: string;
|
|
204
|
+
invitees: {
|
|
205
|
+
address: any;
|
|
206
|
+
}[];
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
};
|
|
2
210
|
export default MembersUtil;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.117",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
6
|
"contributors": [
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
36
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
38
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
39
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
40
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
35
|
+
"@webex/plugin-meetings": "3.0.0-beta.117",
|
|
36
|
+
"@webex/test-helper-chai": "3.0.0-beta.117",
|
|
37
|
+
"@webex/test-helper-mocha": "3.0.0-beta.117",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.117",
|
|
39
|
+
"@webex/test-helper-retry": "3.0.0-beta.117",
|
|
40
|
+
"@webex/test-helper-test-users": "3.0.0-beta.117",
|
|
41
41
|
"chai": "^4.3.4",
|
|
42
42
|
"chai-as-promised": "^7.1.1",
|
|
43
43
|
"jsdom-global": "3.0.2",
|
|
@@ -46,19 +46,19 @@
|
|
|
46
46
|
"typescript": "^4.7.4"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@webex/common": "3.0.0-beta.
|
|
49
|
+
"@webex/common": "3.0.0-beta.117",
|
|
50
50
|
"@webex/internal-media-core": "1.38.0",
|
|
51
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
52
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
53
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
54
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
55
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
56
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
57
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
58
|
-
"@webex/media-helpers": "3.0.0-beta.
|
|
59
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
60
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
61
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
51
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.117",
|
|
52
|
+
"@webex/internal-plugin-device": "3.0.0-beta.117",
|
|
53
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.117",
|
|
54
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.117",
|
|
55
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.117",
|
|
56
|
+
"@webex/internal-plugin-support": "3.0.0-beta.117",
|
|
57
|
+
"@webex/internal-plugin-user": "3.0.0-beta.117",
|
|
58
|
+
"@webex/media-helpers": "3.0.0-beta.117",
|
|
59
|
+
"@webex/plugin-people": "3.0.0-beta.117",
|
|
60
|
+
"@webex/plugin-rooms": "3.0.0-beta.117",
|
|
61
|
+
"@webex/webex-core": "3.0.0-beta.117",
|
|
62
62
|
"ampersand-collection": "^2.0.2",
|
|
63
63
|
"bowser": "^2.11.0",
|
|
64
64
|
"btoa": "^1.2.1",
|
|
@@ -47,8 +47,11 @@ const Breakout = WebexPlugin.extend({
|
|
|
47
47
|
},
|
|
48
48
|
},
|
|
49
49
|
|
|
50
|
+
/**
|
|
51
|
+
* initializer for the Breakout class
|
|
52
|
+
* @returns {void}
|
|
53
|
+
*/
|
|
50
54
|
initialize() {
|
|
51
|
-
this.members = new Members({}, {parent: this.webex});
|
|
52
55
|
// @ts-ignore
|
|
53
56
|
this.breakoutRequest = new BreakoutRequest({webex: this.webex});
|
|
54
57
|
},
|
|
@@ -113,15 +116,34 @@ const Breakout = WebexPlugin.extend({
|
|
|
113
116
|
},
|
|
114
117
|
|
|
115
118
|
/**
|
|
116
|
-
*
|
|
117
|
-
* @param locus Locus object
|
|
119
|
+
* inits the members object
|
|
118
120
|
* @returns {void}
|
|
119
121
|
*/
|
|
122
|
+
initMembers() {
|
|
123
|
+
const {meetingId} = this.collection.parent;
|
|
124
|
+
const meeting = this.webex.meetings.getMeetingByType(_ID_, meetingId);
|
|
125
|
+
this.members = new Members(
|
|
126
|
+
{
|
|
127
|
+
meeting,
|
|
128
|
+
},
|
|
129
|
+
{parent: this.webex}
|
|
130
|
+
);
|
|
131
|
+
},
|
|
120
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Parses the participants from the locus object
|
|
135
|
+
* @param {Object} locus Locus object
|
|
136
|
+
* @returns {void}
|
|
137
|
+
*/
|
|
121
138
|
parseRoster(locus) {
|
|
139
|
+
if (!this.members) {
|
|
140
|
+
this.initMembers();
|
|
141
|
+
}
|
|
142
|
+
|
|
122
143
|
this.members.locusParticipantsUpdate(locus);
|
|
123
144
|
},
|
|
124
|
-
|
|
145
|
+
|
|
146
|
+
/**
|
|
125
147
|
* Broadcast message to this breakout session's participants
|
|
126
148
|
* @param {String} message
|
|
127
149
|
* @param {Object} options
|
package/src/breakouts/index.ts
CHANGED
|
@@ -456,6 +456,17 @@ const Breakouts = WebexPlugin.extend({
|
|
|
456
456
|
});
|
|
457
457
|
},
|
|
458
458
|
|
|
459
|
+
/**
|
|
460
|
+
* set groups to manageGroups prop
|
|
461
|
+
* @param {Object} breakoutInfo -- breakout groups
|
|
462
|
+
* @returns {void}
|
|
463
|
+
*/
|
|
464
|
+
_setManageGroups(breakoutInfo) {
|
|
465
|
+
if (breakoutInfo?.body?.groups) {
|
|
466
|
+
this.set('manageGroups', breakoutInfo.body.groups);
|
|
467
|
+
}
|
|
468
|
+
},
|
|
469
|
+
|
|
459
470
|
/**
|
|
460
471
|
* Create new breakout sessions
|
|
461
472
|
* @param {object} params -- breakout session group
|
|
@@ -468,7 +479,7 @@ const Breakouts = WebexPlugin.extend({
|
|
|
468
479
|
...{groups: [payload]},
|
|
469
480
|
};
|
|
470
481
|
// @ts-ignore
|
|
471
|
-
const
|
|
482
|
+
const breakoutInfo = await this.webex
|
|
472
483
|
.request({
|
|
473
484
|
method: HTTP_VERBS.PUT,
|
|
474
485
|
uri: this.url,
|
|
@@ -478,14 +489,12 @@ const Breakouts = WebexPlugin.extend({
|
|
|
478
489
|
return Promise.reject(boServiceErrorHandler(error, 'Breakouts#create'));
|
|
479
490
|
});
|
|
480
491
|
|
|
481
|
-
|
|
482
|
-
this.set('manageGroups', breakInfo.body.groups);
|
|
483
|
-
}
|
|
492
|
+
this._setManageGroups(breakoutInfo);
|
|
484
493
|
|
|
485
494
|
// clear edit lock info after save breakout session info
|
|
486
495
|
this._clearEditLockInfo();
|
|
487
496
|
|
|
488
|
-
return
|
|
497
|
+
return breakoutInfo;
|
|
489
498
|
},
|
|
490
499
|
|
|
491
500
|
/**
|
|
@@ -498,7 +507,7 @@ const Breakouts = WebexPlugin.extend({
|
|
|
498
507
|
...{groups: [{action: BREAKOUTS.ACTION.DELETE}]},
|
|
499
508
|
};
|
|
500
509
|
// @ts-ignore
|
|
501
|
-
const
|
|
510
|
+
const breakoutInfo = await this.webex
|
|
502
511
|
.request({
|
|
503
512
|
method: HTTP_VERBS.PUT,
|
|
504
513
|
uri: this.url,
|
|
@@ -508,12 +517,10 @@ const Breakouts = WebexPlugin.extend({
|
|
|
508
517
|
return Promise.reject(boServiceErrorHandler(error, 'Breakouts#clearSessions'));
|
|
509
518
|
});
|
|
510
519
|
|
|
511
|
-
|
|
512
|
-
this.set('manageGroups', breakInfo.body.groups);
|
|
513
|
-
}
|
|
520
|
+
this._setManageGroups(breakoutInfo);
|
|
514
521
|
this.shouldFetchPreassignments = false;
|
|
515
522
|
|
|
516
|
-
return
|
|
523
|
+
return breakoutInfo;
|
|
517
524
|
},
|
|
518
525
|
|
|
519
526
|
/**
|
|
@@ -521,7 +528,7 @@ const Breakouts = WebexPlugin.extend({
|
|
|
521
528
|
* @param {object} params
|
|
522
529
|
* @returns {Promise}
|
|
523
530
|
*/
|
|
524
|
-
start(params = {}) {
|
|
531
|
+
async start(params = {}) {
|
|
525
532
|
const action = BREAKOUTS.ACTION.START;
|
|
526
533
|
const payload = {
|
|
527
534
|
id: this.breakoutGroupId,
|
|
@@ -539,13 +546,17 @@ const Breakouts = WebexPlugin.extend({
|
|
|
539
546
|
...{groups: [payload]},
|
|
540
547
|
};
|
|
541
548
|
|
|
542
|
-
|
|
549
|
+
const breakoutInfo = await this.request({
|
|
543
550
|
method: HTTP_VERBS.PUT,
|
|
544
551
|
uri: this.url,
|
|
545
552
|
body,
|
|
546
553
|
}).catch((error) => {
|
|
547
554
|
return Promise.reject(boServiceErrorHandler(error, 'Breakouts#start'));
|
|
548
555
|
});
|
|
556
|
+
|
|
557
|
+
this._setManageGroups(breakoutInfo);
|
|
558
|
+
|
|
559
|
+
return breakoutInfo;
|
|
549
560
|
},
|
|
550
561
|
|
|
551
562
|
/**
|
|
@@ -553,7 +564,7 @@ const Breakouts = WebexPlugin.extend({
|
|
|
553
564
|
* @param {object} params
|
|
554
565
|
* @returns {Promise}
|
|
555
566
|
*/
|
|
556
|
-
end(params = {}) {
|
|
567
|
+
async end(params = {}) {
|
|
557
568
|
const {delayCloseTime, breakoutGroupId: id} = this;
|
|
558
569
|
const action = BREAKOUTS.ACTION.CLOSE;
|
|
559
570
|
const payload = {
|
|
@@ -570,13 +581,17 @@ const Breakouts = WebexPlugin.extend({
|
|
|
570
581
|
...{groups: [payload]},
|
|
571
582
|
};
|
|
572
583
|
|
|
573
|
-
|
|
584
|
+
const breakoutInfo = await this.request({
|
|
574
585
|
method: HTTP_VERBS.PUT,
|
|
575
586
|
uri: this.url,
|
|
576
587
|
body,
|
|
577
588
|
}).catch((error) => {
|
|
578
589
|
return Promise.reject(boServiceErrorHandler(error, 'Breakouts#end'));
|
|
579
590
|
});
|
|
591
|
+
|
|
592
|
+
this._setManageGroups(breakoutInfo);
|
|
593
|
+
|
|
594
|
+
return breakoutInfo;
|
|
580
595
|
},
|
|
581
596
|
|
|
582
597
|
/**
|
|
@@ -611,6 +626,8 @@ const Breakouts = WebexPlugin.extend({
|
|
|
611
626
|
this._clearEditLockInfo();
|
|
612
627
|
}
|
|
613
628
|
|
|
629
|
+
this._setManageGroups(breakoutInfo);
|
|
630
|
+
|
|
614
631
|
return breakoutInfo;
|
|
615
632
|
},
|
|
616
633
|
|
|
@@ -625,9 +642,7 @@ const Breakouts = WebexPlugin.extend({
|
|
|
625
642
|
uri: this.url + (editlock ? `?editlock=${editlock}` : ''),
|
|
626
643
|
});
|
|
627
644
|
|
|
628
|
-
|
|
629
|
-
this.set('manageGroups', breakout.body.groups);
|
|
630
|
-
}
|
|
645
|
+
this._setManageGroups(breakout);
|
|
631
646
|
if (editlock && breakout.body?.editlock?.token) {
|
|
632
647
|
this.set('editLock', breakout.body.editlock);
|
|
633
648
|
this.keepEditLockAlive();
|
package/src/constants.ts
CHANGED
|
@@ -283,6 +283,7 @@ export const EVENT_TRIGGERS = {
|
|
|
283
283
|
MEETING_STOPPED_SHARING_LOCAL: 'meeting:stoppedSharingLocal',
|
|
284
284
|
MEETING_STARTED_SHARING_REMOTE: 'meeting:startedSharingRemote',
|
|
285
285
|
MEETING_STOPPED_SHARING_REMOTE: 'meeting:stoppedSharingRemote',
|
|
286
|
+
MEETING_UPDATE_ANNOTATION_INFO: 'meeting:updateAnnotationInfo',
|
|
286
287
|
MEETING_STARTED_SHARING_WHITEBOARD: 'meeting:startedSharingWhiteboard',
|
|
287
288
|
MEETING_STOPPED_SHARING_WHITEBOARD: 'meeting:stoppedSharingWhiteboard',
|
|
288
289
|
MEETING_MEDIA_LOCAL_STARTED: 'meeting:media:local:start',
|
|
@@ -13,6 +13,7 @@ MediaSharesUtils.parse = (mediaShares: object) => {
|
|
|
13
13
|
content: {
|
|
14
14
|
beneficiaryId: MediaSharesUtils.getContentBeneficiaryId(mediaShares),
|
|
15
15
|
disposition: MediaSharesUtils.getContentDisposition(mediaShares),
|
|
16
|
+
annotation: MediaSharesUtils.getContentAnnotation(mediaShares),
|
|
16
17
|
},
|
|
17
18
|
whiteboard: {
|
|
18
19
|
beneficiaryId: MediaSharesUtils.getWhiteboardBeneficiaryId(mediaShares),
|
|
@@ -140,6 +141,21 @@ MediaSharesUtils.getContentBeneficiaryId = (mediaShares: object) => {
|
|
|
140
141
|
return contentFloor.beneficiary.id;
|
|
141
142
|
};
|
|
142
143
|
|
|
144
|
+
/**
|
|
145
|
+
* get live annotation is sharing from media shares (content)
|
|
146
|
+
* @param {Object} mediaShares
|
|
147
|
+
* @returns {Object}
|
|
148
|
+
*/
|
|
149
|
+
MediaSharesUtils.getContentAnnotation = (mediaShares: object) => {
|
|
150
|
+
const extractContent = MediaSharesUtils.extractContent(mediaShares);
|
|
151
|
+
|
|
152
|
+
if (!extractContent || !extractContent.annotation) {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return extractContent.annotation;
|
|
157
|
+
};
|
|
158
|
+
|
|
143
159
|
/**
|
|
144
160
|
* get who is sharing from media shares (whiteboard)
|
|
145
161
|
* @param {Object} mediaShares
|
package/src/meeting/index.ts
CHANGED
|
@@ -748,6 +748,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
748
748
|
locusUrl: attrs.locus && attrs.locus.url,
|
|
749
749
|
receiveSlotManager: this.receiveSlotManager,
|
|
750
750
|
mediaRequestManagers: this.mediaRequestManagers,
|
|
751
|
+
meeting: this,
|
|
751
752
|
},
|
|
752
753
|
// @ts-ignore - Fix type
|
|
753
754
|
{parent: this.webex}
|
|
@@ -890,7 +891,12 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
890
891
|
* @private
|
|
891
892
|
* @memberof Meeting
|
|
892
893
|
*/
|
|
893
|
-
this.meetingRequest = new MeetingRequest(
|
|
894
|
+
this.meetingRequest = new MeetingRequest(
|
|
895
|
+
{
|
|
896
|
+
meeting: this,
|
|
897
|
+
},
|
|
898
|
+
options
|
|
899
|
+
);
|
|
894
900
|
/**
|
|
895
901
|
* @instance
|
|
896
902
|
* @type {Array}
|
|
@@ -2188,6 +2194,18 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2188
2194
|
const previousContentShare = payload.previous?.content;
|
|
2189
2195
|
const previousWhiteboardShare = payload.previous?.whiteboard;
|
|
2190
2196
|
|
|
2197
|
+
if (!isEqual(contentShare?.annotation, previousContentShare?.annotation)) {
|
|
2198
|
+
Trigger.trigger(
|
|
2199
|
+
this,
|
|
2200
|
+
{
|
|
2201
|
+
file: 'meetings/index',
|
|
2202
|
+
function: 'remoteShare',
|
|
2203
|
+
},
|
|
2204
|
+
EVENT_TRIGGERS.MEETING_UPDATE_ANNOTATION_INFO,
|
|
2205
|
+
contentShare.annotation
|
|
2206
|
+
);
|
|
2207
|
+
}
|
|
2208
|
+
|
|
2191
2209
|
if (
|
|
2192
2210
|
contentShare.beneficiaryId === previousContentShare?.beneficiaryId &&
|
|
2193
2211
|
contentShare.disposition === previousContentShare?.disposition &&
|
|
@@ -3228,35 +3246,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3228
3246
|
}
|
|
3229
3247
|
}
|
|
3230
3248
|
|
|
3231
|
-
/**
|
|
3232
|
-
* Sets the first locus info on the class instance
|
|
3233
|
-
* @param {Object} locus
|
|
3234
|
-
* @param {String} locus.url
|
|
3235
|
-
* @param {Array} locus.participants
|
|
3236
|
-
* @param {Object} locus.self
|
|
3237
|
-
* @returns {undefined}
|
|
3238
|
-
* @private
|
|
3239
|
-
* @memberof Meeting
|
|
3240
|
-
*/
|
|
3241
|
-
private parseLocus(locus: {url: string; participants: Array<any>; self: object}) {
|
|
3242
|
-
if (locus) {
|
|
3243
|
-
this.locusUrl = locus.url;
|
|
3244
|
-
// TODO: move this to parse participants module
|
|
3245
|
-
this.setLocus(locus);
|
|
3246
|
-
|
|
3247
|
-
// check if we can extract this info from partner
|
|
3248
|
-
// Parsing of locus object must be finished at this state
|
|
3249
|
-
if (locus.participants && locus.self) {
|
|
3250
|
-
this.partner = MeetingUtil.getLocusPartner(locus.participants, locus.self);
|
|
3251
|
-
}
|
|
3252
|
-
|
|
3253
|
-
// For webex meeting the sipUrl gets updated in info parser
|
|
3254
|
-
if (!this.sipUri && this.partner && this.type === _CALL_) {
|
|
3255
|
-
this.setSipUri(this.partner.person.sipUrl || this.partner.person.id);
|
|
3256
|
-
}
|
|
3257
|
-
}
|
|
3258
|
-
}
|
|
3259
|
-
|
|
3260
3249
|
/**
|
|
3261
3250
|
* Sets the sip uri on the class instance
|
|
3262
3251
|
* uses meeting info as precedence
|
|
@@ -3283,7 +3272,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3283
3272
|
* @private
|
|
3284
3273
|
* @memberof Meeting
|
|
3285
3274
|
*/
|
|
3286
|
-
|
|
3275
|
+
setLocus(
|
|
3287
3276
|
locus:
|
|
3288
3277
|
| {
|
|
3289
3278
|
mediaConnections: Array<any>;
|
|
@@ -4653,9 +4642,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4653
4642
|
locusUrl,
|
|
4654
4643
|
clientUrl: this.deviceUrl,
|
|
4655
4644
|
})
|
|
4656
|
-
.then((res) => {
|
|
4657
|
-
this.locusInfo.onFullLocus(res.body.locus);
|
|
4658
|
-
})
|
|
4659
4645
|
.catch((error) => {
|
|
4660
4646
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADD_DIAL_IN_FAILURE, {
|
|
4661
4647
|
correlation_id: this.correlationId,
|
|
@@ -4695,9 +4681,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4695
4681
|
locusUrl,
|
|
4696
4682
|
clientUrl: this.deviceUrl,
|
|
4697
4683
|
})
|
|
4698
|
-
.then((res) => {
|
|
4699
|
-
this.locusInfo.onFullLocus(res.body.locus);
|
|
4700
|
-
})
|
|
4701
4684
|
.catch((error) => {
|
|
4702
4685
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADD_DIAL_OUT_FAILURE, {
|
|
4703
4686
|
correlation_id: this.correlationId,
|
|
@@ -6831,11 +6814,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6831
6814
|
main: layoutInfo.main,
|
|
6832
6815
|
content: layoutInfo.content,
|
|
6833
6816
|
})
|
|
6834
|
-
.then((response) => {
|
|
6835
|
-
if (response && response.body && response.body.locus) {
|
|
6836
|
-
this.locusInfo.onFullLocus(response.body.locus);
|
|
6837
|
-
}
|
|
6838
|
-
})
|
|
6839
6817
|
.catch((error) => {
|
|
6840
6818
|
LoggerProxy.logger.error('Meeting:index#changeVideoLayout --> Error ', error);
|
|
6841
6819
|
|
|
@@ -14,6 +14,7 @@ export type RoapRequest = {
|
|
|
14
14
|
mediaId: string;
|
|
15
15
|
roapMessage: any;
|
|
16
16
|
reachability: any;
|
|
17
|
+
sequence?: any;
|
|
17
18
|
joinCookie: any; // any, because this is opaque to the client, we pass whatever object we got from one backend component (Orpheus) to the other (Locus)
|
|
18
19
|
};
|
|
19
20
|
|
|
@@ -21,6 +22,7 @@ export type LocalMuteRequest = {
|
|
|
21
22
|
type: 'LocalMute';
|
|
22
23
|
selfUrl: string;
|
|
23
24
|
mediaId: string;
|
|
25
|
+
sequence?: any;
|
|
24
26
|
muteOptions: {
|
|
25
27
|
audioMuted?: boolean;
|
|
26
28
|
videoMuted?: boolean;
|
|
@@ -220,6 +222,10 @@ export class LocusMediaRequest extends WebexPlugin {
|
|
|
220
222
|
break;
|
|
221
223
|
}
|
|
222
224
|
|
|
225
|
+
if (request.sequence) {
|
|
226
|
+
body.sequence = request.sequence;
|
|
227
|
+
}
|
|
228
|
+
|
|
223
229
|
body.localMedias = [
|
|
224
230
|
{
|
|
225
231
|
localSdp: JSON.stringify(localMedias), // this part must be JSON stringified, Locus requires this
|
package/src/meeting/muteState.ts
CHANGED