@webex/plugin-meetings 3.0.0-beta.7 → 3.0.0-beta.9
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 +173 -50
- 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 +54 -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 +14 -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/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/reconnection-manager/index.js +21 -2
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/index.js +23 -13
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +5 -2
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +9 -1
- package/dist/roap/turnDiscovery.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 -18
- 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 +2 -1
- 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} +62 -16
- package/src/media/{properties.js → properties.ts} +16 -4
- package/src/media/{util.js → util.ts} +1 -1
- 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} +341 -156
- package/src/meeting/{muteState.js → muteState.ts} +16 -11
- package/src/meeting/{request.js → request.ts} +124 -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 -21
- 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} +46 -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/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/reconnection-manager/{index.js → index.ts} +41 -12
- package/src/roap/{index.js → index.ts} +27 -18
- package/src/roap/{request.js → request.ts} +14 -2
- package/src/roap/turnDiscovery.ts +14 -5
- 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 +26 -14
- package/test/unit/spec/reconnection-manager/index.js +1 -0
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/peer-connection-manager/util.ts +0 -117
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
|
@@ -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';
|
|
@@ -13,6 +14,8 @@ import ParameterError from '../common/errors/parameter';
|
|
|
13
14
|
import MembersCollection from './collection';
|
|
14
15
|
import MembersRequest from './request';
|
|
15
16
|
import MembersUtil from './util';
|
|
17
|
+
import {ReceiveSlotManager} from '../multistream/receiveSlotManager';
|
|
18
|
+
import {MediaRequestManager} from '../multistream/mediaRequestManager';
|
|
16
19
|
|
|
17
20
|
/**
|
|
18
21
|
* Members Update Event
|
|
@@ -60,6 +63,21 @@ import MembersUtil from './util';
|
|
|
60
63
|
* @class Members
|
|
61
64
|
*/
|
|
62
65
|
export default class Members extends StatelessWebexPlugin {
|
|
66
|
+
hostId: any;
|
|
67
|
+
locusUrl: any;
|
|
68
|
+
mediaShareContentId: any;
|
|
69
|
+
mediaShareWhiteboardId: any;
|
|
70
|
+
membersCollection: any;
|
|
71
|
+
membersRequest: any;
|
|
72
|
+
receiveSlotManager: ReceiveSlotManager;
|
|
73
|
+
mediaRequestManagers: {
|
|
74
|
+
audio: MediaRequestManager;
|
|
75
|
+
video: MediaRequestManager;
|
|
76
|
+
};
|
|
77
|
+
recordingId: any;
|
|
78
|
+
selfId: any;
|
|
79
|
+
type: any;
|
|
80
|
+
|
|
63
81
|
namespace = MEETINGS;
|
|
64
82
|
|
|
65
83
|
/**
|
|
@@ -68,7 +86,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
68
86
|
* @param {Object} options
|
|
69
87
|
* @memberof Members
|
|
70
88
|
*/
|
|
71
|
-
constructor(attrs, options) {
|
|
89
|
+
constructor(attrs: any, options: object) {
|
|
72
90
|
super({}, options);
|
|
73
91
|
/**
|
|
74
92
|
* The Members Request object to interact with server
|
|
@@ -77,6 +95,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
77
95
|
* @private
|
|
78
96
|
* @memberof Members
|
|
79
97
|
*/
|
|
98
|
+
// @ts-ignore
|
|
80
99
|
this.membersRequest = new MembersRequest({}, options);
|
|
81
100
|
/**
|
|
82
101
|
* The Members Collection cache
|
|
@@ -171,7 +190,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
171
190
|
* @private
|
|
172
191
|
* @memberof Members
|
|
173
192
|
*/
|
|
174
|
-
locusSelfUpdate(payload) {
|
|
193
|
+
locusSelfUpdate(payload: { newSelf: any; oldSelf: any }) {
|
|
175
194
|
let newSelfId = null;
|
|
176
195
|
let oldSelfId = null;
|
|
177
196
|
|
|
@@ -221,7 +240,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
221
240
|
* @private
|
|
222
241
|
* @memberof Members
|
|
223
242
|
*/
|
|
224
|
-
locusHostUpdate(payload) {
|
|
243
|
+
locusHostUpdate(payload: { newHost: any; oldHost: any }) {
|
|
225
244
|
let newHostId = null;
|
|
226
245
|
let oldHostId = null;
|
|
227
246
|
|
|
@@ -271,7 +290,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
271
290
|
* @private
|
|
272
291
|
* @memberof Members
|
|
273
292
|
*/
|
|
274
|
-
locusParticipantsUpdate(payload) {
|
|
293
|
+
locusParticipantsUpdate(payload: { participants: object }) {
|
|
275
294
|
if (payload) {
|
|
276
295
|
const delta = this.handleLocusInfoUpdatedParticipants(payload);
|
|
277
296
|
const full = this.handleMembersUpdate(delta); // SDK should propagate the full list for both delta and non delta updates
|
|
@@ -300,7 +319,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
300
319
|
* @private
|
|
301
320
|
* @memberof Members
|
|
302
321
|
*/
|
|
303
|
-
locusMediaSharesUpdate(payload) {
|
|
322
|
+
locusMediaSharesUpdate(payload: { current: any; previous: any }) {
|
|
304
323
|
const currentContent = payload.current?.content;
|
|
305
324
|
const previousContent = payload.previous?.content;
|
|
306
325
|
const currentWhiteboard = payload.current?.whiteboard;
|
|
@@ -382,7 +401,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
382
401
|
* @private
|
|
383
402
|
* @memberof Members
|
|
384
403
|
*/
|
|
385
|
-
locusUrlUpdate(payload) {
|
|
404
|
+
locusUrlUpdate(payload: any) {
|
|
386
405
|
if (payload) {
|
|
387
406
|
this.setLocusUrl(null, payload);
|
|
388
407
|
}
|
|
@@ -396,7 +415,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
396
415
|
* @private
|
|
397
416
|
* @memberof Members
|
|
398
417
|
*/
|
|
399
|
-
locusFullStateTypeUpdate(payload) {
|
|
418
|
+
locusFullStateTypeUpdate(payload: { type: string }) {
|
|
400
419
|
// TODO: at some point there could be a timing issue here, for updating each member
|
|
401
420
|
// ie., if the type changes AND there is no locus update, then each member will not know the type of call
|
|
402
421
|
// which means they cannot determine isMutable && isRemovable
|
|
@@ -415,7 +434,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
415
434
|
* @private
|
|
416
435
|
* @memberof Members
|
|
417
436
|
*/
|
|
418
|
-
handleMembersUpdate(membersUpdate) {
|
|
437
|
+
private handleMembersUpdate(membersUpdate: any) {
|
|
419
438
|
if (membersUpdate) {
|
|
420
439
|
if (membersUpdate.updated) {
|
|
421
440
|
this.constructMembers(membersUpdate.updated);
|
|
@@ -435,7 +454,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
435
454
|
* @private
|
|
436
455
|
* @memberof Members
|
|
437
456
|
*/
|
|
438
|
-
constructMembers(list) {
|
|
457
|
+
private constructMembers(list: Array<any>) {
|
|
439
458
|
list.forEach((member) => {
|
|
440
459
|
this.membersCollection.set(member.id, member);
|
|
441
460
|
});
|
|
@@ -448,7 +467,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
448
467
|
* @private
|
|
449
468
|
* @memberof Members
|
|
450
469
|
*/
|
|
451
|
-
handleLocusInfoUpdatedParticipants(payload) {
|
|
470
|
+
private handleLocusInfoUpdatedParticipants(payload: any) {
|
|
452
471
|
this.hostId = payload.hostId || this.hostId;
|
|
453
472
|
this.selfId = payload.selfId || this.selfId;
|
|
454
473
|
this.recordingId = payload.recordingId;
|
|
@@ -469,7 +488,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
469
488
|
* @public
|
|
470
489
|
* @memberof Members
|
|
471
490
|
*/
|
|
472
|
-
setLocusUrl(locus, locusUrl = null) {
|
|
491
|
+
public setLocusUrl(locus: any, locusUrl: string = null) {
|
|
473
492
|
if (locusUrl) {
|
|
474
493
|
this.locusUrl = locusUrl;
|
|
475
494
|
}
|
|
@@ -490,7 +509,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
490
509
|
* @public
|
|
491
510
|
* @memberof Members
|
|
492
511
|
*/
|
|
493
|
-
setHostId(locus, hostId = null) {
|
|
512
|
+
public setHostId(locus: any, hostId: string = null) {
|
|
494
513
|
if (hostId) {
|
|
495
514
|
this.hostId = hostId;
|
|
496
515
|
}
|
|
@@ -511,7 +530,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
511
530
|
* @public
|
|
512
531
|
* @memberof Members
|
|
513
532
|
*/
|
|
514
|
-
setType(fullState, type = null) {
|
|
533
|
+
public setType(fullState: any, type: string = null) {
|
|
515
534
|
if (type) {
|
|
516
535
|
this.type = type;
|
|
517
536
|
}
|
|
@@ -531,7 +550,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
531
550
|
* @returns {undefined}
|
|
532
551
|
* @memberof Members
|
|
533
552
|
*/
|
|
534
|
-
setSelfId(locus, selfId = null) {
|
|
553
|
+
setSelfId(locus: any, selfId: string = null) {
|
|
535
554
|
if (selfId) {
|
|
536
555
|
this.selfId = selfId;
|
|
537
556
|
}
|
|
@@ -551,7 +570,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
551
570
|
* @returns {undefined}
|
|
552
571
|
* @memberof Members
|
|
553
572
|
*/
|
|
554
|
-
setMediaShareContentId(locus, contentId) {
|
|
573
|
+
setMediaShareContentId(locus: any, contentId?: string) {
|
|
555
574
|
if (contentId) {
|
|
556
575
|
this.mediaShareContentId = contentId;
|
|
557
576
|
}
|
|
@@ -581,7 +600,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
581
600
|
* @returns {undefined}
|
|
582
601
|
* @memberof Members
|
|
583
602
|
*/
|
|
584
|
-
setMediaShareWhiteboardId(locus, whiteboardId) {
|
|
603
|
+
setMediaShareWhiteboardId(locus: any, whiteboardId?: string) {
|
|
585
604
|
if (whiteboardId) {
|
|
586
605
|
this.mediaShareWhiteboardId = whiteboardId;
|
|
587
606
|
}
|
|
@@ -612,7 +631,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
612
631
|
* @private
|
|
613
632
|
* @memberof Members
|
|
614
633
|
*/
|
|
615
|
-
update(participants) {
|
|
634
|
+
private update(participants: Array<any>) {
|
|
616
635
|
const membersUpdate = {added: [], updated: []};
|
|
617
636
|
|
|
618
637
|
if (participants) {
|
|
@@ -661,7 +680,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
661
680
|
* @returns {Promise}
|
|
662
681
|
* @memberof Members
|
|
663
682
|
*/
|
|
664
|
-
addMember(invitee, alertIfActive) {
|
|
683
|
+
addMember(invitee: any, alertIfActive?: boolean) {
|
|
665
684
|
if (!this.locusUrl) {
|
|
666
685
|
return Promise.reject(new ParameterError('The associated locus url for this meeting object must be defined.'));
|
|
667
686
|
}
|
|
@@ -681,7 +700,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
681
700
|
* @returns {Promise}
|
|
682
701
|
* @memberof Members
|
|
683
702
|
*/
|
|
684
|
-
cancelPhoneInvite(invitee) {
|
|
703
|
+
cancelPhoneInvite(invitee: any) {
|
|
685
704
|
if (!this.locusUrl) {
|
|
686
705
|
return Promise.reject(new ParameterError('The associated locus url for this meeting object must be defined.'));
|
|
687
706
|
}
|
|
@@ -703,7 +722,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
703
722
|
* @public
|
|
704
723
|
* @memberof Members
|
|
705
724
|
*/
|
|
706
|
-
admitMembers(memberIds) {
|
|
725
|
+
public admitMembers(memberIds: Array<any>) {
|
|
707
726
|
if (isEmpty(memberIds)) {
|
|
708
727
|
return Promise.reject(new ParameterError('No member ids provided to admit.'));
|
|
709
728
|
}
|
|
@@ -719,7 +738,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
719
738
|
* @public
|
|
720
739
|
* @memberof Members
|
|
721
740
|
*/
|
|
722
|
-
removeMember(memberId) {
|
|
741
|
+
public removeMember(memberId: string) {
|
|
723
742
|
if (!this.locusUrl) {
|
|
724
743
|
return Promise.reject(new ParameterError('The associated locus url for this meeting object must be defined.'));
|
|
725
744
|
}
|
|
@@ -739,7 +758,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
739
758
|
* @public
|
|
740
759
|
* @memberof Members
|
|
741
760
|
*/
|
|
742
|
-
muteMember(memberId, mute = true) {
|
|
761
|
+
public muteMember(memberId: string, mute: boolean = true) {
|
|
743
762
|
if (!this.locusUrl) {
|
|
744
763
|
return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
|
|
745
764
|
}
|
|
@@ -759,7 +778,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
759
778
|
* @public
|
|
760
779
|
* @memberof Members
|
|
761
780
|
*/
|
|
762
|
-
raiseOrLowerHand(memberId, raise = true) {
|
|
781
|
+
public raiseOrLowerHand(memberId: string, raise: boolean = true) {
|
|
763
782
|
if (!this.locusUrl) {
|
|
764
783
|
return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
|
|
765
784
|
}
|
|
@@ -778,7 +797,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
778
797
|
* @public
|
|
779
798
|
* @memberof Members
|
|
780
799
|
*/
|
|
781
|
-
lowerAllHands(requestingMemberId) {
|
|
800
|
+
public lowerAllHands(requestingMemberId: string) {
|
|
782
801
|
if (!this.locusUrl) {
|
|
783
802
|
return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
|
|
784
803
|
}
|
|
@@ -799,7 +818,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
799
818
|
* @public
|
|
800
819
|
* @memberof Members
|
|
801
820
|
*/
|
|
802
|
-
transferHostToMember(memberId, moderator = true) {
|
|
821
|
+
public transferHostToMember(memberId: string, moderator: boolean = true) {
|
|
803
822
|
if (!this.locusUrl) {
|
|
804
823
|
return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
|
|
805
824
|
}
|
|
@@ -820,7 +839,8 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
820
839
|
* @public
|
|
821
840
|
* @memberof Members
|
|
822
841
|
*/
|
|
823
|
-
sendDialPadKey(tones = '', memberId = '') {
|
|
842
|
+
public sendDialPadKey(tones: string = '', memberId: string = '') {
|
|
843
|
+
// @ts-ignore
|
|
824
844
|
if (!tones && tones !== 0) {
|
|
825
845
|
return Promise.reject(new ParameterError('DMTF tones must be passed in'));
|
|
826
846
|
}
|
|
@@ -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
|