@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/meeting/state.ts
CHANGED
|
@@ -15,7 +15,9 @@ const MeetingStateMachine = {
|
|
|
15
15
|
*/
|
|
16
16
|
create(meetingRef: any) {
|
|
17
17
|
if (!meetingRef) {
|
|
18
|
-
throw new ParameterError(
|
|
18
|
+
throw new ParameterError(
|
|
19
|
+
'You must initialize the meeting state machine with a meeting reference.'
|
|
20
|
+
);
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
return new StateMachine({
|
|
@@ -24,27 +26,36 @@ const MeetingStateMachine = {
|
|
|
24
26
|
// when ringing a meeting, it must be first IDLE, because all other states are invalid, it transitions to the RINGING state
|
|
25
27
|
{
|
|
26
28
|
name: MEETING_STATE_MACHINE.TRANSITIONS.RING,
|
|
27
|
-
from: [
|
|
28
|
-
|
|
29
|
+
from: [
|
|
30
|
+
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
31
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
32
|
+
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
33
|
+
],
|
|
34
|
+
to: MEETING_STATE_MACHINE.STATES.RINGING,
|
|
29
35
|
},
|
|
30
36
|
// when joining a meeting, it must be from the RINGING or IDLE state, transitions to JOINED state, 1:1 will go to RINGING,
|
|
31
37
|
// others will go straight to JOINED with this transition
|
|
32
38
|
{
|
|
33
39
|
name: MEETING_STATE_MACHINE.TRANSITIONS.JOIN,
|
|
34
|
-
from: [
|
|
35
|
-
|
|
40
|
+
from: [
|
|
41
|
+
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
42
|
+
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
43
|
+
MEETING_STATE_MACHINE.STATES.RINGING,
|
|
44
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
45
|
+
],
|
|
46
|
+
to: MEETING_STATE_MACHINE.STATES.JOINED,
|
|
36
47
|
},
|
|
37
48
|
// signify that ringing has stopped and somebody else answered, move state to DECLINED, ANSWERED
|
|
38
49
|
{
|
|
39
50
|
name: MEETING_STATE_MACHINE.TRANSITIONS.REMOTE,
|
|
40
51
|
from: [MEETING_STATE_MACHINE.STATES.JOINED, MEETING_STATE_MACHINE.STATES.ERROR],
|
|
41
52
|
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
to(remote: {
|
|
53
|
+
* @param {Object} remote
|
|
54
|
+
* @param {Boolean} remote.remoteAnswered
|
|
55
|
+
* @param {Boolean} remote.remoteDeclined
|
|
56
|
+
* @returns {String}
|
|
57
|
+
*/
|
|
58
|
+
to(remote: {remoteAnswered: boolean; remoteDeclined: boolean}) {
|
|
48
59
|
// other user answered the call
|
|
49
60
|
if (remote.remoteAnswered) {
|
|
50
61
|
return MEETING_STATE_MACHINE.STATES.ANSWERED;
|
|
@@ -56,7 +67,7 @@ const MeetingStateMachine = {
|
|
|
56
67
|
|
|
57
68
|
// default
|
|
58
69
|
return MEETING_STATE_MACHINE.STATES.ERROR;
|
|
59
|
-
}
|
|
70
|
+
},
|
|
60
71
|
},
|
|
61
72
|
// when leaving a meeting it must be from either the RINGING, JOINED, or ERROR states, and transitions it to the ENDED state
|
|
62
73
|
{
|
|
@@ -67,9 +78,9 @@ const MeetingStateMachine = {
|
|
|
67
78
|
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
68
79
|
MEETING_STATE_MACHINE.STATES.ANSWERED,
|
|
69
80
|
MEETING_STATE_MACHINE.STATES.DECLINED,
|
|
70
|
-
MEETING_STATE_MACHINE.STATES.ERROR
|
|
81
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
71
82
|
],
|
|
72
|
-
to: MEETING_STATE_MACHINE.STATES.ENDED
|
|
83
|
+
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
73
84
|
},
|
|
74
85
|
{
|
|
75
86
|
name: MEETING_STATE_MACHINE.TRANSITIONS.END,
|
|
@@ -79,33 +90,33 @@ const MeetingStateMachine = {
|
|
|
79
90
|
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
80
91
|
MEETING_STATE_MACHINE.STATES.ANSWERED,
|
|
81
92
|
MEETING_STATE_MACHINE.STATES.DECLINED,
|
|
82
|
-
MEETING_STATE_MACHINE.STATES.ERROR
|
|
93
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
83
94
|
],
|
|
84
|
-
to: MEETING_STATE_MACHINE.STATES.ENDED
|
|
95
|
+
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
85
96
|
},
|
|
86
97
|
{
|
|
87
98
|
name: MEETING_STATE_MACHINE.TRANSITIONS.DECLINE,
|
|
88
99
|
from: [MEETING_STATE_MACHINE.STATES.RINGING, MEETING_STATE_MACHINE.STATES.ERROR],
|
|
89
|
-
to: MEETING_STATE_MACHINE.STATES.ENDED
|
|
100
|
+
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
90
101
|
},
|
|
91
102
|
// transition from ANY state to ERROR state
|
|
92
103
|
{
|
|
93
104
|
name: MEETING_STATE_MACHINE.TRANSITIONS.FAIL,
|
|
94
105
|
from: '*',
|
|
95
|
-
to: MEETING_STATE_MACHINE.STATES.ERROR
|
|
106
|
+
to: MEETING_STATE_MACHINE.STATES.ERROR,
|
|
96
107
|
},
|
|
97
108
|
// fail safe, transition from ANY state to IDLE state
|
|
98
109
|
{
|
|
99
110
|
name: MEETING_STATE_MACHINE.TRANSITIONS.RESET,
|
|
100
111
|
from: '*',
|
|
101
|
-
to: MEETING_STATE_MACHINE.STATES.IDLE
|
|
102
|
-
}
|
|
112
|
+
to: MEETING_STATE_MACHINE.STATES.IDLE,
|
|
113
|
+
},
|
|
103
114
|
],
|
|
104
115
|
data: {
|
|
105
116
|
/**
|
|
106
117
|
* The meeting instance to execute all state changes on
|
|
107
118
|
*/
|
|
108
|
-
meeting: meetingRef
|
|
119
|
+
meeting: meetingRef,
|
|
109
120
|
},
|
|
110
121
|
methods: {
|
|
111
122
|
/**
|
|
@@ -120,12 +131,12 @@ const MeetingStateMachine = {
|
|
|
120
131
|
this.meeting,
|
|
121
132
|
{
|
|
122
133
|
file: 'meeting/state',
|
|
123
|
-
function: 'onRemote'
|
|
134
|
+
function: 'onRemote',
|
|
124
135
|
},
|
|
125
136
|
EVENT_TRIGGERS.MEETING_RINGING_STOP,
|
|
126
137
|
{
|
|
127
138
|
id: this.meeting.id,
|
|
128
|
-
type: stop
|
|
139
|
+
type: stop,
|
|
129
140
|
}
|
|
130
141
|
);
|
|
131
142
|
}
|
|
@@ -142,12 +153,12 @@ const MeetingStateMachine = {
|
|
|
142
153
|
this.meeting,
|
|
143
154
|
{
|
|
144
155
|
file: 'meeting/state',
|
|
145
|
-
function: 'onRing'
|
|
156
|
+
function: 'onRing',
|
|
146
157
|
},
|
|
147
158
|
EVENT_TRIGGERS.MEETING_RINGING,
|
|
148
159
|
{
|
|
149
160
|
type,
|
|
150
|
-
id: this.meeting.id
|
|
161
|
+
id: this.meeting.id,
|
|
151
162
|
}
|
|
152
163
|
);
|
|
153
164
|
}
|
|
@@ -159,7 +170,9 @@ const MeetingStateMachine = {
|
|
|
159
170
|
* @returns {Boolean}
|
|
160
171
|
*/
|
|
161
172
|
onEnterError(transition: any, error: Error) {
|
|
162
|
-
LoggerProxy.logger.error(
|
|
173
|
+
LoggerProxy.logger.error(
|
|
174
|
+
`Meeting:state#onEnterError --> state->onEnterError#meeting.id: ${this.meeting.id} | Transition '${transition?.transition}' : ${transition?.from} -> ${transition?.to}, with error ${error}. Last states: ${this.history}`
|
|
175
|
+
);
|
|
163
176
|
},
|
|
164
177
|
/**
|
|
165
178
|
* After ANY transition occurs, we want to know what state the meeting moved to for debugging
|
|
@@ -167,13 +180,15 @@ const MeetingStateMachine = {
|
|
|
167
180
|
* @returns {Boolean}
|
|
168
181
|
*/
|
|
169
182
|
onAfterTransition(transition: any) {
|
|
170
|
-
LoggerProxy.logger.log(
|
|
171
|
-
|
|
183
|
+
LoggerProxy.logger.log(
|
|
184
|
+
`Meeting:state#onAfterTransition --> state->onAfterTransition#meeting.id: ${this.meeting.id} | Transition '${transition.transition}' : ${transition.from} -> ${transition.to} executed. Last states: ${this.history}`
|
|
185
|
+
);
|
|
186
|
+
},
|
|
172
187
|
},
|
|
173
188
|
// track the last 25 states entered
|
|
174
|
-
plugins: [new StateMachineHistory({max: 25})]
|
|
189
|
+
plugins: [new StateMachineHistory({max: 25})],
|
|
175
190
|
});
|
|
176
|
-
}
|
|
191
|
+
},
|
|
177
192
|
};
|
|
178
193
|
|
|
179
194
|
export default MeetingStateMachine;
|
package/src/meeting/util.ts
CHANGED
|
@@ -5,13 +5,15 @@ import Metrics from '../metrics';
|
|
|
5
5
|
import {eventType, trigger} from '../metrics/config';
|
|
6
6
|
import Media from '../media';
|
|
7
7
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
INTENT_TO_JOIN,
|
|
9
10
|
_LEFT_,
|
|
10
11
|
_IDLE_,
|
|
11
12
|
_JOINED_,
|
|
12
13
|
PASSWORD_STATUS,
|
|
13
14
|
DISPLAY_HINTS,
|
|
14
|
-
FULL_STATE
|
|
15
|
+
FULL_STATE,
|
|
16
|
+
} from '../constants';
|
|
15
17
|
import IntentToJoinError from '../common/errors/intent-to-join';
|
|
16
18
|
import JoinMeetingError from '../common/errors/join-meeting';
|
|
17
19
|
import ParameterError from '../common/errors/parameter';
|
|
@@ -48,30 +50,35 @@ MeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {
|
|
|
48
50
|
const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);
|
|
49
51
|
|
|
50
52
|
if (isEmpty(localMedias)) {
|
|
51
|
-
return Promise.reject(
|
|
53
|
+
return Promise.reject(
|
|
54
|
+
new ParameterError('You need a media id on the meeting to change remote audio.')
|
|
55
|
+
);
|
|
52
56
|
}
|
|
53
57
|
|
|
54
58
|
Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});
|
|
55
59
|
|
|
56
|
-
return meeting.meetingRequest
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
return meeting.meetingRequest
|
|
61
|
+
.remoteAudioVideoToggle({
|
|
62
|
+
locusUrl: meeting.locusUrl,
|
|
63
|
+
selfId: meeting.selfId,
|
|
64
|
+
localMedias,
|
|
65
|
+
deviceUrl: meeting.deviceUrl,
|
|
66
|
+
correlationId: meeting.correlationId,
|
|
67
|
+
preferTranscoding: !meeting.isMultistream,
|
|
68
|
+
})
|
|
69
|
+
.then((response) => {
|
|
70
|
+
Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});
|
|
65
71
|
|
|
66
|
-
|
|
67
|
-
|
|
72
|
+
return response.body.locus;
|
|
73
|
+
});
|
|
68
74
|
};
|
|
69
75
|
|
|
70
76
|
MeetingUtil.hasOwner = (info) => info && info.owner;
|
|
71
77
|
|
|
72
78
|
MeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;
|
|
73
79
|
|
|
74
|
-
MeetingUtil.isPinOrGuest = (err) =>
|
|
80
|
+
MeetingUtil.isPinOrGuest = (err) =>
|
|
81
|
+
err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);
|
|
75
82
|
|
|
76
83
|
MeetingUtil.joinMeeting = (meeting, options) => {
|
|
77
84
|
if (!meeting) {
|
|
@@ -97,7 +104,7 @@ MeetingUtil.joinMeeting = (meeting, options) => {
|
|
|
97
104
|
pin: options.pin,
|
|
98
105
|
moveToResource: options.moveToResource,
|
|
99
106
|
preferTranscoding: !meeting.isMultistream,
|
|
100
|
-
asResourceOccupant: options.asResourceOccupant
|
|
107
|
+
asResourceOccupant: options.asResourceOccupant,
|
|
101
108
|
})
|
|
102
109
|
.then((res) => {
|
|
103
110
|
Metrics.postEvent({
|
|
@@ -107,8 +114,8 @@ MeetingUtil.joinMeeting = (meeting, options) => {
|
|
|
107
114
|
trigger: trigger.LOCI_UPDATE,
|
|
108
115
|
locus: res.body.locus,
|
|
109
116
|
mediaConnections: res.body.mediaConnections,
|
|
110
|
-
trackingId: res.headers.trackingid
|
|
111
|
-
}
|
|
117
|
+
trackingId: res.headers.trackingid,
|
|
118
|
+
},
|
|
112
119
|
});
|
|
113
120
|
|
|
114
121
|
return MeetingUtil.parseLocusJoin(res);
|
|
@@ -117,7 +124,9 @@ MeetingUtil.joinMeeting = (meeting, options) => {
|
|
|
117
124
|
|
|
118
125
|
MeetingUtil.cleanUp = (meeting) => {
|
|
119
126
|
// make sure we send last metrics before we close the peerconnection
|
|
120
|
-
const stopStatsAnalyzer =
|
|
127
|
+
const stopStatsAnalyzer = meeting.statsAnalyzer
|
|
128
|
+
? meeting.statsAnalyzer.stopAnalyzer()
|
|
129
|
+
: Promise.resolve();
|
|
121
130
|
|
|
122
131
|
return stopStatsAnalyzer
|
|
123
132
|
.then(() => meeting.closeLocalStream())
|
|
@@ -144,7 +153,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
|
|
|
144
153
|
locusUrl: meeting.locusUrl,
|
|
145
154
|
selfId: meeting.selfId,
|
|
146
155
|
correlationId: meeting.correlationId,
|
|
147
|
-
phoneUrl
|
|
156
|
+
phoneUrl,
|
|
148
157
|
};
|
|
149
158
|
|
|
150
159
|
return meeting.meetingRequest
|
|
@@ -156,9 +165,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
|
|
|
156
165
|
})
|
|
157
166
|
.catch((err) => {
|
|
158
167
|
LoggerProxy.logger.error(
|
|
159
|
-
`Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${
|
|
160
|
-
meeting.id
|
|
161
|
-
}, error: ${err}`
|
|
168
|
+
`Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`
|
|
162
169
|
);
|
|
163
170
|
|
|
164
171
|
return Promise.reject(err);
|
|
@@ -184,7 +191,7 @@ MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
|
|
|
184
191
|
selfId: meeting.selfId,
|
|
185
192
|
correlationId: meeting.correlationId,
|
|
186
193
|
resourceId: meeting.resourceId,
|
|
187
|
-
deviceUrl: meeting.deviceUrl
|
|
194
|
+
deviceUrl: meeting.deviceUrl,
|
|
188
195
|
};
|
|
189
196
|
|
|
190
197
|
const leaveOptions = {...defaultOptions, ...options};
|
|
@@ -192,7 +199,8 @@ MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
|
|
|
192
199
|
return meeting.meetingRequest
|
|
193
200
|
.leaveMeeting(leaveOptions)
|
|
194
201
|
.then((response) => {
|
|
195
|
-
if (response && response.body && response.body.locus) {
|
|
202
|
+
if (response && response.body && response.body.locus) {
|
|
203
|
+
// && !options.moveMeeting) {
|
|
196
204
|
meeting.locusInfo.onFullLocus(response.body.locus);
|
|
197
205
|
}
|
|
198
206
|
|
|
@@ -210,9 +218,7 @@ MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
|
|
|
210
218
|
// 1) on leave clean up the meeting or simply do a sync on the meeting
|
|
211
219
|
// 2) If the error says meeting is inactive then destroy the meeting object
|
|
212
220
|
LoggerProxy.logger.error(
|
|
213
|
-
`Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${
|
|
214
|
-
meeting.id
|
|
215
|
-
}, error: ${err}`
|
|
221
|
+
`Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`
|
|
216
222
|
);
|
|
217
223
|
|
|
218
224
|
return Promise.reject(err);
|
|
@@ -222,21 +228,18 @@ MeetingUtil.declineMeeting = (meeting, reason) =>
|
|
|
222
228
|
meeting.meetingRequest.declineMeeting({
|
|
223
229
|
locusUrl: meeting.locusUrl,
|
|
224
230
|
deviceUrl: meeting.deviceUrl,
|
|
225
|
-
reason
|
|
231
|
+
reason,
|
|
226
232
|
});
|
|
227
233
|
|
|
228
|
-
MeetingUtil.isUserInLeftState = (locusInfo) =>
|
|
229
|
-
locusInfo.parsedLocus?.self?.state === _LEFT_;
|
|
234
|
+
MeetingUtil.isUserInLeftState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_;
|
|
230
235
|
|
|
231
|
-
MeetingUtil.isUserInIdleState = (locusInfo) =>
|
|
232
|
-
locusInfo.parsedLocus?.self?.state === _IDLE_;
|
|
236
|
+
MeetingUtil.isUserInIdleState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_;
|
|
233
237
|
|
|
234
|
-
MeetingUtil.isUserInJoinedState = (locusInfo) =>
|
|
235
|
-
locusInfo.parsedLocus?.self?.state === _JOINED_;
|
|
238
|
+
MeetingUtil.isUserInJoinedState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_;
|
|
236
239
|
|
|
237
240
|
MeetingUtil.isMediaEstablished = (currentMediaStatus) =>
|
|
238
|
-
currentMediaStatus &&
|
|
239
|
-
|
|
241
|
+
currentMediaStatus &&
|
|
242
|
+
(currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
|
|
240
243
|
|
|
241
244
|
MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
|
|
242
245
|
meeting.resourceId = meeting.resourceId || options.resourceId;
|
|
@@ -251,7 +254,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
|
|
|
251
254
|
if (options.pin) {
|
|
252
255
|
Metrics.postEvent({
|
|
253
256
|
event: eventType.PIN_COLLECTED,
|
|
254
|
-
meeting
|
|
257
|
+
meeting,
|
|
255
258
|
});
|
|
256
259
|
}
|
|
257
260
|
|
|
@@ -267,7 +270,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
|
|
|
267
270
|
if (MeetingUtil.isPinOrGuest(err)) {
|
|
268
271
|
Metrics.postEvent({
|
|
269
272
|
event: eventType.PIN_PROMPT,
|
|
270
|
-
meeting
|
|
273
|
+
meeting,
|
|
271
274
|
});
|
|
272
275
|
|
|
273
276
|
// request host pin or non host for unclaimed PMR, start of Scenario C
|
|
@@ -281,9 +284,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
|
|
|
281
284
|
};
|
|
282
285
|
|
|
283
286
|
MeetingUtil.validateOptions = (options) => {
|
|
284
|
-
const {
|
|
285
|
-
sendVideo, sendAudio, sendShare, localStream, localShare
|
|
286
|
-
} = options;
|
|
287
|
+
const {sendVideo, sendAudio, sendShare, localStream, localShare} = options;
|
|
287
288
|
|
|
288
289
|
if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {
|
|
289
290
|
return Promise.reject(new ParameterError('please pass valid video streams'));
|
|
@@ -341,23 +342,34 @@ MeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>
|
|
|
341
342
|
locusInfo.parsedLocus.info &&
|
|
342
343
|
locusInfo.parsedLocus.info.policy;
|
|
343
344
|
|
|
344
|
-
MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) =>
|
|
345
|
+
MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) =>
|
|
346
|
+
locusInfo?.parsedLocus?.info?.userDisplayHints || [];
|
|
345
347
|
|
|
346
|
-
MeetingUtil.canInviteNewParticipants = (displayHints) =>
|
|
348
|
+
MeetingUtil.canInviteNewParticipants = (displayHints) =>
|
|
349
|
+
displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
|
|
347
350
|
|
|
348
|
-
MeetingUtil.canAdmitParticipant = (displayHints) =>
|
|
351
|
+
MeetingUtil.canAdmitParticipant = (displayHints) =>
|
|
352
|
+
displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
|
|
349
353
|
|
|
350
|
-
MeetingUtil.canUserLock = (displayHints) =>
|
|
354
|
+
MeetingUtil.canUserLock = (displayHints) =>
|
|
355
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&
|
|
356
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
|
|
351
357
|
|
|
352
|
-
MeetingUtil.canUserUnlock = (displayHints) =>
|
|
358
|
+
MeetingUtil.canUserUnlock = (displayHints) =>
|
|
359
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&
|
|
360
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
|
|
353
361
|
|
|
354
|
-
MeetingUtil.canUserRecord = (displayHints) =>
|
|
362
|
+
MeetingUtil.canUserRecord = (displayHints) =>
|
|
363
|
+
displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);
|
|
355
364
|
|
|
356
|
-
MeetingUtil.canUserPause = (displayHints) =>
|
|
365
|
+
MeetingUtil.canUserPause = (displayHints) =>
|
|
366
|
+
displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);
|
|
357
367
|
|
|
358
|
-
MeetingUtil.canUserResume = (displayHints) =>
|
|
368
|
+
MeetingUtil.canUserResume = (displayHints) =>
|
|
369
|
+
displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME);
|
|
359
370
|
|
|
360
|
-
MeetingUtil.canUserStop = (displayHints) =>
|
|
371
|
+
MeetingUtil.canUserStop = (displayHints) =>
|
|
372
|
+
displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP);
|
|
361
373
|
|
|
362
374
|
MeetingUtil.startRecording = (request, locusUrl, locusInfo) => {
|
|
363
375
|
const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
|
|
@@ -366,7 +378,9 @@ MeetingUtil.startRecording = (request, locusUrl, locusInfo) => {
|
|
|
366
378
|
return request.recordMeeting({locusUrl, recording: true, paused: false});
|
|
367
379
|
}
|
|
368
380
|
|
|
369
|
-
return Promise.reject(
|
|
381
|
+
return Promise.reject(
|
|
382
|
+
new PermissionError('Start recording not allowed, due to moderator property.')
|
|
383
|
+
);
|
|
370
384
|
};
|
|
371
385
|
|
|
372
386
|
MeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {
|
|
@@ -376,7 +390,9 @@ MeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {
|
|
|
376
390
|
return request.recordMeeting({locusUrl, recording: true, paused: true});
|
|
377
391
|
}
|
|
378
392
|
|
|
379
|
-
return Promise.reject(
|
|
393
|
+
return Promise.reject(
|
|
394
|
+
new PermissionError('Pause recording not allowed, due to moderator property.')
|
|
395
|
+
);
|
|
380
396
|
};
|
|
381
397
|
|
|
382
398
|
MeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {
|
|
@@ -386,7 +402,9 @@ MeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {
|
|
|
386
402
|
return request.recordMeeting({locusUrl, recording: true, paused: false});
|
|
387
403
|
}
|
|
388
404
|
|
|
389
|
-
return Promise.reject(
|
|
405
|
+
return Promise.reject(
|
|
406
|
+
new PermissionError('Resume recording not allowed, due to moderator property.')
|
|
407
|
+
);
|
|
390
408
|
};
|
|
391
409
|
|
|
392
410
|
MeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {
|
|
@@ -396,16 +414,22 @@ MeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {
|
|
|
396
414
|
return request.recordMeeting({locusUrl, recording: false, paused: false});
|
|
397
415
|
}
|
|
398
416
|
|
|
399
|
-
return Promise.reject(
|
|
417
|
+
return Promise.reject(
|
|
418
|
+
new PermissionError('Stop recording not allowed, due to moderator property.')
|
|
419
|
+
);
|
|
400
420
|
};
|
|
401
421
|
|
|
402
422
|
MeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);
|
|
403
423
|
|
|
404
|
-
MeetingUtil.canUserLowerAllHands = (displayHints) =>
|
|
424
|
+
MeetingUtil.canUserLowerAllHands = (displayHints) =>
|
|
425
|
+
displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
|
|
405
426
|
|
|
406
|
-
MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>
|
|
427
|
+
MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>
|
|
428
|
+
displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
|
|
407
429
|
|
|
408
|
-
MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>
|
|
430
|
+
MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>
|
|
431
|
+
displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||
|
|
432
|
+
displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
|
|
409
433
|
|
|
410
434
|
MeetingUtil.lockMeeting = (actions, request, locusUrl) => {
|
|
411
435
|
if (actions && actions.canLock) {
|
|
@@ -477,31 +501,38 @@ MeetingUtil.endMeetingForAll = (meeting) => {
|
|
|
477
501
|
.then(() => MeetingUtil.cleanUp(meeting))
|
|
478
502
|
.catch((err) => {
|
|
479
503
|
LoggerProxy.logger.error(
|
|
480
|
-
`Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${
|
|
481
|
-
meeting.id
|
|
482
|
-
}, error: ${err}`
|
|
504
|
+
`Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`
|
|
483
505
|
);
|
|
484
506
|
|
|
485
507
|
return Promise.reject(err);
|
|
486
508
|
});
|
|
487
509
|
};
|
|
488
510
|
|
|
489
|
-
MeetingUtil.canEnableClosedCaption = (displayHints) =>
|
|
511
|
+
MeetingUtil.canEnableClosedCaption = (displayHints) =>
|
|
512
|
+
displayHints.includes(DISPLAY_HINTS.CAPTION_START);
|
|
490
513
|
|
|
491
|
-
MeetingUtil.canStartTranscribing = (displayHints) =>
|
|
514
|
+
MeetingUtil.canStartTranscribing = (displayHints) =>
|
|
515
|
+
displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
|
|
492
516
|
|
|
493
|
-
MeetingUtil.canStopTranscribing = (displayHints) =>
|
|
517
|
+
MeetingUtil.canStopTranscribing = (displayHints) =>
|
|
518
|
+
displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
|
|
494
519
|
|
|
495
|
-
MeetingUtil.isClosedCaptionActive = (displayHints) =>
|
|
520
|
+
MeetingUtil.isClosedCaptionActive = (displayHints) =>
|
|
521
|
+
displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
|
|
496
522
|
|
|
497
|
-
MeetingUtil.isWebexAssistantActive = (displayHints) =>
|
|
523
|
+
MeetingUtil.isWebexAssistantActive = (displayHints) =>
|
|
524
|
+
displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
|
|
498
525
|
|
|
499
|
-
MeetingUtil.canViewCaptionPanel = (displayHints) =>
|
|
526
|
+
MeetingUtil.canViewCaptionPanel = (displayHints) =>
|
|
527
|
+
displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
|
|
500
528
|
|
|
501
|
-
MeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>
|
|
529
|
+
MeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>
|
|
530
|
+
displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
|
|
502
531
|
|
|
503
|
-
MeetingUtil.canSelectSpokenLanguages = (displayHints) =>
|
|
532
|
+
MeetingUtil.canSelectSpokenLanguages = (displayHints) =>
|
|
533
|
+
displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
|
|
504
534
|
|
|
505
|
-
MeetingUtil.waitingForOthersToJoin = (displayHints) =>
|
|
535
|
+
MeetingUtil.waitingForOthersToJoin = (displayHints) =>
|
|
536
|
+
displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
|
|
506
537
|
|
|
507
538
|
export default MeetingUtil;
|
|
@@ -34,7 +34,8 @@ export default class MeetingInfoCollection extends Collection {
|
|
|
34
34
|
return find(
|
|
35
35
|
// @ts-ignore
|
|
36
36
|
this.meetingInfos,
|
|
37
|
-
(info) =>
|
|
37
|
+
(info) =>
|
|
38
|
+
info.sipUrl === id || info.locusId === id || info.userId === id || info.meetingLink === id
|
|
38
39
|
);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
@@ -2,11 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
_MEETING_LINK_,
|
|
7
|
-
_SIP_URI_,
|
|
8
|
-
_PERSONAL_ROOM_
|
|
9
|
-
} from '../constants';
|
|
5
|
+
import {_MEETING_LINK_, _SIP_URI_, _PERSONAL_ROOM_} from '../constants';
|
|
10
6
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
11
7
|
|
|
12
8
|
import MeetingInfoCollection from './collection';
|
|
@@ -34,7 +30,7 @@ export default class MeetingInfo {
|
|
|
34
30
|
* @type {Object}
|
|
35
31
|
* @private
|
|
36
32
|
* @memberof MeetingInfo
|
|
37
|
-
|
|
33
|
+
*/
|
|
38
34
|
this.meetingInfoRequest = new MeetingInfoRequest(this.webex);
|
|
39
35
|
/**
|
|
40
36
|
* The meeting information collection interface
|
|
@@ -42,7 +38,7 @@ export default class MeetingInfo {
|
|
|
42
38
|
* @type {Object}
|
|
43
39
|
* @private
|
|
44
40
|
* @memberof MeetingInfo
|
|
45
|
-
|
|
41
|
+
*/
|
|
46
42
|
this.meetingInfoCollection = new MeetingInfoCollection();
|
|
47
43
|
}
|
|
48
44
|
|
|
@@ -75,17 +71,22 @@ export default class MeetingInfo {
|
|
|
75
71
|
* @memberof MeetingInfo
|
|
76
72
|
*/
|
|
77
73
|
private requestFetchInfo(options: object) {
|
|
78
|
-
return this.meetingInfoRequest
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
74
|
+
return this.meetingInfoRequest
|
|
75
|
+
.fetchMeetingInfo(options)
|
|
76
|
+
.then((info) => {
|
|
77
|
+
if (info && info.body) {
|
|
78
|
+
this.setMeetingInfo(info.body.sipMeetingUri || info.body.meetingLink, info.body);
|
|
79
|
+
}
|
|
82
80
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
return info;
|
|
82
|
+
})
|
|
83
|
+
.catch((error) => {
|
|
84
|
+
LoggerProxy.logger.error(
|
|
85
|
+
`Meeting-info:index#requestFetchInfo --> ${error} fetch meetingInfo`
|
|
86
|
+
);
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
return Promise.reject(error);
|
|
89
|
+
});
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
/**
|
|
@@ -100,7 +101,7 @@ export default class MeetingInfo {
|
|
|
100
101
|
return MeetingInfoUtil.generateOptions({
|
|
101
102
|
destination,
|
|
102
103
|
type,
|
|
103
|
-
webex: this.webex
|
|
104
|
+
webex: this.webex,
|
|
104
105
|
});
|
|
105
106
|
}
|
|
106
107
|
|
|
@@ -117,19 +118,20 @@ export default class MeetingInfo {
|
|
|
117
118
|
destination = this.webex.internal.device.userId;
|
|
118
119
|
}
|
|
119
120
|
|
|
120
|
-
return this.fetchInfoOptions(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
121
|
+
return this.fetchInfoOptions(MeetingInfoUtil.extractDestination(destination, type), type).then(
|
|
122
|
+
(options) =>
|
|
123
|
+
// fetch meeting info
|
|
124
|
+
this.requestFetchInfo(options).catch((error) => {
|
|
125
|
+
// if it failed the first time as meeting link
|
|
126
|
+
if (options.type === _MEETING_LINK_) {
|
|
127
|
+
// convert the meeting link to sip URI and retry
|
|
128
|
+
return this.requestFetchInfo(
|
|
129
|
+
this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_)
|
|
130
|
+
);
|
|
131
|
+
}
|
|
131
132
|
|
|
132
|
-
|
|
133
|
-
|
|
133
|
+
return Promise.reject(error);
|
|
134
|
+
})
|
|
135
|
+
);
|
|
134
136
|
}
|
|
135
137
|
}
|