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