@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
package/src/members/util.ts
CHANGED
|
@@ -14,336 +14,326 @@ import {
|
|
|
14
14
|
|
|
15
15
|
import {RoleAssignmentOptions, RoleAssignmentRequest, ServerRoleShape} from './types';
|
|
16
16
|
|
|
17
|
-
const MembersUtil
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}
|
|
47
|
-
* @returns {Object} with {invitees: [{address}], alertIfActive}
|
|
48
|
-
*/
|
|
49
|
-
MembersUtil.getAddMemberBody = (options: any) => ({
|
|
50
|
-
invitees: [
|
|
51
|
-
{
|
|
52
|
-
address: options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,
|
|
53
|
-
},
|
|
54
|
-
],
|
|
55
|
-
alertIfActive: options.alertIfActive,
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* @param {Object} options with {memberIds, authorizingLocusUrl}
|
|
60
|
-
* @returns {Object} admit with {memberIds}
|
|
61
|
-
*/
|
|
62
|
-
MembersUtil.getAdmitMemberRequestBody = (options: any) => {
|
|
63
|
-
const {memberIds, sessionLocusUrls} = options;
|
|
64
|
-
const body: any = {admit: {participantIds: memberIds}};
|
|
65
|
-
if (sessionLocusUrls) {
|
|
66
|
-
const {authorizingLocusUrl} = sessionLocusUrls;
|
|
67
|
-
|
|
68
|
-
return {authorizingLocusUrl, ...body};
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return body;
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}
|
|
76
|
-
* @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request
|
|
77
|
-
* if a host/cohost is in a breakout session, the locus url should be the main session locus url
|
|
78
|
-
*/
|
|
79
|
-
MembersUtil.getAdmitMemberRequestParams = (format: any) => {
|
|
80
|
-
const body = MembersUtil.getAdmitMemberRequestBody(format);
|
|
81
|
-
const {locusUrl, sessionLocusUrls} = format;
|
|
82
|
-
const baseUrl = sessionLocusUrls?.mainLocusUrl || locusUrl;
|
|
83
|
-
const uri = `${baseUrl}/${CONTROLS}`;
|
|
84
|
-
|
|
85
|
-
return {
|
|
86
|
-
method: HTTP_VERBS.PUT,
|
|
87
|
-
uri,
|
|
88
|
-
body,
|
|
89
|
-
};
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}
|
|
94
|
-
* @returns {Object} the request parameters (method, uri, body) needed to make a addMember request
|
|
95
|
-
*/
|
|
96
|
-
MembersUtil.getAddMemberRequestParams = (format: any) => {
|
|
97
|
-
const body = MembersUtil.getAddMemberBody(format);
|
|
98
|
-
const requestParams = {
|
|
99
|
-
method: HTTP_VERBS.PUT,
|
|
100
|
-
uri: format.locusUrl,
|
|
101
|
-
body,
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
return requestParams;
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
MembersUtil.isInvalidInvitee = (invitee) => {
|
|
108
|
-
if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (invitee.phoneNumber) {
|
|
113
|
-
return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return !VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress);
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
MembersUtil.getRemoveMemberRequestParams = (options) => {
|
|
120
|
-
const body = {
|
|
121
|
-
reason: options.reason,
|
|
122
|
-
};
|
|
123
|
-
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${LEAVE}`;
|
|
124
|
-
|
|
125
|
-
return {
|
|
126
|
-
method: HTTP_VERBS.PUT,
|
|
127
|
-
uri,
|
|
128
|
-
body,
|
|
129
|
-
};
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
MembersUtil.generateTransferHostMemberOptions = (transfer, moderator, locusUrl) => ({
|
|
133
|
-
moderator,
|
|
134
|
-
locusUrl,
|
|
135
|
-
memberId: transfer,
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
MembersUtil.generateRemoveMemberOptions = (removal, locusUrl) => ({
|
|
139
|
-
reason: _FORCED_,
|
|
140
|
-
memberId: removal,
|
|
141
|
-
locusUrl,
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
MembersUtil.generateMuteMemberOptions = (memberId, status, locusUrl, isAudio) => ({
|
|
145
|
-
memberId,
|
|
146
|
-
muted: status,
|
|
147
|
-
locusUrl,
|
|
148
|
-
isAudio,
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
MembersUtil.generateRaiseHandMemberOptions = (memberId, status, locusUrl) => ({
|
|
152
|
-
memberId,
|
|
153
|
-
raised: status,
|
|
154
|
-
locusUrl,
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* @param {String} memberId
|
|
159
|
-
* @param {[ServerRoleShape]} roles
|
|
160
|
-
* @param {String} locusUrl
|
|
161
|
-
* @returns {RoleAssignmentOptions}
|
|
162
|
-
*/
|
|
163
|
-
MembersUtil.generateRoleAssignmentMemberOptions = (
|
|
164
|
-
memberId: string,
|
|
165
|
-
roles: Array<ServerRoleShape>,
|
|
166
|
-
locusUrl: string
|
|
167
|
-
): RoleAssignmentOptions => ({
|
|
168
|
-
memberId,
|
|
169
|
-
roles,
|
|
170
|
-
locusUrl,
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
MembersUtil.generateLowerAllHandsMemberOptions = (requestingParticipantId, locusUrl) => ({
|
|
174
|
-
requestingParticipantId,
|
|
175
|
-
locusUrl,
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* @param {String} memberId id of the participant who is receiving request
|
|
180
|
-
* @param {String} requestingParticipantId id of the participant who is sending request (optional)
|
|
181
|
-
* @param {String} alias alias name
|
|
182
|
-
* @param {String} locusUrl url
|
|
183
|
-
* @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}
|
|
184
|
-
*/
|
|
185
|
-
MembersUtil.generateEditDisplayNameMemberOptions = (
|
|
186
|
-
memberId,
|
|
187
|
-
requestingParticipantId,
|
|
188
|
-
alias,
|
|
189
|
-
locusUrl
|
|
190
|
-
) => ({
|
|
191
|
-
memberId,
|
|
192
|
-
requestingParticipantId,
|
|
193
|
-
alias,
|
|
194
|
-
locusUrl,
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
MembersUtil.getMuteMemberRequestParams = (options) => {
|
|
198
|
-
const property = options.isAudio === false ? 'video' : 'audio';
|
|
199
|
-
const body = {
|
|
200
|
-
[property]: {
|
|
201
|
-
muted: options.muted,
|
|
202
|
-
},
|
|
203
|
-
};
|
|
204
|
-
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
|
|
205
|
-
|
|
206
|
-
return {
|
|
207
|
-
method: HTTP_VERBS.PATCH,
|
|
208
|
-
uri,
|
|
209
|
-
body,
|
|
210
|
-
};
|
|
211
|
-
};
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* @param {RoleAssignmentOptions} options
|
|
215
|
-
* @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request
|
|
216
|
-
*/
|
|
217
|
-
MembersUtil.getRoleAssignmentMemberRequestParams = (
|
|
218
|
-
options: RoleAssignmentOptions
|
|
219
|
-
): RoleAssignmentRequest => {
|
|
220
|
-
const body = {role: {roles: []}};
|
|
221
|
-
options.roles.forEach((role) => {
|
|
222
|
-
body.role.roles.push({type: role.type, hasRole: role.hasRole});
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
|
|
226
|
-
|
|
227
|
-
return {
|
|
228
|
-
method: HTTP_VERBS.PATCH,
|
|
229
|
-
uri,
|
|
230
|
-
body,
|
|
231
|
-
};
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
MembersUtil.getRaiseHandMemberRequestParams = (options) => {
|
|
235
|
-
const body = {
|
|
236
|
-
hand: {
|
|
237
|
-
raised: options.raised,
|
|
238
|
-
},
|
|
239
|
-
};
|
|
240
|
-
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
|
|
241
|
-
|
|
242
|
-
return {
|
|
243
|
-
method: HTTP_VERBS.PATCH,
|
|
244
|
-
uri,
|
|
245
|
-
body,
|
|
246
|
-
};
|
|
247
|
-
};
|
|
248
|
-
|
|
249
|
-
MembersUtil.getLowerAllHandsMemberRequestParams = (options) => {
|
|
250
|
-
const body = {
|
|
251
|
-
hand: {
|
|
252
|
-
raised: false,
|
|
253
|
-
},
|
|
254
|
-
requestingParticipantId: options.requestingParticipantId,
|
|
255
|
-
};
|
|
256
|
-
const uri = `${options.locusUrl}/${CONTROLS}`;
|
|
257
|
-
|
|
258
|
-
return {
|
|
259
|
-
method: HTTP_VERBS.PATCH,
|
|
260
|
-
uri,
|
|
261
|
-
body,
|
|
262
|
-
};
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}
|
|
267
|
-
* @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request
|
|
268
|
-
*/
|
|
269
|
-
MembersUtil.editDisplayNameMemberRequestParams = (options) => {
|
|
270
|
-
const body = {
|
|
271
|
-
aliasValue: options.alias,
|
|
272
|
-
requestingParticipantId: options.requestingParticipantId,
|
|
273
|
-
};
|
|
274
|
-
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${ALIAS}`;
|
|
275
|
-
|
|
276
|
-
return {
|
|
277
|
-
method: HTTP_VERBS.POST,
|
|
278
|
-
uri,
|
|
279
|
-
body,
|
|
280
|
-
};
|
|
281
|
-
};
|
|
282
|
-
|
|
283
|
-
MembersUtil.getTransferHostToMemberRequestParams = (options) => {
|
|
284
|
-
const body = {
|
|
285
|
-
role: {
|
|
286
|
-
moderator: options.moderator,
|
|
287
|
-
},
|
|
288
|
-
};
|
|
289
|
-
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
|
|
290
|
-
|
|
291
|
-
return {
|
|
292
|
-
method: HTTP_VERBS.PATCH,
|
|
293
|
-
uri,
|
|
294
|
-
body,
|
|
295
|
-
};
|
|
296
|
-
};
|
|
297
|
-
|
|
298
|
-
MembersUtil.genderateSendDTMFOptions = (url, tones, memberId, locusUrl) => ({
|
|
299
|
-
url,
|
|
300
|
-
tones,
|
|
301
|
-
memberId,
|
|
302
|
-
locusUrl,
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
MembersUtil.generateSendDTMFRequestParams = ({url, tones, memberId, locusUrl}) => {
|
|
306
|
-
const body = {
|
|
307
|
-
device: {
|
|
308
|
-
url,
|
|
309
|
-
},
|
|
310
|
-
memberId,
|
|
311
|
-
dtmf: {
|
|
312
|
-
correlationId: uuid.v4(),
|
|
313
|
-
tones,
|
|
314
|
-
direction: 'transmit',
|
|
315
|
-
},
|
|
316
|
-
};
|
|
317
|
-
const uri = `${locusUrl}/${PARTICIPANT}/${memberId}/${SEND_DTMF_ENDPOINT}`;
|
|
318
|
-
|
|
319
|
-
return {
|
|
320
|
-
method: HTTP_VERBS.POST,
|
|
321
|
-
uri,
|
|
322
|
-
body,
|
|
323
|
-
};
|
|
324
|
-
};
|
|
325
|
-
|
|
326
|
-
MembersUtil.cancelPhoneInviteOptions = (invitee, locusUrl) => ({
|
|
327
|
-
invitee,
|
|
328
|
-
locusUrl,
|
|
329
|
-
});
|
|
330
|
-
|
|
331
|
-
MembersUtil.generateCancelInviteRequestParams = (options) => {
|
|
332
|
-
const body = {
|
|
333
|
-
actionType: _REMOVE_,
|
|
17
|
+
const MembersUtil = {
|
|
18
|
+
/**
|
|
19
|
+
* @param {Object} invitee with emailAddress, email or phoneNumber
|
|
20
|
+
* @param {String} locusUrl
|
|
21
|
+
* @param {Boolean} alertIfActive
|
|
22
|
+
* @returns {Object} the format object
|
|
23
|
+
*/
|
|
24
|
+
generateAddMemberOptions: (invitee: object, locusUrl: string, alertIfActive: boolean) => ({
|
|
25
|
+
invitee,
|
|
26
|
+
locusUrl,
|
|
27
|
+
alertIfActive,
|
|
28
|
+
}),
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @param {Array} memberIds
|
|
32
|
+
* @param {String} locusUrl
|
|
33
|
+
* @returns {Object} the format object
|
|
34
|
+
*/
|
|
35
|
+
generateAdmitMemberOptions: (memberIds: Array<any>, locusUrl: string) => ({
|
|
36
|
+
locusUrl,
|
|
37
|
+
memberIds,
|
|
38
|
+
}),
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}
|
|
42
|
+
* @returns {Object} with {invitees: [{address}], alertIfActive}
|
|
43
|
+
*/
|
|
44
|
+
getAddMemberBody: (options: any) => ({
|
|
334
45
|
invitees: [
|
|
335
46
|
{
|
|
336
|
-
address:
|
|
47
|
+
address:
|
|
48
|
+
options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,
|
|
337
49
|
},
|
|
338
50
|
],
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
51
|
+
alertIfActive: options.alertIfActive,
|
|
52
|
+
}),
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @param {Object} options with {memberIds, authorizingLocusUrl}
|
|
56
|
+
* @returns {Object} admit with {memberIds}
|
|
57
|
+
*/
|
|
58
|
+
getAdmitMemberRequestBody: (options: any) => {
|
|
59
|
+
const {memberIds, sessionLocusUrls} = options;
|
|
60
|
+
const body: any = {admit: {participantIds: memberIds}};
|
|
61
|
+
if (sessionLocusUrls) {
|
|
62
|
+
const {authorizingLocusUrl} = sessionLocusUrls;
|
|
63
|
+
|
|
64
|
+
return {authorizingLocusUrl, ...body};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return body;
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}
|
|
72
|
+
* @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request
|
|
73
|
+
* if a host/cohost is in a breakout session, the locus url should be the main session locus url
|
|
74
|
+
*/
|
|
75
|
+
getAdmitMemberRequestParams: (format: any) => {
|
|
76
|
+
const body = MembersUtil.getAdmitMemberRequestBody(format);
|
|
77
|
+
const {locusUrl, sessionLocusUrls} = format;
|
|
78
|
+
const baseUrl = sessionLocusUrls?.mainLocusUrl || locusUrl;
|
|
79
|
+
const uri = `${baseUrl}/${CONTROLS}`;
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
method: HTTP_VERBS.PUT,
|
|
83
|
+
uri,
|
|
84
|
+
body,
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}
|
|
90
|
+
* @returns {Object} the request parameters (method, uri, body) needed to make a addMember request
|
|
91
|
+
*/
|
|
92
|
+
getAddMemberRequestParams: (format: any) => {
|
|
93
|
+
const body = MembersUtil.getAddMemberBody(format);
|
|
94
|
+
const requestParams = {
|
|
95
|
+
method: HTTP_VERBS.PUT,
|
|
96
|
+
uri: format.locusUrl,
|
|
97
|
+
body,
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
return requestParams;
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
isInvalidInvitee: (invitee) => {
|
|
104
|
+
if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (invitee.phoneNumber) {
|
|
109
|
+
return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return !VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress);
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
getRemoveMemberRequestParams: (options) => {
|
|
116
|
+
const body = {
|
|
117
|
+
reason: options.reason,
|
|
118
|
+
};
|
|
119
|
+
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${LEAVE}`;
|
|
120
|
+
|
|
121
|
+
return {
|
|
122
|
+
method: HTTP_VERBS.PUT,
|
|
123
|
+
uri,
|
|
124
|
+
body,
|
|
125
|
+
};
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
generateTransferHostMemberOptions: (transfer, moderator, locusUrl) => ({
|
|
129
|
+
moderator,
|
|
130
|
+
locusUrl,
|
|
131
|
+
memberId: transfer,
|
|
132
|
+
}),
|
|
133
|
+
|
|
134
|
+
generateRemoveMemberOptions: (removal, locusUrl) => ({
|
|
135
|
+
reason: _FORCED_,
|
|
136
|
+
memberId: removal,
|
|
137
|
+
locusUrl,
|
|
138
|
+
}),
|
|
139
|
+
|
|
140
|
+
generateMuteMemberOptions: (memberId, status, locusUrl, isAudio) => ({
|
|
141
|
+
memberId,
|
|
142
|
+
muted: status,
|
|
143
|
+
locusUrl,
|
|
144
|
+
isAudio,
|
|
145
|
+
}),
|
|
146
|
+
|
|
147
|
+
generateRaiseHandMemberOptions: (memberId, status, locusUrl) => ({
|
|
148
|
+
memberId,
|
|
149
|
+
raised: status,
|
|
150
|
+
locusUrl,
|
|
151
|
+
}),
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @param {String} memberId
|
|
155
|
+
* @param {[ServerRoleShape]} roles
|
|
156
|
+
* @param {String} locusUrl
|
|
157
|
+
* @returns {RoleAssignmentOptions}
|
|
158
|
+
*/
|
|
159
|
+
generateRoleAssignmentMemberOptions: (
|
|
160
|
+
memberId: string,
|
|
161
|
+
roles: Array<ServerRoleShape>,
|
|
162
|
+
locusUrl: string
|
|
163
|
+
): RoleAssignmentOptions => ({
|
|
164
|
+
memberId,
|
|
165
|
+
roles,
|
|
166
|
+
locusUrl,
|
|
167
|
+
}),
|
|
168
|
+
|
|
169
|
+
generateLowerAllHandsMemberOptions: (requestingParticipantId, locusUrl) => ({
|
|
170
|
+
requestingParticipantId,
|
|
171
|
+
locusUrl,
|
|
172
|
+
}),
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* @param {String} memberId id of the participant who is receiving request
|
|
176
|
+
* @param {String} requestingParticipantId id of the participant who is sending request (optional)
|
|
177
|
+
* @param {String} alias alias name
|
|
178
|
+
* @param {String} locusUrl url
|
|
179
|
+
* @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}
|
|
180
|
+
*/
|
|
181
|
+
generateEditDisplayNameMemberOptions: (memberId, requestingParticipantId, alias, locusUrl) => ({
|
|
182
|
+
memberId,
|
|
183
|
+
requestingParticipantId,
|
|
184
|
+
alias,
|
|
185
|
+
locusUrl,
|
|
186
|
+
}),
|
|
187
|
+
|
|
188
|
+
getMuteMemberRequestParams: (options) => {
|
|
189
|
+
const property = options.isAudio === false ? 'video' : 'audio';
|
|
190
|
+
const body = {
|
|
191
|
+
[property]: {
|
|
192
|
+
muted: options.muted,
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
|
|
196
|
+
|
|
197
|
+
return {
|
|
198
|
+
method: HTTP_VERBS.PATCH,
|
|
199
|
+
uri,
|
|
200
|
+
body,
|
|
201
|
+
};
|
|
202
|
+
},
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* @param {RoleAssignmentOptions} options
|
|
206
|
+
* @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request
|
|
207
|
+
*/
|
|
208
|
+
getRoleAssignmentMemberRequestParams: (options: RoleAssignmentOptions): RoleAssignmentRequest => {
|
|
209
|
+
const body = {role: {roles: []}};
|
|
210
|
+
options.roles.forEach((role) => {
|
|
211
|
+
body.role.roles.push({type: role.type, hasRole: role.hasRole});
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
|
|
215
|
+
|
|
216
|
+
return {
|
|
217
|
+
method: HTTP_VERBS.PATCH,
|
|
218
|
+
uri,
|
|
219
|
+
body,
|
|
220
|
+
};
|
|
221
|
+
},
|
|
222
|
+
|
|
223
|
+
getRaiseHandMemberRequestParams: (options) => {
|
|
224
|
+
const body = {
|
|
225
|
+
hand: {
|
|
226
|
+
raised: options.raised,
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
|
|
230
|
+
|
|
231
|
+
return {
|
|
232
|
+
method: HTTP_VERBS.PATCH,
|
|
233
|
+
uri,
|
|
234
|
+
body,
|
|
235
|
+
};
|
|
236
|
+
},
|
|
237
|
+
|
|
238
|
+
getLowerAllHandsMemberRequestParams: (options) => {
|
|
239
|
+
const body = {
|
|
240
|
+
hand: {
|
|
241
|
+
raised: false,
|
|
242
|
+
},
|
|
243
|
+
requestingParticipantId: options.requestingParticipantId,
|
|
244
|
+
};
|
|
245
|
+
const uri = `${options.locusUrl}/${CONTROLS}`;
|
|
246
|
+
|
|
247
|
+
return {
|
|
248
|
+
method: HTTP_VERBS.PATCH,
|
|
249
|
+
uri,
|
|
250
|
+
body,
|
|
251
|
+
};
|
|
252
|
+
},
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}
|
|
256
|
+
* @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request
|
|
257
|
+
*/
|
|
258
|
+
editDisplayNameMemberRequestParams: (options) => {
|
|
259
|
+
const body = {
|
|
260
|
+
aliasValue: options.alias,
|
|
261
|
+
requestingParticipantId: options.requestingParticipantId,
|
|
262
|
+
};
|
|
263
|
+
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${ALIAS}`;
|
|
264
|
+
|
|
265
|
+
return {
|
|
266
|
+
method: HTTP_VERBS.POST,
|
|
267
|
+
uri,
|
|
268
|
+
body,
|
|
269
|
+
};
|
|
270
|
+
},
|
|
271
|
+
|
|
272
|
+
getTransferHostToMemberRequestParams: (options) => {
|
|
273
|
+
const body = {
|
|
274
|
+
role: {
|
|
275
|
+
moderator: options.moderator,
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
|
|
279
|
+
|
|
280
|
+
return {
|
|
281
|
+
method: HTTP_VERBS.PATCH,
|
|
282
|
+
uri,
|
|
283
|
+
body,
|
|
284
|
+
};
|
|
285
|
+
},
|
|
286
|
+
|
|
287
|
+
genderateSendDTMFOptions: (url, tones, memberId, locusUrl) => ({
|
|
288
|
+
url,
|
|
289
|
+
tones,
|
|
290
|
+
memberId,
|
|
291
|
+
locusUrl,
|
|
292
|
+
}),
|
|
293
|
+
|
|
294
|
+
generateSendDTMFRequestParams: ({url, tones, memberId, locusUrl}) => {
|
|
295
|
+
const body = {
|
|
296
|
+
device: {
|
|
297
|
+
url,
|
|
298
|
+
},
|
|
299
|
+
memberId,
|
|
300
|
+
dtmf: {
|
|
301
|
+
correlationId: uuid.v4(),
|
|
302
|
+
tones,
|
|
303
|
+
direction: 'transmit',
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
const uri = `${locusUrl}/${PARTICIPANT}/${memberId}/${SEND_DTMF_ENDPOINT}`;
|
|
307
|
+
|
|
308
|
+
return {
|
|
309
|
+
method: HTTP_VERBS.POST,
|
|
310
|
+
uri,
|
|
311
|
+
body,
|
|
312
|
+
};
|
|
313
|
+
},
|
|
314
|
+
|
|
315
|
+
cancelPhoneInviteOptions: (invitee, locusUrl) => ({
|
|
316
|
+
invitee,
|
|
317
|
+
locusUrl,
|
|
318
|
+
}),
|
|
319
|
+
|
|
320
|
+
generateCancelInviteRequestParams: (options) => {
|
|
321
|
+
const body = {
|
|
322
|
+
actionType: _REMOVE_,
|
|
323
|
+
invitees: [
|
|
324
|
+
{
|
|
325
|
+
address: options.invitee.phoneNumber,
|
|
326
|
+
},
|
|
327
|
+
],
|
|
328
|
+
};
|
|
329
|
+
const requestParams = {
|
|
330
|
+
method: HTTP_VERBS.PUT,
|
|
331
|
+
uri: options.locusUrl,
|
|
332
|
+
body,
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
return requestParams;
|
|
336
|
+
},
|
|
347
337
|
};
|
|
348
338
|
|
|
349
339
|
export default MembersUtil;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import {assert, expect} from '@webex/test-helper-chai';
|
|
2
2
|
import Breakout from '@webex/plugin-meetings/src/breakouts/breakout';
|
|
3
3
|
import Breakouts from '@webex/plugin-meetings/src/breakouts';
|
|
4
|
-
import Members from '@webex/plugin-meetings/src/members';
|
|
5
4
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
6
|
-
import Metrics from '@webex/plugin-meetings/src/metrics';
|
|
7
5
|
import sinon from 'sinon';
|
|
8
|
-
import {eventType} from '../../../../src/metrics/config';
|
|
9
6
|
import uuid from 'uuid';
|
|
10
7
|
import breakoutEvent from "../../../../src/breakouts/events";
|
|
11
|
-
import
|
|
8
|
+
import BreakoutRequest from '../../../../src/breakouts/request';
|
|
9
|
+
import Members from '../../../../src/members';
|
|
10
|
+
|
|
12
11
|
describe('plugin-meetings', () => {
|
|
13
12
|
describe('breakout', () => {
|
|
14
13
|
let webex;
|
|
15
14
|
let breakout;
|
|
16
15
|
let breakouts;
|
|
16
|
+
let meeting;
|
|
17
17
|
|
|
18
18
|
beforeEach(() => {
|
|
19
19
|
// @ts-ignore
|
|
@@ -34,18 +34,38 @@ describe('plugin-meetings', () => {
|
|
|
34
34
|
webex.request = sinon.stub().returns(Promise.resolve('REQUEST_RETURN_VALUE'));
|
|
35
35
|
webex.meetings = {};
|
|
36
36
|
webex.meetings.getMeetingByType = sinon.stub();
|
|
37
|
-
|
|
37
|
+
sinon.stub(uuid, 'v4').returns('breakoutMoveId');
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
+
afterEach(() => {
|
|
41
|
+
// @ts-ignore
|
|
42
|
+
uuid.v4.restore();
|
|
43
|
+
})
|
|
44
|
+
|
|
40
45
|
describe('initialize', () => {
|
|
41
46
|
it('creates the object correctly', () => {
|
|
47
|
+
assert.instanceOf(breakout.breakoutRequest, BreakoutRequest);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe('#initMembers', () => {
|
|
52
|
+
it('creates the Members instance for the breakout', () => {
|
|
53
|
+
assert.equal(breakout.members, undefined);
|
|
54
|
+
|
|
55
|
+
breakout.webex.meetings = {
|
|
56
|
+
getMeetingByType: sinon.stub().returns({
|
|
57
|
+
id: 'meeting-id',
|
|
58
|
+
}),
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
breakout.initMembers();
|
|
62
|
+
|
|
42
63
|
assert.instanceOf(breakout.members, Members);
|
|
43
64
|
});
|
|
44
65
|
});
|
|
45
66
|
|
|
46
67
|
describe('#join', () => {
|
|
47
68
|
it('makes the request as expected', async () => {
|
|
48
|
-
uuid.v4 = sinon.stub().returns('breakoutMoveId');
|
|
49
69
|
const result = await breakout.join();
|
|
50
70
|
assert.calledOnceWithExactly(webex.request, {
|
|
51
71
|
method: 'POST',
|
|
@@ -71,7 +91,6 @@ describe('plugin-meetings', () => {
|
|
|
71
91
|
|
|
72
92
|
let onBreakoutMoveRequestStub = sinon.stub(breakoutEvent, 'onBreakoutMoveRequest');
|
|
73
93
|
let onBreakoutMoveResponseStub = sinon.stub(breakoutEvent, 'onBreakoutMoveResponse');
|
|
74
|
-
uuid.v4 = sinon.stub().returns('breakoutMoveId');
|
|
75
94
|
await breakout.join();
|
|
76
95
|
assert.calledOnceWithExactly(breakoutEvent.onBreakoutMoveRequest,
|
|
77
96
|
{currentSession: breakout, meeting: {id: 'meeting-id'}, breakoutMoveId: 'breakoutMoveId'}
|