@webex/plugin-meetings 3.0.0-beta.31 → 3.0.0-beta.310
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/README.md +46 -8
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +94 -15
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +709 -35
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/utils.js +45 -1
- package/dist/breakouts/utils.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +51 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.js +158 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/webex-errors.js +48 -7
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +5 -1
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +5 -11
- package/dist/config.js.map +1 -1
- package/dist/constants.js +233 -29
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +14 -2
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +109 -15
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +309 -18
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +112 -1
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +383 -62
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +57 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +249 -72
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +61 -116
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +73 -124
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +82 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +3777 -2929
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +292 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +230 -124
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +260 -196
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +601 -417
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +73 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +192 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/util.js +1 -1
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +36 -36
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +39 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +415 -115
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +72 -6
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +58 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +132 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +102 -6
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +326 -232
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +13 -5
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -468
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +238 -49
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +29 -16
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +39 -36
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +209 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +233 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/reachability/index.js +225 -59
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +17 -8
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +201 -156
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +62 -32
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +112 -97
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +95 -36
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +117 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/index.js +86 -78
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +11 -10
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/utils.d.ts +14 -0
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/types/common/errors/webex-errors.d.ts +25 -1
- package/dist/types/common/logs/request.d.ts +2 -0
- package/dist/types/common/queue.d.ts +9 -7
- package/dist/types/config.d.ts +1 -7
- package/dist/types/constants.d.ts +194 -24
- package/dist/types/controls-options-manager/enums.d.ts +11 -1
- package/dist/types/controls-options-manager/index.d.ts +17 -1
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -7
- package/dist/types/index.d.ts +6 -4
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/index.d.ts +57 -4
- package/dist/types/locus-info/parser.d.ts +67 -6
- package/dist/types/media/index.d.ts +2 -0
- package/dist/types/media/properties.d.ts +34 -48
- package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
- package/dist/types/meeting/index.d.ts +463 -510
- package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/types/meeting/muteState.d.ts +99 -23
- package/dist/types/meeting/request.d.ts +72 -43
- package/dist/types/meeting/util.d.ts +101 -1
- package/dist/types/meeting-info/index.d.ts +13 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
- package/dist/types/meetings/collection.d.ts +17 -0
- package/dist/types/meetings/index.d.ts +98 -20
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/member/index.d.ts +14 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/members/collection.d.ts +5 -0
- package/dist/types/members/index.d.ts +35 -2
- package/dist/types/members/request.d.ts +73 -9
- package/dist/types/members/types.d.ts +25 -0
- package/dist/types/members/util.d.ts +214 -1
- package/dist/types/metrics/constants.d.ts +12 -4
- package/dist/types/metrics/index.d.ts +4 -119
- package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
- package/dist/types/multistream/receiveSlot.d.ts +13 -11
- package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
- package/dist/types/multistream/remoteMedia.d.ts +8 -29
- package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
- package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
- package/dist/types/multistream/sendSlotManager.d.ts +61 -0
- package/dist/types/reachability/index.d.ts +61 -7
- package/dist/types/reachability/request.d.ts +7 -3
- package/dist/types/reconnection-manager/index.d.ts +9 -0
- package/dist/types/recording-controller/index.d.ts +15 -1
- package/dist/types/recording-controller/util.d.ts +5 -4
- package/dist/types/roap/index.d.ts +2 -1
- package/dist/types/roap/request.d.ts +15 -11
- package/dist/types/roap/turnDiscovery.d.ts +21 -3
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +47 -0
- package/dist/types/statsAnalyzer/index.d.ts +7 -1
- package/dist/types/webinar/collection.d.ts +16 -0
- package/dist/types/webinar/index.d.ts +5 -0
- package/dist/webinar/collection.js +44 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +69 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +23 -20
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +42 -12
- package/src/breakouts/breakout.ts +67 -9
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +592 -20
- package/src/breakouts/utils.ts +42 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/webex-errors.ts +44 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +5 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +4 -10
- package/src/constants.ts +221 -19
- package/src/controls-options-manager/enums.ts +12 -0
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +40 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +413 -59
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +102 -122
- package/src/media/properties.ts +87 -110
- package/src/meeting/in-meeting-actions.ts +163 -3
- package/src/meeting/index.ts +3132 -2541
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +229 -131
- package/src/meeting/request.ts +177 -121
- package/src/meeting/util.ts +588 -394
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +170 -14
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +23 -23
- package/src/meetings/collection.ts +33 -0
- package/src/meetings/index.ts +445 -123
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +80 -11
- package/src/member/index.ts +58 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +141 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +134 -8
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +333 -240
- package/src/metrics/constants.ts +12 -4
- package/src/metrics/index.ts +1 -490
- package/src/multistream/mediaRequestManager.ts +289 -79
- package/src/multistream/receiveSlot.ts +31 -17
- package/src/multistream/receiveSlotManager.ts +34 -24
- package/src/multistream/remoteMedia.ts +27 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +148 -30
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/reachability/index.ts +228 -37
- package/src/reachability/request.ts +17 -8
- package/src/reconnection-manager/index.ts +83 -56
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +63 -32
- package/src/roap/request.ts +100 -104
- package/src/roap/turnDiscovery.ts +48 -26
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/index.ts +105 -91
- package/src/statsAnalyzer/mqaUtil.ts +13 -14
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +60 -3
- package/test/integration/spec/journey.js +320 -261
- package/test/integration/spec/space-meeting.js +76 -3
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +118 -28
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1395 -69
- package/test/unit/spec/breakouts/utils.js +52 -1
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +1304 -33
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
- package/test/unit/spec/locus-info/parser.js +116 -35
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +104 -37
- package/test/unit/spec/media/properties.ts +2 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
- package/test/unit/spec/meeting/index.js +5216 -1956
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +408 -208
- package/test/unit/spec/meeting/request.js +483 -49
- package/test/unit/spec/meeting/utils.js +679 -64
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +26 -0
- package/test/unit/spec/meetings/index.js +1011 -205
- package/test/unit/spec/meetings/utils.js +202 -2
- package/test/unit/spec/member/index.js +61 -6
- package/test/unit/spec/member/util.js +510 -34
- package/test/unit/spec/members/index.js +432 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +210 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
- package/test/unit/spec/multistream/receiveSlot.ts +28 -20
- package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/reachability/index.ts +549 -9
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reconnection-manager/index.js +85 -9
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +178 -64
- package/test/unit/spec/roap/request.ts +203 -85
- package/test/unit/spec/roap/turnDiscovery.ts +82 -36
- package/test/unit/spec/rtcMetrics/index.ts +73 -0
- package/test/unit/spec/stats-analyzer/index.js +136 -2
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -52
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -299
- package/dist/metrics/config.js.map +0 -1
- package/dist/types/meeting/effectsState.d.ts +0 -42
- package/dist/types/metrics/config.d.ts +0 -178
- package/src/index.js +0 -16
- package/src/meeting/effectsState.ts +0 -211
- package/src/metrics/config.ts +0 -495
- package/test/unit/spec/meeting/effectsState.js +0 -285
|
@@ -70,10 +70,41 @@ export default class MeetingInfo {
|
|
|
70
70
|
* @private
|
|
71
71
|
* @memberof MeetingInfo
|
|
72
72
|
*/
|
|
73
|
-
private requestFetchInfo(options:
|
|
73
|
+
private requestFetchInfo(options: any) {
|
|
74
|
+
const {meetingId, sendCAevents} = options;
|
|
75
|
+
if (meetingId && sendCAevents) {
|
|
76
|
+
this.webex.internal.newMetrics.submitInternalEvent({
|
|
77
|
+
name: 'internal.client.meetinginfo.request',
|
|
78
|
+
});
|
|
79
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
80
|
+
name: 'client.meetinginfo.request',
|
|
81
|
+
options: {
|
|
82
|
+
meetingId,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
74
87
|
return this.meetingInfoRequest
|
|
75
88
|
.fetchMeetingInfo(options)
|
|
76
89
|
.then((info) => {
|
|
90
|
+
if (meetingId && sendCAevents) {
|
|
91
|
+
this.webex.internal.newMetrics.submitInternalEvent({
|
|
92
|
+
name: 'internal.client.meetinginfo.response',
|
|
93
|
+
});
|
|
94
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
95
|
+
name: 'client.meetinginfo.response',
|
|
96
|
+
payload: {
|
|
97
|
+
identifiers: {
|
|
98
|
+
meetingLookupUrl: info?.url,
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
options: {
|
|
102
|
+
meetingId,
|
|
103
|
+
webexConferenceIdStr: info?.body?.confIdStr || info?.body?.confID,
|
|
104
|
+
globalMeetingId: info?.body?.meetingId,
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
}
|
|
77
108
|
if (info && info.body) {
|
|
78
109
|
this.setMeetingInfo(info.body.sipMeetingUri || info.body.meetingLink, info.body);
|
|
79
110
|
}
|
|
@@ -84,6 +115,23 @@ export default class MeetingInfo {
|
|
|
84
115
|
LoggerProxy.logger.error(
|
|
85
116
|
`Meeting-info:index#requestFetchInfo --> ${error} fetch meetingInfo`
|
|
86
117
|
);
|
|
118
|
+
if (meetingId && sendCAevents) {
|
|
119
|
+
this.webex.internal.newMetrics.submitInternalEvent({
|
|
120
|
+
name: 'internal.client.meetinginfo.response',
|
|
121
|
+
});
|
|
122
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
123
|
+
name: 'client.meetinginfo.response',
|
|
124
|
+
payload: {
|
|
125
|
+
identifiers: {
|
|
126
|
+
meetingLookupUrl: error?.url,
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
options: {
|
|
130
|
+
meetingId,
|
|
131
|
+
rawError: error,
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
}
|
|
87
135
|
|
|
88
136
|
return Promise.reject(error);
|
|
89
137
|
});
|
|
@@ -105,29 +153,54 @@ export default class MeetingInfo {
|
|
|
105
153
|
});
|
|
106
154
|
}
|
|
107
155
|
|
|
156
|
+
// eslint-disable-next-line valid-jsdoc
|
|
108
157
|
/**
|
|
109
158
|
* Fetches meeting info from the server
|
|
110
159
|
* @param {String} destination one of many different types of destinations to look up info for
|
|
111
160
|
* @param {String} [type] to match up with the destination value
|
|
161
|
+
* @param {String} [password] meeting password
|
|
162
|
+
* @param {Object} [captchaInfo] captcha code and id
|
|
163
|
+
* @param {String} [installedOrgID]
|
|
164
|
+
* @param {String} [locusId]
|
|
165
|
+
* @param {Object} [extraParams]
|
|
166
|
+
* @param {Boolean} [options] meeting Id and whether Call Analyzer events should be sent
|
|
112
167
|
* @returns {Promise} returns a meeting info object
|
|
113
168
|
* @public
|
|
114
169
|
* @memberof MeetingInfo
|
|
115
170
|
*/
|
|
116
|
-
public fetchMeetingInfo(
|
|
171
|
+
public fetchMeetingInfo(
|
|
172
|
+
destination: string,
|
|
173
|
+
type: string = null,
|
|
174
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
175
|
+
password: string = null,
|
|
176
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
177
|
+
captchaInfo: {
|
|
178
|
+
code: string;
|
|
179
|
+
id: string;
|
|
180
|
+
} = null,
|
|
181
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
182
|
+
installedOrgID = null,
|
|
183
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
184
|
+
locusId = null,
|
|
185
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
186
|
+
extraParams: object = {},
|
|
187
|
+
options: {meetingId?: string; sendCAevents?: boolean} = {}
|
|
188
|
+
) {
|
|
117
189
|
if (type === _PERSONAL_ROOM_ && !destination) {
|
|
118
190
|
destination = this.webex.internal.device.userId;
|
|
119
191
|
}
|
|
120
192
|
|
|
121
193
|
return this.fetchInfoOptions(MeetingInfoUtil.extractDestination(destination, type), type).then(
|
|
122
|
-
(
|
|
194
|
+
(infoOptions) =>
|
|
123
195
|
// fetch meeting info
|
|
124
|
-
this.requestFetchInfo(options).catch((error) => {
|
|
196
|
+
this.requestFetchInfo({...infoOptions, ...options}).catch((error) => {
|
|
125
197
|
// if it failed the first time as meeting link
|
|
126
|
-
if (
|
|
198
|
+
if (infoOptions.type === _MEETING_LINK_) {
|
|
127
199
|
// convert the meeting link to sip URI and retry
|
|
128
|
-
return this.requestFetchInfo(
|
|
129
|
-
this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_)
|
|
130
|
-
|
|
200
|
+
return this.requestFetchInfo({
|
|
201
|
+
...this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_),
|
|
202
|
+
...options,
|
|
203
|
+
});
|
|
131
204
|
}
|
|
132
205
|
|
|
133
206
|
return Promise.reject(error);
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import lodash from 'lodash';
|
|
2
|
+
import {
|
|
3
|
+
HTTP_VERBS,
|
|
4
|
+
_CONVERSATION_URL_,
|
|
5
|
+
WBXAPPAPI_SERVICE,
|
|
6
|
+
DEFAULT_MEETING_INFO_REQUEST_BODY,
|
|
7
|
+
} from '../constants';
|
|
2
8
|
import Metrics from '../metrics';
|
|
3
9
|
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
4
10
|
|
|
@@ -11,7 +17,7 @@ const CAPTCHA_ERROR_DEFAULT_MESSAGE =
|
|
|
11
17
|
const ADHOC_MEETING_DEFAULT_ERROR =
|
|
12
18
|
'Failed starting the adhoc meeting, Please contact support team ';
|
|
13
19
|
const CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES = [423005, 423006];
|
|
14
|
-
|
|
20
|
+
const POLICY_ERROR_CODES = [403049, 403104, 403103, 403048, 403102, 403101];
|
|
15
21
|
/**
|
|
16
22
|
* Error to indicate that wbxappapi requires a password
|
|
17
23
|
*/
|
|
@@ -63,6 +69,30 @@ export class MeetingInfoV2AdhocMeetingError extends Error {
|
|
|
63
69
|
}
|
|
64
70
|
}
|
|
65
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Error preventing join because of a meeting policy
|
|
74
|
+
*/
|
|
75
|
+
export class MeetingInfoV2PolicyError extends Error {
|
|
76
|
+
meetingInfo: object;
|
|
77
|
+
sdkMessage: string;
|
|
78
|
+
wbxAppApiCode: number;
|
|
79
|
+
/**
|
|
80
|
+
*
|
|
81
|
+
* @constructor
|
|
82
|
+
* @param {Number} [wbxAppApiErrorCode]
|
|
83
|
+
* @param {Object} [meetingInfo]
|
|
84
|
+
* @param {String} [message]
|
|
85
|
+
*/
|
|
86
|
+
constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message?: string) {
|
|
87
|
+
super(`${message}, code=${wbxAppApiErrorCode}`);
|
|
88
|
+
this.name = 'MeetingInfoV2AdhocMeetingError';
|
|
89
|
+
this.sdkMessage = message;
|
|
90
|
+
this.stack = new Error().stack;
|
|
91
|
+
this.wbxAppApiCode = wbxAppApiErrorCode;
|
|
92
|
+
this.meetingInfo = meetingInfo;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
66
96
|
/**
|
|
67
97
|
* Error to indicate that preferred webex site not present to start adhoc meeting
|
|
68
98
|
*/
|
|
@@ -124,14 +154,38 @@ export default class MeetingInfoV2 {
|
|
|
124
154
|
});
|
|
125
155
|
}
|
|
126
156
|
|
|
157
|
+
/**
|
|
158
|
+
* Raises a MeetingInfoV2PolicyError for policy error codes
|
|
159
|
+
* @param {any} err the error from the request
|
|
160
|
+
* @returns {void}
|
|
161
|
+
*/
|
|
162
|
+
handlePolicyError = (err) => {
|
|
163
|
+
if (!err.body) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (POLICY_ERROR_CODES.includes(err.body?.code)) {
|
|
168
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_INFO_POLICY_ERROR, {
|
|
169
|
+
code: err.body?.code,
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
throw new MeetingInfoV2PolicyError(
|
|
173
|
+
err.body?.code,
|
|
174
|
+
err.body?.data?.meetingInfo,
|
|
175
|
+
err.body?.message
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
|
|
127
180
|
/**
|
|
128
181
|
* Creates adhoc space meetings for a space by fetching the conversation infomation
|
|
129
182
|
* @param {String} conversationUrl conversationUrl to start adhoc meeting on
|
|
183
|
+
* @param {String} installedOrgID org ID of user's machine
|
|
130
184
|
* @returns {Promise} returns a meeting info object
|
|
131
185
|
* @public
|
|
132
186
|
* @memberof MeetingInfo
|
|
133
187
|
*/
|
|
134
|
-
async createAdhocSpaceMeeting(conversationUrl: string) {
|
|
188
|
+
async createAdhocSpaceMeeting(conversationUrl: string, installedOrgID?: string) {
|
|
135
189
|
if (!this.webex.meetings.preferredWebexSite) {
|
|
136
190
|
throw Error('No preferred webex site found');
|
|
137
191
|
}
|
|
@@ -153,7 +207,14 @@ export default class MeetingInfoV2 {
|
|
|
153
207
|
return this.webex.internal.conversation
|
|
154
208
|
.get({url: conversationUrl}, {includeParticipants: true, disableTransform: true})
|
|
155
209
|
.then((conversation) => {
|
|
156
|
-
const body
|
|
210
|
+
const body: {
|
|
211
|
+
title: string;
|
|
212
|
+
spaceUrl: string;
|
|
213
|
+
keyUrl: string;
|
|
214
|
+
kroUrl: string;
|
|
215
|
+
invitees: any[];
|
|
216
|
+
installedOrgID?: string;
|
|
217
|
+
} = {
|
|
157
218
|
title: conversation.displayName,
|
|
158
219
|
spaceUrl: conversation.url,
|
|
159
220
|
keyUrl: conversation.encryptionKeyUrl,
|
|
@@ -161,19 +222,28 @@ export default class MeetingInfoV2 {
|
|
|
161
222
|
invitees: getInvitees(conversation.participants?.items),
|
|
162
223
|
};
|
|
163
224
|
|
|
225
|
+
if (installedOrgID) {
|
|
226
|
+
body.installedOrgID = installedOrgID;
|
|
227
|
+
}
|
|
228
|
+
|
|
164
229
|
const uri = this.webex.meetings.preferredWebexSite
|
|
165
230
|
? `https://${this.webex.meetings.preferredWebexSite}/wbxappapi/v2/meetings/spaceInstant`
|
|
166
231
|
: '';
|
|
167
232
|
|
|
168
|
-
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);
|
|
169
|
-
|
|
170
233
|
return this.webex.request({
|
|
171
234
|
method: HTTP_VERBS.POST,
|
|
172
235
|
uri,
|
|
173
236
|
body,
|
|
174
237
|
});
|
|
175
238
|
})
|
|
239
|
+
.then((requestResult) => {
|
|
240
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);
|
|
241
|
+
|
|
242
|
+
return requestResult;
|
|
243
|
+
})
|
|
176
244
|
.catch((err) => {
|
|
245
|
+
this.handlePolicyError(err);
|
|
246
|
+
|
|
177
247
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_FAILURE, {
|
|
178
248
|
reason: err.message,
|
|
179
249
|
stack: err.stack,
|
|
@@ -190,6 +260,10 @@ export default class MeetingInfoV2 {
|
|
|
190
260
|
* @param {Object} captchaInfo
|
|
191
261
|
* @param {String} captchaInfo.code
|
|
192
262
|
* @param {String} captchaInfo.id
|
|
263
|
+
* @param {String} installedOrgID org ID of user's machine
|
|
264
|
+
* @param {String} locusId
|
|
265
|
+
* @param {Object} extraParams
|
|
266
|
+
* @param {Object} options
|
|
193
267
|
* @returns {Promise} returns a meeting info object
|
|
194
268
|
* @public
|
|
195
269
|
* @memberof MeetingInfo
|
|
@@ -201,8 +275,14 @@ export default class MeetingInfoV2 {
|
|
|
201
275
|
captchaInfo: {
|
|
202
276
|
code: string;
|
|
203
277
|
id: string;
|
|
204
|
-
} = null
|
|
278
|
+
} = null,
|
|
279
|
+
installedOrgID = null,
|
|
280
|
+
locusId = null,
|
|
281
|
+
extraParams: object = {},
|
|
282
|
+
options: {meetingId?: string; sendCAevents?: boolean} = {}
|
|
205
283
|
) {
|
|
284
|
+
const {meetingId, sendCAevents} = options;
|
|
285
|
+
|
|
206
286
|
const destinationType = await MeetingInfoUtil.getDestinationType({
|
|
207
287
|
destination,
|
|
208
288
|
type,
|
|
@@ -214,12 +294,35 @@ export default class MeetingInfoV2 {
|
|
|
214
294
|
this.webex.config.meetings.experimental.enableAdhocMeetings &&
|
|
215
295
|
this.webex.meetings.preferredWebexSite
|
|
216
296
|
) {
|
|
217
|
-
return this.createAdhocSpaceMeeting(destinationType.destination);
|
|
297
|
+
return this.createAdhocSpaceMeeting(destinationType.destination, installedOrgID);
|
|
218
298
|
}
|
|
219
299
|
|
|
220
|
-
const body = await MeetingInfoUtil.getRequestBody({
|
|
300
|
+
const body = await MeetingInfoUtil.getRequestBody({
|
|
301
|
+
...destinationType,
|
|
302
|
+
password,
|
|
303
|
+
captchaInfo,
|
|
304
|
+
installedOrgID,
|
|
305
|
+
locusId,
|
|
306
|
+
extraParams,
|
|
307
|
+
});
|
|
221
308
|
|
|
222
|
-
|
|
309
|
+
// If the body only contains the default properties, we don't have enough to
|
|
310
|
+
// fetch the meeting info so don't bother trying.
|
|
311
|
+
if (
|
|
312
|
+
!lodash.difference(Object.keys(body), Object.keys(DEFAULT_MEETING_INFO_REQUEST_BODY)).length
|
|
313
|
+
) {
|
|
314
|
+
const err = new Error('Not enough information to fetch meeting info');
|
|
315
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE, {
|
|
316
|
+
reason: err.message,
|
|
317
|
+
destinationType: destinationType?.type,
|
|
318
|
+
webExMeetingId: destinationType?.info?.webExMeetingId,
|
|
319
|
+
sipUri: destinationType?.info?.sipUri,
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
throw err;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
const requestOptions: any = {
|
|
223
326
|
method: HTTP_VERBS.POST,
|
|
224
327
|
body,
|
|
225
328
|
};
|
|
@@ -227,21 +330,74 @@ export default class MeetingInfoV2 {
|
|
|
227
330
|
const directURI = await MeetingInfoUtil.getDirectMeetingInfoURI(destinationType);
|
|
228
331
|
|
|
229
332
|
if (directURI) {
|
|
230
|
-
|
|
333
|
+
requestOptions.uri = directURI;
|
|
231
334
|
} else {
|
|
232
|
-
|
|
233
|
-
|
|
335
|
+
requestOptions.service = WBXAPPAPI_SERVICE;
|
|
336
|
+
requestOptions.resource = 'meetingInfo';
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if (meetingId && sendCAevents) {
|
|
340
|
+
this.webex.internal.newMetrics.submitInternalEvent({
|
|
341
|
+
name: 'internal.client.meetinginfo.request',
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
345
|
+
name: 'client.meetinginfo.request',
|
|
346
|
+
options: {
|
|
347
|
+
meetingId,
|
|
348
|
+
},
|
|
349
|
+
});
|
|
234
350
|
}
|
|
235
351
|
|
|
236
352
|
return this.webex
|
|
237
|
-
.request(
|
|
353
|
+
.request(requestOptions)
|
|
238
354
|
.then((response) => {
|
|
355
|
+
if (meetingId && sendCAevents) {
|
|
356
|
+
this.webex.internal.newMetrics.submitInternalEvent({
|
|
357
|
+
name: 'internal.client.meetinginfo.response',
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
361
|
+
name: 'client.meetinginfo.response',
|
|
362
|
+
payload: {
|
|
363
|
+
identifiers: {
|
|
364
|
+
meetingLookupUrl: response?.url,
|
|
365
|
+
},
|
|
366
|
+
},
|
|
367
|
+
options: {
|
|
368
|
+
meetingId,
|
|
369
|
+
webexConferenceIdStr: response?.body?.confIdStr || response?.body?.confID,
|
|
370
|
+
globalMeetingId: response?.body?.meetingId,
|
|
371
|
+
},
|
|
372
|
+
});
|
|
373
|
+
}
|
|
239
374
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS);
|
|
240
375
|
|
|
241
376
|
return response;
|
|
242
377
|
})
|
|
243
378
|
.catch((err) => {
|
|
379
|
+
if (meetingId && sendCAevents) {
|
|
380
|
+
this.webex.internal.newMetrics.submitInternalEvent({
|
|
381
|
+
name: 'internal.client.meetinginfo.response',
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
385
|
+
name: 'client.meetinginfo.response',
|
|
386
|
+
payload: {
|
|
387
|
+
identifiers: {
|
|
388
|
+
meetingLookupUrl: err?.url,
|
|
389
|
+
},
|
|
390
|
+
},
|
|
391
|
+
options: {
|
|
392
|
+
meetingId,
|
|
393
|
+
rawError: err,
|
|
394
|
+
},
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
|
|
244
398
|
if (err?.statusCode === 403) {
|
|
399
|
+
this.handlePolicyError(err);
|
|
400
|
+
|
|
245
401
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR, {
|
|
246
402
|
reason: err.message,
|
|
247
403
|
stack: err.stack,
|
package/src/meeting-info/util.ts
CHANGED
|
@@ -233,7 +233,7 @@ MeetingInfoUtil.generateOptions = async (from) => {
|
|
|
233
233
|
}
|
|
234
234
|
} else {
|
|
235
235
|
throw new ParameterError(
|
|
236
|
-
'MeetingInfo is fetched with meeting link,
|
|
236
|
+
'MeetingInfo is fetched with the meeting link, SIP URI, phone number, Hydra people ID, or a conversation URL.'
|
|
237
237
|
);
|
|
238
238
|
}
|
|
239
239
|
|
|
@@ -24,11 +24,15 @@ import {
|
|
|
24
24
|
HTTPS_PROTOCOL,
|
|
25
25
|
UUID_REG,
|
|
26
26
|
VALID_EMAIL_ADDRESS,
|
|
27
|
+
DEFAULT_MEETING_INFO_REQUEST_BODY,
|
|
27
28
|
} from '../constants';
|
|
28
29
|
import ParameterError from '../common/errors/parameter';
|
|
29
30
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
31
|
+
import {SpaceIDDeprecatedError} from '../common/errors/webex-errors';
|
|
30
32
|
|
|
31
33
|
const MeetingInfoUtil: any = {};
|
|
34
|
+
const meetingInfoError =
|
|
35
|
+
'MeetingInfo is fetched with the meeting link, SIP URI, phone number, Hydra people ID, or a conversation URL.';
|
|
32
36
|
|
|
33
37
|
MeetingInfoUtil.getParsedUrl = (link) => {
|
|
34
38
|
try {
|
|
@@ -190,27 +194,14 @@ MeetingInfoUtil.getDestinationType = async (from) => {
|
|
|
190
194
|
return Promise.resolve(options);
|
|
191
195
|
});
|
|
192
196
|
} else if (hydraId.room) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
await webex.internal.services.waitForCatalog('postauth');
|
|
196
|
-
|
|
197
|
-
const conversationUrl = webex.internal.conversation.getUrlFromClusterId({
|
|
198
|
-
cluster: hydraId.cluster,
|
|
199
|
-
id: hydraId.destination,
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
options.destination = conversationUrl;
|
|
203
|
-
} catch (e) {
|
|
204
|
-
LoggerProxy.logger.error(`Meeting-info:util#getDestinationType --> ${e}`);
|
|
205
|
-
throw e;
|
|
206
|
-
}
|
|
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.'
|
|
197
|
+
LoggerProxy.logger.error(
|
|
198
|
+
`Meeting-info:util#getDestinationType --> Using the space ID as a destination is no longer supported. Please refer to the [migration guide](https://github.com/webex/webex-js-sdk/wiki/Migration-to-Unified-Space-Meetings) to migrate to use the meeting ID or SIP address.`
|
|
213
199
|
);
|
|
200
|
+
// Error code 30105 added as Space ID deprecated as of beta, Please refer migration guide.
|
|
201
|
+
throw new SpaceIDDeprecatedError();
|
|
202
|
+
} else {
|
|
203
|
+
LoggerProxy.logger.warn(`Meeting-info:util#getDestinationType --> ${meetingInfoError}`);
|
|
204
|
+
throw new ParameterError(`${meetingInfoError}`);
|
|
214
205
|
}
|
|
215
206
|
|
|
216
207
|
return Promise.resolve(options);
|
|
@@ -220,14 +211,15 @@ MeetingInfoUtil.getDestinationType = async (from) => {
|
|
|
220
211
|
* Helper function to build up a correct locus url depending on the value passed
|
|
221
212
|
* @param {Object} options type and value to fetch meeting info
|
|
222
213
|
* @param {String} options.type One of [SIP_URI, PERSONAL_ROOM, MEETING_ID, CONVERSATION_URL, LOCUS_ID, MEETING_LINK]
|
|
214
|
+
* @param {String} options.installedOrgID org ID of user's machine
|
|
223
215
|
* @param {Object} options.destination ?? value.value
|
|
224
216
|
* @returns {Object} returns an object with {resource, method}
|
|
225
217
|
*/
|
|
226
218
|
MeetingInfoUtil.getRequestBody = (options: {type: string; destination: object} | any) => {
|
|
227
|
-
const {type, destination, password, captchaInfo} = options;
|
|
219
|
+
const {type, destination, password, captchaInfo, installedOrgID, locusId, extraParams} = options;
|
|
228
220
|
const body: any = {
|
|
229
|
-
|
|
230
|
-
|
|
221
|
+
...DEFAULT_MEETING_INFO_REQUEST_BODY,
|
|
222
|
+
...extraParams,
|
|
231
223
|
};
|
|
232
224
|
|
|
233
225
|
switch (type) {
|
|
@@ -271,6 +263,14 @@ MeetingInfoUtil.getRequestBody = (options: {type: string; destination: object} |
|
|
|
271
263
|
body.captchaVerifyCode = captchaInfo.code;
|
|
272
264
|
}
|
|
273
265
|
|
|
266
|
+
if (installedOrgID) {
|
|
267
|
+
body.installedOrgID = installedOrgID;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
if (locusId) {
|
|
271
|
+
body.locusId = locusId;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
274
|
return body;
|
|
275
275
|
};
|
|
276
276
|
|
|
@@ -40,4 +40,37 @@ export default class MeetingCollection extends Collection {
|
|
|
40
40
|
|
|
41
41
|
return null;
|
|
42
42
|
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* get a specific meeting searching for key
|
|
46
|
+
* @param {String} breakoutUrl
|
|
47
|
+
* @returns {Meeting} if found, else returns null
|
|
48
|
+
* @public
|
|
49
|
+
* @memberof MeetingCollection
|
|
50
|
+
*/
|
|
51
|
+
public getActiveBreakoutLocus(breakoutUrl: string) {
|
|
52
|
+
if (breakoutUrl) {
|
|
53
|
+
// @ts-ignore
|
|
54
|
+
return find(
|
|
55
|
+
// @ts-ignore
|
|
56
|
+
this.meetings,
|
|
57
|
+
(meeting) => meeting.breakouts?.url === breakoutUrl && meeting.breakouts?.isActiveBreakout
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Gets the meeting that has a webrtc media connection
|
|
66
|
+
* NOTE: this function assumes there is no more than 1 such meeting
|
|
67
|
+
*
|
|
68
|
+
* @returns {Meeting} first meeting found, else undefined
|
|
69
|
+
* @public
|
|
70
|
+
* @memberof MeetingCollection
|
|
71
|
+
*/
|
|
72
|
+
public getActiveWebrtcMeeting() {
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
return find(this.meetings, (meeting) => meeting.mediaProperties.webrtcMediaConnection);
|
|
75
|
+
}
|
|
43
76
|
}
|