@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
package/src/members/index.ts
CHANGED
|
@@ -18,46 +18,46 @@ import {ReceiveSlotManager} from '../multistream/receiveSlotManager';
|
|
|
18
18
|
import {MediaRequestManager} from '../multistream/mediaRequestManager';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
* Members Update Event
|
|
22
|
+
* Emitted when something in the roster list needs to be updated
|
|
23
|
+
* @event members:update
|
|
24
|
+
* @instance
|
|
25
|
+
* @property {Object} delta the changes to the members list
|
|
26
|
+
* @property {Array} delta.updated array only the updates, includes removals, as they will have updated status and member properties
|
|
27
|
+
* @property {Array} delta.added array added members to the meeting
|
|
28
|
+
* @property {Array} full array the full members collection
|
|
29
|
+
* @memberof Members
|
|
30
|
+
*/
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
* Members Content Update Event
|
|
34
|
+
* Emitted when who is sharing changes
|
|
35
|
+
* @event members:content:update
|
|
36
|
+
* @instance
|
|
37
|
+
* @property {String} activeContentSharingId
|
|
38
|
+
* @property {String} endedContentSharingId
|
|
39
|
+
* @memberof Members
|
|
40
|
+
*/
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
43
|
+
* Members Host Update Event
|
|
44
|
+
* Emitted when who is the host changes
|
|
45
|
+
* @event members:host:update
|
|
46
|
+
* @instance
|
|
47
|
+
* @property {String} activeHostId
|
|
48
|
+
* @property {String} endedHostId
|
|
49
|
+
* @memberof Members
|
|
50
|
+
*/
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
53
|
+
* Members Self Update Event
|
|
54
|
+
* Emitted when who is the self changes
|
|
55
|
+
* @event members:self:update
|
|
56
|
+
* @instance
|
|
57
|
+
* @property {String} activeSelfId
|
|
58
|
+
* @property {String} endedSelfId
|
|
59
|
+
* @memberof Members
|
|
60
|
+
*/
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
63
|
* @class Members
|
|
@@ -74,6 +74,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
74
74
|
audio: MediaRequestManager;
|
|
75
75
|
video: MediaRequestManager;
|
|
76
76
|
};
|
|
77
|
+
|
|
77
78
|
recordingId: any;
|
|
78
79
|
selfId: any;
|
|
79
80
|
type: any;
|
|
@@ -94,8 +95,8 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
94
95
|
* @type {MembersRequest}
|
|
95
96
|
* @private
|
|
96
97
|
* @memberof Members
|
|
97
|
-
|
|
98
|
-
|
|
98
|
+
*/
|
|
99
|
+
// @ts-ignore
|
|
99
100
|
this.membersRequest = new MembersRequest({}, options);
|
|
100
101
|
/**
|
|
101
102
|
* The Members Collection cache
|
|
@@ -103,7 +104,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
103
104
|
* @type {MembersCollection}
|
|
104
105
|
* @private
|
|
105
106
|
* @memberof Members
|
|
106
|
-
|
|
107
|
+
*/
|
|
107
108
|
this.membersCollection = new MembersCollection();
|
|
108
109
|
/**
|
|
109
110
|
* The current locus url for the active meeting
|
|
@@ -111,7 +112,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
111
112
|
* @type {String}
|
|
112
113
|
* @private
|
|
113
114
|
* @memberof Members
|
|
114
|
-
|
|
115
|
+
*/
|
|
115
116
|
this.locusUrl = attrs.locusUrl || null;
|
|
116
117
|
/**
|
|
117
118
|
* The current hostId for the meeting
|
|
@@ -119,7 +120,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
119
120
|
* @type {String}
|
|
120
121
|
* @private
|
|
121
122
|
* @memberof Members
|
|
122
|
-
|
|
123
|
+
*/
|
|
123
124
|
this.hostId = null;
|
|
124
125
|
/**
|
|
125
126
|
* The current type for the meeting, could be MEETING or CALL
|
|
@@ -127,7 +128,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
127
128
|
* @type {String}
|
|
128
129
|
* @private
|
|
129
130
|
* @memberof Members
|
|
130
|
-
|
|
131
|
+
*/
|
|
131
132
|
this.type = null;
|
|
132
133
|
/**
|
|
133
134
|
* Locus has a self object, sent individually to the client
|
|
@@ -141,7 +142,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
141
142
|
* @type {String}
|
|
142
143
|
* @private
|
|
143
144
|
* @memberof Members
|
|
144
|
-
|
|
145
|
+
*/
|
|
145
146
|
this.selfId = null;
|
|
146
147
|
/**
|
|
147
148
|
* The current mediaShareContentId for the meeting
|
|
@@ -149,7 +150,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
149
150
|
* @type {String}
|
|
150
151
|
* @private
|
|
151
152
|
* @memberof Members
|
|
152
|
-
|
|
153
|
+
*/
|
|
153
154
|
this.mediaShareContentId = null;
|
|
154
155
|
/**
|
|
155
156
|
* The current mediaShareWhiteboardId for the meeting
|
|
@@ -157,7 +158,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
157
158
|
* @type {String}
|
|
158
159
|
* @private
|
|
159
160
|
* @memberof Members
|
|
160
|
-
|
|
161
|
+
*/
|
|
161
162
|
this.mediaShareWhiteboardId = null;
|
|
162
163
|
/**
|
|
163
164
|
* The current recordingId for the meeting, if it exists
|
|
@@ -165,7 +166,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
165
166
|
* @type {String}
|
|
166
167
|
* @private
|
|
167
168
|
* @memberof Members
|
|
168
|
-
|
|
169
|
+
*/
|
|
169
170
|
this.recordingId = null;
|
|
170
171
|
|
|
171
172
|
/**
|
|
@@ -190,7 +191,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
190
191
|
* @private
|
|
191
192
|
* @memberof Members
|
|
192
193
|
*/
|
|
193
|
-
locusSelfUpdate(payload: {
|
|
194
|
+
locusSelfUpdate(payload: {newSelf: any; oldSelf: any}) {
|
|
194
195
|
let newSelfId = null;
|
|
195
196
|
let oldSelfId = null;
|
|
196
197
|
|
|
@@ -221,12 +222,12 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
221
222
|
this,
|
|
222
223
|
{
|
|
223
224
|
file: 'members',
|
|
224
|
-
function: 'locusSelfUpdate'
|
|
225
|
+
function: 'locusSelfUpdate',
|
|
225
226
|
},
|
|
226
227
|
EVENT_TRIGGERS.MEMBERS_SELF_UPDATE,
|
|
227
228
|
{
|
|
228
229
|
activeSelfId: newSelfId,
|
|
229
|
-
endedSelfId: oldSelfId
|
|
230
|
+
endedSelfId: oldSelfId,
|
|
230
231
|
}
|
|
231
232
|
);
|
|
232
233
|
}
|
|
@@ -240,7 +241,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
240
241
|
* @private
|
|
241
242
|
* @memberof Members
|
|
242
243
|
*/
|
|
243
|
-
locusHostUpdate(payload: {
|
|
244
|
+
locusHostUpdate(payload: {newHost: any; oldHost: any}) {
|
|
244
245
|
let newHostId = null;
|
|
245
246
|
let oldHostId = null;
|
|
246
247
|
|
|
@@ -271,12 +272,12 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
271
272
|
this,
|
|
272
273
|
{
|
|
273
274
|
file: 'members',
|
|
274
|
-
function: 'locusHostUpdate'
|
|
275
|
+
function: 'locusHostUpdate',
|
|
275
276
|
},
|
|
276
277
|
EVENT_TRIGGERS.MEMBERS_HOST_UPDATE,
|
|
277
278
|
{
|
|
278
279
|
activeHostId: newHostId,
|
|
279
|
-
endedHostId: oldHostId
|
|
280
|
+
endedHostId: oldHostId,
|
|
280
281
|
}
|
|
281
282
|
);
|
|
282
283
|
}
|
|
@@ -290,7 +291,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
290
291
|
* @private
|
|
291
292
|
* @memberof Members
|
|
292
293
|
*/
|
|
293
|
-
locusParticipantsUpdate(payload: {
|
|
294
|
+
locusParticipantsUpdate(payload: {participants: object}) {
|
|
294
295
|
if (payload) {
|
|
295
296
|
const delta = this.handleLocusInfoUpdatedParticipants(payload);
|
|
296
297
|
const full = this.handleMembersUpdate(delta); // SDK should propagate the full list for both delta and non delta updates
|
|
@@ -299,12 +300,12 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
299
300
|
this,
|
|
300
301
|
{
|
|
301
302
|
file: 'members',
|
|
302
|
-
function: 'locusParticipantsUpdate'
|
|
303
|
+
function: 'locusParticipantsUpdate',
|
|
303
304
|
},
|
|
304
305
|
EVENT_TRIGGERS.MEMBERS_UPDATE,
|
|
305
306
|
{
|
|
306
307
|
delta,
|
|
307
|
-
full
|
|
308
|
+
full,
|
|
308
309
|
}
|
|
309
310
|
);
|
|
310
311
|
}
|
|
@@ -319,7 +320,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
319
320
|
* @private
|
|
320
321
|
* @memberof Members
|
|
321
322
|
*/
|
|
322
|
-
locusMediaSharesUpdate(payload: {
|
|
323
|
+
locusMediaSharesUpdate(payload: {current: any; previous: any}) {
|
|
323
324
|
const currentContent = payload.current?.content;
|
|
324
325
|
const previousContent = payload.previous?.content;
|
|
325
326
|
const currentWhiteboard = payload.current?.whiteboard;
|
|
@@ -338,8 +339,10 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
338
339
|
if (currentContent.disposition === FLOOR_ACTION.RELEASED) {
|
|
339
340
|
whoStopped = currentContent.beneficiaryId;
|
|
340
341
|
this.mediaShareContentId = null;
|
|
341
|
-
}
|
|
342
|
-
|
|
342
|
+
} else if (
|
|
343
|
+
currentContent.disposition === FLOOR_ACTION.GRANTED &&
|
|
344
|
+
currentContent.beneficiaryId !== previousContent.beneficiaryId
|
|
345
|
+
) {
|
|
343
346
|
whoStopped = previousContent.beneficiaryId;
|
|
344
347
|
}
|
|
345
348
|
}
|
|
@@ -356,8 +359,10 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
356
359
|
if (currentWhiteboard.disposition === FLOOR_ACTION.RELEASED) {
|
|
357
360
|
whoStopped = currentWhiteboard.beneficiaryId;
|
|
358
361
|
this.mediaShareWhiteboardId = null;
|
|
359
|
-
}
|
|
360
|
-
|
|
362
|
+
} else if (
|
|
363
|
+
currentWhiteboard.disposition === FLOOR_ACTION.GRANTED &&
|
|
364
|
+
currentWhiteboard.beneficiaryId !== previousWhiteboard.beneficiaryId
|
|
365
|
+
) {
|
|
361
366
|
whoStopped = previousWhiteboard.beneficiaryId;
|
|
362
367
|
}
|
|
363
368
|
}
|
|
@@ -382,17 +387,16 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
382
387
|
this,
|
|
383
388
|
{
|
|
384
389
|
file: 'members',
|
|
385
|
-
function: 'locusMediaSharesUpdate'
|
|
390
|
+
function: 'locusMediaSharesUpdate',
|
|
386
391
|
},
|
|
387
392
|
EVENT_TRIGGERS.MEMBERS_CONTENT_UPDATE,
|
|
388
393
|
{
|
|
389
394
|
activeSharingId: whoSharing,
|
|
390
|
-
endedSharingId: whoStopped
|
|
395
|
+
endedSharingId: whoStopped,
|
|
391
396
|
}
|
|
392
397
|
);
|
|
393
398
|
}
|
|
394
399
|
|
|
395
|
-
|
|
396
400
|
/**
|
|
397
401
|
* Internal update the locus url value
|
|
398
402
|
* @param {Object} payload
|
|
@@ -415,7 +419,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
415
419
|
* @private
|
|
416
420
|
* @memberof Members
|
|
417
421
|
*/
|
|
418
|
-
locusFullStateTypeUpdate(payload: {
|
|
422
|
+
locusFullStateTypeUpdate(payload: {type: string}) {
|
|
419
423
|
// TODO: at some point there could be a timing issue here, for updating each member
|
|
420
424
|
// ie., if the type changes AND there is no locus update, then each member will not know the type of call
|
|
421
425
|
// which means they cannot determine isMutable && isRemovable
|
|
@@ -472,7 +476,9 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
472
476
|
this.selfId = payload.selfId || this.selfId;
|
|
473
477
|
this.recordingId = payload.recordingId;
|
|
474
478
|
if (!payload.participants) {
|
|
475
|
-
LoggerProxy.logger.warn(
|
|
479
|
+
LoggerProxy.logger.warn(
|
|
480
|
+
'Members:index#handleLocusInfoUpdatedParticipants --> participants payload is missing.'
|
|
481
|
+
);
|
|
476
482
|
}
|
|
477
483
|
const memberUpdate = this.update(payload.participants);
|
|
478
484
|
|
|
@@ -491,12 +497,12 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
491
497
|
public setLocusUrl(locus: any, locusUrl: string = null) {
|
|
492
498
|
if (locusUrl) {
|
|
493
499
|
this.locusUrl = locusUrl;
|
|
494
|
-
}
|
|
495
|
-
else if (locus && (locus.locusUrl || locus.url)) {
|
|
500
|
+
} else if (locus && (locus.locusUrl || locus.url)) {
|
|
496
501
|
this.locusUrl = locus.locusUrl || locus.url;
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
|
|
502
|
+
} else {
|
|
503
|
+
throw new ParameterError(
|
|
504
|
+
'Setting locusUrl for the Members module should be done with a locus object or locusUrl'
|
|
505
|
+
);
|
|
500
506
|
}
|
|
501
507
|
}
|
|
502
508
|
|
|
@@ -512,12 +518,12 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
512
518
|
public setHostId(locus: any, hostId: string = null) {
|
|
513
519
|
if (hostId) {
|
|
514
520
|
this.hostId = hostId;
|
|
515
|
-
}
|
|
516
|
-
else if (locus) {
|
|
521
|
+
} else if (locus) {
|
|
517
522
|
this.hostId = locus && locus.owner && locus.owner.info ? locus.owner.info : null;
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
|
|
523
|
+
} else {
|
|
524
|
+
throw new ParameterError(
|
|
525
|
+
'Setting hostid for the Members module should be done with a locus object or hostId'
|
|
526
|
+
);
|
|
521
527
|
}
|
|
522
528
|
}
|
|
523
529
|
|
|
@@ -533,12 +539,12 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
533
539
|
public setType(fullState: any, type: string = null) {
|
|
534
540
|
if (type) {
|
|
535
541
|
this.type = type;
|
|
536
|
-
}
|
|
537
|
-
else if (fullState) {
|
|
542
|
+
} else if (fullState) {
|
|
538
543
|
this.type = (fullState && fullState.type) || null;
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
|
|
544
|
+
} else {
|
|
545
|
+
throw new ParameterError(
|
|
546
|
+
'Setting type for the Members module should be done with a fullstate object or type string'
|
|
547
|
+
);
|
|
542
548
|
}
|
|
543
549
|
}
|
|
544
550
|
|
|
@@ -553,12 +559,15 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
553
559
|
setSelfId(locus: any, selfId: string = null) {
|
|
554
560
|
if (selfId) {
|
|
555
561
|
this.selfId = selfId;
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
+
} else if (locus) {
|
|
563
|
+
this.selfId =
|
|
564
|
+
locus && locus.self && locus.self.person && locus.self.person.id
|
|
565
|
+
? locus.self.person.id
|
|
566
|
+
: null;
|
|
567
|
+
} else {
|
|
568
|
+
throw new ParameterError(
|
|
569
|
+
'Setting selfid for the Members module should be done with a locus object or selfId'
|
|
570
|
+
);
|
|
562
571
|
}
|
|
563
572
|
}
|
|
564
573
|
|
|
@@ -573,8 +582,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
573
582
|
setMediaShareContentId(locus: any, contentId?: string) {
|
|
574
583
|
if (contentId) {
|
|
575
584
|
this.mediaShareContentId = contentId;
|
|
576
|
-
}
|
|
577
|
-
else if (locus) {
|
|
585
|
+
} else if (locus) {
|
|
578
586
|
const contentMediaShare =
|
|
579
587
|
locus.mediaShares &&
|
|
580
588
|
locus.mediaShares.length &&
|
|
@@ -586,9 +594,10 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
586
594
|
contentMediaShare.floor.beneficiary &&
|
|
587
595
|
contentMediaShare.floor.beneficiary.id) ||
|
|
588
596
|
null;
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
|
|
597
|
+
} else {
|
|
598
|
+
throw new ParameterError(
|
|
599
|
+
'Setting hostid for the Members module should be done with a locus object or hostId'
|
|
600
|
+
);
|
|
592
601
|
}
|
|
593
602
|
}
|
|
594
603
|
|
|
@@ -603,8 +612,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
603
612
|
setMediaShareWhiteboardId(locus: any, whiteboardId?: string) {
|
|
604
613
|
if (whiteboardId) {
|
|
605
614
|
this.mediaShareWhiteboardId = whiteboardId;
|
|
606
|
-
}
|
|
607
|
-
else if (locus) {
|
|
615
|
+
} else if (locus) {
|
|
608
616
|
const whiteboardMediaShare =
|
|
609
617
|
locus.mediaShares &&
|
|
610
618
|
locus.mediaShares.length &&
|
|
@@ -616,9 +624,10 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
616
624
|
whiteboardMediaShare.floor.beneficiary &&
|
|
617
625
|
whiteboardMediaShare.floor.beneficiary.id) ||
|
|
618
626
|
null;
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
|
|
627
|
+
} else {
|
|
628
|
+
throw new ParameterError(
|
|
629
|
+
'Setting hostid for the Members module should be done with a locus object or hostId'
|
|
630
|
+
);
|
|
622
631
|
}
|
|
623
632
|
}
|
|
624
633
|
|
|
@@ -651,11 +660,10 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
651
660
|
hostId: this.hostId,
|
|
652
661
|
contentSharingId: this.mediaShareContentId,
|
|
653
662
|
whiteboardSharingId: this.mediaShareWhiteboardId,
|
|
654
|
-
type: this.type
|
|
663
|
+
type: this.type,
|
|
655
664
|
})
|
|
656
665
|
);
|
|
657
|
-
}
|
|
658
|
-
else {
|
|
666
|
+
} else {
|
|
659
667
|
membersUpdate.added.push(
|
|
660
668
|
new Member(participant, {
|
|
661
669
|
recordingId: this.recordingId,
|
|
@@ -663,7 +671,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
663
671
|
hostId: this.hostId,
|
|
664
672
|
contentSharingId: this.mediaShareContentId,
|
|
665
673
|
whiteboardSharingId: this.mediaShareWhiteboardId,
|
|
666
|
-
type: this.type
|
|
674
|
+
type: this.type,
|
|
667
675
|
})
|
|
668
676
|
);
|
|
669
677
|
}
|
|
@@ -682,11 +690,15 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
682
690
|
*/
|
|
683
691
|
addMember(invitee: any, alertIfActive?: boolean) {
|
|
684
692
|
if (!this.locusUrl) {
|
|
685
|
-
return Promise.reject(
|
|
693
|
+
return Promise.reject(
|
|
694
|
+
new ParameterError('The associated locus url for this meeting object must be defined.')
|
|
695
|
+
);
|
|
686
696
|
}
|
|
687
697
|
if (MembersUtil.isInvalidInvitee(invitee)) {
|
|
688
698
|
return Promise.reject(
|
|
689
|
-
new ParameterError(
|
|
699
|
+
new ParameterError(
|
|
700
|
+
'The invitee must be defined with either a valid email, emailAddress or phoneNumber property.'
|
|
701
|
+
)
|
|
690
702
|
);
|
|
691
703
|
}
|
|
692
704
|
const options = MembersUtil.generateAddMemberOptions(invitee, this.locusUrl, alertIfActive);
|
|
@@ -702,7 +714,9 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
702
714
|
*/
|
|
703
715
|
cancelPhoneInvite(invitee: any) {
|
|
704
716
|
if (!this.locusUrl) {
|
|
705
|
-
return Promise.reject(
|
|
717
|
+
return Promise.reject(
|
|
718
|
+
new ParameterError('The associated locus url for this meeting object must be defined.')
|
|
719
|
+
);
|
|
706
720
|
}
|
|
707
721
|
if (MembersUtil.isInvalidInvitee(invitee)) {
|
|
708
722
|
return Promise.reject(
|
|
@@ -711,7 +725,6 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
711
725
|
}
|
|
712
726
|
const options = MembersUtil.cancelPhoneInviteOptions(invitee, this.locusUrl);
|
|
713
727
|
|
|
714
|
-
|
|
715
728
|
return this.membersRequest.cancelPhoneInvite(options);
|
|
716
729
|
}
|
|
717
730
|
|
|
@@ -740,10 +753,14 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
740
753
|
*/
|
|
741
754
|
public removeMember(memberId: string) {
|
|
742
755
|
if (!this.locusUrl) {
|
|
743
|
-
return Promise.reject(
|
|
756
|
+
return Promise.reject(
|
|
757
|
+
new ParameterError('The associated locus url for this meeting object must be defined.')
|
|
758
|
+
);
|
|
744
759
|
}
|
|
745
760
|
if (!memberId) {
|
|
746
|
-
return Promise.reject(
|
|
761
|
+
return Promise.reject(
|
|
762
|
+
new ParameterError('The member id must be defined to remove the member.')
|
|
763
|
+
);
|
|
747
764
|
}
|
|
748
765
|
const options = MembersUtil.generateRemoveMemberOptions(memberId, this.locusUrl);
|
|
749
766
|
|
|
@@ -758,12 +775,18 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
758
775
|
* @public
|
|
759
776
|
* @memberof Members
|
|
760
777
|
*/
|
|
761
|
-
public muteMember(memberId: string, mute
|
|
778
|
+
public muteMember(memberId: string, mute = true) {
|
|
762
779
|
if (!this.locusUrl) {
|
|
763
|
-
return Promise.reject(
|
|
780
|
+
return Promise.reject(
|
|
781
|
+
new ParameterError(
|
|
782
|
+
'The associated locus url for this meetings members object must be defined.'
|
|
783
|
+
)
|
|
784
|
+
);
|
|
764
785
|
}
|
|
765
786
|
if (!memberId) {
|
|
766
|
-
return Promise.reject(
|
|
787
|
+
return Promise.reject(
|
|
788
|
+
new ParameterError('The member id must be defined to mute the member.')
|
|
789
|
+
);
|
|
767
790
|
}
|
|
768
791
|
const options = MembersUtil.generateMuteMemberOptions(memberId, mute, this.locusUrl);
|
|
769
792
|
|
|
@@ -778,12 +801,18 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
778
801
|
* @public
|
|
779
802
|
* @memberof Members
|
|
780
803
|
*/
|
|
781
|
-
public raiseOrLowerHand(memberId: string, raise
|
|
804
|
+
public raiseOrLowerHand(memberId: string, raise = true) {
|
|
782
805
|
if (!this.locusUrl) {
|
|
783
|
-
return Promise.reject(
|
|
806
|
+
return Promise.reject(
|
|
807
|
+
new ParameterError(
|
|
808
|
+
'The associated locus url for this meetings members object must be defined.'
|
|
809
|
+
)
|
|
810
|
+
);
|
|
784
811
|
}
|
|
785
812
|
if (!memberId) {
|
|
786
|
-
return Promise.reject(
|
|
813
|
+
return Promise.reject(
|
|
814
|
+
new ParameterError('The member id must be defined to raise/lower the hand of the member.')
|
|
815
|
+
);
|
|
787
816
|
}
|
|
788
817
|
const options = MembersUtil.generateRaiseHandMemberOptions(memberId, raise, this.locusUrl);
|
|
789
818
|
|
|
@@ -799,17 +828,27 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
799
828
|
*/
|
|
800
829
|
public lowerAllHands(requestingMemberId: string) {
|
|
801
830
|
if (!this.locusUrl) {
|
|
802
|
-
return Promise.reject(
|
|
831
|
+
return Promise.reject(
|
|
832
|
+
new ParameterError(
|
|
833
|
+
'The associated locus url for this meetings members object must be defined.'
|
|
834
|
+
)
|
|
835
|
+
);
|
|
803
836
|
}
|
|
804
837
|
if (!requestingMemberId) {
|
|
805
|
-
return Promise.reject(
|
|
838
|
+
return Promise.reject(
|
|
839
|
+
new ParameterError(
|
|
840
|
+
'The requestingMemberId must be defined to lower all hands in a meeting.'
|
|
841
|
+
)
|
|
842
|
+
);
|
|
806
843
|
}
|
|
807
|
-
const options = MembersUtil.generateLowerAllHandsMemberOptions(
|
|
844
|
+
const options = MembersUtil.generateLowerAllHandsMemberOptions(
|
|
845
|
+
requestingMemberId,
|
|
846
|
+
this.locusUrl
|
|
847
|
+
);
|
|
808
848
|
|
|
809
849
|
return this.membersRequest.lowerAllHandsMember(options);
|
|
810
850
|
}
|
|
811
851
|
|
|
812
|
-
|
|
813
852
|
/**
|
|
814
853
|
* Transfers the host to another member
|
|
815
854
|
* @param {String} memberId
|
|
@@ -818,19 +857,28 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
818
857
|
* @public
|
|
819
858
|
* @memberof Members
|
|
820
859
|
*/
|
|
821
|
-
public transferHostToMember(memberId: string, moderator
|
|
860
|
+
public transferHostToMember(memberId: string, moderator = true) {
|
|
822
861
|
if (!this.locusUrl) {
|
|
823
|
-
return Promise.reject(
|
|
862
|
+
return Promise.reject(
|
|
863
|
+
new ParameterError(
|
|
864
|
+
'The associated locus url for this meetings members object must be defined.'
|
|
865
|
+
)
|
|
866
|
+
);
|
|
824
867
|
}
|
|
825
868
|
if (!memberId) {
|
|
826
|
-
return Promise.reject(
|
|
869
|
+
return Promise.reject(
|
|
870
|
+
new ParameterError('The member id must be defined to transfer host to the member.')
|
|
871
|
+
);
|
|
827
872
|
}
|
|
828
|
-
const options = MembersUtil.generateTransferHostMemberOptions(
|
|
873
|
+
const options = MembersUtil.generateTransferHostMemberOptions(
|
|
874
|
+
memberId,
|
|
875
|
+
moderator,
|
|
876
|
+
this.locusUrl
|
|
877
|
+
);
|
|
829
878
|
|
|
830
879
|
return this.membersRequest.transferHostToMember(options);
|
|
831
880
|
}
|
|
832
881
|
|
|
833
|
-
|
|
834
882
|
/**
|
|
835
883
|
* Sends DTMF tones for the PSTN member of a meeting
|
|
836
884
|
* @param {String} tones a string of one or more DTMF tones to send
|
|
@@ -839,7 +887,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
839
887
|
* @public
|
|
840
888
|
* @memberof Members
|
|
841
889
|
*/
|
|
842
|
-
public sendDialPadKey(tones
|
|
890
|
+
public sendDialPadKey(tones = '', memberId = '') {
|
|
843
891
|
// @ts-ignore
|
|
844
892
|
if (!tones && tones !== 0) {
|
|
845
893
|
return Promise.reject(new ParameterError('DMTF tones must be passed in'));
|
|
@@ -863,7 +911,11 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
863
911
|
return this.membersRequest.sendDialPadKey(options);
|
|
864
912
|
}
|
|
865
913
|
|
|
866
|
-
return Promise.reject(
|
|
914
|
+
return Promise.reject(
|
|
915
|
+
new Error(
|
|
916
|
+
'Members:index#sendDialPadKey --> cannot send DTMF, meeting does not have a connection to the "locus" call control service.'
|
|
917
|
+
)
|
|
918
|
+
);
|
|
867
919
|
}
|
|
868
920
|
|
|
869
921
|
/** Finds a member that has any device with a csi matching provided value
|
|
@@ -872,10 +924,11 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
872
924
|
* @returns {Member}
|
|
873
925
|
*/
|
|
874
926
|
findMemberByCsi(csi) {
|
|
875
|
-
return Object.values(this.membersCollection.getAll())
|
|
876
|
-
.find((
|
|
877
|
-
|
|
878
|
-
|
|
927
|
+
return Object.values(this.membersCollection.getAll()).find((member) =>
|
|
928
|
+
member.participant?.devices?.find((device) =>
|
|
929
|
+
device.csis?.find((memberCsi) => memberCsi === csi)
|
|
930
|
+
)
|
|
931
|
+
);
|
|
879
932
|
}
|
|
880
933
|
|
|
881
934
|
/**
|
|
@@ -892,7 +945,10 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
892
945
|
this.membersCollection.get(memberId)?.participant?.devices?.forEach((device) => {
|
|
893
946
|
if (device.mediaSessions) {
|
|
894
947
|
const deviceCsis = device.mediaSessions
|
|
895
|
-
?.filter(
|
|
948
|
+
?.filter(
|
|
949
|
+
(mediaSession) =>
|
|
950
|
+
mediaSession.mediaType === mediaType && mediaSession.mediaContent === mediaContent
|
|
951
|
+
)
|
|
896
952
|
.map((mediaSession) => mediaSession.csi);
|
|
897
953
|
|
|
898
954
|
csis.push(...deviceCsis);
|