@webex/plugin-meetings 2.36.1 → 2.37.1
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 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +5 -26
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +5 -26
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +6 -27
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +5 -26
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +5 -26
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +4 -25
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +5 -26
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +5 -26
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +7 -46
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -24
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +35 -61
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +1 -5
- package/dist/config.js.map +1 -1
- package/dist/constants.js +46 -42
- package/dist/constants.js.map +1 -1
- package/dist/index.js +1 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +10 -28
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +101 -193
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +0 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +87 -123
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +16 -81
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +74 -137
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +64 -110
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +3 -17
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +10 -12
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.js +120 -192
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +0 -13
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +812 -1487
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +31 -78
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +157 -227
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +25 -169
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +10 -33
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +179 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -16
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +137 -228
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +3 -21
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +451 -570
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +7 -30
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +94 -148
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +49 -89
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +17 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +2 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +68 -184
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +21 -56
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +9 -38
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +0 -2
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -2
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +48 -136
- package/dist/metrics/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +28 -57
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.js +60 -190
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/peer-connection-manager/util.js +10 -24
- package/dist/peer-connection-manager/util.js.map +1 -1
- package/dist/personal-meeting-room/index.js +10 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -33
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +100 -166
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +2 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.js +0 -2
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +0 -5
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +294 -468
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/collection.js +1 -12
- package/dist/roap/collection.js.map +1 -1
- package/dist/roap/handler.js +15 -85
- package/dist/roap/handler.js.map +1 -1
- package/dist/roap/index.js +42 -94
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +81 -148
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.js +2 -39
- package/dist/roap/state.js.map +1 -1
- package/dist/roap/turnDiscovery.js +8 -52
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.js +0 -26
- package/dist/roap/util.js.map +1 -1
- package/dist/statsAnalyzer/global.js +0 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +68 -168
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +54 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +13 -45
- package/dist/transcription/index.js.map +1 -1
- package/internal-README.md +7 -6
- package/package.json +17 -17
- 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 +138 -119
- 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 +118 -109
- package/src/media/properties.ts +26 -20
- package/src/media/util.ts +2 -2
- 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 +1435 -1210
- package/src/meeting/muteState.ts +62 -31
- package/src/meeting/request.ts +160 -113
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +131 -90
- 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 +513 -441
- package/src/meetings/request.ts +26 -24
- package/src/meetings/util.ts +26 -23
- 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 +172 -121
- 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/networkQualityMonitor/index.ts +20 -23
- package/src/peer-connection-manager/index.ts +321 -241
- package/src/peer-connection-manager/util.ts +4 -2
- 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 +2 -3
- package/src/reconnection-manager/index.ts +159 -98
- package/src/roap/collection.ts +2 -4
- package/src/roap/handler.ts +63 -32
- package/src/roap/index.ts +78 -58
- package/src/roap/request.ts +69 -54
- package/src/roap/state.ts +17 -11
- package/src/roap/turnDiscovery.ts +60 -31
- package/src/roap/util.ts +39 -31
- package/src/statsAnalyzer/global.ts +30 -33
- package/src/statsAnalyzer/index.ts +397 -169
- package/src/statsAnalyzer/mqaUtil.ts +178 -72
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/journey.js +666 -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 +24 -31
- 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 +33 -45
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
- package/test/unit/spec/meeting/index.js +1141 -649
- package/test/unit/spec/meeting/muteState.js +42 -33
- package/test/unit/spec/meeting/request.js +56 -45
- package/test/unit/spec/meeting/utils.js +66 -49
- 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 +84 -35
- 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/peerconnection-manager/index.js +88 -58
- package/test/unit/spec/peerconnection-manager/utils.js +5 -4
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +7 -8
- 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 +14 -17
- package/test/unit/spec/roap/index.ts +18 -8
- package/test/unit/spec/roap/turnDiscovery.ts +22 -19
- package/test/unit/spec/roap/util.js +3 -3
- package/test/unit/spec/stats-analyzer/index.js +29 -24
- 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-info/util.ts
CHANGED
|
@@ -3,7 +3,7 @@ import url from 'url';
|
|
|
3
3
|
import btoa from 'btoa';
|
|
4
4
|
import {
|
|
5
5
|
// @ts-ignore
|
|
6
|
-
deconstructHydraId
|
|
6
|
+
deconstructHydraId,
|
|
7
7
|
} from '@webex/common';
|
|
8
8
|
|
|
9
9
|
import ParameterError from '../common/errors/parameter';
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
MEET,
|
|
32
32
|
MEET_M,
|
|
33
33
|
HTTPS_PROTOCOL,
|
|
34
|
-
UUID_REG
|
|
34
|
+
UUID_REG,
|
|
35
35
|
} from '../constants';
|
|
36
36
|
|
|
37
37
|
const MeetingInfoUtil: any = {};
|
|
@@ -62,9 +62,10 @@ MeetingInfoUtil.getParsedUrl = (link) => {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
return parsedUrl;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
} catch (error) {
|
|
66
|
+
LoggerProxy.logger.warn(
|
|
67
|
+
`Meeting-info:util#getParsedUrl --> unable to parse the URL, error: ${error}`
|
|
68
|
+
);
|
|
68
69
|
|
|
69
70
|
return null;
|
|
70
71
|
}
|
|
@@ -78,7 +79,11 @@ MeetingInfoUtil.getParsedUrl = (link) => {
|
|
|
78
79
|
MeetingInfoUtil.isMeetingLink = (value: string) => {
|
|
79
80
|
const parsedUrl = MeetingInfoUtil.getParsedUrl(value);
|
|
80
81
|
const hostNameBool = parsedUrl.hostname && parsedUrl.hostname.includes(WEBEX_DOT_COM);
|
|
81
|
-
const pathNameBool =
|
|
82
|
+
const pathNameBool =
|
|
83
|
+
parsedUrl.pathname &&
|
|
84
|
+
(parsedUrl.pathname.includes(`/${MEET}`) ||
|
|
85
|
+
parsedUrl.pathname.includes(`/${MEET_M}`) ||
|
|
86
|
+
parsedUrl.pathname.includes(`/${JOIN}`));
|
|
82
87
|
|
|
83
88
|
return hostNameBool && pathNameBool;
|
|
84
89
|
};
|
|
@@ -123,7 +128,6 @@ MeetingInfoUtil.convertLinkToSip = (value) => {
|
|
|
123
128
|
return `${user}@${company}.${WEBEX_DOT_COM}`;
|
|
124
129
|
};
|
|
125
130
|
|
|
126
|
-
|
|
127
131
|
MeetingInfoUtil.isSipUri = (sipString) => {
|
|
128
132
|
// TODO: lets remove regex from this equation and user URI matchers and such
|
|
129
133
|
// have not found a great sip uri parser library as of now
|
|
@@ -155,15 +159,21 @@ MeetingInfoUtil.getHydraId = (destination) => {
|
|
|
155
159
|
return {};
|
|
156
160
|
};
|
|
157
161
|
|
|
158
|
-
MeetingInfoUtil.getSipUriFromHydraPersonId = (destination, webex) =>
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
})
|
|
162
|
+
MeetingInfoUtil.getSipUriFromHydraPersonId = (destination, webex) =>
|
|
163
|
+
webex.people
|
|
164
|
+
.get(destination)
|
|
165
|
+
.then((res) => {
|
|
166
|
+
if (res.emails && res.emails.length) {
|
|
167
|
+
return res.emails[0];
|
|
168
|
+
}
|
|
169
|
+
throw new ParameterError('Hydra Id Lookup was an invalid hydra person id.');
|
|
170
|
+
})
|
|
171
|
+
.catch((err) => {
|
|
172
|
+
LoggerProxy.logger.error(
|
|
173
|
+
`Meeting-info:util#MeetingInfoUtil.getSipUriFromHydraPersonId --> getSipUriFromHydraPersonId ${err} `
|
|
174
|
+
);
|
|
175
|
+
throw err;
|
|
176
|
+
});
|
|
167
177
|
|
|
168
178
|
MeetingInfoUtil.generateOptions = async (from) => {
|
|
169
179
|
const {destination, type, webex} = from;
|
|
@@ -171,31 +181,29 @@ MeetingInfoUtil.generateOptions = async (from) => {
|
|
|
171
181
|
if (type) {
|
|
172
182
|
return {
|
|
173
183
|
destination,
|
|
174
|
-
type
|
|
184
|
+
type,
|
|
175
185
|
};
|
|
176
186
|
}
|
|
177
187
|
const options: any = {};
|
|
178
188
|
const hydraId = MeetingInfoUtil.getHydraId(destination);
|
|
179
189
|
|
|
180
190
|
if (MeetingInfoUtil.isMeetingLink(destination)) {
|
|
181
|
-
LoggerProxy.logger.warn(
|
|
191
|
+
LoggerProxy.logger.warn(
|
|
192
|
+
'Meeting-info:util#generateOptions --> WARN, use of Meeting Link is deprecated, please use a SIP URI instead'
|
|
193
|
+
);
|
|
182
194
|
|
|
183
195
|
options.type = _MEETING_LINK_;
|
|
184
196
|
options.destination = destination;
|
|
185
|
-
}
|
|
186
|
-
else if (MeetingInfoUtil.isSipUri(destination)) {
|
|
197
|
+
} else if (MeetingInfoUtil.isSipUri(destination)) {
|
|
187
198
|
options.type = _SIP_URI_;
|
|
188
199
|
options.destination = destination;
|
|
189
|
-
}
|
|
190
|
-
else if (MeetingInfoUtil.isPhoneNumber(destination)) {
|
|
200
|
+
} else if (MeetingInfoUtil.isPhoneNumber(destination)) {
|
|
191
201
|
options.type = _SIP_URI_;
|
|
192
202
|
options.destination = destination;
|
|
193
|
-
}
|
|
194
|
-
else if (MeetingInfoUtil.isConversationUrl(destination, webex)) {
|
|
203
|
+
} else if (MeetingInfoUtil.isConversationUrl(destination, webex)) {
|
|
195
204
|
options.type = _CONVERSATION_URL_;
|
|
196
205
|
options.destination = destination;
|
|
197
|
-
}
|
|
198
|
-
else if (hydraId.people) {
|
|
206
|
+
} else if (hydraId.people) {
|
|
199
207
|
options.type = _SIP_URI_;
|
|
200
208
|
|
|
201
209
|
return MeetingInfoUtil.getSipUriFromHydraPersonId(hydraId.destination, webex).then((res) => {
|
|
@@ -208,26 +216,25 @@ MeetingInfoUtil.generateOptions = async (from) => {
|
|
|
208
216
|
|
|
209
217
|
return Promise.resolve(options);
|
|
210
218
|
});
|
|
211
|
-
}
|
|
212
|
-
else if (hydraId.room) {
|
|
219
|
+
} else if (hydraId.room) {
|
|
213
220
|
options.type = _CONVERSATION_URL_;
|
|
214
221
|
try {
|
|
215
222
|
await webex.internal.services.waitForCatalog('postauth');
|
|
216
223
|
|
|
217
224
|
const conversationUrl = webex.internal.conversation.getUrlFromClusterId({
|
|
218
225
|
cluster: hydraId.cluster,
|
|
219
|
-
id: hydraId.destination
|
|
226
|
+
id: hydraId.destination,
|
|
220
227
|
});
|
|
221
228
|
|
|
222
229
|
options.destination = conversationUrl;
|
|
223
|
-
}
|
|
224
|
-
catch (e) {
|
|
230
|
+
} catch (e) {
|
|
225
231
|
LoggerProxy.logger.error(`Meeting-info:util#generateOptions --> ${e}`);
|
|
226
|
-
throw
|
|
232
|
+
throw e;
|
|
227
233
|
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
|
|
234
|
+
} else {
|
|
235
|
+
throw new ParameterError(
|
|
236
|
+
'MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.'
|
|
237
|
+
);
|
|
231
238
|
}
|
|
232
239
|
|
|
233
240
|
return Promise.resolve(options);
|
|
@@ -248,7 +255,9 @@ MeetingInfoUtil.getResourceUrl = (type: string, value: any) => {
|
|
|
248
255
|
case _SIP_URI_:
|
|
249
256
|
case _PERSONAL_ROOM_:
|
|
250
257
|
case _MEETING_ID_:
|
|
251
|
-
resource = `/${LOCI}/${MEETINGINFO}/${encodeURIComponent(
|
|
258
|
+
resource = `/${LOCI}/${MEETINGINFO}/${encodeURIComponent(
|
|
259
|
+
value
|
|
260
|
+
)}?${TYPE}=${type}&${USE_URI_LOOKUP_FALSE}`;
|
|
252
261
|
break;
|
|
253
262
|
case _CONVERSATION_URL_:
|
|
254
263
|
method = HTTP_VERBS.PUT;
|
|
@@ -258,7 +267,9 @@ MeetingInfoUtil.getResourceUrl = (type: string, value: any) => {
|
|
|
258
267
|
method = HTTP_VERBS.PUT;
|
|
259
268
|
break;
|
|
260
269
|
case _MEETING_LINK_:
|
|
261
|
-
resource = `$/${LOCI}/${MEETINGINFO}/${btoa(
|
|
270
|
+
resource = `$/${LOCI}/${MEETINGINFO}/${btoa(
|
|
271
|
+
value
|
|
272
|
+
)}?${TYPE}=${_MEETING_LINK_}&${USE_URI_LOOKUP_FALSE}`;
|
|
262
273
|
break;
|
|
263
274
|
default:
|
|
264
275
|
}
|
|
@@ -266,7 +277,7 @@ MeetingInfoUtil.getResourceUrl = (type: string, value: any) => {
|
|
|
266
277
|
return {
|
|
267
278
|
uri,
|
|
268
279
|
resource,
|
|
269
|
-
method
|
|
280
|
+
method,
|
|
270
281
|
};
|
|
271
282
|
};
|
|
272
283
|
|
|
@@ -274,26 +285,23 @@ MeetingInfoUtil.getRequestParams = (resourceOptions, type, value, api) => {
|
|
|
274
285
|
let requestParams: any = {
|
|
275
286
|
method: resourceOptions.method,
|
|
276
287
|
api,
|
|
277
|
-
resource: resourceOptions.resource
|
|
288
|
+
resource: resourceOptions.resource,
|
|
278
289
|
};
|
|
279
290
|
|
|
280
291
|
if (resourceOptions.method === HTTP_VERBS.GET) {
|
|
281
292
|
// for handling URL redirections
|
|
282
293
|
requestParams.resource = requestParams.resource.concat(`&${ALTERNATE_REDIRECT_TRUE}`);
|
|
283
|
-
}
|
|
284
|
-
else
|
|
285
|
-
if (type !== _LOCUS_ID_) {
|
|
294
|
+
} else if (type !== _LOCUS_ID_) {
|
|
286
295
|
// locus id check is a PUT not sure why
|
|
287
296
|
requestParams.resource = requestParams.resource.concat(`?${ALTERNATE_REDIRECT_TRUE}`);
|
|
288
297
|
requestParams.body = {
|
|
289
298
|
value,
|
|
290
|
-
lookupType: type
|
|
299
|
+
lookupType: type,
|
|
291
300
|
};
|
|
292
|
-
}
|
|
293
|
-
else if (type === _LOCUS_ID_) {
|
|
301
|
+
} else if (type === _LOCUS_ID_) {
|
|
294
302
|
requestParams = {
|
|
295
303
|
method: resourceOptions.method,
|
|
296
|
-
uri: resourceOptions.uri
|
|
304
|
+
uri: resourceOptions.uri,
|
|
297
305
|
};
|
|
298
306
|
}
|
|
299
307
|
|
|
@@ -2,7 +2,7 @@ import url from 'url';
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
// @ts-ignore
|
|
5
|
-
deconstructHydraId
|
|
5
|
+
deconstructHydraId,
|
|
6
6
|
} from '@webex/common';
|
|
7
7
|
|
|
8
8
|
import {
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
MEET_M,
|
|
24
24
|
HTTPS_PROTOCOL,
|
|
25
25
|
UUID_REG,
|
|
26
|
-
VALID_EMAIL_ADDRESS
|
|
26
|
+
VALID_EMAIL_ADDRESS,
|
|
27
27
|
} from '../constants';
|
|
28
28
|
import ParameterError from '../common/errors/parameter';
|
|
29
29
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
@@ -43,9 +43,10 @@ MeetingInfoUtil.getParsedUrl = (link) => {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
return parsedUrl;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
} catch (error) {
|
|
47
|
+
LoggerProxy.logger.warn(
|
|
48
|
+
`Meeting-info:util#getParsedUrl --> unable to parse the URL, error: ${error}`
|
|
49
|
+
);
|
|
49
50
|
|
|
50
51
|
return null;
|
|
51
52
|
}
|
|
@@ -59,7 +60,11 @@ MeetingInfoUtil.getParsedUrl = (link) => {
|
|
|
59
60
|
MeetingInfoUtil.isMeetingLink = (value: string) => {
|
|
60
61
|
const parsedUrl = MeetingInfoUtil.getParsedUrl(value);
|
|
61
62
|
const hostNameBool = parsedUrl.hostname && parsedUrl.hostname.includes(WEBEX_DOT_COM);
|
|
62
|
-
const pathNameBool =
|
|
63
|
+
const pathNameBool =
|
|
64
|
+
parsedUrl.pathname &&
|
|
65
|
+
(parsedUrl.pathname.includes(`/${MEET}`) ||
|
|
66
|
+
parsedUrl.pathname.includes(`/${MEET_M}`) ||
|
|
67
|
+
parsedUrl.pathname.includes(`/${JOIN}`));
|
|
63
68
|
|
|
64
69
|
return hostNameBool && pathNameBool;
|
|
65
70
|
};
|
|
@@ -74,7 +79,6 @@ MeetingInfoUtil.isConversationUrl = (value, webex) => {
|
|
|
74
79
|
return false;
|
|
75
80
|
};
|
|
76
81
|
|
|
77
|
-
|
|
78
82
|
MeetingInfoUtil.isSipUri = (sipString) => {
|
|
79
83
|
// TODO: lets remove regex from this equation and user URI matchers and such
|
|
80
84
|
// have not found a great sip uri parser library as of now
|
|
@@ -106,30 +110,38 @@ MeetingInfoUtil.getHydraId = (destination) => {
|
|
|
106
110
|
return {};
|
|
107
111
|
};
|
|
108
112
|
|
|
109
|
-
MeetingInfoUtil.getSipUriFromHydraPersonId = (destination, webex) =>
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
})
|
|
118
|
-
|
|
113
|
+
MeetingInfoUtil.getSipUriFromHydraPersonId = (destination, webex) =>
|
|
114
|
+
webex.people
|
|
115
|
+
.get(destination)
|
|
116
|
+
.then((res) => {
|
|
117
|
+
if (res.emails && res.emails.length) {
|
|
118
|
+
return res.emails[0];
|
|
119
|
+
}
|
|
120
|
+
throw new ParameterError('Hydra Id Lookup was an invalid hydra person id.');
|
|
121
|
+
})
|
|
122
|
+
.catch((err) => {
|
|
123
|
+
LoggerProxy.logger.error(
|
|
124
|
+
`Meeting-info:util#MeetingInfoUtil.getSipUriFromHydraPersonId --> getSipUriFromHydraPersonId ${err} `
|
|
125
|
+
);
|
|
126
|
+
throw err;
|
|
127
|
+
});
|
|
119
128
|
|
|
120
129
|
MeetingInfoUtil.getDestinationType = async (from) => {
|
|
121
130
|
const {type, webex} = from;
|
|
122
131
|
let {destination} = from;
|
|
123
132
|
|
|
124
|
-
if (type === _PERSONAL_ROOM_) {
|
|
125
|
-
|
|
133
|
+
if (type === _PERSONAL_ROOM_) {
|
|
134
|
+
// this case checks if your type is personal room
|
|
135
|
+
if (!destination) {
|
|
136
|
+
// if we are not getting anything in desination we fetch org and user ids from webex instance
|
|
126
137
|
destination = {
|
|
127
138
|
userId: webex.internal.device.userId,
|
|
128
|
-
orgId: webex.internal.device.orgId
|
|
139
|
+
orgId: webex.internal.device.orgId,
|
|
129
140
|
};
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
141
|
+
} else {
|
|
142
|
+
const options = VALID_EMAIL_ADDRESS.test(destination)
|
|
143
|
+
? {email: destination}
|
|
144
|
+
: {id: destination}; // we are assuming userId as default
|
|
133
145
|
const res = await webex.people.list(options);
|
|
134
146
|
|
|
135
147
|
let {orgId, id: userId} = res.items[0];
|
|
@@ -142,31 +154,29 @@ MeetingInfoUtil.getDestinationType = async (from) => {
|
|
|
142
154
|
if (type) {
|
|
143
155
|
return {
|
|
144
156
|
destination,
|
|
145
|
-
type
|
|
157
|
+
type,
|
|
146
158
|
};
|
|
147
159
|
}
|
|
148
160
|
const options: any = {};
|
|
149
161
|
const hydraId = MeetingInfoUtil.getHydraId(destination);
|
|
150
162
|
|
|
151
163
|
if (MeetingInfoUtil.isMeetingLink(destination)) {
|
|
152
|
-
LoggerProxy.logger.warn(
|
|
164
|
+
LoggerProxy.logger.warn(
|
|
165
|
+
'Meeting-info:util#generateOptions --> WARN, use of Meeting Link is deprecated, please use a SIP URI instead'
|
|
166
|
+
);
|
|
153
167
|
|
|
154
168
|
options.type = _MEETING_LINK_;
|
|
155
169
|
options.destination = destination;
|
|
156
|
-
}
|
|
157
|
-
else if (MeetingInfoUtil.isSipUri(destination)) {
|
|
170
|
+
} else if (MeetingInfoUtil.isSipUri(destination)) {
|
|
158
171
|
options.type = _SIP_URI_;
|
|
159
172
|
options.destination = destination;
|
|
160
|
-
}
|
|
161
|
-
else if (MeetingInfoUtil.isPhoneNumber(destination)) {
|
|
173
|
+
} else if (MeetingInfoUtil.isPhoneNumber(destination)) {
|
|
162
174
|
options.type = _SIP_URI_;
|
|
163
175
|
options.destination = destination;
|
|
164
|
-
}
|
|
165
|
-
else if (MeetingInfoUtil.isConversationUrl(destination, webex)) {
|
|
176
|
+
} else if (MeetingInfoUtil.isConversationUrl(destination, webex)) {
|
|
166
177
|
options.type = _CONVERSATION_URL_;
|
|
167
178
|
options.destination = destination;
|
|
168
|
-
}
|
|
169
|
-
else if (hydraId.people) {
|
|
179
|
+
} else if (hydraId.people) {
|
|
170
180
|
options.type = _SIP_URI_;
|
|
171
181
|
|
|
172
182
|
return MeetingInfoUtil.getSipUriFromHydraPersonId(hydraId.destination, webex).then((res) => {
|
|
@@ -179,27 +189,28 @@ MeetingInfoUtil.getDestinationType = async (from) => {
|
|
|
179
189
|
|
|
180
190
|
return Promise.resolve(options);
|
|
181
191
|
});
|
|
182
|
-
}
|
|
183
|
-
else if (hydraId.room) {
|
|
192
|
+
} else if (hydraId.room) {
|
|
184
193
|
options.type = _CONVERSATION_URL_;
|
|
185
194
|
try {
|
|
186
195
|
await webex.internal.services.waitForCatalog('postauth');
|
|
187
196
|
|
|
188
197
|
const conversationUrl = webex.internal.conversation.getUrlFromClusterId({
|
|
189
198
|
cluster: hydraId.cluster,
|
|
190
|
-
id: hydraId.destination
|
|
199
|
+
id: hydraId.destination,
|
|
191
200
|
});
|
|
192
201
|
|
|
193
202
|
options.destination = conversationUrl;
|
|
194
|
-
}
|
|
195
|
-
catch (e) {
|
|
203
|
+
} catch (e) {
|
|
196
204
|
LoggerProxy.logger.error(`Meeting-info:util#getDestinationType --> ${e}`);
|
|
197
|
-
throw
|
|
205
|
+
throw e;
|
|
198
206
|
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
207
|
+
} else {
|
|
208
|
+
LoggerProxy.logger.warn(
|
|
209
|
+
"Meeting-info:util#getDestinationType --> ('MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url."
|
|
210
|
+
);
|
|
211
|
+
throw new ParameterError(
|
|
212
|
+
'MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.'
|
|
213
|
+
);
|
|
203
214
|
}
|
|
204
215
|
|
|
205
216
|
return Promise.resolve(options);
|
|
@@ -212,10 +223,8 @@ MeetingInfoUtil.getDestinationType = async (from) => {
|
|
|
212
223
|
* @param {Object} options.destination ?? value.value
|
|
213
224
|
* @returns {Object} returns an object with {resource, method}
|
|
214
225
|
*/
|
|
215
|
-
MeetingInfoUtil.getRequestBody = (options: {
|
|
216
|
-
const {
|
|
217
|
-
type, destination, password, captchaInfo
|
|
218
|
-
} = options;
|
|
226
|
+
MeetingInfoUtil.getRequestBody = (options: {type: string; destination: object} | any) => {
|
|
227
|
+
const {type, destination, password, captchaInfo} = options;
|
|
219
228
|
const body: any = {
|
|
220
229
|
supportHostKey: true,
|
|
221
230
|
supportCountryList: true,
|
|
@@ -239,8 +248,7 @@ MeetingInfoUtil.getRequestBody = (options: { type: string; destination: object }
|
|
|
239
248
|
// use meetingID for the completer meeting info for the already started meeting
|
|
240
249
|
if (destination.info?.webExMeetingId) {
|
|
241
250
|
body.meetingKey = destination.info.webExMeetingId;
|
|
242
|
-
}
|
|
243
|
-
else if (destination.info?.sipUri) {
|
|
251
|
+
} else if (destination.info?.sipUri) {
|
|
244
252
|
body.sipUrl = destination.info.sipUri;
|
|
245
253
|
}
|
|
246
254
|
break;
|
|
@@ -285,10 +293,8 @@ MeetingInfoUtil.getWebexSite = (uri: string) => {
|
|
|
285
293
|
* @param {Object} options.destination ?? value.value
|
|
286
294
|
* @returns {String} returns a URI string or null of there is no direct URI
|
|
287
295
|
*/
|
|
288
|
-
MeetingInfoUtil.getDirectMeetingInfoURI = (options: {
|
|
289
|
-
const {
|
|
290
|
-
type, destination
|
|
291
|
-
} = options;
|
|
296
|
+
MeetingInfoUtil.getDirectMeetingInfoURI = (options: {type: string; destination: any}) => {
|
|
297
|
+
const {type, destination} = options;
|
|
292
298
|
|
|
293
299
|
let preferredWebexSite = null;
|
|
294
300
|
|
|
@@ -35,7 +35,7 @@ export default class MeetingCollection extends Collection {
|
|
|
35
35
|
public getByKey(key: string, value: any) {
|
|
36
36
|
if (key && value) {
|
|
37
37
|
// @ts-ignore
|
|
38
|
-
return find(this.meetings, (meeting) =>
|
|
38
|
+
return find(this.meetings, (meeting) => meeting[key] === value);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
return null;
|