@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.15
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/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/common/browser-detection.js +1 -0
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js.map +1 -1
- package/dist/common/errors/captcha-error.js +5 -5
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +5 -5
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +6 -6
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +5 -5
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -5
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +5 -5
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +4 -4
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection.js +5 -5
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +5 -5
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +11 -8
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +2 -1
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +2 -1
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js.map +1 -1
- package/dist/media/internal-media-core-wrapper.js.map +1 -1
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -1
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.js +1 -1
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +118 -89
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +1 -1
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +25 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +8 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +5 -5
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +2 -2
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +48 -48
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +1 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +251 -250
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +2 -2
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +14 -14
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +31 -31
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +43 -43
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +23 -20
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/multistreamMedia.js +2 -1
- package/dist/multistream/multistreamMedia.js.map +1 -1
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +2 -0
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +8 -8
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +7 -7
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +3 -1
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +4 -4
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/index.js +5 -5
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +4 -1
- package/dist/transcription/index.js.map +1 -1
- package/internal-README.md +7 -6
- package/package.json +18 -18
- package/src/common/browser-detection.ts +9 -6
- package/src/common/collection.ts +3 -1
- package/src/common/errors/captcha-error.ts +6 -6
- package/src/common/errors/intent-to-join.ts +6 -6
- package/src/common/errors/join-meeting.ts +12 -8
- package/src/common/errors/media.ts +6 -6
- package/src/common/errors/parameter.ts +9 -6
- package/src/common/errors/password-error.ts +6 -6
- package/src/common/errors/permission.ts +5 -5
- package/src/common/errors/reconnection.ts +6 -6
- package/src/common/errors/stats.ts +6 -6
- package/src/common/errors/webex-errors.ts +7 -5
- package/src/common/errors/webex-meetings-error.ts +1 -1
- package/src/common/events/events-scope.ts +5 -1
- package/src/common/events/events.ts +5 -1
- package/src/common/events/trigger-proxy.ts +8 -3
- package/src/common/events/util.ts +1 -2
- package/src/common/logs/logger-proxy.ts +21 -10
- package/src/common/logs/request.ts +11 -8
- package/src/config.ts +11 -11
- package/src/constants.ts +1 -1
- package/src/index.js +1 -1
- package/src/locus-info/controlsUtils.ts +34 -24
- package/src/locus-info/fullState.ts +15 -11
- package/src/locus-info/hostUtils.ts +4 -3
- package/src/locus-info/index.ts +25 -34
- package/src/locus-info/infoUtils.ts +12 -4
- package/src/locus-info/mediaSharesUtils.ts +4 -4
- package/src/locus-info/parser.ts +45 -68
- package/src/locus-info/selfUtils.ts +106 -57
- package/src/media/index.ts +123 -135
- package/src/media/internal-media-core-wrapper.ts +2 -2
- package/src/media/properties.ts +30 -20
- package/src/media/util.ts +1 -1
- package/src/mediaQualityMetrics/config.ts +46 -46
- package/src/meeting/effectsState.ts +35 -35
- package/src/meeting/in-meeting-actions.ts +7 -3
- package/src/meeting/index.ts +1576 -1291
- package/src/meeting/muteState.ts +62 -31
- package/src/meeting/request.ts +174 -113
- package/src/meeting/request.type.ts +11 -0
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +101 -70
- package/src/meeting-info/collection.ts +2 -1
- package/src/meeting-info/index.ts +32 -30
- package/src/meeting-info/meeting-info-v2.ts +106 -108
- package/src/meeting-info/request.ts +9 -3
- package/src/meeting-info/util.ts +54 -46
- package/src/meeting-info/utilv2.ts +59 -53
- package/src/meetings/collection.ts +1 -1
- package/src/meetings/index.ts +512 -440
- package/src/meetings/request.ts +26 -24
- package/src/meetings/util.ts +29 -29
- package/src/member/index.ts +55 -49
- package/src/member/util.ts +26 -13
- package/src/members/collection.ts +0 -1
- package/src/members/index.ts +182 -126
- package/src/members/request.ts +46 -14
- package/src/members/util.ts +44 -42
- package/src/metrics/config.ts +254 -81
- package/src/metrics/constants.ts +0 -2
- package/src/metrics/index.ts +84 -71
- package/src/multistream/multistreamMedia.ts +1 -0
- package/src/multistream/receiveSlot.ts +1 -0
- package/src/multistream/receiveSlotManager.ts +1 -0
- package/src/multistream/remoteMedia.ts +1 -1
- package/src/multistream/remoteMediaGroup.ts +2 -1
- package/src/multistream/remoteMediaManager.ts +3 -0
- package/src/networkQualityMonitor/index.ts +20 -23
- package/src/personal-meeting-room/index.ts +12 -16
- package/src/personal-meeting-room/request.ts +10 -3
- package/src/personal-meeting-room/util.ts +3 -3
- package/src/reachability/index.ts +61 -59
- package/src/reachability/request.ts +36 -32
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +4 -3
- package/src/reconnection-manager/index.ts +139 -84
- package/src/roap/index.ts +46 -38
- package/src/roap/request.ts +44 -31
- package/src/roap/turnDiscovery.ts +59 -30
- package/src/statsAnalyzer/global.ts +30 -33
- package/src/statsAnalyzer/index.ts +432 -175
- package/src/statsAnalyzer/mqaUtil.ts +178 -72
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/journey.js +663 -462
- package/test/integration/spec/space-meeting.js +318 -203
- package/test/integration/spec/transcription.js +6 -7
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +5 -5
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1 -2
- package/test/unit/spec/locus-info/infoUtils.js +26 -33
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +72 -103
- package/test/unit/spec/locus-info/selfUtils.js +21 -12
- package/test/unit/spec/meeting/effectsState.js +36 -46
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
- package/test/unit/spec/meeting/index.js +1342 -684
- package/test/unit/spec/meeting/muteState.js +42 -33
- package/test/unit/spec/meeting/request.js +75 -45
- package/test/unit/spec/meeting/utils.js +78 -53
- package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +110 -74
- package/test/unit/spec/meetings/collection.js +1 -1
- package/test/unit/spec/meetings/index.js +438 -257
- package/test/unit/spec/meetings/utils.js +14 -12
- package/test/unit/spec/member/index.js +0 -1
- package/test/unit/spec/member/util.js +5 -6
- package/test/unit/spec/members/index.js +104 -54
- package/test/unit/spec/members/request.js +29 -20
- package/test/unit/spec/members/utils.js +8 -5
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/networkQualityMonitor/index.js +21 -15
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +9 -11
- package/test/unit/spec/reconnection-manager/index.js +16 -18
- package/test/unit/spec/roap/turnDiscovery.ts +22 -19
- package/test/unit/spec/stats-analyzer/index.js +25 -20
- package/test/utils/cmr.js +44 -42
- package/test/utils/testUtils.js +83 -74
- package/test/utils/webex-config.js +18 -18
- package/test/utils/webex-test-users.js +53 -50
|
@@ -9,7 +9,6 @@ import LocusDeltaParser from '@webex/plugin-meetings/src/locus-info/parser';
|
|
|
9
9
|
import basicSequenceComparisons from './lib/BasicSeqCmp.json';
|
|
10
10
|
import sequenceComparisons from './lib/SeqCmp';
|
|
11
11
|
|
|
12
|
-
|
|
13
12
|
describe('locus-info/parser', () => {
|
|
14
13
|
describe('Locus Sequence Comparison Algorithm', () => {
|
|
15
14
|
describe('basic sequence comparisons', () => {
|
|
@@ -73,11 +72,11 @@ describe('locus-info/parser', () => {
|
|
|
73
72
|
const {description, result} = sequenceComparisons.update_actions[key];
|
|
74
73
|
|
|
75
74
|
const current = {
|
|
76
|
-
sequence: sequenceComparisons.sequences[currentKey]
|
|
75
|
+
sequence: sequenceComparisons.sequences[currentKey],
|
|
77
76
|
};
|
|
78
77
|
const incoming = {
|
|
79
78
|
sequence: sequenceComparisons.sequences[incomingKey],
|
|
80
|
-
baseSequence: sequenceComparisons.sequences[baseKey]
|
|
79
|
+
baseSequence: sequenceComparisons.sequences[baseKey],
|
|
81
80
|
};
|
|
82
81
|
const comparison = LocusDeltaParser.compare(current, incoming);
|
|
83
82
|
const action = extract(comparison);
|
|
@@ -161,7 +160,6 @@ describe('locus-info/parser', () => {
|
|
|
161
160
|
assert.calledOnce(parser.pause);
|
|
162
161
|
});
|
|
163
162
|
|
|
164
|
-
|
|
165
163
|
it('should update working copy on USE_INCOMING', () => {
|
|
166
164
|
const {USE_INCOMING} = LocusDeltaParser.loci;
|
|
167
165
|
|
|
@@ -173,7 +171,6 @@ describe('locus-info/parser', () => {
|
|
|
173
171
|
assert.equal(parser.workingCopy, NEW_LOCI);
|
|
174
172
|
});
|
|
175
173
|
|
|
176
|
-
|
|
177
174
|
it('calls onDeltaAction() when a comparison result is available', () => {
|
|
178
175
|
const {USE_INCOMING} = LocusDeltaParser.loci;
|
|
179
176
|
const lociComparison = USE_INCOMING;
|
|
@@ -186,7 +183,6 @@ describe('locus-info/parser', () => {
|
|
|
186
183
|
assert.calledWith(parser.onDeltaAction, lociComparison, NEW_LOCI);
|
|
187
184
|
});
|
|
188
185
|
|
|
189
|
-
|
|
190
186
|
it('should call nextEvent()', () => {
|
|
191
187
|
const {USE_INCOMING} = LocusDeltaParser.loci;
|
|
192
188
|
|
|
@@ -198,7 +194,6 @@ describe('locus-info/parser', () => {
|
|
|
198
194
|
assert.calledOnce(parser.nextEvent);
|
|
199
195
|
});
|
|
200
196
|
|
|
201
|
-
|
|
202
197
|
it('should not call compare() if locus is invalid', () => {
|
|
203
198
|
const {USE_INCOMING} = LocusDeltaParser.loci;
|
|
204
199
|
|
|
@@ -212,7 +207,6 @@ describe('locus-info/parser', () => {
|
|
|
212
207
|
assert.notCalled(LocusDeltaParser.compare);
|
|
213
208
|
});
|
|
214
209
|
|
|
215
|
-
|
|
216
210
|
it('processDeltaEvent() should take next item in queue', () => {
|
|
217
211
|
// restore the original method
|
|
218
212
|
parser.queue.dequeue = sandbox.stub();
|
|
@@ -254,7 +248,7 @@ describe('locus-info/parser', () => {
|
|
|
254
248
|
parser = new LocusDeltaParser();
|
|
255
249
|
loci = {
|
|
256
250
|
rangeStart: 0,
|
|
257
|
-
rangeEnd: 0
|
|
251
|
+
rangeEnd: 0,
|
|
258
252
|
};
|
|
259
253
|
});
|
|
260
254
|
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
|
|
2
1
|
export const self = {
|
|
3
2
|
deviceUrl: 'https://wdm-a.wbx2.com/wdm/api/v1/devices/20eabde3-4254-48da-9a24',
|
|
4
3
|
alertHint: {
|
|
5
|
-
action: 'NONE'
|
|
4
|
+
action: 'NONE',
|
|
6
5
|
},
|
|
7
6
|
alertType: {
|
|
8
|
-
action: 'NONE'
|
|
7
|
+
action: 'NONE',
|
|
9
8
|
},
|
|
10
9
|
callbackInfo: {
|
|
11
10
|
callbackAddress: 'alice@alpha.webex.com',
|
|
12
|
-
callbackType: 'SIPURI'
|
|
11
|
+
callbackType: 'SIPURI',
|
|
13
12
|
},
|
|
14
13
|
lookUpInfo: {
|
|
15
|
-
lookupLink:
|
|
16
|
-
|
|
14
|
+
lookupLink:
|
|
15
|
+
'https://locus.meet-a.prod.meetapi.webex.com/locus/api/v1/loci/meetingInfo/4e073f82-f5b6-31e5-93b3?type=LOCUS_ID&useUriLookup=false',
|
|
16
|
+
type: 'MEETING',
|
|
17
17
|
},
|
|
18
18
|
isCreator: false,
|
|
19
19
|
identity: '344ea183-9d5d-4e77-aed2-',
|
|
@@ -25,7 +25,7 @@ export const self = {
|
|
|
25
25
|
email: 'alic@cisco.com',
|
|
26
26
|
name: 'alice',
|
|
27
27
|
isExternal: false,
|
|
28
|
-
orgId: '1eb65fdf-9643-417f-9974'
|
|
28
|
+
orgId: '1eb65fdf-9643-417f-9974',
|
|
29
29
|
},
|
|
30
30
|
devices: [
|
|
31
31
|
{
|
|
@@ -34,106 +34,89 @@ export const self = {
|
|
|
34
34
|
mediaConnections: [
|
|
35
35
|
{
|
|
36
36
|
mediaId: '5706ee09-b2f6-4d0a-b43e-05dbcdea524d',
|
|
37
|
-
actionsUrl:
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
actionsUrl:
|
|
38
|
+
'https://cme-junctionbox-apdx2-006-apdx2-public.wbx2.com:443/calliope/api/v1/rest/send/16a7d18c-71a5-4f51-8732-b456e7832197/calliope/api/v1/confluences/cd12fc68-53e9-43c2-be01-/actions',
|
|
39
|
+
type: 'SDP',
|
|
40
|
+
},
|
|
40
41
|
],
|
|
41
42
|
mediaSessions: [
|
|
42
43
|
{
|
|
43
44
|
mediaType: 'audio',
|
|
44
45
|
mediaContent: 'main',
|
|
45
46
|
direction: 'sendrecv',
|
|
46
|
-
state: 'active'
|
|
47
|
+
state: 'active',
|
|
47
48
|
},
|
|
48
49
|
{
|
|
49
50
|
mediaType: 'video',
|
|
50
51
|
mediaContent: 'main',
|
|
51
52
|
direction: 'sendrecv',
|
|
52
|
-
state: 'active'
|
|
53
|
+
state: 'active',
|
|
53
54
|
},
|
|
54
55
|
{
|
|
55
56
|
mediaType: 'audio',
|
|
56
57
|
mediaContent: 'slides',
|
|
57
58
|
direction: 'inactive',
|
|
58
|
-
state: 'inactive'
|
|
59
|
+
state: 'inactive',
|
|
59
60
|
},
|
|
60
61
|
{
|
|
61
62
|
mediaType: 'video',
|
|
62
63
|
mediaContent: 'slides',
|
|
63
64
|
direction: 'recvonly',
|
|
64
|
-
state: 'active'
|
|
65
|
-
}
|
|
65
|
+
state: 'active',
|
|
66
|
+
},
|
|
66
67
|
],
|
|
67
68
|
mediaSessionsExternal: false,
|
|
68
69
|
state: 'JOINED',
|
|
69
70
|
intent: {type: ''},
|
|
70
|
-
intents: [
|
|
71
|
-
null
|
|
72
|
-
],
|
|
71
|
+
intents: [null],
|
|
73
72
|
keepAliveSecs: 20,
|
|
74
73
|
callLegId: '84bbb491-598f-4828-bd27',
|
|
75
74
|
correlationId: '74421718-e1f8-4555-9497',
|
|
76
75
|
isVideoCallback: false,
|
|
77
|
-
csis: [
|
|
78
|
-
515285760,
|
|
79
|
-
515285761,
|
|
80
|
-
3779681281,
|
|
81
|
-
3779681280
|
|
82
|
-
],
|
|
76
|
+
csis: [515285760, 515285761, 3779681281, 3779681280],
|
|
83
77
|
serverTranscoded: true,
|
|
84
78
|
serverComposed: true,
|
|
85
|
-
availableLayouts: [
|
|
86
|
-
|
|
87
|
-
'ActivePresence',
|
|
88
|
-
'Prominent',
|
|
89
|
-
'Equal',
|
|
90
|
-
'OnePlusN'
|
|
91
|
-
]
|
|
92
|
-
}
|
|
79
|
+
availableLayouts: ['Single', 'ActivePresence', 'Prominent', 'Equal', 'OnePlusN'],
|
|
80
|
+
},
|
|
93
81
|
],
|
|
94
82
|
status: {
|
|
95
83
|
audioStatus: 'SENDRECV',
|
|
96
84
|
videoStatus: 'SENDRECV',
|
|
97
85
|
videoSlidesStatus: 'RECVONLY',
|
|
98
86
|
audioSlidesStatus: 'INACTIVE',
|
|
99
|
-
csis: [
|
|
100
|
-
515285760,
|
|
101
|
-
515285761,
|
|
102
|
-
3779681281,
|
|
103
|
-
3779681280
|
|
104
|
-
]
|
|
87
|
+
csis: [515285760, 515285761, 3779681281, 3779681280],
|
|
105
88
|
},
|
|
106
89
|
suggestedMedia: [
|
|
107
90
|
{
|
|
108
91
|
mediaType: 'audio',
|
|
109
92
|
mediaContent: 'main',
|
|
110
|
-
direction: 'inactive'
|
|
93
|
+
direction: 'inactive',
|
|
111
94
|
},
|
|
112
95
|
{
|
|
113
96
|
mediaType: 'video',
|
|
114
97
|
mediaContent: 'main',
|
|
115
|
-
direction: 'recvonly'
|
|
98
|
+
direction: 'recvonly',
|
|
116
99
|
},
|
|
117
100
|
{
|
|
118
101
|
mediaType: 'video',
|
|
119
102
|
mediaContent: 'slides',
|
|
120
|
-
direction: 'sendrecv'
|
|
121
|
-
}
|
|
103
|
+
direction: 'sendrecv',
|
|
104
|
+
},
|
|
122
105
|
],
|
|
123
106
|
controls: {
|
|
124
107
|
audio: {
|
|
125
108
|
muted: false,
|
|
126
109
|
requestedToUnmute: false,
|
|
127
|
-
meta: {}
|
|
110
|
+
meta: {},
|
|
128
111
|
},
|
|
129
112
|
localRecord: {
|
|
130
|
-
recording: false
|
|
113
|
+
recording: false,
|
|
131
114
|
},
|
|
132
115
|
layouts: [
|
|
133
116
|
{
|
|
134
117
|
type: 'activePresence',
|
|
135
|
-
deviceUrl: 'https://wdm-a.wbx2.com/wdm/api/v1/devices/20eabde3-4254-48da-9a24'
|
|
136
|
-
}
|
|
118
|
+
deviceUrl: 'https://wdm-a.wbx2.com/wdm/api/v1/devices/20eabde3-4254-48da-9a24',
|
|
119
|
+
},
|
|
137
120
|
],
|
|
138
121
|
role: {
|
|
139
122
|
presenter: true,
|
|
@@ -142,11 +125,11 @@ export const self = {
|
|
|
142
125
|
type: 'PRESENTER',
|
|
143
126
|
hasRole: true,
|
|
144
127
|
meta: {
|
|
145
|
-
lastModified: '2020-07-20T20:32:35.259Z'
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
]
|
|
149
|
-
}
|
|
128
|
+
lastModified: '2020-07-20T20:32:35.259Z',
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
},
|
|
150
133
|
},
|
|
151
134
|
enableDTMF: true,
|
|
152
135
|
id: 'e0d54e94-226c-3290-b75a-',
|
|
@@ -154,7 +137,8 @@ export const self = {
|
|
|
154
137
|
resourceGuest: false,
|
|
155
138
|
moderator: true,
|
|
156
139
|
panelist: false,
|
|
157
|
-
mediaBaseUrl:
|
|
140
|
+
mediaBaseUrl:
|
|
141
|
+
'https://locus.meet-a.prod.meetapi.webex.com/locus/api/v1/loci/4e073f82-f5b6-31e5-93b3/participant/e0d54e94-226c-3290-b75a-/media',
|
|
158
142
|
canNotViewTheParticipantList: false,
|
|
159
143
|
isSharingBlocked: false,
|
|
160
144
|
};
|
|
@@ -162,18 +146,19 @@ export const self = {
|
|
|
162
146
|
export const selfWithInactivity = {
|
|
163
147
|
deviceUrl: 'https://wdm-a.wbx2.com/wdm/api/v1/devices/20eabde3-4254-48da-9a24',
|
|
164
148
|
alertHint: {
|
|
165
|
-
action: 'NONE'
|
|
149
|
+
action: 'NONE',
|
|
166
150
|
},
|
|
167
151
|
alertType: {
|
|
168
|
-
action: 'NONE'
|
|
152
|
+
action: 'NONE',
|
|
169
153
|
},
|
|
170
154
|
callbackInfo: {
|
|
171
155
|
callbackAddress: 'alice@alpha.webex.com',
|
|
172
|
-
callbackType: 'SIPURI'
|
|
156
|
+
callbackType: 'SIPURI',
|
|
173
157
|
},
|
|
174
158
|
lookUpInfo: {
|
|
175
|
-
lookupLink:
|
|
176
|
-
|
|
159
|
+
lookupLink:
|
|
160
|
+
'https://locus.meet-a.prod.meetapi.webex.com/locus/api/v1/loci/meetingInfo/4e073f82-f5b6-31e5-93b3?type=LOCUS_ID&useUriLookup=false',
|
|
161
|
+
type: 'MEETING',
|
|
177
162
|
},
|
|
178
163
|
isCreator: false,
|
|
179
164
|
identity: '344ea183-9d5d-4e77-aed2-',
|
|
@@ -185,7 +170,7 @@ export const selfWithInactivity = {
|
|
|
185
170
|
email: 'alic@cisco.com',
|
|
186
171
|
name: 'alice',
|
|
187
172
|
isExternal: false,
|
|
188
|
-
orgId: '1eb65fdf-9643-417f-9974'
|
|
173
|
+
orgId: '1eb65fdf-9643-417f-9974',
|
|
189
174
|
},
|
|
190
175
|
devices: [
|
|
191
176
|
{
|
|
@@ -194,105 +179,88 @@ export const selfWithInactivity = {
|
|
|
194
179
|
mediaConnections: [
|
|
195
180
|
{
|
|
196
181
|
mediaId: '5706ee09-b2f6-4d0a-b43e-05dbcdea524d',
|
|
197
|
-
actionsUrl:
|
|
198
|
-
|
|
199
|
-
|
|
182
|
+
actionsUrl:
|
|
183
|
+
'https://cme-junctionbox-apdx2-006-apdx2-public.wbx2.com:443/calliope/api/v1/rest/send/16a7d18c-71a5-4f51-8732-b456e7832197/calliope/api/v1/confluences/cd12fc68-53e9-43c2-be01-/actions',
|
|
184
|
+
type: 'SDP',
|
|
185
|
+
},
|
|
200
186
|
],
|
|
201
187
|
mediaSessions: [
|
|
202
188
|
{
|
|
203
189
|
mediaType: 'audio',
|
|
204
190
|
mediaContent: 'main',
|
|
205
191
|
direction: 'sendrecv',
|
|
206
|
-
state: 'inactive'
|
|
192
|
+
state: 'inactive',
|
|
207
193
|
},
|
|
208
194
|
{
|
|
209
195
|
mediaType: 'video',
|
|
210
196
|
mediaContent: 'main',
|
|
211
197
|
direction: 'sendrecv',
|
|
212
|
-
state: 'inactive'
|
|
198
|
+
state: 'inactive',
|
|
213
199
|
},
|
|
214
200
|
{
|
|
215
201
|
mediaType: 'audio',
|
|
216
202
|
mediaContent: 'slides',
|
|
217
203
|
direction: 'inactive',
|
|
218
|
-
state: 'inactive'
|
|
204
|
+
state: 'inactive',
|
|
219
205
|
},
|
|
220
206
|
{
|
|
221
207
|
mediaType: 'video',
|
|
222
208
|
mediaContent: 'slides',
|
|
223
209
|
direction: 'recvonly',
|
|
224
|
-
state: 'inactive'
|
|
225
|
-
}
|
|
210
|
+
state: 'inactive',
|
|
211
|
+
},
|
|
226
212
|
],
|
|
227
213
|
mediaSessionsExternal: false,
|
|
228
214
|
state: 'JOINED',
|
|
229
|
-
intents: [
|
|
230
|
-
null
|
|
231
|
-
],
|
|
215
|
+
intents: [null],
|
|
232
216
|
keepAliveSecs: 20,
|
|
233
217
|
callLegId: '84bbb491-598f-4828-bd27',
|
|
234
218
|
correlationId: '74421718-e1f8-4555-9497',
|
|
235
219
|
isVideoCallback: false,
|
|
236
|
-
csis: [
|
|
237
|
-
515285760,
|
|
238
|
-
515285761,
|
|
239
|
-
3779681281,
|
|
240
|
-
3779681280
|
|
241
|
-
],
|
|
220
|
+
csis: [515285760, 515285761, 3779681281, 3779681280],
|
|
242
221
|
serverTranscoded: true,
|
|
243
222
|
serverComposed: true,
|
|
244
|
-
availableLayouts: [
|
|
245
|
-
|
|
246
|
-
'ActivePresence',
|
|
247
|
-
'Prominent',
|
|
248
|
-
'Equal',
|
|
249
|
-
'OnePlusN'
|
|
250
|
-
]
|
|
251
|
-
}
|
|
223
|
+
availableLayouts: ['Single', 'ActivePresence', 'Prominent', 'Equal', 'OnePlusN'],
|
|
224
|
+
},
|
|
252
225
|
],
|
|
253
226
|
status: {
|
|
254
227
|
audioStatus: 'SENDRECV',
|
|
255
228
|
videoStatus: 'SENDRECV',
|
|
256
229
|
videoSlidesStatus: 'RECVONLY',
|
|
257
230
|
audioSlidesStatus: 'INACTIVE',
|
|
258
|
-
csis: [
|
|
259
|
-
515285760,
|
|
260
|
-
515285761,
|
|
261
|
-
3779681281,
|
|
262
|
-
3779681280
|
|
263
|
-
]
|
|
231
|
+
csis: [515285760, 515285761, 3779681281, 3779681280],
|
|
264
232
|
},
|
|
265
233
|
suggestedMedia: [
|
|
266
234
|
{
|
|
267
235
|
mediaType: 'audio',
|
|
268
236
|
mediaContent: 'main',
|
|
269
|
-
direction: 'inactive'
|
|
237
|
+
direction: 'inactive',
|
|
270
238
|
},
|
|
271
239
|
{
|
|
272
240
|
mediaType: 'video',
|
|
273
241
|
mediaContent: 'main',
|
|
274
|
-
direction: 'recvonly'
|
|
242
|
+
direction: 'recvonly',
|
|
275
243
|
},
|
|
276
244
|
{
|
|
277
245
|
mediaType: 'video',
|
|
278
246
|
mediaContent: 'slides',
|
|
279
|
-
direction: 'sendrecv'
|
|
280
|
-
}
|
|
247
|
+
direction: 'sendrecv',
|
|
248
|
+
},
|
|
281
249
|
],
|
|
282
250
|
controls: {
|
|
283
251
|
audio: {
|
|
284
252
|
muted: false,
|
|
285
253
|
requestedToUnmute: false,
|
|
286
|
-
meta: {}
|
|
254
|
+
meta: {},
|
|
287
255
|
},
|
|
288
256
|
localRecord: {
|
|
289
|
-
recording: false
|
|
257
|
+
recording: false,
|
|
290
258
|
},
|
|
291
259
|
layouts: [
|
|
292
260
|
{
|
|
293
261
|
type: 'activePresence',
|
|
294
|
-
deviceUrl: 'https://wdm-a.wbx2.com/wdm/api/v1/devices/20eabde3-4254-48da-9a24'
|
|
295
|
-
}
|
|
262
|
+
deviceUrl: 'https://wdm-a.wbx2.com/wdm/api/v1/devices/20eabde3-4254-48da-9a24',
|
|
263
|
+
},
|
|
296
264
|
],
|
|
297
265
|
role: {
|
|
298
266
|
presenter: true,
|
|
@@ -301,11 +269,11 @@ export const selfWithInactivity = {
|
|
|
301
269
|
type: 'PRESENTER',
|
|
302
270
|
hasRole: true,
|
|
303
271
|
meta: {
|
|
304
|
-
lastModified: '2020-07-20T20:32:35.259Z'
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
]
|
|
308
|
-
}
|
|
272
|
+
lastModified: '2020-07-20T20:32:35.259Z',
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
],
|
|
276
|
+
},
|
|
309
277
|
},
|
|
310
278
|
enableDTMF: true,
|
|
311
279
|
id: 'e0d54e94-226c-3290-b75a-',
|
|
@@ -313,5 +281,6 @@ export const selfWithInactivity = {
|
|
|
313
281
|
resourceGuest: false,
|
|
314
282
|
moderator: true,
|
|
315
283
|
panelist: false,
|
|
316
|
-
mediaBaseUrl:
|
|
284
|
+
mediaBaseUrl:
|
|
285
|
+
'https://locus.meet-a.prod.meetapi.webex.com/locus/api/v1/loci/4e073f82-f5b6-31e5-93b3/participant/e0d54e94-226c-3290-b75a-/media',
|
|
317
286
|
};
|
|
@@ -60,7 +60,10 @@ describe('plugin-meetings', () => {
|
|
|
60
60
|
|
|
61
61
|
describe('canNotViewTheParticipantList', () => {
|
|
62
62
|
it('should return the correct value', () => {
|
|
63
|
-
assert.equal(
|
|
63
|
+
assert.equal(
|
|
64
|
+
SelfUtils.canNotViewTheParticipantList(self),
|
|
65
|
+
self.canNotViewTheParticipantList
|
|
66
|
+
);
|
|
64
67
|
});
|
|
65
68
|
|
|
66
69
|
it('should return false if the new self does not have a value', () => {
|
|
@@ -90,17 +93,23 @@ describe('plugin-meetings', () => {
|
|
|
90
93
|
it('get roles works', () => {
|
|
91
94
|
assert.deepEqual(SelfUtils.getRoles(self), ['PRESENTER']);
|
|
92
95
|
|
|
93
|
-
assert.deepEqual(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
96
|
+
assert.deepEqual(
|
|
97
|
+
SelfUtils.getRoles({
|
|
98
|
+
controls: {
|
|
99
|
+
role: {roles: [{type: 'SOME_ARBITRARY_ROLE', hasRole: true}]},
|
|
100
|
+
},
|
|
101
|
+
}),
|
|
102
|
+
['SOME_ARBITRARY_ROLE']
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
assert.deepEqual(
|
|
106
|
+
SelfUtils.getRoles({
|
|
107
|
+
controls: {
|
|
108
|
+
role: {roles: [{type: 'SOME_ARBITRARY_ROLE', hasRole: false}]},
|
|
109
|
+
},
|
|
110
|
+
}),
|
|
111
|
+
[]
|
|
112
|
+
);
|
|
104
113
|
|
|
105
114
|
assert.deepEqual(SelfUtils.getRoles({}), []);
|
|
106
115
|
assert.deepEqual(SelfUtils.getRoles(), []);
|
|
@@ -20,7 +20,7 @@ describe('plugin-meetings', () => {
|
|
|
20
20
|
error: () => {},
|
|
21
21
|
warn: () => {},
|
|
22
22
|
trace: () => {},
|
|
23
|
-
debug: () => {}
|
|
23
|
+
debug: () => {},
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
beforeEach(() => {
|
|
@@ -34,8 +34,8 @@ describe('plugin-meetings', () => {
|
|
|
34
34
|
writable: true,
|
|
35
35
|
value: {
|
|
36
36
|
getSupportedConstraints: sinon.stub().returns({
|
|
37
|
-
sampleRate: true
|
|
38
|
-
})
|
|
37
|
+
sampleRate: true,
|
|
38
|
+
}),
|
|
39
39
|
},
|
|
40
40
|
});
|
|
41
41
|
LoggerConfig.set({verboseEvents: true, enable: false});
|
|
@@ -51,8 +51,8 @@ describe('plugin-meetings', () => {
|
|
|
51
51
|
readyState: 'live',
|
|
52
52
|
enabled: true,
|
|
53
53
|
getSettings: () => ({
|
|
54
|
-
sampleRate: 48000
|
|
55
|
-
})
|
|
54
|
+
sampleRate: 48000,
|
|
55
|
+
}),
|
|
56
56
|
});
|
|
57
57
|
|
|
58
58
|
class FakeMediaStream {
|
|
@@ -85,7 +85,7 @@ describe('plugin-meetings', () => {
|
|
|
85
85
|
connect: () => undefined,
|
|
86
86
|
mediaStream: {
|
|
87
87
|
getAudioTracks() {
|
|
88
|
-
|
|
88
|
+
// eslint-disable-next-line no-undef
|
|
89
89
|
return [new MediaStreamTrack()];
|
|
90
90
|
},
|
|
91
91
|
},
|
|
@@ -96,7 +96,7 @@ describe('plugin-meetings', () => {
|
|
|
96
96
|
return {
|
|
97
97
|
stream: {
|
|
98
98
|
getAudioTracks() {
|
|
99
|
-
|
|
99
|
+
// eslint-disable-next-line no-undef
|
|
100
100
|
return [new MediaStreamTrack()];
|
|
101
101
|
},
|
|
102
102
|
},
|
|
@@ -112,7 +112,7 @@ describe('plugin-meetings', () => {
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
connect() {
|
|
115
|
-
|
|
115
|
+
/* placeholder method */
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
|
|
@@ -128,7 +128,7 @@ describe('plugin-meetings', () => {
|
|
|
128
128
|
|
|
129
129
|
getSettings() {
|
|
130
130
|
return {
|
|
131
|
-
sampleRate: 48000
|
|
131
|
+
sampleRate: 48000,
|
|
132
132
|
};
|
|
133
133
|
}
|
|
134
134
|
}
|
|
@@ -157,15 +157,15 @@ describe('plugin-meetings', () => {
|
|
|
157
157
|
beforeEach(() => {
|
|
158
158
|
webex = new MockWebex({
|
|
159
159
|
children: {
|
|
160
|
-
meetings: Meetings
|
|
161
|
-
}
|
|
160
|
+
meetings: Meetings,
|
|
161
|
+
},
|
|
162
162
|
});
|
|
163
163
|
meeting = new Meeting(
|
|
164
164
|
{
|
|
165
|
-
userId: uuid1
|
|
165
|
+
userId: uuid1,
|
|
166
166
|
},
|
|
167
167
|
{
|
|
168
|
-
parent: webex
|
|
168
|
+
parent: webex,
|
|
169
169
|
}
|
|
170
170
|
);
|
|
171
171
|
|
|
@@ -179,9 +179,11 @@ describe('plugin-meetings', () => {
|
|
|
179
179
|
sinon.replace(meeting, 'addMedia', () => {
|
|
180
180
|
sinon.stub(meeting.mediaProperties, 'audioTrack').value(fakeMediaTrack());
|
|
181
181
|
sinon.stub(meeting.mediaProperties, 'mediaDirection').value({
|
|
182
|
-
receiveAudio: true
|
|
182
|
+
receiveAudio: true,
|
|
183
183
|
});
|
|
184
|
-
sinon
|
|
184
|
+
sinon
|
|
185
|
+
.stub(meeting.mediaProperties, 'webrtcMediaConnection')
|
|
186
|
+
.value({updateSendReceiveOptions: sinon.stub()});
|
|
185
187
|
});
|
|
186
188
|
});
|
|
187
189
|
|
|
@@ -200,10 +202,7 @@ describe('plugin-meetings', () => {
|
|
|
200
202
|
assert.equal(effects.state.bnr.enabled, BNR_STATUS.ENABLED);
|
|
201
203
|
|
|
202
204
|
assert(Metrics.sendBehavioralMetric.calledOnce);
|
|
203
|
-
assert.calledWith(
|
|
204
|
-
Metrics.sendBehavioralMetric,
|
|
205
|
-
BEHAVIORAL_METRICS.ENABLE_BNR_SUCCESS,
|
|
206
|
-
);
|
|
205
|
+
assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ENABLE_BNR_SUCCESS);
|
|
207
206
|
});
|
|
208
207
|
|
|
209
208
|
it('does resolve request if bnr is already enabled', async () => {
|
|
@@ -213,12 +212,14 @@ describe('plugin-meetings', () => {
|
|
|
213
212
|
});
|
|
214
213
|
|
|
215
214
|
it('if called twice, does bnr effect enable on audio track for the first request and resolves second', async () => {
|
|
216
|
-
Promise.all([
|
|
217
|
-
.
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
215
|
+
Promise.all([
|
|
216
|
+
effects.handleClientRequest(true, meeting),
|
|
217
|
+
effects.handleClientRequest(true, meeting),
|
|
218
|
+
]).then((resolveFirst, resolveSecond) => {
|
|
219
|
+
assert.isTrue(resolveFirst);
|
|
220
|
+
assert.isTrue(resolveSecond);
|
|
221
|
+
assert.calledOnce(MediaUtil.createMediaStream);
|
|
222
|
+
});
|
|
222
223
|
});
|
|
223
224
|
|
|
224
225
|
it('should throw error for inappropriate sample rate and send error metrics', async () => {
|
|
@@ -227,8 +228,8 @@ describe('plugin-meetings', () => {
|
|
|
227
228
|
stop: () => {},
|
|
228
229
|
readyState: 'live',
|
|
229
230
|
getSettings: () => ({
|
|
230
|
-
sampleRate: 49000
|
|
231
|
-
})
|
|
231
|
+
sampleRate: 49000,
|
|
232
|
+
}),
|
|
232
233
|
});
|
|
233
234
|
|
|
234
235
|
sinon.stub(meeting.mediaProperties, 'audioTrack').value(fakeMediaTrack1());
|
|
@@ -237,16 +238,12 @@ describe('plugin-meetings', () => {
|
|
|
237
238
|
MediaUtil.createMediaStream = sinon.stub().returns(new MediaStream([fakeMediaTrack1()]));
|
|
238
239
|
try {
|
|
239
240
|
await effects.handleClientRequest(true, meeting);
|
|
240
|
-
}
|
|
241
|
-
catch (err) {
|
|
241
|
+
} catch (err) {
|
|
242
242
|
assert(Metrics.sendBehavioralMetric.calledOnce);
|
|
243
|
-
assert.calledWith(
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
stack: err.stack
|
|
248
|
-
}
|
|
249
|
-
);
|
|
243
|
+
assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ENABLE_BNR_FAILURE, {
|
|
244
|
+
reason: err.message,
|
|
245
|
+
stack: err.stack,
|
|
246
|
+
});
|
|
250
247
|
assert.equal(err.message, 'Sample rate of 49000 is not supported.');
|
|
251
248
|
}
|
|
252
249
|
});
|
|
@@ -265,25 +262,18 @@ describe('plugin-meetings', () => {
|
|
|
265
262
|
assert.equal(effects.state.bnr.enabled, BNR_STATUS.NOT_ENABLED);
|
|
266
263
|
|
|
267
264
|
assert(Metrics.sendBehavioralMetric.calledOnce);
|
|
268
|
-
assert.calledWith(
|
|
269
|
-
Metrics.sendBehavioralMetric,
|
|
270
|
-
BEHAVIORAL_METRICS.DISABLE_BNR_SUCCESS,
|
|
271
|
-
);
|
|
265
|
+
assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.DISABLE_BNR_SUCCESS);
|
|
272
266
|
});
|
|
273
267
|
|
|
274
268
|
it('reject request for disable bnr if not enabled', async () => {
|
|
275
269
|
try {
|
|
276
270
|
await effects.handleClientRequest(false, meeting);
|
|
277
|
-
}
|
|
278
|
-
catch (e) {
|
|
271
|
+
} catch (e) {
|
|
279
272
|
assert.equal(e.message, 'Can not disable as BNR is not enabled');
|
|
280
273
|
assert.equal(effects.state.bnr.enabled, BNR_STATUS.ENABLED);
|
|
281
274
|
|
|
282
275
|
assert(Metrics.sendBehavioralMetric.calledOnce);
|
|
283
|
-
assert.calledWith(
|
|
284
|
-
Metrics.sendBehavioralMetric,
|
|
285
|
-
BEHAVIORAL_METRICS.DISABLE_BNR_FAILURE,
|
|
286
|
-
);
|
|
276
|
+
assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.DISABLE_BNR_FAILURE);
|
|
287
277
|
}
|
|
288
278
|
});
|
|
289
279
|
});
|