@webex/plugin-meetings 2.35.3 → 2.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +7 -0
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +8 -0
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +8 -0
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +7 -0
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +7 -0
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +7 -0
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +7 -0
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +7 -0
- 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 +5 -2
- 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-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +3 -0
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.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 +43 -5
- 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 +12 -3
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +12 -0
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.js +8 -1
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/index.js +206 -46
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +6 -0
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +82 -24
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +4 -1
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +5 -0
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +14 -2
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -0
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +4 -1
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +72 -20
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +4 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +30 -7
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +2 -1
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +1 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +12 -1
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +19 -9
- 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 +8 -0
- package/dist/metrics/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +10 -2
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.js +11 -4
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +11 -0
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -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 +17 -7
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +1 -0
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.js +111 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +40 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +21 -2
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/collection.js +1 -0
- package/dist/roap/collection.js.map +1 -1
- package/dist/roap/handler.js +14 -2
- package/dist/roap/handler.js.map +1 -1
- package/dist/roap/index.js +11 -1
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +7 -2
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.js.map +1 -1
- package/dist/roap/turnDiscovery.js +9 -1
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.js.map +1 -1
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +19 -1
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +9 -3
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +10 -3
- package/dist/transcription/index.js.map +1 -1
- package/package.json +17 -17
- package/src/common/{browser-detection.js → browser-detection.ts} +1 -1
- package/src/common/collection.ts +6 -6
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +5 -1
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +6 -1
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +6 -1
- package/src/common/errors/{media.js → media.ts} +5 -1
- package/src/common/errors/parameter.ts +3 -2
- package/src/common/errors/{password-error.js → password-error.ts} +5 -1
- package/src/common/errors/{permission.js → permission.ts} +5 -1
- package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
- package/src/common/errors/{reconnection.js → reconnection.ts} +5 -1
- package/src/common/errors/{stats.js → stats.ts} +5 -1
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +1 -2
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +3 -1
- package/src/common/events/{events-scope.js → events-scope.ts} +1 -1
- package/src/common/events/{events.js → events.ts} +0 -0
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +1 -2
- package/src/common/events/{util.js → util.ts} +1 -1
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/{logger-proxy.js → logger-proxy.ts} +1 -1
- package/src/common/logs/{request.js → request.ts} +12 -2
- package/src/common/queue.ts +1 -2
- package/src/{config.js → config.ts} +1 -0
- package/src/constants.ts +1 -0
- package/src/locus-info/{controlsUtils.js → controlsUtils.ts} +4 -4
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +1 -1
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +5 -5
- package/src/locus-info/{index.js → index.ts} +67 -32
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +3 -4
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +13 -13
- package/src/locus-info/{parser.js → parser.ts} +22 -12
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +17 -19
- package/src/media/{index.js → index.ts} +108 -39
- package/src/media/{properties.js → properties.ts} +16 -4
- package/src/media/{util.js → util.ts} +2 -3
- package/src/mediaQualityMetrics/{config.js → config.ts} +1 -1
- package/src/meeting/{effectsState.js → effectsState.ts} +12 -6
- package/src/meeting/{index.js → index.ts} +365 -157
- package/src/meeting/{muteState.js → muteState.ts} +16 -11
- package/src/meeting/{request.js → request.ts} +147 -36
- package/src/meeting/{state.js → state.ts} +6 -6
- package/src/meeting/{util.js → util.ts} +4 -4
- package/src/meeting-info/{collection.js → collection.ts} +4 -1
- package/src/meeting-info/{index.js → index.ts} +10 -6
- package/src/meeting-info/{meeting-info-v2.js → meeting-info-v2.ts} +28 -10
- package/src/meeting-info/{request.js → request.ts} +6 -2
- package/src/meeting-info/{util.js → util.ts} +6 -5
- package/src/meeting-info/{utilv2.js → utilv2.ts} +8 -7
- package/src/meetings/{collection.js → collection.ts} +5 -2
- package/src/meetings/{index.js → index.ts} +88 -22
- package/src/meetings/{request.js → request.ts} +6 -1
- package/src/meetings/{util.js → util.ts} +5 -3
- package/src/member/{index.js → index.ts} +46 -15
- package/src/member/{util.js → util.ts} +17 -16
- package/src/members/{collection.js → collection.ts} +2 -1
- package/src/members/{index.js → index.ts} +39 -26
- package/src/members/{request.js → request.ts} +16 -5
- package/src/members/{util.js → util.ts} +7 -7
- package/src/metrics/{config.js → config.ts} +0 -2
- package/src/metrics/{constants.js → constants.ts} +0 -0
- package/src/metrics/{index.js → index.ts} +27 -8
- package/src/networkQualityMonitor/{index.js → index.ts} +18 -3
- package/src/peer-connection-manager/{index.js → index.ts} +72 -28
- package/src/personal-meeting-room/{index.js → index.ts} +17 -4
- package/src/personal-meeting-room/{request.js → request.ts} +3 -1
- package/src/personal-meeting-room/{util.js → util.ts} +1 -1
- package/src/reachability/{index.js → index.ts} +28 -17
- package/src/reachability/request.ts +4 -2
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +36 -0
- package/src/reconnection-manager/{index.js → index.ts} +42 -13
- package/src/roap/{collection.js → collection.ts} +1 -0
- package/src/roap/{handler.js → handler.ts} +15 -4
- package/src/roap/{index.js → index.ts} +23 -10
- package/src/roap/{request.js → request.ts} +19 -3
- package/src/roap/{state.js → state.ts} +3 -2
- package/src/roap/turnDiscovery.ts +14 -5
- package/src/roap/{util.js → util.ts} +1 -2
- package/src/statsAnalyzer/{global.js → global.ts} +0 -0
- package/src/statsAnalyzer/{index.js → index.ts} +36 -17
- package/src/statsAnalyzer/{mqaUtil.js → mqaUtil.ts} +6 -1
- package/src/transcription/{index.js → index.ts} +16 -11
- package/test/integration/spec/space-meeting.js +1 -2
- package/test/unit/spec/meeting/index.js +113 -14
- package/test/unit/spec/meeting/request.js +25 -1
- package/test/unit/spec/roap/util.js +1 -1
|
@@ -17,13 +17,13 @@ import {
|
|
|
17
17
|
} from '../constants';
|
|
18
18
|
import ParameterError from '../common/errors/parameter';
|
|
19
19
|
|
|
20
|
-
const MemberUtil = {};
|
|
20
|
+
const MemberUtil: any = {};
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* @param {Object} participant the locus participant
|
|
24
24
|
* @returns {Boolean}
|
|
25
25
|
*/
|
|
26
|
-
MemberUtil.isUser = (participant) => participant && participant.type === _USER_;
|
|
26
|
+
MemberUtil.isUser = (participant: any) => participant && participant.type === _USER_;
|
|
27
27
|
|
|
28
28
|
MemberUtil.isModerator = (participant) => participant && participant.moderator;
|
|
29
29
|
|
|
@@ -31,13 +31,13 @@ MemberUtil.isModerator = (participant) => participant && participant.moderator;
|
|
|
31
31
|
* @param {Object} participant the locus participant
|
|
32
32
|
* @returns {Boolean}
|
|
33
33
|
*/
|
|
34
|
-
MemberUtil.isGuest = (participant) => participant && participant.guest;
|
|
34
|
+
MemberUtil.isGuest = (participant: any) => participant && participant.guest;
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* @param {Object} participant the locus participant
|
|
38
38
|
* @returns {Boolean}
|
|
39
39
|
*/
|
|
40
|
-
MemberUtil.isDevice = (participant) => participant && participant.type === _RESOURCE_ROOM_;
|
|
40
|
+
MemberUtil.isDevice = (participant: any) => participant && participant.type === _RESOURCE_ROOM_;
|
|
41
41
|
|
|
42
42
|
MemberUtil.isModeratorAssignmentProhibited = (participant) => participant && participant.moderatorAssignmentNotAllowed;
|
|
43
43
|
|
|
@@ -48,7 +48,7 @@ MemberUtil.isModeratorAssignmentProhibited = (participant) => participant && par
|
|
|
48
48
|
* @param {String} id
|
|
49
49
|
* @returns {Boolean}
|
|
50
50
|
*/
|
|
51
|
-
MemberUtil.isSame = (participant, id) => participant &&
|
|
51
|
+
MemberUtil.isSame = (participant: any, id: string) => participant &&
|
|
52
52
|
(participant.id === id || participant.person && participant.person.id === id);
|
|
53
53
|
|
|
54
54
|
/**
|
|
@@ -58,7 +58,7 @@ MemberUtil.isSame = (participant, id) => participant &&
|
|
|
58
58
|
* @param {String} id
|
|
59
59
|
* @returns {Boolean}
|
|
60
60
|
*/
|
|
61
|
-
MemberUtil.isAssociatedSame = (participant, id) => participant &&
|
|
61
|
+
MemberUtil.isAssociatedSame = (participant: any, id: string) => participant &&
|
|
62
62
|
participant.associatedUsers &&
|
|
63
63
|
participant.associatedUsers.some((user) => (user.id === id || user.person && user.person.id === id));
|
|
64
64
|
|
|
@@ -68,16 +68,17 @@ participant.associatedUsers.some((user) => (user.id === id || user.person && use
|
|
|
68
68
|
* @param {String} status
|
|
69
69
|
* @returns {Boolean}
|
|
70
70
|
*/
|
|
71
|
-
MemberUtil.isNotAdmitted = (participant, isGuest, status) => participant &&
|
|
71
|
+
MemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string) => participant &&
|
|
72
72
|
participant.guest && ((participant.devices && participant.devices[0] &&
|
|
73
73
|
participant.devices[0].intent && participant.devices[0].intent.type === _WAIT_ &&
|
|
74
|
+
// @ts-ignore
|
|
74
75
|
isGuest && status === _IN_LOBBY_) || !status === _IN_MEETING_);
|
|
75
76
|
|
|
76
77
|
/**
|
|
77
78
|
* @param {Object} participant the locus participant
|
|
78
79
|
* @returns {Boolean}
|
|
79
80
|
*/
|
|
80
|
-
MemberUtil.isAudioMuted = (participant) => {
|
|
81
|
+
MemberUtil.isAudioMuted = (participant: any) => {
|
|
81
82
|
if (!participant) {
|
|
82
83
|
throw new ParameterError('Audio could not be processed, participant is undefined.');
|
|
83
84
|
}
|
|
@@ -99,7 +100,7 @@ MemberUtil.isAudioMuted = (participant) => {
|
|
|
99
100
|
* @param {Object} participant the locus participant
|
|
100
101
|
* @returns {Boolean}
|
|
101
102
|
*/
|
|
102
|
-
MemberUtil.isVideoMuted = (participant) => {
|
|
103
|
+
MemberUtil.isVideoMuted = (participant: any) => {
|
|
103
104
|
if (!participant) {
|
|
104
105
|
throw new ParameterError('Video could not be processed, participant is undefined.');
|
|
105
106
|
}
|
|
@@ -111,7 +112,7 @@ MemberUtil.isVideoMuted = (participant) => {
|
|
|
111
112
|
* @param {Object} participant the locus participant
|
|
112
113
|
* @returns {Boolean}
|
|
113
114
|
*/
|
|
114
|
-
MemberUtil.isHandRaised = (participant) => {
|
|
115
|
+
MemberUtil.isHandRaised = (participant: any) => {
|
|
115
116
|
if (!participant) {
|
|
116
117
|
throw new ParameterError('Raise hand could not be processed, participant is undefined.');
|
|
117
118
|
}
|
|
@@ -125,7 +126,7 @@ MemberUtil.isHandRaised = (participant) => {
|
|
|
125
126
|
* @param {String} accessor
|
|
126
127
|
* @returns {Boolean}
|
|
127
128
|
*/
|
|
128
|
-
MemberUtil.isMuted = (status, accessor) => {
|
|
129
|
+
MemberUtil.isMuted = (status: string, accessor: string) => {
|
|
129
130
|
if (status) {
|
|
130
131
|
if (status[accessor] === _RECEIVE_ONLY_) {
|
|
131
132
|
return true;
|
|
@@ -143,7 +144,7 @@ MemberUtil.isMuted = (status, accessor) => {
|
|
|
143
144
|
* @param {Object} controls
|
|
144
145
|
* @returns {String|null}
|
|
145
146
|
*/
|
|
146
|
-
MemberUtil.getRecordingMember = (controls) => {
|
|
147
|
+
MemberUtil.getRecordingMember = (controls: any) => {
|
|
147
148
|
if (!controls) {
|
|
148
149
|
return null;
|
|
149
150
|
}
|
|
@@ -158,7 +159,7 @@ MemberUtil.getRecordingMember = (controls) => {
|
|
|
158
159
|
* @param {Object} participant the locus participant
|
|
159
160
|
* @returns {Boolean}
|
|
160
161
|
*/
|
|
161
|
-
MemberUtil.isRecording = (participant) => {
|
|
162
|
+
MemberUtil.isRecording = (participant: any) => {
|
|
162
163
|
if (!participant) {
|
|
163
164
|
throw new ParameterError('Recording could not be processed, participant is undefined.');
|
|
164
165
|
}
|
|
@@ -204,7 +205,7 @@ MemberUtil.isMutable = (isSelf, isDevice, isInMeeting, isMuted, type) => {
|
|
|
204
205
|
* @param {Object} participant the locus participant
|
|
205
206
|
* @returns {String}
|
|
206
207
|
*/
|
|
207
|
-
MemberUtil.extractStatus = (participant) => {
|
|
208
|
+
MemberUtil.extractStatus = (participant: any) => {
|
|
208
209
|
if (!(participant && participant.devices && participant.devices.length)) {
|
|
209
210
|
return _NOT_IN_MEETING_;
|
|
210
211
|
}
|
|
@@ -231,7 +232,7 @@ MemberUtil.extractStatus = (participant) => {
|
|
|
231
232
|
* @param {Object} participant the locus participant
|
|
232
233
|
* @returns {String}
|
|
233
234
|
*/
|
|
234
|
-
MemberUtil.extractId = (participant) => {
|
|
235
|
+
MemberUtil.extractId = (participant: any) => {
|
|
235
236
|
if (participant) {
|
|
236
237
|
return participant.id;
|
|
237
238
|
}
|
|
@@ -243,7 +244,7 @@ MemberUtil.extractId = (participant) => {
|
|
|
243
244
|
* @param {Object} participant the locus participant
|
|
244
245
|
* @returns {String}
|
|
245
246
|
*/
|
|
246
|
-
MemberUtil.extractName = (participant) => {
|
|
247
|
+
MemberUtil.extractName = (participant: any) => {
|
|
247
248
|
if (participant && participant.person) {
|
|
248
249
|
return participant.person.name;
|
|
249
250
|
}
|
|
@@ -4,6 +4,7 @@ import {MEETINGS} from '../constants';
|
|
|
4
4
|
* @class MembersCollection
|
|
5
5
|
*/
|
|
6
6
|
export default class MembersCollection {
|
|
7
|
+
members: any;
|
|
7
8
|
namespace = MEETINGS;
|
|
8
9
|
|
|
9
10
|
/**
|
|
@@ -26,7 +27,7 @@ export default class MembersCollection {
|
|
|
26
27
|
* @param {String} id
|
|
27
28
|
* @returns {Member}
|
|
28
29
|
*/
|
|
29
|
-
get(id) {
|
|
30
|
+
get(id: string) {
|
|
30
31
|
return this.members[id];
|
|
31
32
|
}
|
|
32
33
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
3
|
*/
|
|
4
4
|
import {isEmpty} from 'lodash';
|
|
5
|
+
// @ts-ignore
|
|
5
6
|
import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
6
7
|
|
|
7
8
|
import {MEETINGS, EVENT_TRIGGERS, FLOOR_ACTION, CONTENT, WHITEBOARD} from '../constants';
|
|
@@ -60,6 +61,16 @@ import MembersUtil from './util';
|
|
|
60
61
|
* @class Members
|
|
61
62
|
*/
|
|
62
63
|
export default class Members extends StatelessWebexPlugin {
|
|
64
|
+
hostId: any;
|
|
65
|
+
locusUrl: any;
|
|
66
|
+
mediaShareContentId: any;
|
|
67
|
+
mediaShareWhiteboardId: any;
|
|
68
|
+
membersCollection: any;
|
|
69
|
+
membersRequest: any;
|
|
70
|
+
recordingId: any;
|
|
71
|
+
selfId: any;
|
|
72
|
+
type: any;
|
|
73
|
+
|
|
63
74
|
namespace = MEETINGS;
|
|
64
75
|
|
|
65
76
|
/**
|
|
@@ -68,7 +79,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
68
79
|
* @param {Object} options
|
|
69
80
|
* @memberof Members
|
|
70
81
|
*/
|
|
71
|
-
constructor(attrs, options) {
|
|
82
|
+
constructor(attrs: any, options: object) {
|
|
72
83
|
super({}, options);
|
|
73
84
|
/**
|
|
74
85
|
* The Members Request object to interact with server
|
|
@@ -77,6 +88,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
77
88
|
* @private
|
|
78
89
|
* @memberof Members
|
|
79
90
|
*/
|
|
91
|
+
// @ts-ignore
|
|
80
92
|
this.membersRequest = new MembersRequest({}, options);
|
|
81
93
|
/**
|
|
82
94
|
* The Members Collection cache
|
|
@@ -159,7 +171,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
159
171
|
* @private
|
|
160
172
|
* @memberof Members
|
|
161
173
|
*/
|
|
162
|
-
locusSelfUpdate(payload) {
|
|
174
|
+
locusSelfUpdate(payload: { newSelf: any; oldSelf: any }) {
|
|
163
175
|
let newSelfId = null;
|
|
164
176
|
let oldSelfId = null;
|
|
165
177
|
|
|
@@ -209,7 +221,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
209
221
|
* @private
|
|
210
222
|
* @memberof Members
|
|
211
223
|
*/
|
|
212
|
-
locusHostUpdate(payload) {
|
|
224
|
+
locusHostUpdate(payload: { newHost: any; oldHost: any }) {
|
|
213
225
|
let newHostId = null;
|
|
214
226
|
let oldHostId = null;
|
|
215
227
|
|
|
@@ -259,7 +271,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
259
271
|
* @private
|
|
260
272
|
* @memberof Members
|
|
261
273
|
*/
|
|
262
|
-
locusParticipantsUpdate(payload) {
|
|
274
|
+
locusParticipantsUpdate(payload: { participants: object }) {
|
|
263
275
|
if (payload) {
|
|
264
276
|
const delta = this.handleLocusInfoUpdatedParticipants(payload);
|
|
265
277
|
const full = this.handleMembersUpdate(delta); // SDK should propagate the full list for both delta and non delta updates
|
|
@@ -288,7 +300,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
288
300
|
* @private
|
|
289
301
|
* @memberof Members
|
|
290
302
|
*/
|
|
291
|
-
locusMediaSharesUpdate(payload) {
|
|
303
|
+
locusMediaSharesUpdate(payload: { current: any; previous: any }) {
|
|
292
304
|
const currentContent = payload.current?.content;
|
|
293
305
|
const previousContent = payload.previous?.content;
|
|
294
306
|
const currentWhiteboard = payload.current?.whiteboard;
|
|
@@ -370,7 +382,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
370
382
|
* @private
|
|
371
383
|
* @memberof Members
|
|
372
384
|
*/
|
|
373
|
-
locusUrlUpdate(payload) {
|
|
385
|
+
locusUrlUpdate(payload: any) {
|
|
374
386
|
if (payload) {
|
|
375
387
|
this.setLocusUrl(null, payload);
|
|
376
388
|
}
|
|
@@ -384,7 +396,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
384
396
|
* @private
|
|
385
397
|
* @memberof Members
|
|
386
398
|
*/
|
|
387
|
-
locusFullStateTypeUpdate(payload) {
|
|
399
|
+
locusFullStateTypeUpdate(payload: { type: string }) {
|
|
388
400
|
// TODO: at some point there could be a timing issue here, for updating each member
|
|
389
401
|
// ie., if the type changes AND there is no locus update, then each member will not know the type of call
|
|
390
402
|
// which means they cannot determine isMutable && isRemovable
|
|
@@ -403,7 +415,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
403
415
|
* @private
|
|
404
416
|
* @memberof Members
|
|
405
417
|
*/
|
|
406
|
-
handleMembersUpdate(membersUpdate) {
|
|
418
|
+
private handleMembersUpdate(membersUpdate: any) {
|
|
407
419
|
if (membersUpdate) {
|
|
408
420
|
if (membersUpdate.updated) {
|
|
409
421
|
this.constructMembers(membersUpdate.updated);
|
|
@@ -423,7 +435,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
423
435
|
* @private
|
|
424
436
|
* @memberof Members
|
|
425
437
|
*/
|
|
426
|
-
constructMembers(list) {
|
|
438
|
+
private constructMembers(list: Array<any>) {
|
|
427
439
|
list.forEach((member) => {
|
|
428
440
|
this.membersCollection.set(member.id, member);
|
|
429
441
|
});
|
|
@@ -436,7 +448,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
436
448
|
* @private
|
|
437
449
|
* @memberof Members
|
|
438
450
|
*/
|
|
439
|
-
handleLocusInfoUpdatedParticipants(payload) {
|
|
451
|
+
private handleLocusInfoUpdatedParticipants(payload: any) {
|
|
440
452
|
this.hostId = payload.hostId || this.hostId;
|
|
441
453
|
this.selfId = payload.selfId || this.selfId;
|
|
442
454
|
this.recordingId = payload.recordingId;
|
|
@@ -457,7 +469,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
457
469
|
* @public
|
|
458
470
|
* @memberof Members
|
|
459
471
|
*/
|
|
460
|
-
setLocusUrl(locus, locusUrl = null) {
|
|
472
|
+
public setLocusUrl(locus: any, locusUrl: string = null) {
|
|
461
473
|
if (locusUrl) {
|
|
462
474
|
this.locusUrl = locusUrl;
|
|
463
475
|
}
|
|
@@ -478,7 +490,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
478
490
|
* @public
|
|
479
491
|
* @memberof Members
|
|
480
492
|
*/
|
|
481
|
-
setHostId(locus, hostId = null) {
|
|
493
|
+
public setHostId(locus: any, hostId: string = null) {
|
|
482
494
|
if (hostId) {
|
|
483
495
|
this.hostId = hostId;
|
|
484
496
|
}
|
|
@@ -499,7 +511,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
499
511
|
* @public
|
|
500
512
|
* @memberof Members
|
|
501
513
|
*/
|
|
502
|
-
setType(fullState, type = null) {
|
|
514
|
+
public setType(fullState: any, type: string = null) {
|
|
503
515
|
if (type) {
|
|
504
516
|
this.type = type;
|
|
505
517
|
}
|
|
@@ -519,7 +531,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
519
531
|
* @returns {undefined}
|
|
520
532
|
* @memberof Members
|
|
521
533
|
*/
|
|
522
|
-
setSelfId(locus, selfId = null) {
|
|
534
|
+
setSelfId(locus: any, selfId: string = null) {
|
|
523
535
|
if (selfId) {
|
|
524
536
|
this.selfId = selfId;
|
|
525
537
|
}
|
|
@@ -539,7 +551,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
539
551
|
* @returns {undefined}
|
|
540
552
|
* @memberof Members
|
|
541
553
|
*/
|
|
542
|
-
setMediaShareContentId(locus, contentId) {
|
|
554
|
+
setMediaShareContentId(locus: any, contentId?: string) {
|
|
543
555
|
if (contentId) {
|
|
544
556
|
this.mediaShareContentId = contentId;
|
|
545
557
|
}
|
|
@@ -569,7 +581,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
569
581
|
* @returns {undefined}
|
|
570
582
|
* @memberof Members
|
|
571
583
|
*/
|
|
572
|
-
setMediaShareWhiteboardId(locus, whiteboardId) {
|
|
584
|
+
setMediaShareWhiteboardId(locus: any, whiteboardId?: string) {
|
|
573
585
|
if (whiteboardId) {
|
|
574
586
|
this.mediaShareWhiteboardId = whiteboardId;
|
|
575
587
|
}
|
|
@@ -600,7 +612,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
600
612
|
* @private
|
|
601
613
|
* @memberof Members
|
|
602
614
|
*/
|
|
603
|
-
update(participants) {
|
|
615
|
+
private update(participants: Array<any>) {
|
|
604
616
|
const membersUpdate = {added: [], updated: []};
|
|
605
617
|
|
|
606
618
|
if (participants) {
|
|
@@ -649,7 +661,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
649
661
|
* @returns {Promise}
|
|
650
662
|
* @memberof Members
|
|
651
663
|
*/
|
|
652
|
-
addMember(invitee, alertIfActive) {
|
|
664
|
+
addMember(invitee: any, alertIfActive?: boolean) {
|
|
653
665
|
if (!this.locusUrl) {
|
|
654
666
|
return Promise.reject(new ParameterError('The associated locus url for this meeting object must be defined.'));
|
|
655
667
|
}
|
|
@@ -669,7 +681,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
669
681
|
* @returns {Promise}
|
|
670
682
|
* @memberof Members
|
|
671
683
|
*/
|
|
672
|
-
cancelPhoneInvite(invitee) {
|
|
684
|
+
cancelPhoneInvite(invitee: any) {
|
|
673
685
|
if (!this.locusUrl) {
|
|
674
686
|
return Promise.reject(new ParameterError('The associated locus url for this meeting object must be defined.'));
|
|
675
687
|
}
|
|
@@ -691,7 +703,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
691
703
|
* @public
|
|
692
704
|
* @memberof Members
|
|
693
705
|
*/
|
|
694
|
-
admitMembers(memberIds) {
|
|
706
|
+
public admitMembers(memberIds: Array<any>) {
|
|
695
707
|
if (isEmpty(memberIds)) {
|
|
696
708
|
return Promise.reject(new ParameterError('No member ids provided to admit.'));
|
|
697
709
|
}
|
|
@@ -707,7 +719,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
707
719
|
* @public
|
|
708
720
|
* @memberof Members
|
|
709
721
|
*/
|
|
710
|
-
removeMember(memberId) {
|
|
722
|
+
public removeMember(memberId: string) {
|
|
711
723
|
if (!this.locusUrl) {
|
|
712
724
|
return Promise.reject(new ParameterError('The associated locus url for this meeting object must be defined.'));
|
|
713
725
|
}
|
|
@@ -727,7 +739,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
727
739
|
* @public
|
|
728
740
|
* @memberof Members
|
|
729
741
|
*/
|
|
730
|
-
muteMember(memberId, mute = true) {
|
|
742
|
+
public muteMember(memberId: string, mute: boolean = true) {
|
|
731
743
|
if (!this.locusUrl) {
|
|
732
744
|
return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
|
|
733
745
|
}
|
|
@@ -747,7 +759,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
747
759
|
* @public
|
|
748
760
|
* @memberof Members
|
|
749
761
|
*/
|
|
750
|
-
raiseOrLowerHand(memberId, raise = true) {
|
|
762
|
+
public raiseOrLowerHand(memberId: string, raise: boolean = true) {
|
|
751
763
|
if (!this.locusUrl) {
|
|
752
764
|
return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
|
|
753
765
|
}
|
|
@@ -766,7 +778,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
766
778
|
* @public
|
|
767
779
|
* @memberof Members
|
|
768
780
|
*/
|
|
769
|
-
lowerAllHands(requestingMemberId) {
|
|
781
|
+
public lowerAllHands(requestingMemberId: string) {
|
|
770
782
|
if (!this.locusUrl) {
|
|
771
783
|
return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
|
|
772
784
|
}
|
|
@@ -787,7 +799,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
787
799
|
* @public
|
|
788
800
|
* @memberof Members
|
|
789
801
|
*/
|
|
790
|
-
transferHostToMember(memberId, moderator = true) {
|
|
802
|
+
public transferHostToMember(memberId: string, moderator: boolean = true) {
|
|
791
803
|
if (!this.locusUrl) {
|
|
792
804
|
return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
|
|
793
805
|
}
|
|
@@ -808,7 +820,8 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
808
820
|
* @public
|
|
809
821
|
* @memberof Members
|
|
810
822
|
*/
|
|
811
|
-
sendDialPadKey(tones = '', memberId = '') {
|
|
823
|
+
public sendDialPadKey(tones: string = '', memberId: string = '') {
|
|
824
|
+
// @ts-ignore
|
|
812
825
|
if (!tones && tones !== 0) {
|
|
813
826
|
return Promise.reject(new ParameterError('DMTF tones must be passed in'));
|
|
814
827
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @ts-ignore
|
|
1
2
|
import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
2
3
|
|
|
3
4
|
import {MEETINGS} from '../constants';
|
|
@@ -9,7 +10,7 @@ import MembersUtil from './util';
|
|
|
9
10
|
/**
|
|
10
11
|
* @class MembersRequest
|
|
11
12
|
*/
|
|
12
|
-
export default class MembersRequest extends StatelessWebexPlugin {
|
|
13
|
+
export default class MembersRequest extends StatelessWebexPlugin {
|
|
13
14
|
namespace = MEETINGS;
|
|
14
15
|
|
|
15
16
|
/**
|
|
@@ -19,12 +20,13 @@ export default class MembersRequest extends StatelessWebexPlugin {
|
|
|
19
20
|
* @throws {Error} if the options are not valid and complete, must have invitee with emailAddress OR email AND locusUrl
|
|
20
21
|
* @memberof MembersRequest
|
|
21
22
|
*/
|
|
22
|
-
addMembers(options) {
|
|
23
|
+
addMembers(options: any) {
|
|
23
24
|
if (!(!options || !options.invitee || (!options.invitee.emailAddress || !options.invitee.email || !options.invitee.phoneNumber) || !options.locusUrl)) {
|
|
24
25
|
throw new ParameterError('invitee must be passed and the associated locus url for this meeting object must be defined.');
|
|
25
26
|
}
|
|
26
27
|
const requestParams = MembersUtil.getAddMemberRequestParams(options);
|
|
27
28
|
|
|
29
|
+
// @ts-ignore
|
|
28
30
|
return this.request(requestParams);
|
|
29
31
|
}
|
|
30
32
|
|
|
@@ -35,12 +37,13 @@ export default class MembersRequest extends StatelessWebexPlugin {
|
|
|
35
37
|
* @throws {Error} if the options are not valid and complete, must have memberIds AND locusUrl
|
|
36
38
|
* @memberof MembersRequest
|
|
37
39
|
*/
|
|
38
|
-
admitMember(options) {
|
|
40
|
+
admitMember(options: any) {
|
|
39
41
|
if (!options || !options.locusUrl || !options.memberIds) {
|
|
40
42
|
throw new ParameterError('memberIds must be an array passed and the associated locus url for this meeting object must be defined.');
|
|
41
43
|
}
|
|
42
44
|
const requestParams = MembersUtil.getAdmitMemberRequestParams(options);
|
|
43
45
|
|
|
46
|
+
// @ts-ignore
|
|
44
47
|
return this.request(requestParams);
|
|
45
48
|
}
|
|
46
49
|
|
|
@@ -51,6 +54,7 @@ export default class MembersRequest extends StatelessWebexPlugin {
|
|
|
51
54
|
|
|
52
55
|
const requestParams = MembersUtil.getRemoveMemberRequestParams(options);
|
|
53
56
|
|
|
57
|
+
// @ts-ignore
|
|
54
58
|
return this.request(requestParams);
|
|
55
59
|
}
|
|
56
60
|
|
|
@@ -61,6 +65,7 @@ export default class MembersRequest extends StatelessWebexPlugin {
|
|
|
61
65
|
|
|
62
66
|
const requestParams = MembersUtil.getMuteMemberRequestParams(options);
|
|
63
67
|
|
|
68
|
+
// @ts-ignore
|
|
64
69
|
return this.request(requestParams);
|
|
65
70
|
}
|
|
66
71
|
|
|
@@ -71,6 +76,7 @@ export default class MembersRequest extends StatelessWebexPlugin {
|
|
|
71
76
|
|
|
72
77
|
const requestParams = MembersUtil.getRaiseHandMemberRequestParams(options);
|
|
73
78
|
|
|
79
|
+
// @ts-ignore
|
|
74
80
|
return this.request(requestParams);
|
|
75
81
|
}
|
|
76
82
|
|
|
@@ -81,6 +87,7 @@ export default class MembersRequest extends StatelessWebexPlugin {
|
|
|
81
87
|
|
|
82
88
|
const requestParams = MembersUtil.getLowerAllHandsMemberRequestParams(options);
|
|
83
89
|
|
|
90
|
+
// @ts-ignore
|
|
84
91
|
return this.request(requestParams);
|
|
85
92
|
}
|
|
86
93
|
|
|
@@ -91,6 +98,7 @@ export default class MembersRequest extends StatelessWebexPlugin {
|
|
|
91
98
|
|
|
92
99
|
const requestParams = MembersUtil.getTransferHostToMemberRequestParams(options);
|
|
93
100
|
|
|
101
|
+
// @ts-ignore
|
|
94
102
|
return this.request(requestParams);
|
|
95
103
|
}
|
|
96
104
|
|
|
@@ -103,13 +111,15 @@ export default class MembersRequest extends StatelessWebexPlugin {
|
|
|
103
111
|
* @param {String} options.memberId ID of PSTN user
|
|
104
112
|
* @returns {Promise}
|
|
105
113
|
*/
|
|
106
|
-
sendDialPadKey(options) {
|
|
114
|
+
sendDialPadKey(options: { locusUrl: string; url: string; tones: string; memberId: string }) {
|
|
115
|
+
// @ts-ignore
|
|
107
116
|
if (!options || !options.locusUrl || !options.memberId || !options.url || !options.tones && options.tones !== 0) {
|
|
108
117
|
throw new ParameterError('memberId must be defined, the associated locus url, the device url and DTMF tones for this meeting object must be defined.');
|
|
109
118
|
}
|
|
110
119
|
|
|
111
120
|
const requestParams = MembersUtil.generateSendDTMFRequestParams(options);
|
|
112
121
|
|
|
122
|
+
// @ts-ignore
|
|
113
123
|
return this.request(requestParams);
|
|
114
124
|
}
|
|
115
125
|
|
|
@@ -119,13 +129,14 @@ export default class MembersRequest extends StatelessWebexPlugin {
|
|
|
119
129
|
* @throws {Error} if the options are not valid and complete, must have invitee with emailAddress OR email AND locusUrl
|
|
120
130
|
* @memberof MembersRequest
|
|
121
131
|
*/
|
|
122
|
-
cancelPhoneInvite(options) {
|
|
132
|
+
cancelPhoneInvite(options: any) {
|
|
123
133
|
if (!(options?.invitee?.phoneNumber || options?.locusUrl)) {
|
|
124
134
|
throw new ParameterError('invitee must be passed and the associated locus url for this meeting object must be defined.');
|
|
125
135
|
}
|
|
126
136
|
|
|
127
137
|
const requestParams = MembersUtil.generateCancelInviteRequestParams(options);
|
|
128
138
|
|
|
139
|
+
// @ts-ignore
|
|
129
140
|
return this.request(requestParams);
|
|
130
141
|
}
|
|
131
142
|
}
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
_REMOVE_
|
|
13
13
|
} from '../constants';
|
|
14
14
|
|
|
15
|
-
const MembersUtil = {};
|
|
15
|
+
const MembersUtil: any = {};
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* @param {Object} invitee with emailAddress, email or phoneNumber
|
|
@@ -20,7 +20,7 @@ const MembersUtil = {};
|
|
|
20
20
|
* @param {Boolean} alertIfActive
|
|
21
21
|
* @returns {Object} the format object
|
|
22
22
|
*/
|
|
23
|
-
MembersUtil.generateAddMemberOptions = (invitee, locusUrl, alertIfActive) => ({
|
|
23
|
+
MembersUtil.generateAddMemberOptions = (invitee: object, locusUrl: string, alertIfActive: boolean) => ({
|
|
24
24
|
invitee,
|
|
25
25
|
locusUrl,
|
|
26
26
|
alertIfActive
|
|
@@ -31,7 +31,7 @@ MembersUtil.generateAddMemberOptions = (invitee, locusUrl, alertIfActive) => ({
|
|
|
31
31
|
* @param {String} locusUrl
|
|
32
32
|
* @returns {Object} the format object
|
|
33
33
|
*/
|
|
34
|
-
MembersUtil.generateAdmitMemberOptions = (memberIds
|
|
34
|
+
MembersUtil.generateAdmitMemberOptions = (memberIds: Array<any>, locusUrl: string) => ({
|
|
35
35
|
locusUrl,
|
|
36
36
|
memberIds
|
|
37
37
|
});
|
|
@@ -40,7 +40,7 @@ MembersUtil.generateAdmitMemberOptions = (memberIds, locusUrl) => ({
|
|
|
40
40
|
* @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}
|
|
41
41
|
* @returns {Object} with {invitees: [{address}], alertIfActive}
|
|
42
42
|
*/
|
|
43
|
-
MembersUtil.getAddMemberBody = (options) => ({
|
|
43
|
+
MembersUtil.getAddMemberBody = (options: any) => ({
|
|
44
44
|
invitees: [
|
|
45
45
|
{
|
|
46
46
|
address: options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber
|
|
@@ -53,7 +53,7 @@ MembersUtil.getAddMemberBody = (options) => ({
|
|
|
53
53
|
* @param {Object} options with {memberIds}
|
|
54
54
|
* @returns {Object} admit with {memberIds}
|
|
55
55
|
*/
|
|
56
|
-
MembersUtil.getAdmitMemberRequestBody = (options) => ({
|
|
56
|
+
MembersUtil.getAdmitMemberRequestBody = (options: any) => ({
|
|
57
57
|
admit: {participantIds: options.memberIds}
|
|
58
58
|
});
|
|
59
59
|
|
|
@@ -61,7 +61,7 @@ MembersUtil.getAdmitMemberRequestBody = (options) => ({
|
|
|
61
61
|
* @param {Object} format with {memberIds, locusUrl}
|
|
62
62
|
* @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request
|
|
63
63
|
*/
|
|
64
|
-
MembersUtil.getAdmitMemberRequestParams = (format) => {
|
|
64
|
+
MembersUtil.getAdmitMemberRequestParams = (format: any) => {
|
|
65
65
|
const body = MembersUtil.getAdmitMemberRequestBody(format);
|
|
66
66
|
const uri = `${format.locusUrl}/${CONTROLS}`;
|
|
67
67
|
|
|
@@ -76,7 +76,7 @@ MembersUtil.getAdmitMemberRequestParams = (format) => {
|
|
|
76
76
|
* @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}
|
|
77
77
|
* @returns {Object} the request parameters (method, uri, body) needed to make a addMember request
|
|
78
78
|
*/
|
|
79
|
-
MembersUtil.getAddMemberRequestParams = (format) => {
|
|
79
|
+
MembersUtil.getAddMemberRequestParams = (format: any) => {
|
|
80
80
|
const body = MembersUtil.getAddMemberBody(format);
|
|
81
81
|
const requestParams = {
|
|
82
82
|
method: HTTP_VERBS.PUT,
|
|
File without changes
|