@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.
Files changed (53) 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/constants.js +1 -0
  6. package/dist/constants.js.map +1 -1
  7. package/dist/locus-info/mediaSharesUtils.js +15 -1
  8. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  9. package/dist/meeting/index.js +73 -103
  10. package/dist/meeting/index.js.map +1 -1
  11. package/dist/meeting/locusMediaRequest.js +3 -0
  12. package/dist/meeting/locusMediaRequest.js.map +1 -1
  13. package/dist/meeting/muteState.js +1 -1
  14. package/dist/meeting/muteState.js.map +1 -1
  15. package/dist/meeting/request.js +27 -20
  16. package/dist/meeting/request.js.map +1 -1
  17. package/dist/meeting/util.js +463 -426
  18. package/dist/meeting/util.js.map +1 -1
  19. package/dist/members/index.js +4 -1
  20. package/dist/members/index.js.map +1 -1
  21. package/dist/members/request.js +75 -45
  22. package/dist/members/request.js.map +1 -1
  23. package/dist/members/util.js +308 -317
  24. package/dist/members/util.js.map +1 -1
  25. package/dist/types/constants.d.ts +1 -0
  26. package/dist/types/meeting/index.d.ts +20 -21
  27. package/dist/types/meeting/locusMediaRequest.d.ts +2 -0
  28. package/dist/types/meeting/request.d.ts +16 -8
  29. package/dist/types/meeting/util.d.ts +75 -1
  30. package/dist/types/members/request.d.ts +56 -11
  31. package/dist/types/members/util.d.ts +209 -1
  32. package/package.json +19 -19
  33. package/src/breakouts/breakout.ts +26 -4
  34. package/src/breakouts/index.ts +32 -17
  35. package/src/constants.ts +1 -0
  36. package/src/locus-info/mediaSharesUtils.ts +16 -0
  37. package/src/meeting/index.ts +20 -42
  38. package/src/meeting/locusMediaRequest.ts +6 -0
  39. package/src/meeting/muteState.ts +1 -1
  40. package/src/meeting/request.ts +26 -17
  41. package/src/meeting/util.ts +446 -410
  42. package/src/members/index.ts +7 -1
  43. package/src/members/request.ts +61 -21
  44. package/src/members/util.ts +316 -326
  45. package/test/unit/spec/breakouts/breakout.ts +26 -7
  46. package/test/unit/spec/breakouts/index.ts +48 -3
  47. package/test/unit/spec/meeting/index.js +53 -33
  48. package/test/unit/spec/meeting/locusMediaRequest.ts +25 -3
  49. package/test/unit/spec/meeting/muteState.js +5 -2
  50. package/test/unit/spec/meeting/request.js +215 -42
  51. package/test/unit/spec/meeting/utils.js +151 -7
  52. package/test/unit/spec/members/index.js +22 -1
  53. 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.115",
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.115",
36
- "@webex/test-helper-chai": "3.0.0-beta.115",
37
- "@webex/test-helper-mocha": "3.0.0-beta.115",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.115",
39
- "@webex/test-helper-retry": "3.0.0-beta.115",
40
- "@webex/test-helper-test-users": "3.0.0-beta.115",
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.115",
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.115",
52
- "@webex/internal-plugin-device": "3.0.0-beta.115",
53
- "@webex/internal-plugin-llm": "3.0.0-beta.115",
54
- "@webex/internal-plugin-mercury": "3.0.0-beta.115",
55
- "@webex/internal-plugin-metrics": "3.0.0-beta.115",
56
- "@webex/internal-plugin-support": "3.0.0-beta.115",
57
- "@webex/internal-plugin-user": "3.0.0-beta.115",
58
- "@webex/media-helpers": "3.0.0-beta.115",
59
- "@webex/plugin-people": "3.0.0-beta.115",
60
- "@webex/plugin-rooms": "3.0.0-beta.115",
61
- "@webex/webex-core": "3.0.0-beta.115",
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();
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
@@ -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}
@@ -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
- private setLocus(
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
@@ -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;