@webex/plugin-meetings 3.6.0 → 3.7.0-ipv6-multi-turn-urls.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/README.md +2 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/join-webinar-error.js +50 -0
- package/dist/common/errors/join-webinar-error.js.map +1 -0
- package/dist/config.js +4 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +54 -4
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +1 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +10 -3
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +12 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +28 -4
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +2 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/index.js +61 -3
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/parser.js +5 -1
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/media/index.js +29 -1
- package/dist/media/index.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +29 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +807 -540
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +2 -6
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +5 -2
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +21 -29
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +98 -61
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +80 -17
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meetings/index.js +29 -2
- package/dist/meetings/index.js.map +1 -1
- package/dist/members/index.js +3 -2
- package/dist/members/index.js.map +1 -1
- package/dist/members/util.js +13 -7
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +4 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/remoteMedia.js +34 -15
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/reachability/clusterReachability.js +12 -15
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +433 -136
- package/dist/reachability/index.js.map +1 -1
- package/dist/{rtcMetrics/constants.js → reachability/reachability.types.js} +1 -5
- package/dist/reachability/reachability.types.js.map +1 -0
- package/dist/reachability/request.js +23 -9
- package/dist/reachability/request.js.map +1 -1
- package/dist/recording-controller/enums.js +8 -4
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.js +18 -9
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +13 -9
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +5 -7
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +45 -79
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +3 -6
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/{common/errors/parameter.d.ts → types/common/errors/join-webinar-error.d.ts} +4 -5
- package/dist/types/config.d.ts +3 -0
- package/dist/types/constants.d.ts +43 -0
- package/dist/types/controls-options-manager/enums.d.ts +2 -1
- package/dist/types/controls-options-manager/index.d.ts +2 -1
- package/dist/types/controls-options-manager/types.d.ts +2 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/locus-info/index.d.ts +9 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +28 -0
- package/dist/types/meeting/index.d.ts +34 -3
- package/dist/types/meeting/locusMediaRequest.d.ts +2 -3
- package/dist/types/meeting/muteState.d.ts +2 -1
- package/dist/types/meeting/request.d.ts +2 -2
- package/dist/types/meeting/util.d.ts +2 -2
- package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
- package/dist/types/meetings/index.d.ts +13 -1
- package/dist/types/members/index.d.ts +2 -1
- package/dist/types/members/util.d.ts +5 -1
- package/dist/types/metrics/constants.d.ts +3 -0
- package/dist/types/multistream/remoteMedia.d.ts +1 -0
- package/dist/types/reachability/clusterReachability.d.ts +1 -10
- package/dist/types/reachability/index.d.ts +74 -35
- package/dist/types/reachability/reachability.types.d.ts +64 -0
- package/dist/types/reachability/request.d.ts +5 -1
- package/dist/types/recording-controller/enums.d.ts +5 -2
- package/dist/types/recording-controller/index.d.ts +1 -0
- package/dist/types/recording-controller/util.d.ts +2 -1
- package/dist/types/roap/request.d.ts +1 -13
- package/dist/webinar/index.js +382 -19
- package/dist/webinar/index.js.map +1 -1
- package/package.json +22 -22
- package/src/common/errors/join-webinar-error.ts +24 -0
- package/src/config.ts +3 -0
- package/src/constants.ts +52 -0
- package/src/controls-options-manager/enums.ts +1 -0
- package/src/controls-options-manager/index.ts +19 -2
- package/src/controls-options-manager/types.ts +2 -0
- package/src/controls-options-manager/util.ts +12 -0
- package/src/index.ts +2 -0
- package/src/locus-info/controlsUtils.ts +46 -2
- package/src/locus-info/fullState.ts +1 -0
- package/src/locus-info/index.ts +60 -0
- package/src/locus-info/parser.ts +8 -1
- package/src/media/index.ts +15 -0
- package/src/meeting/in-meeting-actions.ts +58 -0
- package/src/meeting/index.ts +268 -32
- package/src/meeting/locusMediaRequest.ts +4 -8
- package/src/meeting/muteState.ts +6 -2
- package/src/meeting/request.ts +4 -11
- package/src/meeting/util.ts +31 -6
- package/src/meeting-info/meeting-info-v2.ts +63 -0
- package/src/meetings/index.ts +74 -40
- package/src/members/index.ts +4 -2
- package/src/members/util.ts +4 -1
- package/src/metrics/constants.ts +3 -0
- package/src/multistream/remoteMedia.ts +33 -15
- package/src/reachability/clusterReachability.ts +5 -15
- package/src/reachability/index.ts +285 -77
- package/src/reachability/reachability.types.ts +85 -0
- package/src/reachability/request.ts +55 -30
- package/src/recording-controller/enums.ts +5 -2
- package/src/recording-controller/index.ts +17 -4
- package/src/recording-controller/util.ts +20 -5
- package/src/roap/index.ts +4 -5
- package/src/roap/request.ts +32 -44
- package/src/roap/turnDiscovery.ts +2 -4
- package/src/webinar/index.ts +223 -17
- package/test/unit/spec/controls-options-manager/index.js +56 -32
- package/test/unit/spec/controls-options-manager/util.js +44 -0
- package/test/unit/spec/locus-info/controlsUtils.js +80 -4
- package/test/unit/spec/locus-info/index.js +88 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +31 -1
- package/test/unit/spec/meeting/index.js +407 -82
- package/test/unit/spec/meeting/locusMediaRequest.ts +18 -11
- package/test/unit/spec/meeting/muteState.js +8 -4
- package/test/unit/spec/meeting/request.js +3 -26
- package/test/unit/spec/meeting/utils.js +71 -14
- package/test/unit/spec/meeting-info/meetinginfov2.js +42 -0
- package/test/unit/spec/meetings/index.js +41 -6
- package/test/unit/spec/members/index.js +25 -2
- package/test/unit/spec/members/request.js +37 -3
- package/test/unit/spec/members/utils.js +110 -1
- package/test/unit/spec/multistream/remoteMedia.ts +27 -9
- package/test/unit/spec/reachability/clusterReachability.ts +7 -0
- package/test/unit/spec/reachability/index.ts +265 -1
- package/test/unit/spec/reachability/request.js +56 -15
- package/test/unit/spec/recording-controller/index.js +61 -5
- package/test/unit/spec/recording-controller/util.js +39 -3
- package/test/unit/spec/roap/index.ts +1 -1
- package/test/unit/spec/roap/request.ts +51 -109
- package/test/unit/spec/roap/turnDiscovery.ts +202 -147
- package/test/unit/spec/webinar/index.ts +443 -14
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/index.d.ts +0 -117
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/common/browser-detection.d.ts +0 -9
- package/dist/common/collection.d.ts +0 -48
- package/dist/common/config.d.ts +0 -2
- package/dist/common/errors/captcha-error.d.ts +0 -15
- package/dist/common/errors/intent-to-join.d.ts +0 -16
- package/dist/common/errors/join-meeting.d.ts +0 -17
- package/dist/common/errors/media.d.ts +0 -15
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/password-error.d.ts +0 -15
- package/dist/common/errors/permission.d.ts +0 -14
- package/dist/common/errors/reclaim-host-role-error.js +0 -149
- package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
- package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/common/errors/reconnection-in-progress.js +0 -33
- package/dist/common/errors/reconnection-in-progress.js.map +0 -1
- package/dist/common/errors/reconnection.d.ts +0 -15
- package/dist/common/errors/stats.d.ts +0 -15
- package/dist/common/errors/webex-errors.d.ts +0 -93
- package/dist/common/errors/webex-meetings-error.d.ts +0 -20
- package/dist/common/events/events-scope.d.ts +0 -17
- package/dist/common/events/events.d.ts +0 -12
- package/dist/common/events/trigger-proxy.d.ts +0 -2
- package/dist/common/events/util.d.ts +0 -2
- package/dist/common/logs/logger-config.d.ts +0 -2
- package/dist/common/logs/logger-proxy.d.ts +0 -2
- package/dist/common/logs/request.d.ts +0 -36
- package/dist/common/queue.d.ts +0 -34
- package/dist/config.d.ts +0 -72
- package/dist/constants.d.ts +0 -1088
- package/dist/controls-options-manager/constants.d.ts +0 -4
- package/dist/controls-options-manager/enums.d.ts +0 -15
- package/dist/controls-options-manager/index.d.ts +0 -136
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/util.d.ts +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/locus-info/controlsUtils.d.ts +0 -2
- package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
- package/dist/locus-info/fullState.d.ts +0 -2
- package/dist/locus-info/hostUtils.d.ts +0 -2
- package/dist/locus-info/index.d.ts +0 -322
- package/dist/locus-info/infoUtils.d.ts +0 -2
- package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
- package/dist/locus-info/parser.d.ts +0 -272
- package/dist/locus-info/selfUtils.d.ts +0 -2
- package/dist/media/index.d.ts +0 -34
- package/dist/media/properties.d.ts +0 -93
- package/dist/media/util.d.ts +0 -2
- package/dist/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/mediaQualityMetrics/config.js +0 -502
- package/dist/mediaQualityMetrics/config.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/meeting/in-meeting-actions.d.ts +0 -167
- package/dist/meeting/index.d.ts +0 -1825
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/muteState.d.ts +0 -178
- package/dist/meeting/request.d.ts +0 -295
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/state.d.ts +0 -9
- package/dist/meeting/util.d.ts +0 -119
- package/dist/meeting/voicea-meeting.d.ts +0 -16
- package/dist/meeting-info/collection.d.ts +0 -20
- package/dist/meeting-info/index.d.ts +0 -69
- package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
- package/dist/meeting-info/request.d.ts +0 -22
- package/dist/meeting-info/util.d.ts +0 -2
- package/dist/meeting-info/utilv2.d.ts +0 -2
- package/dist/meetings/collection.d.ts +0 -40
- package/dist/meetings/index.d.ts +0 -390
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/request.d.ts +0 -27
- package/dist/meetings/util.d.ts +0 -18
- package/dist/member/index.d.ts +0 -160
- package/dist/member/member.types.js +0 -17
- package/dist/member/member.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/util.d.ts +0 -2
- package/dist/members/collection.d.ts +0 -29
- package/dist/members/index.d.ts +0 -353
- package/dist/members/request.d.ts +0 -114
- package/dist/members/types.d.ts +0 -25
- package/dist/members/util.d.ts +0 -215
- package/dist/metrics/config.js +0 -276
- package/dist/metrics/config.js.map +0 -1
- package/dist/metrics/constants.d.ts +0 -70
- package/dist/metrics/index.d.ts +0 -45
- package/dist/multistream/mediaRequestManager.d.ts +0 -119
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMediaGroup.d.ts +0 -49
- package/dist/multistream/remoteMediaManager.d.ts +0 -300
- package/dist/multistream/sendSlotManager.d.ts +0 -69
- package/dist/networkQualityMonitor/index.d.ts +0 -70
- package/dist/networkQualityMonitor/index.js +0 -221
- package/dist/networkQualityMonitor/index.js.map +0 -1
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -109
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/personal-meeting-room/index.d.ts +0 -47
- package/dist/personal-meeting-room/request.d.ts +0 -14
- package/dist/personal-meeting-room/util.d.ts +0 -2
- package/dist/reachability/clusterReachability.d.ts +0 -109
- package/dist/reachability/index.d.ts +0 -105
- package/dist/reachability/request.d.ts +0 -39
- package/dist/reachability/util.d.ts +0 -8
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/reactions.d.ts +0 -4
- package/dist/reactions/reactions.type.d.ts +0 -52
- package/dist/reconnection-manager/index.d.ts +0 -136
- package/dist/recording-controller/enums.d.ts +0 -7
- package/dist/recording-controller/index.d.ts +0 -207
- package/dist/recording-controller/util.d.ts +0 -14
- package/dist/roap/collection.js +0 -62
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.js +0 -275
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/index.d.ts +0 -86
- package/dist/roap/request.d.ts +0 -39
- package/dist/roap/state.js +0 -126
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/turnDiscovery.d.ts +0 -155
- package/dist/roap/util.js +0 -75
- package/dist/roap/util.js.map +0 -1
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.d.ts +0 -61
- package/dist/rtcMetrics/index.js +0 -197
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/statsAnalyzer/global.d.ts +0 -36
- package/dist/statsAnalyzer/global.js +0 -126
- package/dist/statsAnalyzer/global.js.map +0 -1
- package/dist/statsAnalyzer/index.d.ts +0 -217
- package/dist/statsAnalyzer/index.js +0 -1013
- package/dist/statsAnalyzer/index.js.map +0 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/statsAnalyzer/mqaUtil.js +0 -179
- package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
- package/dist/transcription/index.d.ts +0 -64
- package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/types/networkQualityMonitor/index.d.ts +0 -70
- package/dist/types/rtcMetrics/constants.d.ts +0 -4
- package/dist/types/rtcMetrics/index.d.ts +0 -71
- package/dist/types/statsAnalyzer/global.d.ts +0 -36
- package/dist/types/statsAnalyzer/index.d.ts +0 -217
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/index.d.ts +0 -5
|
@@ -2,6 +2,7 @@ import {assert, expect} from '@webex/test-helper-chai';
|
|
|
2
2
|
import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
|
|
3
3
|
import Webinar from '@webex/plugin-meetings/src/webinar';
|
|
4
4
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
5
|
+
import uuid from 'uuid';
|
|
5
6
|
import sinon from 'sinon';
|
|
6
7
|
|
|
7
8
|
describe('plugin-meetings', () => {
|
|
@@ -9,18 +10,28 @@ describe('plugin-meetings', () => {
|
|
|
9
10
|
|
|
10
11
|
let webex;
|
|
11
12
|
let webinar;
|
|
13
|
+
let uuidStub;
|
|
14
|
+
let getUserTokenStub;
|
|
12
15
|
|
|
13
16
|
beforeEach(() => {
|
|
14
17
|
// @ts-ignore
|
|
18
|
+
getUserTokenStub = sinon.stub().resolves('test-token');
|
|
19
|
+
uuidStub = sinon.stub(uuid,'v4').returns('test-uuid');
|
|
15
20
|
webex = new MockWebex({});
|
|
16
21
|
webex.internal.mercury.on = sinon.stub();
|
|
17
22
|
webinar = new Webinar({}, {parent: webex});
|
|
18
23
|
webinar.locusUrl = 'locusUrl';
|
|
24
|
+
webinar.webcastInstanceUrl = 'webcastInstanceUrl';
|
|
19
25
|
webex.request = sinon.stub().returns(Promise.resolve('REQUEST_RETURN_VALUE'));
|
|
20
26
|
webex.meetings = {};
|
|
27
|
+
webex.credentials.getUserToken = getUserTokenStub;
|
|
21
28
|
webex.meetings.getMeetingByType = sinon.stub();
|
|
22
29
|
});
|
|
23
30
|
|
|
31
|
+
afterEach(() => {
|
|
32
|
+
sinon.restore();
|
|
33
|
+
});
|
|
34
|
+
|
|
24
35
|
describe('#locusUrlUpdate', () => {
|
|
25
36
|
it('sets the locus url', () => {
|
|
26
37
|
webinar.locusUrlUpdate('newUrl');
|
|
@@ -29,32 +40,450 @@ describe('plugin-meetings', () => {
|
|
|
29
40
|
});
|
|
30
41
|
});
|
|
31
42
|
|
|
32
|
-
describe('#
|
|
33
|
-
it('sets the webcast url', () => {
|
|
34
|
-
webinar.
|
|
43
|
+
describe('#updateWebcastUrl', () => {
|
|
44
|
+
it('sets the webcast instance url', () => {
|
|
45
|
+
webinar.updateWebcastUrl({resources: {webcastInstance: {url:'newUrl'}}});
|
|
35
46
|
|
|
36
|
-
assert.equal(webinar.
|
|
47
|
+
assert.equal(webinar.webcastInstanceUrl, 'newUrl');
|
|
37
48
|
});
|
|
38
49
|
});
|
|
39
50
|
|
|
40
|
-
describe('#webinarAttendeesSearchingUrlUpdate', () => {
|
|
41
|
-
it('sets the webinarAttendeesSearching url', () => {
|
|
42
|
-
webinar.webinarAttendeesSearchingUrlUpdate('newUrl');
|
|
43
51
|
|
|
44
|
-
|
|
52
|
+
describe('#updateCanManageWebcast', () => {
|
|
53
|
+
it('sets the webcast instance url when valid', () => {
|
|
54
|
+
webinar.updateWebcastUrl({resources: {webcastInstance: {url:'newUrl'}}});
|
|
55
|
+
assert.equal(webinar.webcastInstanceUrl, 'newUrl', 'webcast instance URL should be updated');
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('handles missing resources gracefully', () => {
|
|
59
|
+
webinar.updateWebcastUrl({});
|
|
60
|
+
assert.isUndefined(webinar.webcastInstanceUrl, 'webcast instance URL should be undefined');
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('handles missing webcastInstance gracefully', () => {
|
|
64
|
+
webinar.updateWebcastUrl({resources: {}});
|
|
65
|
+
assert.isUndefined(webinar.webcastInstanceUrl, 'webcast instance URL should be undefined');
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('handles missing URL gracefully', () => {
|
|
69
|
+
webinar.updateWebcastUrl({resources: {webcastInstance: {}}});
|
|
70
|
+
assert.isUndefined(webinar.webcastInstanceUrl, 'webcast instance URL should be undefined');
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
describe('#updateRoleChanged', () => {
|
|
75
|
+
it('updates roles when promoted from attendee to panelist', () => {
|
|
76
|
+
const payload = {
|
|
77
|
+
oldRoles: ['ATTENDEE'],
|
|
78
|
+
newRoles: ['PANELIST']
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const result = webinar.updateRoleChanged(payload);
|
|
82
|
+
|
|
83
|
+
assert.equal(webinar.selfIsPanelist, true, 'self should be a panelist');
|
|
84
|
+
assert.equal(webinar.selfIsAttendee, false, 'self should not be an attendee');
|
|
85
|
+
assert.equal(webinar.canManageWebcast, false, 'self should not have manage webcast capability');
|
|
86
|
+
assert.equal(result.isPromoted, true, 'should indicate promotion');
|
|
87
|
+
assert.equal(result.isDemoted, false, 'should not indicate demotion');
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('updates roles when demoted from panelist to attendee', () => {
|
|
91
|
+
const payload = {
|
|
92
|
+
oldRoles: ['PANELIST'],
|
|
93
|
+
newRoles: ['ATTENDEE']
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const result = webinar.updateRoleChanged(payload);
|
|
97
|
+
|
|
98
|
+
assert.equal(webinar.selfIsPanelist, false, 'self should not be a panelist');
|
|
99
|
+
assert.equal(webinar.selfIsAttendee, true, 'self should be an attendee');
|
|
100
|
+
assert.equal(webinar.canManageWebcast, false, 'self should not have manage webcast capability');
|
|
101
|
+
assert.equal(result.isPromoted, false, 'should not indicate promotion');
|
|
102
|
+
assert.equal(result.isDemoted, true, 'should indicate demotion');
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('updates roles when promoted to moderator', () => {
|
|
106
|
+
const payload = {
|
|
107
|
+
oldRoles: ['PANELIST'],
|
|
108
|
+
newRoles: ['MODERATOR']
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const result = webinar.updateRoleChanged(payload);
|
|
112
|
+
|
|
113
|
+
assert.equal(webinar.selfIsPanelist, false, 'self should not be a panelist');
|
|
114
|
+
assert.equal(webinar.selfIsAttendee, false, 'self should not be an attendee');
|
|
115
|
+
assert.equal(webinar.canManageWebcast, true, 'self should have manage webcast capability');
|
|
116
|
+
assert.equal(result.isPromoted, false, 'should not indicate promotion');
|
|
117
|
+
assert.equal(result.isDemoted, false, 'should not indicate demotion');
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('updates roles when unchanged (remains as panelist)', () => {
|
|
121
|
+
const payload = {
|
|
122
|
+
oldRoles: ['PANELIST'],
|
|
123
|
+
newRoles: ['PANELIST']
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const result = webinar.updateRoleChanged(payload);
|
|
127
|
+
|
|
128
|
+
assert.equal(webinar.selfIsPanelist, true, 'self should remain a panelist');
|
|
129
|
+
assert.equal(webinar.selfIsAttendee, false, 'self should not be an attendee');
|
|
130
|
+
assert.equal(webinar.canManageWebcast, false, 'self should not have manage webcast capability');
|
|
131
|
+
assert.equal(result.isPromoted, false, 'should not indicate promotion');
|
|
132
|
+
assert.equal(result.isDemoted, false, 'should not indicate demotion');
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
describe("#setPracticeSessionState", () => {
|
|
137
|
+
[true, false].forEach((enabled) => {
|
|
138
|
+
it(`sends a PATCH request to ${enabled ? "enable" : "disable"} the practice session`, async () => {
|
|
139
|
+
const result = await webinar.setPracticeSessionState(enabled);
|
|
140
|
+
assert.calledOnce(webex.request);
|
|
141
|
+
assert.calledWith(webex.request, {
|
|
142
|
+
method: "PATCH",
|
|
143
|
+
uri: `${webinar.locusUrl}/controls`,
|
|
144
|
+
body: {
|
|
145
|
+
practiceSession: { enabled }
|
|
146
|
+
}
|
|
45
147
|
});
|
|
148
|
+
assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
|
|
149
|
+
});
|
|
46
150
|
});
|
|
47
151
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
152
|
+
it('handles API call failures gracefully', async () => {
|
|
153
|
+
webex.request.rejects(new Error('API_ERROR'));
|
|
154
|
+
const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
|
|
155
|
+
|
|
156
|
+
try {
|
|
157
|
+
await webinar.setPracticeSessionState(true);
|
|
158
|
+
assert.fail('setPracticeSessionState should throw an error');
|
|
159
|
+
} catch (error) {
|
|
160
|
+
assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
|
|
161
|
+
assert.calledOnce(errorLogger);
|
|
162
|
+
assert.calledWith(errorLogger, 'Meeting:webinar#setPracticeSessionState failed', sinon.match.instanceOf(Error));
|
|
163
|
+
}
|
|
51
164
|
|
|
52
|
-
|
|
165
|
+
errorLogger.restore();
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
describe('#updatePracticeSessionStatus', () => {
|
|
170
|
+
it('sets PS state true', () => {
|
|
171
|
+
webinar.updatePracticeSessionStatus({enabled: true});
|
|
53
172
|
|
|
54
|
-
|
|
173
|
+
assert.equal(webinar.practiceSessionEnabled, true);
|
|
174
|
+
});
|
|
175
|
+
it('sets PS state true', () => {
|
|
176
|
+
webinar.updatePracticeSessionStatus({enabled: false});
|
|
55
177
|
|
|
56
|
-
|
|
178
|
+
assert.equal(webinar.practiceSessionEnabled, false);
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
describe("#startWebcast", () => {
|
|
183
|
+
const meeting = {
|
|
184
|
+
locusId: 'locusId',
|
|
185
|
+
correlationId: 'correlationId',
|
|
186
|
+
}
|
|
187
|
+
const layout = {
|
|
188
|
+
videoLayout: 'Prominent',
|
|
189
|
+
contentLayout: 'Prominent',
|
|
190
|
+
syncStageLayout: false,
|
|
191
|
+
syncStageInMeeting: false,
|
|
192
|
+
}
|
|
193
|
+
it(`sends a PUT request to start the webcast`, async () => {
|
|
194
|
+
const result = await webinar.startWebcast(meeting, layout);
|
|
195
|
+
assert.calledOnce(webex.request);
|
|
196
|
+
assert.calledWith(webex.request, {
|
|
197
|
+
method: "PUT",
|
|
198
|
+
uri: `${webinar.webcastInstanceUrl}/streaming`,
|
|
199
|
+
headers: {
|
|
200
|
+
authorization: 'test-token',
|
|
201
|
+
trackingId: 'webex-js-sdk_test-uuid',
|
|
202
|
+
'Content-Type': 'application/json'
|
|
203
|
+
},
|
|
204
|
+
body: {
|
|
205
|
+
action: 'start',
|
|
206
|
+
meetingInfo: {
|
|
207
|
+
locusId: meeting.locusId,
|
|
208
|
+
correlationId: meeting.correlationId,
|
|
209
|
+
},
|
|
210
|
+
layout,
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
it('should handle undefined meeting parameter', async () => {
|
|
217
|
+
const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
|
|
218
|
+
|
|
219
|
+
try {
|
|
220
|
+
await webinar.startWebcast(undefined, layout);
|
|
221
|
+
assert.fail('startWebcast should throw an error');
|
|
222
|
+
} catch (error) {
|
|
223
|
+
assert.equal(error.message, 'Meeting parameter does not meet expectations', 'should throw the correct error');
|
|
224
|
+
assert.calledOnce(errorLogger);
|
|
225
|
+
assert.calledWith(errorLogger, `Meeting:webinar#startWebcast failed --> meeting parameter : ${undefined}`);
|
|
226
|
+
} finally {
|
|
227
|
+
errorLogger.restore();
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
it('handles API call failures gracefully', async () => {
|
|
232
|
+
webex.request.rejects(new Error('API_ERROR'));
|
|
233
|
+
const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
|
|
234
|
+
|
|
235
|
+
try {
|
|
236
|
+
await webinar.startWebcast(meeting, layout);
|
|
237
|
+
assert.fail('startWebcast should throw an error');
|
|
238
|
+
} catch (error) {
|
|
239
|
+
assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
|
|
240
|
+
assert.calledOnce(errorLogger);
|
|
241
|
+
assert.calledWith(errorLogger, 'Meeting:webinar#startWebcast failed', sinon.match.instanceOf(Error));
|
|
242
|
+
} finally {
|
|
243
|
+
errorLogger.restore();
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
describe("#stopWebcast", () => {
|
|
249
|
+
it(`sends a PUT request to stop the webcast`, async () => {
|
|
250
|
+
const result = await webinar.stopWebcast();
|
|
251
|
+
assert.calledOnce(webex.request);
|
|
252
|
+
assert.calledWith(webex.request, {
|
|
253
|
+
method: "PUT",
|
|
254
|
+
uri: `${webinar.webcastInstanceUrl}/streaming`,
|
|
255
|
+
headers: {
|
|
256
|
+
authorization: 'test-token',
|
|
257
|
+
trackingId: 'webex-js-sdk_test-uuid',
|
|
258
|
+
'Content-Type': 'application/json'
|
|
259
|
+
},
|
|
260
|
+
body: {
|
|
261
|
+
action: 'stop',
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
it('handles API call failures gracefully', async () => {
|
|
268
|
+
webex.request.rejects(new Error('API_ERROR'));
|
|
269
|
+
const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
|
|
270
|
+
|
|
271
|
+
try {
|
|
272
|
+
await webinar.stopWebcast();
|
|
273
|
+
assert.fail('stopWebcast should throw an error');
|
|
274
|
+
} catch (error) {
|
|
275
|
+
assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
|
|
276
|
+
assert.calledOnce(errorLogger);
|
|
277
|
+
assert.calledWith(errorLogger, 'Meeting:webinar#stopWebcast failed', sinon.match.instanceOf(Error));
|
|
278
|
+
} finally {
|
|
279
|
+
errorLogger.restore();
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
describe("#queryWebcastLayout", () => {
|
|
286
|
+
it(`sends a GET request to query the webcast layout`, async () => {
|
|
287
|
+
const result = await webinar.queryWebcastLayout();
|
|
288
|
+
assert.calledOnce(webex.request);
|
|
289
|
+
assert.calledWith(webex.request, {
|
|
290
|
+
method: "GET",
|
|
291
|
+
uri: `${webinar.webcastInstanceUrl}/layout`,
|
|
292
|
+
headers: {
|
|
293
|
+
authorization: 'test-token',
|
|
294
|
+
trackingId: 'webex-js-sdk_test-uuid',
|
|
295
|
+
},
|
|
296
|
+
});
|
|
297
|
+
assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
it('handles API call failures gracefully', async () => {
|
|
301
|
+
webex.request.rejects(new Error('API_ERROR'));
|
|
302
|
+
const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
|
|
303
|
+
|
|
304
|
+
try {
|
|
305
|
+
await webinar.queryWebcastLayout();
|
|
306
|
+
assert.fail('queryWebcastLayout should throw an error');
|
|
307
|
+
} catch (error) {
|
|
308
|
+
assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
|
|
309
|
+
assert.calledOnce(errorLogger);
|
|
310
|
+
assert.calledWith(errorLogger, 'Meeting:webinar#queryWebcastLayout failed', sinon.match.instanceOf(Error));
|
|
311
|
+
} finally {
|
|
312
|
+
errorLogger.restore();
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
describe("#updateWebcastLayout", () => {
|
|
318
|
+
const layout = {
|
|
319
|
+
videoLayout: 'Prominent',
|
|
320
|
+
contentLayout: 'Prominent',
|
|
321
|
+
syncStageLayout: false,
|
|
322
|
+
syncStageInMeeting: false,
|
|
323
|
+
}
|
|
324
|
+
it(`sends a PUT request to update the webcast layout`, async () => {
|
|
325
|
+
const result = await webinar.updateWebcastLayout(layout);
|
|
326
|
+
assert.calledOnce(webex.request);
|
|
327
|
+
assert.calledWith(webex.request, {
|
|
328
|
+
method: "PUT",
|
|
329
|
+
uri: `${webinar.webcastInstanceUrl}/layout`,
|
|
330
|
+
headers: {
|
|
331
|
+
authorization: 'test-token',
|
|
332
|
+
trackingId: 'webex-js-sdk_test-uuid',
|
|
333
|
+
'Content-Type': 'application/json'
|
|
334
|
+
},
|
|
335
|
+
body: {
|
|
336
|
+
...layout
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
it('handles API call failures gracefully', async () => {
|
|
343
|
+
webex.request.rejects(new Error('API_ERROR'));
|
|
344
|
+
const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
|
|
345
|
+
|
|
346
|
+
try {
|
|
347
|
+
await webinar.updateWebcastLayout(layout);
|
|
348
|
+
assert.fail('updateWebcastLayout should throw an error');
|
|
349
|
+
} catch (error) {
|
|
350
|
+
assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
|
|
351
|
+
assert.calledOnce(errorLogger);
|
|
352
|
+
assert.calledWith(errorLogger, 'Meeting:webinar#updateWebcastLayout failed', sinon.match.instanceOf(Error));
|
|
353
|
+
} finally {
|
|
354
|
+
errorLogger.restore();
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
describe("#searchWebcastAttendees", () => {
|
|
360
|
+
const queryString = 'queryString';
|
|
361
|
+
const specialCharsQuery = 'query@string!';
|
|
362
|
+
const emptyQuery = '';
|
|
363
|
+
|
|
364
|
+
it("sends a GET request to search the webcast attendees", async () => {
|
|
365
|
+
const result = await webinar.searchWebcastAttendees(queryString);
|
|
366
|
+
assert.calledOnce(webex.request);
|
|
367
|
+
assert.calledWith(webex.request, {
|
|
368
|
+
method: "GET",
|
|
369
|
+
uri: `${webinar.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(queryString)}`,
|
|
370
|
+
headers: {
|
|
371
|
+
authorization: 'test-token',
|
|
372
|
+
trackingId: 'webex-js-sdk_test-uuid',
|
|
373
|
+
},
|
|
57
374
|
});
|
|
375
|
+
assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
it('handles API call failures gracefully', async () => {
|
|
379
|
+
webex.request.rejects(new Error('API_ERROR'));
|
|
380
|
+
const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
|
|
381
|
+
|
|
382
|
+
try {
|
|
383
|
+
await webinar.searchWebcastAttendees(queryString);
|
|
384
|
+
assert.fail('searchWebcastAttendees should throw an error');
|
|
385
|
+
} catch (error) {
|
|
386
|
+
assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
|
|
387
|
+
assert.calledOnce(errorLogger);
|
|
388
|
+
assert.calledWith(errorLogger, 'Meeting:webinar#searchWebcastAttendees failed', sinon.match.instanceOf(Error));
|
|
389
|
+
} finally {
|
|
390
|
+
errorLogger.restore();
|
|
391
|
+
}
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
it("should handle empty query string", async () => {
|
|
395
|
+
const result = await webinar.searchWebcastAttendees(emptyQuery);
|
|
396
|
+
assert.calledOnce(webex.request);
|
|
397
|
+
assert.calledWith(webex.request, {
|
|
398
|
+
method: "GET",
|
|
399
|
+
uri: `${webinar.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(emptyQuery)}`,
|
|
400
|
+
headers: {
|
|
401
|
+
authorization: 'test-token',
|
|
402
|
+
trackingId: 'webex-js-sdk_test-uuid',
|
|
403
|
+
},
|
|
404
|
+
});
|
|
405
|
+
assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
it("should handle query string with special characters", async () => {
|
|
409
|
+
const result = await webinar.searchWebcastAttendees(specialCharsQuery);
|
|
410
|
+
assert.calledOnce(webex.request);
|
|
411
|
+
assert.calledWith(webex.request, {
|
|
412
|
+
method: "GET",
|
|
413
|
+
uri: `${webinar.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(specialCharsQuery)}`,
|
|
414
|
+
headers: {
|
|
415
|
+
authorization: 'test-token',
|
|
416
|
+
trackingId: 'webex-js-sdk_test-uuid',
|
|
417
|
+
},
|
|
418
|
+
});
|
|
419
|
+
assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
describe("#viewAllWebcastAttendees", () => {
|
|
425
|
+
it(`sends a GET request to view all the webcast attendees`, async () => {
|
|
426
|
+
const result = await webinar.viewAllWebcastAttendees();
|
|
427
|
+
assert.calledOnce(webex.request);
|
|
428
|
+
assert.calledWith(webex.request, {
|
|
429
|
+
method: "GET",
|
|
430
|
+
uri: `${webinar.webcastInstanceUrl}/attendees`,
|
|
431
|
+
headers: {
|
|
432
|
+
authorization: 'test-token',
|
|
433
|
+
trackingId: 'webex-js-sdk_test-uuid',
|
|
434
|
+
},
|
|
435
|
+
});
|
|
436
|
+
assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
it('handles API call failures gracefully', async () => {
|
|
440
|
+
webex.request.rejects(new Error('API_ERROR'));
|
|
441
|
+
const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
|
|
442
|
+
|
|
443
|
+
try {
|
|
444
|
+
await webinar.viewAllWebcastAttendees();
|
|
445
|
+
assert.fail('viewAllWebcastAttendees should throw an error');
|
|
446
|
+
} catch (error) {
|
|
447
|
+
assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
|
|
448
|
+
assert.calledOnce(errorLogger);
|
|
449
|
+
assert.calledWith(errorLogger, 'Meeting:webinar#viewAllWebcastAttendees failed', sinon.match.instanceOf(Error));
|
|
450
|
+
} finally {
|
|
451
|
+
errorLogger.restore();
|
|
452
|
+
}
|
|
453
|
+
});
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
describe("#expelWebcastAttendee", () => {
|
|
457
|
+
const participantId = 'participantId'
|
|
458
|
+
it(`sends a DELETE request to expel the webcast attendee`, async () => {
|
|
459
|
+
const result = await webinar.expelWebcastAttendee(participantId);
|
|
460
|
+
assert.calledOnce(webex.request);
|
|
461
|
+
assert.calledWith(webex.request, {
|
|
462
|
+
method: "DELETE",
|
|
463
|
+
uri: `${webinar.webcastInstanceUrl}/attendees/${participantId}`,
|
|
464
|
+
headers: {
|
|
465
|
+
authorization: 'test-token',
|
|
466
|
+
trackingId: 'webex-js-sdk_test-uuid',
|
|
467
|
+
},
|
|
468
|
+
});
|
|
469
|
+
assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
it('handles API call failures gracefully', async () => {
|
|
473
|
+
webex.request.rejects(new Error('API_ERROR'));
|
|
474
|
+
const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
|
|
475
|
+
|
|
476
|
+
try {
|
|
477
|
+
await webinar.expelWebcastAttendee(participantId);
|
|
478
|
+
assert.fail('expelWebcastAttendee should throw an error');
|
|
479
|
+
} catch (error) {
|
|
480
|
+
assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
|
|
481
|
+
assert.calledOnce(errorLogger);
|
|
482
|
+
assert.calledWith(errorLogger, 'Meeting:webinar#expelWebcastAttendee failed', sinon.match.instanceOf(Error));
|
|
483
|
+
} finally {
|
|
484
|
+
errorLogger.restore();
|
|
485
|
+
}
|
|
58
486
|
});
|
|
487
|
+
});
|
|
59
488
|
})
|
|
60
489
|
})
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { ANNOTATION_POLICY } from './constants';
|
|
2
|
-
/**
|
|
3
|
-
* Type for an StrokeData Object
|
|
4
|
-
*/
|
|
5
|
-
type StrokeData = {
|
|
6
|
-
deviceId: string;
|
|
7
|
-
toUserId: string;
|
|
8
|
-
requesterId: string;
|
|
9
|
-
content: string;
|
|
10
|
-
shareInstanceId: string;
|
|
11
|
-
encryptionKeyUrl: string;
|
|
12
|
-
version: string;
|
|
13
|
-
};
|
|
14
|
-
type RequestData = {
|
|
15
|
-
toUserId: string;
|
|
16
|
-
toDeviceUrl: string;
|
|
17
|
-
shareInstanceId: string;
|
|
18
|
-
};
|
|
19
|
-
type CommandRequestBody = {
|
|
20
|
-
actionType: string;
|
|
21
|
-
resourceType: string;
|
|
22
|
-
shareInstanceId: string;
|
|
23
|
-
receivers?: any[];
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* Type for an annotation Object include annotation version and privilege
|
|
27
|
-
*/
|
|
28
|
-
type AnnotationInfo = {
|
|
29
|
-
version: string;
|
|
30
|
-
policy: ANNOTATION_POLICY;
|
|
31
|
-
};
|
|
32
|
-
interface IAnnotationChannel {
|
|
33
|
-
acceptRequest: (approval: any) => undefined | Promise<void>;
|
|
34
|
-
declineRequest: (approval: any) => undefined | Promise<void>;
|
|
35
|
-
closeAnnotation: (requestData: RequestData) => undefined | Promise<void>;
|
|
36
|
-
approveAnnotation: (requestData: RequestData) => undefined | Promise<void>;
|
|
37
|
-
cancelApproveAnnotation: (requestData: RequestData, approval: any) => undefined | Promise<void>;
|
|
38
|
-
sendStrokeData: (strokeData: StrokeData) => void;
|
|
39
|
-
approvalUrlUpdate: (approvalUrl: string) => void;
|
|
40
|
-
locusUrlUpdate: (locusUrl: string) => void;
|
|
41
|
-
}
|
|
42
|
-
export type { StrokeData, RequestData, CommandRequestBody, IAnnotationChannel, AnnotationInfo };
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export declare const EVENT_TRIGGERS: {
|
|
2
|
-
ANNOTATION_STROKE_DATA: string;
|
|
3
|
-
ANNOTATION_COMMAND: string;
|
|
4
|
-
};
|
|
5
|
-
export declare const ANNOTATION_RESOURCE_TYPE = "AnnotationOnShare";
|
|
6
|
-
export declare const ANNOTATION_RELAY_TYPES: {
|
|
7
|
-
ANNOTATION_CLIENT: string;
|
|
8
|
-
};
|
|
9
|
-
export declare const ANNOTATION_STATUS: {
|
|
10
|
-
NO_ANNOTATION: string;
|
|
11
|
-
RUNNING_ANNOTATION: string;
|
|
12
|
-
};
|
|
13
|
-
export declare enum ANNOTATION_POLICY {
|
|
14
|
-
ANYONE_CAN_ANNOTATE = "AnyoneCanAnnotate",
|
|
15
|
-
APPROVAL = "Approval",
|
|
16
|
-
ANNOTATION_NOT_ALLOWED = "AnnotationNotAllowed"
|
|
17
|
-
}
|
|
18
|
-
export declare const ANNOTATION_REQUEST_TYPE: {
|
|
19
|
-
ANNOTATION_MESSAGE: string;
|
|
20
|
-
};
|
|
21
|
-
export declare const enum ANNOTATION_ACTION_TYPE {
|
|
22
|
-
REQUESTED = "REQUESTED",
|
|
23
|
-
ACCEPTED = "ACCEPTED",
|
|
24
|
-
DECLINED = "DECLINED",
|
|
25
|
-
OFFERED = "OFFERED",
|
|
26
|
-
CANCELED = "CANCELED",
|
|
27
|
-
EXPIRED = "EXPIRED",
|
|
28
|
-
REVOKED = "REVOKED",
|
|
29
|
-
CLOSED = "CLOSED"
|
|
30
|
-
}
|
|
31
|
-
export declare const ANNOTATION = "annotation";
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { WebexPlugin } from '@webex/webex-core';
|
|
2
|
-
import { StrokeData, RequestData, IAnnotationChannel } from './annotation.types';
|
|
3
|
-
/**
|
|
4
|
-
* @description Annotation to handle LLM and Mercury message and locus API
|
|
5
|
-
* @class
|
|
6
|
-
*/
|
|
7
|
-
declare class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
|
|
8
|
-
namespace: string;
|
|
9
|
-
private seqNum;
|
|
10
|
-
hasSubscribedToEvents: boolean;
|
|
11
|
-
approvalUrl: string;
|
|
12
|
-
locusUrl: string;
|
|
13
|
-
deviceUrl: string;
|
|
14
|
-
/**
|
|
15
|
-
* Initializes annotation module
|
|
16
|
-
*/
|
|
17
|
-
constructor(...args: any[]);
|
|
18
|
-
/**
|
|
19
|
-
* Process Stroke Data
|
|
20
|
-
* @param {object} data
|
|
21
|
-
* @returns {void}
|
|
22
|
-
*/
|
|
23
|
-
private processStrokeMessage;
|
|
24
|
-
/** bind all events from mercury
|
|
25
|
-
* @param {Object} e
|
|
26
|
-
* @returns {undefined}
|
|
27
|
-
*/
|
|
28
|
-
private eventCommandProcessor;
|
|
29
|
-
/** bind all events from llm
|
|
30
|
-
* @param {Object} e
|
|
31
|
-
* @returns {undefined}
|
|
32
|
-
*/
|
|
33
|
-
private eventDataProcessor;
|
|
34
|
-
/**
|
|
35
|
-
* Listen to websocket messages
|
|
36
|
-
* @returns {undefined}
|
|
37
|
-
*/
|
|
38
|
-
private listenToEvents;
|
|
39
|
-
/**
|
|
40
|
-
* set locusUrl
|
|
41
|
-
* @param {string} locusUrl
|
|
42
|
-
* @returns {void}
|
|
43
|
-
*/
|
|
44
|
-
locusUrlUpdate(locusUrl: string): void;
|
|
45
|
-
/**
|
|
46
|
-
* set approved url
|
|
47
|
-
* @param {string} approvalUrl
|
|
48
|
-
* @returns {void}
|
|
49
|
-
*/
|
|
50
|
-
approvalUrlUpdate(approvalUrl: string): void;
|
|
51
|
-
/**
|
|
52
|
-
* accept request
|
|
53
|
-
* @param {object} approval
|
|
54
|
-
* @returns {Promise}
|
|
55
|
-
*/
|
|
56
|
-
acceptRequest(approval: any): any;
|
|
57
|
-
/**
|
|
58
|
-
* presenter declined request annotation
|
|
59
|
-
* @param {approval} approval
|
|
60
|
-
* @returns {Promise}
|
|
61
|
-
*/
|
|
62
|
-
declineRequest(approval: any): any;
|
|
63
|
-
/**
|
|
64
|
-
* request approved annotation
|
|
65
|
-
* @param {RequestData} requestData
|
|
66
|
-
* @returns {Promise}
|
|
67
|
-
*/
|
|
68
|
-
approveAnnotation(requestData: RequestData): Promise<void>;
|
|
69
|
-
/**
|
|
70
|
-
* cancel approved annotation
|
|
71
|
-
* @param {object} requestData
|
|
72
|
-
* @param {object} approval
|
|
73
|
-
* @returns {Promise}
|
|
74
|
-
*/
|
|
75
|
-
cancelApproveAnnotation(requestData: RequestData, approval: any): any;
|
|
76
|
-
/**
|
|
77
|
-
* close annotation
|
|
78
|
-
* @param {object} requestData
|
|
79
|
-
* @returns {Promise}
|
|
80
|
-
*/
|
|
81
|
-
closeAnnotation(requestData: RequestData): Promise<void>;
|
|
82
|
-
/**
|
|
83
|
-
* send annotation command
|
|
84
|
-
* @param {ANNOTATION_ACTION_TYPE} actionType
|
|
85
|
-
* @param {RequestData} requestData
|
|
86
|
-
* @returns {Promise}
|
|
87
|
-
*/
|
|
88
|
-
private sendAnnotationAction;
|
|
89
|
-
/**
|
|
90
|
-
* decrypt data
|
|
91
|
-
* @param {string} encryptionKeyUrl
|
|
92
|
-
* @param {string} content encrypted content
|
|
93
|
-
* @returns {string} decrypted content
|
|
94
|
-
*/
|
|
95
|
-
private decryptContent;
|
|
96
|
-
/**
|
|
97
|
-
* encrypt data
|
|
98
|
-
* @param {string} encryptionKeyUrl
|
|
99
|
-
* @param {string} content original content
|
|
100
|
-
* @returns {string} encrypted content
|
|
101
|
-
*/
|
|
102
|
-
private encryptContent;
|
|
103
|
-
/**
|
|
104
|
-
* Sends stroke data to presenter
|
|
105
|
-
* @param {StrokeData} strokeData
|
|
106
|
-
* @returns {void}
|
|
107
|
-
*/
|
|
108
|
-
sendStrokeData: (strokeData: StrokeData) => void;
|
|
109
|
-
/**
|
|
110
|
-
* private encrypted the strokes data
|
|
111
|
-
* @param {string} encryptedContent
|
|
112
|
-
* @param {StrokeData} strokeData
|
|
113
|
-
* @returns {void}
|
|
114
|
-
*/
|
|
115
|
-
private publishEncrypted;
|
|
116
|
-
}
|
|
117
|
-
export default AnnotationChannel;
|