@webex/plugin-meetings 3.6.0-next.17 → 3.6.0-next.19

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.
@@ -42,7 +42,8 @@ function ReachabilityRequest(webex) {
42
42
  qs: {
43
43
  JCSupport: 1,
44
44
  ipver: ipVersion
45
- }
45
+ },
46
+ timeout: _this.webex.config.meetings.reachabilityGetClusterTimeout
46
47
  });
47
48
  }, 'internal.get.cluster.time').then(function (res) {
48
49
  var _res$body = res.body,
@@ -1 +1 @@
1
- {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","ReachabilityRequest","_createClass2","default","webex","_this","_classCallCheck2","_defineProperty2","ipVersion","internal","newMetrics","callDiagnosticLatencies","measureLatency","request","method","HTTP_VERBS","GET","shouldRefreshAccessToken","api","API","CALLIOPEDISCOVERY","resource","RESOURCE","CLUSTERS","qs","JCSupport","ipver","then","res","_res$body","body","clusters","joinCookie","_keys","forEach","key","_res$body$clusterClas","_res$body$clusterClas2","isVideoMesh","clusterClasses","hybridMedia","includes","LoggerProxy","logger","log","concat","_stringify","localSDPList","POST","REACHABILITY","offers","_default","exports"],"sources":["request.ts"],"sourcesContent":["import LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, RESOURCE, API, IP_VERSION} from '../constants';\n\nexport interface ClusterNode {\n isVideoMesh: boolean;\n udp: Array<string>;\n tcp: Array<string>;\n xtls: Array<string>;\n}\n\nexport type ClusterList = {\n [key: string]: ClusterNode;\n};\n\n/**\n * @class ReachabilityRequest\n */\nclass ReachabilityRequest {\n webex: any;\n\n /**\n * Creates an instance of ReachabilityRequest.\n * @param {object} webex\n * @memberof ReachabilityRequest\n */\n constructor(webex: object) {\n this.webex = webex;\n }\n\n /**\n * Gets the cluster information\n *\n * @param {IP_VERSION} ipVersion information about current ip network we're on\n * @returns {Promise}\n */\n getClusters = (ipVersion?: IP_VERSION): Promise<{clusters: ClusterList; joinCookie: any}> =>\n this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(\n () =>\n this.webex.request({\n method: HTTP_VERBS.GET,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.CLUSTERS,\n qs: {\n JCSupport: 1,\n ipver: ipVersion,\n },\n }),\n 'internal.get.cluster.time'\n )\n .then((res) => {\n const {clusters, joinCookie} = res.body;\n\n Object.keys(clusters).forEach((key) => {\n clusters[key].isVideoMesh = !!res.body.clusterClasses?.hybridMedia?.includes(key);\n });\n\n LoggerProxy.logger.log(\n `Reachability:request#getClusters --> get clusters (ipver=${ipVersion}) successful:${JSON.stringify(\n clusters\n )}`\n );\n\n return {\n clusters,\n joinCookie,\n };\n });\n\n /**\n * gets remote SDP For Clusters\n * @param {Object} localSDPList localSDPs for the cluster\n * @returns {Object}\n */\n remoteSDPForClusters = (localSDPList: object) =>\n this.webex\n .request({\n method: HTTP_VERBS.POST,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.REACHABILITY,\n body: {offers: localSDPList},\n })\n .then((res) => {\n LoggerProxy.logger.log(\n 'Reachability:request#remoteSDPForClusters --> Remote SDPs got succcessfully'\n );\n\n return res.body;\n });\n}\n\nexport default ReachabilityRequest;\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAaA;AACA;AACA;AAFA,IAGME,mBAAmB,oBAAAC,aAAA,CAAAC,OAAA;AAGvB;AACF;AACA;AACA;AACA;AACE,SAAAF,oBAAYG,KAAa,EAAE;EAAA,IAAAC,KAAA;EAAA,IAAAC,gBAAA,CAAAH,OAAA,QAAAF,mBAAA;EAAA,IAAAM,gBAAA,CAAAJ,OAAA;EAI3B;AACF;AACA;AACA;AACA;AACA;EALE,IAAAI,gBAAA,CAAAJ,OAAA,uBAMc,UAACK,SAAsB;IAAA,OACnCH,KAAI,CAACD,KAAK,CAACK,QAAQ,CAACC,UAAU,CAACC,uBAAuB,CACnDC,cAAc,CACb;MAAA,OACEP,KAAI,CAACD,KAAK,CAACS,OAAO,CAAC;QACjBC,MAAM,EAAEC,qBAAU,CAACC,GAAG;QACtBC,wBAAwB,EAAE,KAAK;QAC/BC,GAAG,EAAEC,cAAG,CAACC,iBAAiB;QAC1BC,QAAQ,EAAEC,mBAAQ,CAACC,QAAQ;QAC3BC,EAAE,EAAE;UACFC,SAAS,EAAE,CAAC;UACZC,KAAK,EAAElB;QACT;MACF,CAAC,CAAC;IAAA,GACJ,2BACF,CAAC,CACAmB,IAAI,CAAC,UAACC,GAAG,EAAK;MACb,IAAAC,SAAA,GAA+BD,GAAG,CAACE,IAAI;QAAhCC,QAAQ,GAAAF,SAAA,CAARE,QAAQ;QAAEC,UAAU,GAAAH,SAAA,CAAVG,UAAU;MAE3B,IAAAC,KAAA,CAAA9B,OAAA,EAAY4B,QAAQ,CAAC,CAACG,OAAO,CAAC,UAACC,GAAG,EAAK;QAAA,IAAAC,qBAAA,EAAAC,sBAAA;QACrCN,QAAQ,CAACI,GAAG,CAAC,CAACG,WAAW,GAAG,CAAC,GAAAF,qBAAA,GAACR,GAAG,CAACE,IAAI,CAACS,cAAc,cAAAH,qBAAA,gBAAAC,sBAAA,GAAvBD,qBAAA,CAAyBI,WAAW,cAAAH,sBAAA,eAApCA,sBAAA,CAAsCI,QAAQ,CAACN,GAAG,CAAC;MACnF,CAAC,CAAC;MAEFO,oBAAW,CAACC,MAAM,CAACC,GAAG,6DAAAC,MAAA,CACwCrC,SAAS,mBAAAqC,MAAA,CAAgB,IAAAC,UAAA,CAAA3C,OAAA,EACnF4B,QACF,CAAC,CACH,CAAC;MAED,OAAO;QACLA,QAAQ,EAARA,QAAQ;QACRC,UAAU,EAAVA;MACF,CAAC;IACH,CAAC,CAAC;EAAA;EAEN;AACF;AACA;AACA;AACA;EAJE,IAAAzB,gBAAA,CAAAJ,OAAA,gCAKuB,UAAC4C,YAAoB;IAAA,OAC1C1C,KAAI,CAACD,KAAK,CACPS,OAAO,CAAC;MACPC,MAAM,EAAEC,qBAAU,CAACiC,IAAI;MACvB/B,wBAAwB,EAAE,KAAK;MAC/BC,GAAG,EAAEC,cAAG,CAACC,iBAAiB;MAC1BC,QAAQ,EAAEC,mBAAQ,CAAC2B,YAAY;MAC/BnB,IAAI,EAAE;QAACoB,MAAM,EAAEH;MAAY;IAC7B,CAAC,CAAC,CACDpB,IAAI,CAAC,UAACC,GAAG,EAAK;MACbc,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,6EACF,CAAC;MAED,OAAOhB,GAAG,CAACE,IAAI;IACjB,CAAC,CAAC;EAAA;EAhEJ,IAAI,CAAC1B,KAAK,GAAGA,KAAK;AACpB,CAAC;AAAA,IAAA+C,QAAA,GAAAC,OAAA,CAAAjD,OAAA,GAkEYF,mBAAmB"}
1
+ {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","ReachabilityRequest","_createClass2","default","webex","_this","_classCallCheck2","_defineProperty2","ipVersion","internal","newMetrics","callDiagnosticLatencies","measureLatency","request","method","HTTP_VERBS","GET","shouldRefreshAccessToken","api","API","CALLIOPEDISCOVERY","resource","RESOURCE","CLUSTERS","qs","JCSupport","ipver","timeout","config","meetings","reachabilityGetClusterTimeout","then","res","_res$body","body","clusters","joinCookie","_keys","forEach","key","_res$body$clusterClas","_res$body$clusterClas2","isVideoMesh","clusterClasses","hybridMedia","includes","LoggerProxy","logger","log","concat","_stringify","localSDPList","POST","REACHABILITY","offers","_default","exports"],"sources":["request.ts"],"sourcesContent":["import LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, RESOURCE, API, IP_VERSION} from '../constants';\n\nexport interface ClusterNode {\n isVideoMesh: boolean;\n udp: Array<string>;\n tcp: Array<string>;\n xtls: Array<string>;\n}\n\nexport type ClusterList = {\n [key: string]: ClusterNode;\n};\n\n/**\n * @class ReachabilityRequest\n */\nclass ReachabilityRequest {\n webex: any;\n\n /**\n * Creates an instance of ReachabilityRequest.\n * @param {object} webex\n * @memberof ReachabilityRequest\n */\n constructor(webex: object) {\n this.webex = webex;\n }\n\n /**\n * Gets the cluster information\n *\n * @param {IP_VERSION} ipVersion information about current ip network we're on\n * @returns {Promise}\n */\n getClusters = (ipVersion?: IP_VERSION): Promise<{clusters: ClusterList; joinCookie: any}> =>\n this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(\n () =>\n this.webex.request({\n method: HTTP_VERBS.GET,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.CLUSTERS,\n qs: {\n JCSupport: 1,\n ipver: ipVersion,\n },\n timeout: this.webex.config.meetings.reachabilityGetClusterTimeout,\n }),\n 'internal.get.cluster.time'\n )\n .then((res) => {\n const {clusters, joinCookie} = res.body;\n\n Object.keys(clusters).forEach((key) => {\n clusters[key].isVideoMesh = !!res.body.clusterClasses?.hybridMedia?.includes(key);\n });\n\n LoggerProxy.logger.log(\n `Reachability:request#getClusters --> get clusters (ipver=${ipVersion}) successful:${JSON.stringify(\n clusters\n )}`\n );\n\n return {\n clusters,\n joinCookie,\n };\n });\n\n /**\n * gets remote SDP For Clusters\n * @param {Object} localSDPList localSDPs for the cluster\n * @returns {Object}\n */\n remoteSDPForClusters = (localSDPList: object) =>\n this.webex\n .request({\n method: HTTP_VERBS.POST,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.REACHABILITY,\n body: {offers: localSDPList},\n })\n .then((res) => {\n LoggerProxy.logger.log(\n 'Reachability:request#remoteSDPForClusters --> Remote SDPs got succcessfully'\n );\n\n return res.body;\n });\n}\n\nexport default ReachabilityRequest;\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAaA;AACA;AACA;AAFA,IAGME,mBAAmB,oBAAAC,aAAA,CAAAC,OAAA;AAGvB;AACF;AACA;AACA;AACA;AACE,SAAAF,oBAAYG,KAAa,EAAE;EAAA,IAAAC,KAAA;EAAA,IAAAC,gBAAA,CAAAH,OAAA,QAAAF,mBAAA;EAAA,IAAAM,gBAAA,CAAAJ,OAAA;EAI3B;AACF;AACA;AACA;AACA;AACA;EALE,IAAAI,gBAAA,CAAAJ,OAAA,uBAMc,UAACK,SAAsB;IAAA,OACnCH,KAAI,CAACD,KAAK,CAACK,QAAQ,CAACC,UAAU,CAACC,uBAAuB,CACnDC,cAAc,CACb;MAAA,OACEP,KAAI,CAACD,KAAK,CAACS,OAAO,CAAC;QACjBC,MAAM,EAAEC,qBAAU,CAACC,GAAG;QACtBC,wBAAwB,EAAE,KAAK;QAC/BC,GAAG,EAAEC,cAAG,CAACC,iBAAiB;QAC1BC,QAAQ,EAAEC,mBAAQ,CAACC,QAAQ;QAC3BC,EAAE,EAAE;UACFC,SAAS,EAAE,CAAC;UACZC,KAAK,EAAElB;QACT,CAAC;QACDmB,OAAO,EAAEtB,KAAI,CAACD,KAAK,CAACwB,MAAM,CAACC,QAAQ,CAACC;MACtC,CAAC,CAAC;IAAA,GACJ,2BACF,CAAC,CACAC,IAAI,CAAC,UAACC,GAAG,EAAK;MACb,IAAAC,SAAA,GAA+BD,GAAG,CAACE,IAAI;QAAhCC,QAAQ,GAAAF,SAAA,CAARE,QAAQ;QAAEC,UAAU,GAAAH,SAAA,CAAVG,UAAU;MAE3B,IAAAC,KAAA,CAAAlC,OAAA,EAAYgC,QAAQ,CAAC,CAACG,OAAO,CAAC,UAACC,GAAG,EAAK;QAAA,IAAAC,qBAAA,EAAAC,sBAAA;QACrCN,QAAQ,CAACI,GAAG,CAAC,CAACG,WAAW,GAAG,CAAC,GAAAF,qBAAA,GAACR,GAAG,CAACE,IAAI,CAACS,cAAc,cAAAH,qBAAA,gBAAAC,sBAAA,GAAvBD,qBAAA,CAAyBI,WAAW,cAAAH,sBAAA,eAApCA,sBAAA,CAAsCI,QAAQ,CAACN,GAAG,CAAC;MACnF,CAAC,CAAC;MAEFO,oBAAW,CAACC,MAAM,CAACC,GAAG,6DAAAC,MAAA,CACwCzC,SAAS,mBAAAyC,MAAA,CAAgB,IAAAC,UAAA,CAAA/C,OAAA,EACnFgC,QACF,CAAC,CACH,CAAC;MAED,OAAO;QACLA,QAAQ,EAARA,QAAQ;QACRC,UAAU,EAAVA;MACF,CAAC;IACH,CAAC,CAAC;EAAA;EAEN;AACF;AACA;AACA;AACA;EAJE,IAAA7B,gBAAA,CAAAJ,OAAA,gCAKuB,UAACgD,YAAoB;IAAA,OAC1C9C,KAAI,CAACD,KAAK,CACPS,OAAO,CAAC;MACPC,MAAM,EAAEC,qBAAU,CAACqC,IAAI;MACvBnC,wBAAwB,EAAE,KAAK;MAC/BC,GAAG,EAAEC,cAAG,CAACC,iBAAiB;MAC1BC,QAAQ,EAAEC,mBAAQ,CAAC+B,YAAY;MAC/BnB,IAAI,EAAE;QAACoB,MAAM,EAAEH;MAAY;IAC7B,CAAC,CAAC,CACDpB,IAAI,CAAC,UAACC,GAAG,EAAK;MACbc,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,6EACF,CAAC;MAED,OAAOhB,GAAG,CAACE,IAAI;IACjB,CAAC,CAAC;EAAA;EAjEJ,IAAI,CAAC9B,KAAK,GAAGA,KAAK;AACpB,CAAC;AAAA,IAAAmD,QAAA,GAAAC,OAAA,CAAArD,OAAA,GAmEYF,mBAAmB"}
@@ -70,6 +70,7 @@ declare const _default: {
70
70
  };
71
71
  iceCandidatesGatheringTimeout: any;
72
72
  backendIpv6NativeSupport: boolean;
73
+ reachabilityGetClusterTimeout: number;
73
74
  };
74
75
  };
75
76
  export default _default;
@@ -75,7 +75,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
75
75
  isDemoted: isDemoted
76
76
  };
77
77
  },
78
- version: "3.6.0-next.17"
78
+ version: "3.6.0-next.19"
79
79
  });
80
80
  var _default = exports.default = Webinar;
81
81
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -43,7 +43,7 @@
43
43
  "@webex/eslint-config-legacy": "0.0.0",
44
44
  "@webex/jest-config-legacy": "0.0.0",
45
45
  "@webex/legacy-tools": "0.0.0",
46
- "@webex/plugin-meetings": "3.6.0-next.17",
46
+ "@webex/plugin-meetings": "3.6.0-next.19",
47
47
  "@webex/plugin-rooms": "3.6.0-next.8",
48
48
  "@webex/test-helper-chai": "3.6.0-next.4",
49
49
  "@webex/test-helper-mocha": "3.6.0-next.4",
@@ -70,7 +70,7 @@
70
70
  "@webex/internal-plugin-metrics": "3.6.0-next.4",
71
71
  "@webex/internal-plugin-support": "3.6.0-next.8",
72
72
  "@webex/internal-plugin-user": "3.6.0-next.4",
73
- "@webex/internal-plugin-voicea": "3.6.0-next.17",
73
+ "@webex/internal-plugin-voicea": "3.6.0-next.19",
74
74
  "@webex/media-helpers": "3.6.0-next.4",
75
75
  "@webex/plugin-people": "3.6.0-next.6",
76
76
  "@webex/plugin-rooms": "3.6.0-next.8",
@@ -91,5 +91,5 @@
91
91
  "//": [
92
92
  "TODO: upgrade jwt-decode when moving to node 18"
93
93
  ],
94
- "version": "3.6.0-next.17"
94
+ "version": "3.6.0-next.19"
95
95
  }
package/src/config.ts CHANGED
@@ -95,5 +95,6 @@ export default {
95
95
  // This only applies to non-multistream meetings
96
96
  iceCandidatesGatheringTimeout: undefined,
97
97
  backendIpv6NativeSupport: false,
98
+ reachabilityGetClusterTimeout: 5000,
98
99
  },
99
100
  };
@@ -6323,7 +6323,7 @@ export default class Meeting extends StatelessWebexPlugin {
6323
6323
  this.mediaProperties.webrtcMediaConnection.on(
6324
6324
  MediaConnectionEventNames.ICE_CANDIDATE,
6325
6325
  (event) => {
6326
- if (event.candidate) {
6326
+ if (event.candidate && event.candidate.candidate && event.candidate.candidate.length > 0) {
6327
6327
  this.iceCandidatesCount += 1;
6328
6328
  }
6329
6329
  }
@@ -46,6 +46,7 @@ class ReachabilityRequest {
46
46
  JCSupport: 1,
47
47
  ipver: ipVersion,
48
48
  },
49
+ timeout: this.webex.config.meetings.reachabilityGetClusterTimeout,
49
50
  }),
50
51
  'internal.get.cluster.time'
51
52
  )
@@ -90,8 +90,8 @@ import WebExMeetingsErrors from '../../../../src/common/errors/webex-meetings-er
90
90
  import ParameterError from '../../../../src/common/errors/parameter';
91
91
  import PasswordError from '../../../../src/common/errors/password-error';
92
92
  import CaptchaError from '../../../../src/common/errors/captcha-error';
93
- import PermissionError from '../../../../src/common/errors/permission';
94
- import WebinarRegistrationError from '../../../../src/common/errors/webinar-registration-error';
93
+ import PermissionError from '../../../../src/common/errors/permission';
94
+ import WebinarRegistrationError from '../../../../src/common/errors/webinar-registration-error';
95
95
  import IntentToJoinError from '../../../../src/common/errors/intent-to-join';
96
96
  import testUtils from '../../../utils/testUtils';
97
97
  import {
@@ -6290,14 +6290,22 @@ describe('plugin-meetings', () => {
6290
6290
  meeting.attrs.meetingInfoProvider = {
6291
6291
  fetchMeetingInfo: sinon
6292
6292
  .stub()
6293
- .throws(new MeetingInfoV2WebinarRegistrationError(403021, FAKE_MEETING_INFO, 'a message')),
6293
+ .throws(
6294
+ new MeetingInfoV2WebinarRegistrationError(403021, FAKE_MEETING_INFO, 'a message')
6295
+ ),
6294
6296
  };
6295
6297
 
6296
- await assert.isRejected(meeting.fetchMeetingInfo({sendCAevents: true}), WebinarRegistrationError);
6298
+ await assert.isRejected(
6299
+ meeting.fetchMeetingInfo({sendCAevents: true}),
6300
+ WebinarRegistrationError
6301
+ );
6297
6302
 
6298
6303
  assert.deepEqual(meeting.meetingInfo, FAKE_MEETING_INFO);
6299
6304
  assert.equal(meeting.meetingInfoFailureCode, 403021);
6300
- assert.equal(meeting.meetingInfoFailureReason, MEETING_INFO_FAILURE_REASON.WEBINAR_REGISTRATION);
6305
+ assert.equal(
6306
+ meeting.meetingInfoFailureReason,
6307
+ MEETING_INFO_FAILURE_REASON.WEBINAR_REGISTRATION
6308
+ );
6301
6309
  });
6302
6310
  });
6303
6311
 
@@ -7761,11 +7769,17 @@ describe('plugin-meetings', () => {
7761
7769
  });
7762
7770
 
7763
7771
  it('should collect ice candidates', () => {
7764
- eventListeners[MediaConnectionEventNames.ICE_CANDIDATE]({candidate: 'candidate'});
7772
+ eventListeners[MediaConnectionEventNames.ICE_CANDIDATE]({candidate: {candidate: 'candidate'}});
7765
7773
 
7766
7774
  assert.equal(meeting.iceCandidatesCount, 1);
7767
7775
  });
7768
7776
 
7777
+ it('should not collect empty ice candidates', () => {
7778
+ eventListeners[MediaConnectionEventNames.ICE_CANDIDATE]({candidate: {candidate: ''}});
7779
+
7780
+ assert.equal(meeting.iceCandidatesCount, 0);
7781
+ });
7782
+
7769
7783
  it('should not collect null ice candidates', () => {
7770
7784
  eventListeners[MediaConnectionEventNames.ICE_CANDIDATE]({candidate: null});
7771
7785
 
@@ -9160,7 +9174,6 @@ describe('plugin-meetings', () => {
9160
9174
  webcastInstance: {
9161
9175
  url: 'url',
9162
9176
  },
9163
-
9164
9177
  },
9165
9178
  };
9166
9179
 
@@ -9174,10 +9187,7 @@ describe('plugin-meetings', () => {
9174
9187
  newLocusResources
9175
9188
  );
9176
9189
 
9177
- assert.calledWith(
9178
- meeting.webinar.updateWebcastUrl,
9179
- newLocusResources
9180
- );
9190
+ assert.calledWith(meeting.webinar.updateWebcastUrl, newLocusResources);
9181
9191
 
9182
9192
  done();
9183
9193
  });
@@ -12335,14 +12345,10 @@ describe('plugin-meetings', () => {
12335
12345
  const testEmit = async (unmuteAllowed) => {
12336
12346
  meeting.audio = {
12337
12347
  handleServerLocalUnmuteRequired: sinon.stub(),
12338
- }
12339
- await meeting.locusInfo.emitScoped(
12340
- {},
12341
- LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,
12342
- {
12343
- unmuteAllowed,
12344
- }
12345
- );
12348
+ };
12349
+ await meeting.locusInfo.emitScoped({}, LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED, {
12350
+ unmuteAllowed,
12351
+ });
12346
12352
 
12347
12353
  assert.calledWith(
12348
12354
  TriggerProxy.trigger,
@@ -12358,7 +12364,11 @@ describe('plugin-meetings', () => {
12358
12364
  },
12359
12365
  }
12360
12366
  );
12361
- assert.calledOnceWithExactly(meeting.audio.handleServerLocalUnmuteRequired, meeting, unmuteAllowed)
12367
+ assert.calledOnceWithExactly(
12368
+ meeting.audio.handleServerLocalUnmuteRequired,
12369
+ meeting,
12370
+ unmuteAllowed
12371
+ );
12362
12372
  };
12363
12373
 
12364
12374
  [true, false].forEach((unmuteAllowed) => {
@@ -57,18 +57,23 @@ describe('plugin-meetings/reachability', () => {
57
57
  }
58
58
  }));
59
59
 
60
+ webex.config.meetings.reachabilityGetClusterTimeout = 3000;
61
+
60
62
  const res = await reachabilityRequest.getClusters(IP_VERSION.only_ipv4);
61
63
  const requestParams = webex.request.getCall(0).args[0];
62
64
 
63
- assert.equal(requestParams.method, 'GET');
64
- assert.equal(requestParams.resource, `clusters`);
65
- assert.equal(requestParams.api, 'calliopeDiscovery');
66
- assert.equal(requestParams.shouldRefreshAccessToken, false);
67
-
68
- assert.deepEqual(requestParams.qs, {
69
- JCSupport: 1,
70
- ipver: 4,
65
+ assert.deepEqual(requestParams, {
66
+ method: 'GET',
67
+ resource: `clusters`,
68
+ api: 'calliopeDiscovery',
69
+ shouldRefreshAccessToken: false,
70
+ qs: {
71
+ JCSupport: 1,
72
+ ipver: 4,
73
+ },
74
+ timeout: 3000,
71
75
  });
76
+
72
77
  assert.deepEqual(res.clusters.clusterId, {udp: "testUDP", isVideoMesh: true})
73
78
  assert.deepEqual(res.joinCookie, {anycastEntryPoint: "aws-eu-west-1"})
74
79
  assert.calledOnceWithExactly(webex.internal.newMetrics.callDiagnosticLatencies.measureLatency, sinon.match.func, 'internal.get.cluster.time');