@webex/plugin-meetings 3.0.0-beta.116 → 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.
Files changed (46) hide show
  1. package/dist/breakouts/breakout.js +23 -6
  2. package/dist/breakouts/breakout.js.map +1 -1
  3. package/dist/breakouts/index.js +178 -139
  4. package/dist/breakouts/index.js.map +1 -1
  5. package/dist/meeting/index.js +5 -41
  6. package/dist/meeting/index.js.map +1 -1
  7. package/dist/meeting/locusMediaRequest.js +3 -0
  8. package/dist/meeting/locusMediaRequest.js.map +1 -1
  9. package/dist/meeting/muteState.js +1 -1
  10. package/dist/meeting/muteState.js.map +1 -1
  11. package/dist/meeting/request.js +27 -20
  12. package/dist/meeting/request.js.map +1 -1
  13. package/dist/meeting/util.js +463 -426
  14. package/dist/meeting/util.js.map +1 -1
  15. package/dist/members/index.js +4 -1
  16. package/dist/members/index.js.map +1 -1
  17. package/dist/members/request.js +75 -45
  18. package/dist/members/request.js.map +1 -1
  19. package/dist/members/util.js +308 -317
  20. package/dist/members/util.js.map +1 -1
  21. package/dist/types/meeting/index.d.ts +20 -21
  22. package/dist/types/meeting/locusMediaRequest.d.ts +2 -0
  23. package/dist/types/meeting/request.d.ts +16 -8
  24. package/dist/types/meeting/util.d.ts +75 -1
  25. package/dist/types/members/request.d.ts +56 -11
  26. package/dist/types/members/util.d.ts +209 -1
  27. package/package.json +19 -19
  28. package/src/breakouts/breakout.ts +26 -4
  29. package/src/breakouts/index.ts +32 -17
  30. package/src/meeting/index.ts +8 -42
  31. package/src/meeting/locusMediaRequest.ts +6 -0
  32. package/src/meeting/muteState.ts +1 -1
  33. package/src/meeting/request.ts +26 -17
  34. package/src/meeting/util.ts +446 -410
  35. package/src/members/index.ts +7 -1
  36. package/src/members/request.ts +61 -21
  37. package/src/members/util.ts +316 -326
  38. package/test/unit/spec/breakouts/breakout.ts +26 -7
  39. package/test/unit/spec/breakouts/index.ts +48 -3
  40. package/test/unit/spec/meeting/index.js +27 -30
  41. package/test/unit/spec/meeting/locusMediaRequest.ts +25 -3
  42. package/test/unit/spec/meeting/muteState.js +5 -2
  43. package/test/unit/spec/meeting/request.js +215 -42
  44. package/test/unit/spec/meeting/utils.js +151 -7
  45. package/test/unit/spec/members/index.js +22 -1
  46. package/test/unit/spec/members/request.js +167 -35
@@ -1,2 +1,210 @@
1
- declare const MembersUtil: any;
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.116",
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.116",
36
- "@webex/test-helper-chai": "3.0.0-beta.116",
37
- "@webex/test-helper-mocha": "3.0.0-beta.116",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.116",
39
- "@webex/test-helper-retry": "3.0.0-beta.116",
40
- "@webex/test-helper-test-users": "3.0.0-beta.116",
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.116",
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.116",
52
- "@webex/internal-plugin-device": "3.0.0-beta.116",
53
- "@webex/internal-plugin-llm": "3.0.0-beta.116",
54
- "@webex/internal-plugin-mercury": "3.0.0-beta.116",
55
- "@webex/internal-plugin-metrics": "3.0.0-beta.116",
56
- "@webex/internal-plugin-support": "3.0.0-beta.116",
57
- "@webex/internal-plugin-user": "3.0.0-beta.116",
58
- "@webex/media-helpers": "3.0.0-beta.116",
59
- "@webex/plugin-people": "3.0.0-beta.116",
60
- "@webex/plugin-rooms": "3.0.0-beta.116",
61
- "@webex/webex-core": "3.0.0-beta.116",
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
- * Parses the participants from the locus object
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
@@ -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 breakInfo = await this.webex
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
- if (breakInfo.body?.groups) {
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 Promise.resolve(breakInfo);
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 breakInfo = await this.webex
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
- if (breakInfo.body?.groups) {
512
- this.set('manageGroups', breakInfo.body.groups);
513
- }
520
+ this._setManageGroups(breakoutInfo);
514
521
  this.shouldFetchPreassignments = false;
515
522
 
516
- return Promise.resolve(breakInfo);
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
- return this.request({
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
- return this.request({
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
- if (breakout.body?.groups) {
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();
@@ -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({}, options);
894
+ this.meetingRequest = new MeetingRequest(
895
+ {
896
+ meeting: this,
897
+ },
898
+ options
899
+ );
894
900
  /**
895
901
  * @instance
896
902
  * @type {Array}
@@ -3240,35 +3246,6 @@ export default class Meeting extends StatelessWebexPlugin {
3240
3246
  }
3241
3247
  }
3242
3248
 
3243
- /**
3244
- * Sets the first locus info on the class instance
3245
- * @param {Object} locus
3246
- * @param {String} locus.url
3247
- * @param {Array} locus.participants
3248
- * @param {Object} locus.self
3249
- * @returns {undefined}
3250
- * @private
3251
- * @memberof Meeting
3252
- */
3253
- private parseLocus(locus: {url: string; participants: Array<any>; self: object}) {
3254
- if (locus) {
3255
- this.locusUrl = locus.url;
3256
- // TODO: move this to parse participants module
3257
- this.setLocus(locus);
3258
-
3259
- // check if we can extract this info from partner
3260
- // Parsing of locus object must be finished at this state
3261
- if (locus.participants && locus.self) {
3262
- this.partner = MeetingUtil.getLocusPartner(locus.participants, locus.self);
3263
- }
3264
-
3265
- // For webex meeting the sipUrl gets updated in info parser
3266
- if (!this.sipUri && this.partner && this.type === _CALL_) {
3267
- this.setSipUri(this.partner.person.sipUrl || this.partner.person.id);
3268
- }
3269
- }
3270
- }
3271
-
3272
3249
  /**
3273
3250
  * Sets the sip uri on the class instance
3274
3251
  * uses meeting info as precedence
@@ -3295,7 +3272,7 @@ export default class Meeting extends StatelessWebexPlugin {
3295
3272
  * @private
3296
3273
  * @memberof Meeting
3297
3274
  */
3298
- private setLocus(
3275
+ setLocus(
3299
3276
  locus:
3300
3277
  | {
3301
3278
  mediaConnections: Array<any>;
@@ -4665,9 +4642,6 @@ export default class Meeting extends StatelessWebexPlugin {
4665
4642
  locusUrl,
4666
4643
  clientUrl: this.deviceUrl,
4667
4644
  })
4668
- .then((res) => {
4669
- this.locusInfo.onFullLocus(res.body.locus);
4670
- })
4671
4645
  .catch((error) => {
4672
4646
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADD_DIAL_IN_FAILURE, {
4673
4647
  correlation_id: this.correlationId,
@@ -4707,9 +4681,6 @@ export default class Meeting extends StatelessWebexPlugin {
4707
4681
  locusUrl,
4708
4682
  clientUrl: this.deviceUrl,
4709
4683
  })
4710
- .then((res) => {
4711
- this.locusInfo.onFullLocus(res.body.locus);
4712
- })
4713
4684
  .catch((error) => {
4714
4685
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADD_DIAL_OUT_FAILURE, {
4715
4686
  correlation_id: this.correlationId,
@@ -6843,11 +6814,6 @@ export default class Meeting extends StatelessWebexPlugin {
6843
6814
  main: layoutInfo.main,
6844
6815
  content: layoutInfo.content,
6845
6816
  })
6846
- .then((response) => {
6847
- if (response && response.body && response.body.locus) {
6848
- this.locusInfo.onFullLocus(response.body.locus);
6849
- }
6850
- })
6851
6817
  .catch((error) => {
6852
6818
  LoggerProxy.logger.error('Meeting:index#changeVideoLayout --> Error ', error);
6853
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
@@ -343,7 +343,7 @@ export class MuteState {
343
343
  this.state.server.localMute = this.type === AUDIO ? audioMuted : videoMuted;
344
344
 
345
345
  if (locus) {
346
- meeting.locusInfo.onFullLocus(locus);
346
+ meeting.locusInfo.onDeltaLocus(locus);
347
347
  }
348
348
 
349
349
  return locus;