@webex/plugin-meetings 3.7.0-web-workers-keepalive.1 → 3.7.0-wxcc.1
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 +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/join-forbidden-error.js +52 -0
- package/dist/common/errors/join-forbidden-error.js.map +1 -0
- package/dist/constants.js +22 -2
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/index.js +1 -1
- package/dist/locus-info/index.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +2 -0
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +66 -41
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +70 -19
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +1 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/index.js +102 -53
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +2 -0
- package/dist/meetings/meetings.types.js.map +1 -1
- package/dist/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/types/common/errors/join-forbidden-error.d.ts +15 -0
- package/dist/types/constants.d.ts +18 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
- package/dist/types/meetings/index.d.ts +16 -1
- package/dist/types/meetings/meetings.types.d.ts +8 -0
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/common/errors/join-forbidden-error.ts +26 -0
- package/src/constants.ts +20 -0
- package/src/locus-info/index.ts +3 -1
- package/src/meeting/in-meeting-actions.ts +4 -0
- package/src/meeting/index.ts +25 -0
- package/src/meeting-info/meeting-info-v2.ts +51 -0
- package/src/meeting-info/utilv2.ts +3 -1
- package/src/meetings/index.ts +72 -19
- package/src/meetings/meetings.types.ts +10 -0
- package/src/metrics/constants.ts +1 -0
- package/test/unit/spec/locus-info/index.js +70 -60
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
- package/test/unit/spec/meeting/index.js +42 -5
- package/test/unit/spec/meeting-info/meetinginfov2.js +37 -0
- package/test/unit/spec/meeting-info/utilv2.js +17 -0
- package/test/unit/spec/meetings/index.js +150 -13
|
@@ -37,11 +37,13 @@ import {
|
|
|
37
37
|
LOCUSINFO,
|
|
38
38
|
EVENT_TRIGGERS,
|
|
39
39
|
DESTINATION_TYPE,
|
|
40
|
+
INITIAL_REGISTRATION_STATUS,
|
|
40
41
|
} from '../../../../src/constants';
|
|
41
42
|
import CaptchaError from '@webex/plugin-meetings/src/common/errors/captcha-error';
|
|
42
43
|
import {forEach} from 'lodash';
|
|
43
44
|
import PasswordError from '@webex/plugin-meetings/src/common/errors/password-error';
|
|
44
45
|
import PermissionError from '@webex/plugin-meetings/src/common/errors/permission';
|
|
46
|
+
import JoinForbiddenError from '@webex/plugin-meetings/src/common/errors/join-forbidden-error';
|
|
45
47
|
import {NoiseReductionEffect, VirtualBackgroundEffect} from '@webex/media-helpers';
|
|
46
48
|
import NoMeetingInfoError from '../../../../src/common/errors/no-meeting-info';
|
|
47
49
|
|
|
@@ -267,6 +269,33 @@ describe('plugin-meetings', () => {
|
|
|
267
269
|
});
|
|
268
270
|
});
|
|
269
271
|
|
|
272
|
+
describe('#_setLogUploadIntervalMultiplicationFactor', () => {
|
|
273
|
+
it('should have _setLogUploadIntervalMultiplicationFactor', () => {
|
|
274
|
+
assert.equal(typeof webex.meetings._setLogUploadIntervalMultiplicationFactor, 'function');
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
describe('success', () => {
|
|
278
|
+
it('should update the config', () => {
|
|
279
|
+
const someValue = 1.23;
|
|
280
|
+
|
|
281
|
+
webex.meetings._setLogUploadIntervalMultiplicationFactor(someValue);
|
|
282
|
+
assert.equal(webex.meetings.config.logUploadIntervalMultiplicationFactor, someValue);
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
describe('failure', () => {
|
|
287
|
+
it('should not accept non-number input', () => {
|
|
288
|
+
const logUploadIntervalMultiplicationFactor = webex.meetings.config.logUploadIntervalMultiplicationFactor;
|
|
289
|
+
|
|
290
|
+
webex.meetings._setLogUploadIntervalMultiplicationFactor('test');
|
|
291
|
+
assert.equal(
|
|
292
|
+
webex.meetings.config.logUploadIntervalMultiplicationFactor,
|
|
293
|
+
logUploadIntervalMultiplicationFactor
|
|
294
|
+
);
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
|
|
270
299
|
describe('#_toggleUnifiedMeetings', () => {
|
|
271
300
|
it('should have toggleUnifiedMeetings', () => {
|
|
272
301
|
assert.equal(typeof webex.meetings._toggleUnifiedMeetings, 'function');
|
|
@@ -375,21 +404,21 @@ describe('plugin-meetings', () => {
|
|
|
375
404
|
assert.isTrue(webex.meetings.registered);
|
|
376
405
|
});
|
|
377
406
|
|
|
378
|
-
it('rejects when SDK canAuthorize is false', () => {
|
|
407
|
+
it('rejects when SDK canAuthorize is false', async () => {
|
|
379
408
|
webex.canAuthorize = false;
|
|
380
|
-
assert.isRejected(webex.meetings.register());
|
|
409
|
+
await assert.isRejected(webex.meetings.register());
|
|
381
410
|
});
|
|
382
411
|
|
|
383
|
-
it('rejects when device.register fails', () => {
|
|
412
|
+
it('rejects when device.register fails', async () => {
|
|
384
413
|
webex.canAuthorize = true;
|
|
385
414
|
webex.internal.device.register = sinon.stub().returns(Promise.reject());
|
|
386
|
-
assert.isRejected(webex.meetings.register());
|
|
415
|
+
await assert.isRejected(webex.meetings.register());
|
|
387
416
|
});
|
|
388
417
|
|
|
389
|
-
it('rejects when mercury.connect fails', () => {
|
|
418
|
+
it('rejects when mercury.connect fails', async () => {
|
|
390
419
|
webex.canAuthorize = true;
|
|
391
420
|
webex.internal.mercury.connect = sinon.stub().returns(Promise.reject());
|
|
392
|
-
assert.isRejected(webex.meetings.register());
|
|
421
|
+
await assert.isRejected(webex.meetings.register());
|
|
393
422
|
});
|
|
394
423
|
|
|
395
424
|
it('resolves immediately if already registered', async () => {
|
|
@@ -420,6 +449,100 @@ describe('plugin-meetings', () => {
|
|
|
420
449
|
includeDetails: CatalogDetails.features,
|
|
421
450
|
});
|
|
422
451
|
});
|
|
452
|
+
|
|
453
|
+
it('updates registration status as expected', async () => {
|
|
454
|
+
const clock = sinon.useFakeTimers();
|
|
455
|
+
|
|
456
|
+
const delay = (secs) => () =>
|
|
457
|
+
new Promise((resolve) => {
|
|
458
|
+
setTimeout(resolve, secs * 1000);
|
|
459
|
+
});
|
|
460
|
+
|
|
461
|
+
let i = 1;
|
|
462
|
+
sinon.stub(webex.meetings, 'fetchUserPreferredWebexSite').callsFake(delay(i++));
|
|
463
|
+
MeetingsUtil.checkH264Support.callsFake(delay(i++));
|
|
464
|
+
webex.meetings.startReachability.callsFake(delay(i++));
|
|
465
|
+
webex.internal.device.register.callsFake(delay(i++));
|
|
466
|
+
sinon.stub(webex.meetings, 'getGeoHint').callsFake(delay(i++));
|
|
467
|
+
webex.internal.mercury.connect.callsFake(delay(i++));
|
|
468
|
+
|
|
469
|
+
webex.canAuthorize = true;
|
|
470
|
+
webex.meetings.registered = false;
|
|
471
|
+
|
|
472
|
+
const registerPromise = webex.meetings.register({
|
|
473
|
+
includeDetails: CatalogDetails.features,
|
|
474
|
+
});
|
|
475
|
+
|
|
476
|
+
await clock.tick(1000);
|
|
477
|
+
await webex.meetings.fetchUserPreferredWebexSite;
|
|
478
|
+
assert.deepEqual(webex.meetings.registrationStatus, {
|
|
479
|
+
fetchWebexSite: true,
|
|
480
|
+
getGeoHint: false,
|
|
481
|
+
startReachability: false,
|
|
482
|
+
deviceRegister: false,
|
|
483
|
+
mercuryConnect: false,
|
|
484
|
+
checkH264Support: false,
|
|
485
|
+
});
|
|
486
|
+
|
|
487
|
+
await clock.tick(1000);
|
|
488
|
+
await MeetingsUtil.checkH264Support;
|
|
489
|
+
assert.deepEqual(webex.meetings.registrationStatus, {
|
|
490
|
+
fetchWebexSite: true,
|
|
491
|
+
getGeoHint: false,
|
|
492
|
+
startReachability: false,
|
|
493
|
+
deviceRegister: false,
|
|
494
|
+
mercuryConnect: false,
|
|
495
|
+
checkH264Support: true,
|
|
496
|
+
});
|
|
497
|
+
|
|
498
|
+
await clock.tick(1000);
|
|
499
|
+
await webex.meetings.startReachability;
|
|
500
|
+
assert.deepEqual(webex.meetings.registrationStatus, {
|
|
501
|
+
fetchWebexSite: true,
|
|
502
|
+
getGeoHint: false,
|
|
503
|
+
startReachability: true,
|
|
504
|
+
deviceRegister: false,
|
|
505
|
+
mercuryConnect: false,
|
|
506
|
+
checkH264Support: true,
|
|
507
|
+
});
|
|
508
|
+
|
|
509
|
+
await clock.tick(1000);
|
|
510
|
+
await webex.internal.device.register;
|
|
511
|
+
assert.deepEqual(webex.meetings.registrationStatus, {
|
|
512
|
+
fetchWebexSite: true,
|
|
513
|
+
getGeoHint: false,
|
|
514
|
+
startReachability: true,
|
|
515
|
+
deviceRegister: true,
|
|
516
|
+
mercuryConnect: false,
|
|
517
|
+
checkH264Support: true,
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
await clock.tick(1000);
|
|
521
|
+
await webex.meetings.getGeoHint;
|
|
522
|
+
assert.deepEqual(webex.meetings.registrationStatus, {
|
|
523
|
+
fetchWebexSite: true,
|
|
524
|
+
getGeoHint: true,
|
|
525
|
+
startReachability: true,
|
|
526
|
+
deviceRegister: true,
|
|
527
|
+
mercuryConnect: false,
|
|
528
|
+
checkH264Support: true,
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
await clock.tick(6000);
|
|
532
|
+
await webex.internal.mercury.connect;
|
|
533
|
+
assert.deepEqual(webex.meetings.registrationStatus, {
|
|
534
|
+
fetchWebexSite: true,
|
|
535
|
+
getGeoHint: true,
|
|
536
|
+
startReachability: true,
|
|
537
|
+
deviceRegister: true,
|
|
538
|
+
mercuryConnect: true,
|
|
539
|
+
checkH264Support: true,
|
|
540
|
+
});
|
|
541
|
+
|
|
542
|
+
await registerPromise;
|
|
543
|
+
|
|
544
|
+
clock.restore();
|
|
545
|
+
});
|
|
423
546
|
});
|
|
424
547
|
|
|
425
548
|
describe('#unregister', () => {
|
|
@@ -440,27 +563,36 @@ describe('plugin-meetings', () => {
|
|
|
440
563
|
});
|
|
441
564
|
});
|
|
442
565
|
|
|
443
|
-
it('rejects when device.unregister fails', () => {
|
|
566
|
+
it('rejects when device.unregister fails', async () => {
|
|
444
567
|
webex.meetings.registered = true;
|
|
445
568
|
webex.internal.device.unregister = sinon.stub().returns(Promise.reject());
|
|
446
|
-
assert.isRejected(webex.meetings.unregister());
|
|
569
|
+
await assert.isRejected(webex.meetings.unregister());
|
|
447
570
|
});
|
|
448
571
|
|
|
449
|
-
it('rejects when mercury.disconnect fails', () => {
|
|
572
|
+
it('rejects when mercury.disconnect fails', async () => {
|
|
450
573
|
webex.meetings.registered = true;
|
|
451
574
|
webex.internal.mercury.disconnect = sinon.stub().returns(Promise.reject());
|
|
452
|
-
assert.isRejected(webex.meetings.unregister());
|
|
575
|
+
await assert.isRejected(webex.meetings.unregister());
|
|
453
576
|
});
|
|
454
577
|
|
|
455
|
-
it('resolves immediately if
|
|
578
|
+
it('resolves immediately if not registered', (done) => {
|
|
456
579
|
webex.meetings.registered = false;
|
|
457
580
|
webex.meetings.unregister().then(() => {
|
|
458
|
-
assert.notCalled(webex.internal.device.
|
|
459
|
-
assert.notCalled(webex.internal.mercury.
|
|
581
|
+
assert.notCalled(webex.internal.device.unregister);
|
|
582
|
+
assert.notCalled(webex.internal.mercury.disconnect);
|
|
460
583
|
assert.isFalse(webex.meetings.registered);
|
|
461
584
|
done();
|
|
462
585
|
});
|
|
463
586
|
});
|
|
587
|
+
|
|
588
|
+
it('resets registration status', (done) => {
|
|
589
|
+
webex.meetings.registered = true;
|
|
590
|
+
webex.meetings.registrationStatus = {foo: 'bar'};
|
|
591
|
+
webex.meetings.unregister().then(() => {
|
|
592
|
+
assert.deepEqual(webex.meetings.registrationStatus, INITIAL_REGISTRATION_STATUS);
|
|
593
|
+
done();
|
|
594
|
+
});
|
|
595
|
+
});
|
|
464
596
|
});
|
|
465
597
|
|
|
466
598
|
describe('virtual background effect', () => {
|
|
@@ -1921,6 +2053,11 @@ describe('plugin-meetings', () => {
|
|
|
1921
2053
|
debugLogMessage:
|
|
1922
2054
|
'Meetings:index#createMeeting --> Debug PermissionError: Not allowed to execute the function, some properties on server, or local client state do not allow you to complete this action. fetching /meetingInfo for creation.',
|
|
1923
2055
|
},
|
|
2056
|
+
{
|
|
2057
|
+
error: new JoinForbiddenError(),
|
|
2058
|
+
debugLogMessage:
|
|
2059
|
+
'Meetings:index#createMeeting --> Debug JoinForbiddenError: Meeting join forbidden. fetching /meetingInfo for creation.',
|
|
2060
|
+
},
|
|
1924
2061
|
{
|
|
1925
2062
|
error: new Error(),
|
|
1926
2063
|
infoLogMessage: true,
|