@webex/plugin-meetings 3.0.0-beta.350 → 3.0.0-beta.351

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.
@@ -441,6 +441,8 @@ export declare const LOCUS: {
441
441
  INACTIVE: string;
442
442
  ENDED: string;
443
443
  INITIALIZING: string;
444
+ ACTIVE: string;
445
+ TERMINATING: string;
444
446
  };
445
447
  SEQUENCE: {
446
448
  UN_DEF: string;
@@ -521,7 +523,6 @@ export declare const LOCUSINFO: {
521
523
  CONTROLS_MEETING_CONTAINER_UPDATED: string;
522
524
  CONTROLS_MEETING_INTERPRETATION_UPDATED: string;
523
525
  CONTROLS_ENTRY_EXIT_TONE_UPDATED: string;
524
- CONTROLS_JOIN_BREAKOUT_FROM_MAIN: string;
525
526
  CONTROLS_MUTE_ON_ENTRY_CHANGED: string;
526
527
  CONTROLS_SHARE_CONTROL_CHANGED: string;
527
528
  CONTROLS_DISALLOW_UNMUTE_CHANGED: string;
@@ -292,7 +292,7 @@ export default class LocusInfo extends EventsScope {
292
292
  updateLocusCache(locus: any): void;
293
293
  /**
294
294
  * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
295
- * if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
295
+ * if join breakout from main session, main session is not active for the attendee and remove main session locus cache
296
296
  * @param {Object} newLocus
297
297
  * @returns {Object}
298
298
  * @memberof LocusInfo
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
62
62
  updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
63
63
  this.set('canManageWebcast', canManageWebcast);
64
64
  },
65
- version: "3.0.0-beta.350"
65
+ version: "3.0.0-beta.351"
66
66
  });
67
67
  var _default = Webinar;
68
68
  exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "3.0.0-beta.350",
3
+ "version": "3.0.0-beta.351",
4
4
  "description": "",
5
5
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
6
6
  "contributors": [
@@ -33,12 +33,12 @@
33
33
  },
34
34
  "devDependencies": {
35
35
  "@peculiar/webcrypto": "^1.4.3",
36
- "@webex/plugin-meetings": "3.0.0-beta.350",
37
- "@webex/test-helper-chai": "3.0.0-beta.350",
38
- "@webex/test-helper-mocha": "3.0.0-beta.350",
39
- "@webex/test-helper-mock-webex": "3.0.0-beta.350",
40
- "@webex/test-helper-retry": "3.0.0-beta.350",
41
- "@webex/test-helper-test-users": "3.0.0-beta.350",
36
+ "@webex/plugin-meetings": "3.0.0-beta.351",
37
+ "@webex/test-helper-chai": "3.0.0-beta.351",
38
+ "@webex/test-helper-mocha": "3.0.0-beta.351",
39
+ "@webex/test-helper-mock-webex": "3.0.0-beta.351",
40
+ "@webex/test-helper-retry": "3.0.0-beta.351",
41
+ "@webex/test-helper-test-users": "3.0.0-beta.351",
42
42
  "chai": "^4.3.4",
43
43
  "chai-as-promised": "^7.1.1",
44
44
  "jsdom-global": "3.0.2",
@@ -47,19 +47,19 @@
47
47
  "typescript": "^4.7.4"
48
48
  },
49
49
  "dependencies": {
50
- "@webex/common": "3.0.0-beta.350",
50
+ "@webex/common": "3.0.0-beta.351",
51
51
  "@webex/internal-media-core": "2.2.6",
52
- "@webex/internal-plugin-conversation": "3.0.0-beta.350",
53
- "@webex/internal-plugin-device": "3.0.0-beta.350",
54
- "@webex/internal-plugin-llm": "3.0.0-beta.350",
55
- "@webex/internal-plugin-mercury": "3.0.0-beta.350",
56
- "@webex/internal-plugin-metrics": "3.0.0-beta.350",
57
- "@webex/internal-plugin-support": "3.0.0-beta.350",
58
- "@webex/internal-plugin-user": "3.0.0-beta.350",
59
- "@webex/media-helpers": "3.0.0-beta.350",
60
- "@webex/plugin-people": "3.0.0-beta.350",
61
- "@webex/plugin-rooms": "3.0.0-beta.350",
62
- "@webex/webex-core": "3.0.0-beta.350",
52
+ "@webex/internal-plugin-conversation": "3.0.0-beta.351",
53
+ "@webex/internal-plugin-device": "3.0.0-beta.351",
54
+ "@webex/internal-plugin-llm": "3.0.0-beta.351",
55
+ "@webex/internal-plugin-mercury": "3.0.0-beta.351",
56
+ "@webex/internal-plugin-metrics": "3.0.0-beta.351",
57
+ "@webex/internal-plugin-support": "3.0.0-beta.351",
58
+ "@webex/internal-plugin-user": "3.0.0-beta.351",
59
+ "@webex/media-helpers": "3.0.0-beta.351",
60
+ "@webex/plugin-people": "3.0.0-beta.351",
61
+ "@webex/plugin-rooms": "3.0.0-beta.351",
62
+ "@webex/webex-core": "3.0.0-beta.351",
63
63
  "ampersand-collection": "^2.0.2",
64
64
  "bowser": "^2.11.0",
65
65
  "btoa": "^1.2.1",
package/src/constants.ts CHANGED
@@ -580,6 +580,8 @@ export const LOCUS = {
580
580
  INACTIVE: 'INACTIVE',
581
581
  ENDED: 'ENDED',
582
582
  INITIALIZING: 'INITIALIZING',
583
+ ACTIVE: 'ACTIVE',
584
+ TERMINATING: 'TERMINATING',
583
585
  },
584
586
  SEQUENCE: {
585
587
  UN_DEF: 'undef',
@@ -663,7 +665,6 @@ export const LOCUSINFO = {
663
665
  CONTROLS_MEETING_CONTAINER_UPDATED: 'CONTROLS_MEETING_CONTAINER_UPDATED',
664
666
  CONTROLS_MEETING_INTERPRETATION_UPDATED: 'CONTROLS_MEETING_INTERPRETATION_UPDATED',
665
667
  CONTROLS_ENTRY_EXIT_TONE_UPDATED: 'CONTROLS_ENTRY_EXIT_TONE_UPDATED',
666
- CONTROLS_JOIN_BREAKOUT_FROM_MAIN: 'CONTROLS_JOIN_BREAKOUT_FROM_MAIN',
667
668
  CONTROLS_MUTE_ON_ENTRY_CHANGED: 'CONTROLS_MUTE_ON_ENTRY_CHANGED',
668
669
  CONTROLS_SHARE_CONTROL_CHANGED: 'CONTROLS_SHARE_CONTROL_CHANGED',
669
670
  CONTROLS_DISALLOW_UNMUTE_CHANGED: 'CONTROLS_DISALLOW_UNMUTE_CHANGED',
@@ -1604,7 +1604,7 @@ export default class LocusInfo extends EventsScope {
1604
1604
 
1605
1605
  /**
1606
1606
  * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
1607
- * if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
1607
+ * if join breakout from main session, main session is not active for the attendee and remove main session locus cache
1608
1608
  * @param {Object} newLocus
1609
1609
  * @returns {Object}
1610
1610
  * @memberof LocusInfo
@@ -1614,17 +1614,18 @@ export default class LocusInfo extends EventsScope {
1614
1614
  if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
1615
1615
  return cloneDeep(this.mainSessionLocusCache);
1616
1616
  }
1617
- if (switchStatus.isJoinToBreakout) {
1618
- this.emitScoped(
1619
- {
1620
- file: 'locus-info',
1621
- function: 'updateControls',
1622
- },
1623
- LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN,
1624
- {
1625
- mainLocusUrl: this.url,
1626
- }
1627
- );
1617
+ const isMainSessionDTO =
1618
+ this.mainSessionLocusCache && ControlsUtils.isMainSessionDTO(this.mainSessionLocusCache);
1619
+
1620
+ if (isMainSessionDTO) {
1621
+ const isActive =
1622
+ [LOCUS.STATE.ACTIVE, LOCUS.STATE.INITIALIZING, LOCUS.STATE.TERMINATING].includes(
1623
+ this.fullState?.state
1624
+ ) && !this.mainSessionLocusCache?.self?.removed;
1625
+
1626
+ if (!isActive) {
1627
+ this.clearMainSessionLocusCache();
1628
+ }
1628
1629
  }
1629
1630
 
1630
1631
  return newLocus;
@@ -2230,16 +2230,6 @@ export default class Meeting extends StatelessWebexPlugin {
2230
2230
  }
2231
2231
  );
2232
2232
 
2233
- this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN, ({mainLocusUrl}) => {
2234
- this.meetingRequest.getLocusStatusByUrl(mainLocusUrl).catch((error) => {
2235
- // clear main session cache when attendee join into breakout and forbidden to get locus from main locus url,
2236
- // which means main session is not active for the attendee
2237
- if (error?.statusCode === 403) {
2238
- this.locusInfo.clearMainSessionLocusCache();
2239
- }
2240
- });
2241
- });
2242
-
2243
2233
  this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, ({entryExitTone}) => {
2244
2234
  Trigger.trigger(
2245
2235
  this,
@@ -2058,7 +2058,7 @@ describe('plugin-meetings', () => {
2058
2058
  });
2059
2059
 
2060
2060
  describe('#getTheLocusToUpdate', () => {
2061
- it('return the cache locus if return to main session', () => {
2061
+ it('return the cache locus if return to main session and do not clear main session cache', () => {
2062
2062
  locusInfo.mainSessionLocusCache = {url: 'url'};
2063
2063
  locusInfo.controls = {
2064
2064
  breakout: {
@@ -2074,9 +2074,13 @@ describe('plugin-meetings', () => {
2074
2074
  };
2075
2075
 
2076
2076
  assert.deepEqual(locusInfo.getTheLocusToUpdate(newLocus), {url: 'url'});
2077
+
2078
+ locusInfo.clearMainSessionLocusCache = sinon.stub();
2079
+ locusInfo.getTheLocusToUpdate(newLocus);
2080
+ assert.notCalled(locusInfo.clearMainSessionLocusCache)
2077
2081
  });
2078
2082
 
2079
- it('return the new locus if return to main session but no cache', () => {
2083
+ it('return the new locus if return to main session but no cache and do not clear main session cache', () => {
2080
2084
  locusInfo.mainSessionLocusCache = null;
2081
2085
  locusInfo.controls = {
2082
2086
  breakout: {
@@ -2092,10 +2096,22 @@ describe('plugin-meetings', () => {
2092
2096
  };
2093
2097
 
2094
2098
  assert.deepEqual(locusInfo.getTheLocusToUpdate(newLocus), newLocus);
2099
+
2100
+ locusInfo.clearMainSessionLocusCache = sinon.stub();
2101
+ locusInfo.getTheLocusToUpdate(newLocus);
2102
+ assert.notCalled(locusInfo.clearMainSessionLocusCache)
2095
2103
  });
2096
2104
 
2097
- it('return the new locus if not return to main session', () => {
2098
- locusInfo.mainSessionLocusCache = {url: 'url'};
2105
+ it('return the new locus if not return to main session and clear main session cache', () => {
2106
+ locusInfo.mainSessionLocusCache = {
2107
+ controls: {
2108
+ breakout: {
2109
+ sessionType: 'MAIN',
2110
+ },
2111
+ },
2112
+ self: {removed: true}
2113
+ };
2114
+ locusInfo.fullState = {state: 'ACTIVE'}
2099
2115
  locusInfo.controls = {
2100
2116
  breakout: {
2101
2117
  sessionType: 'MAIN',
@@ -2109,7 +2125,39 @@ describe('plugin-meetings', () => {
2109
2125
  },
2110
2126
  };
2111
2127
 
2112
- assert.deepEqual(locusInfo.getTheLocusToUpdate(newLocus), newLocus);
2128
+ locusInfo.clearMainSessionLocusCache = sinon.stub();
2129
+ const result = locusInfo.getTheLocusToUpdate(newLocus);
2130
+ assert.calledOnce(locusInfo.clearMainSessionLocusCache)
2131
+
2132
+ assert.deepEqual(result, newLocus);
2133
+ });
2134
+
2135
+ it('do not clear main session cache when "mainSessionLocusCache?.self?.removed" is not true', () => {
2136
+ locusInfo.mainSessionLocusCache = {
2137
+ controls: {
2138
+ breakout: {
2139
+ sessionType: 'MAIN',
2140
+ },
2141
+ },
2142
+ self: {removed: undefined}
2143
+ };
2144
+ locusInfo.fullState = {state: 'ACTIVE'}
2145
+ locusInfo.controls = {
2146
+ breakout: {
2147
+ sessionType: 'MAIN',
2148
+ },
2149
+ };
2150
+ const newLocus = {
2151
+ controls: {
2152
+ breakout: {
2153
+ sessionType: 'BREAKOUT',
2154
+ },
2155
+ },
2156
+ };
2157
+
2158
+ locusInfo.clearMainSessionLocusCache = sinon.stub();
2159
+ locusInfo.getTheLocusToUpdate(newLocus);
2160
+ assert.notCalled(locusInfo.clearMainSessionLocusCache)
2113
2161
  });
2114
2162
  });
2115
2163
 
@@ -6994,41 +6994,6 @@ describe('plugin-meetings', () => {
6994
6994
  );
6995
6995
  });
6996
6996
 
6997
- it('listens to the timing that user joined into breakout', async () => {
6998
- const mainLocusUrl = 'mainLocusUrl123';
6999
-
7000
- meeting.meetingRequest.getLocusStatusByUrl = sinon.stub().returns(Promise.resolve());
7001
-
7002
- await meeting.locusInfo.emit(
7003
- {function: 'test', file: 'test'},
7004
- 'CONTROLS_JOIN_BREAKOUT_FROM_MAIN',
7005
- {mainLocusUrl}
7006
- );
7007
-
7008
- assert.calledOnceWithExactly(meeting.meetingRequest.getLocusStatusByUrl, mainLocusUrl);
7009
- const error = {statusCode: 403};
7010
- meeting.meetingRequest.getLocusStatusByUrl.rejects(error);
7011
- meeting.locusInfo.clearMainSessionLocusCache = sinon.stub();
7012
- await meeting.locusInfo.emit(
7013
- {function: 'test', file: 'test'},
7014
- 'CONTROLS_JOIN_BREAKOUT_FROM_MAIN',
7015
- {mainLocusUrl}
7016
- );
7017
-
7018
- assert.calledOnce(meeting.locusInfo.clearMainSessionLocusCache);
7019
-
7020
- const otherError = new Error('something wrong');
7021
- meeting.meetingRequest.getLocusStatusByUrl.rejects(otherError);
7022
- meeting.locusInfo.clearMainSessionLocusCache = sinon.stub();
7023
- await meeting.locusInfo.emit(
7024
- {function: 'test', file: 'test'},
7025
- 'CONTROLS_JOIN_BREAKOUT_FROM_MAIN',
7026
- {mainLocusUrl}
7027
- );
7028
-
7029
- assert.notCalled(meeting.locusInfo.clearMainSessionLocusCache);
7030
- });
7031
-
7032
6997
  it('listens to the locus interpretation update event', () => {
7033
6998
  const interpretation = {
7034
6999
  siLanguages: [{languageCode: 20, languageName: 'en'}],