@webex/plugin-meetings 3.10.0-next.6 → 3.10.0-wxc-disconnect.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/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/webex-errors.js +1 -21
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/constants.js +0 -7
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/index.js +5 -22
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/index.js +0 -7
- package/dist/index.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +2 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +3 -17
- package/dist/locus-info/index.js.map +1 -1
- package/dist/media/index.js +0 -5
- package/dist/media/index.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +0 -6
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +33 -103
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +14 -152
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +0 -9
- package/dist/meeting/util.js.map +1 -1
- package/dist/member/index.js +0 -9
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +0 -10
- package/dist/member/util.js.map +1 -1
- package/dist/types/common/errors/webex-errors.d.ts +0 -12
- package/dist/types/constants.d.ts +0 -5
- package/dist/types/controls-options-manager/index.d.ts +1 -9
- package/dist/types/index.d.ts +1 -2
- package/dist/types/locus-info/index.d.ts +1 -2
- package/dist/types/meeting/in-meeting-actions.d.ts +0 -6
- package/dist/types/meeting/index.d.ts +0 -30
- package/dist/types/meeting/request.d.ts +0 -33
- package/dist/types/meeting/util.d.ts +0 -3
- package/dist/types/member/index.d.ts +0 -1
- package/dist/types/member/util.d.ts +0 -5
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/common/errors/webex-errors.ts +0 -19
- package/src/constants.ts +1 -9
- package/src/controls-options-manager/index.ts +5 -26
- package/src/index.ts +0 -2
- package/src/locus-info/controlsUtils.ts +0 -18
- package/src/locus-info/index.ts +4 -14
- package/src/media/index.ts +0 -6
- package/src/meeting/in-meeting-actions.ts +0 -12
- package/src/meeting/index.ts +21 -99
- package/src/meeting/request.ts +0 -118
- package/src/meeting/util.ts +0 -9
- package/src/member/index.ts +0 -10
- package/src/member/util.ts +0 -14
- package/test/unit/spec/controls-options-manager/index.js +0 -47
- package/test/unit/spec/fixture/locus.js +0 -1
- package/test/unit/spec/locus-info/index.js +0 -39
- package/test/unit/spec/media/index.ts +9 -140
- package/test/unit/spec/meeting/in-meeting-actions.ts +0 -6
- package/test/unit/spec/meeting/index.js +70 -171
- package/test/unit/spec/meeting/utils.js +0 -3
- package/test/unit/spec/meetings/index.js +2 -0
- package/test/unit/spec/member/util.js +0 -24
package/src/locus-info/index.ts
CHANGED
|
@@ -343,7 +343,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
343
343
|
// For 1:1 space meeting the conversation Url does not exist in locus.conversation
|
|
344
344
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
345
345
|
this.updateControls(locus.controls, locus.self);
|
|
346
|
-
this.updateLocusUrl(locus.url
|
|
346
|
+
this.updateLocusUrl(locus.url);
|
|
347
347
|
this.updateFullState(locus.fullState);
|
|
348
348
|
this.updateMeetingInfo(locus.info);
|
|
349
349
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
@@ -549,7 +549,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
549
549
|
this.updateCreated(locus.created);
|
|
550
550
|
this.updateFullState(locus.fullState);
|
|
551
551
|
this.updateHostInfo(locus.host);
|
|
552
|
-
this.updateLocusUrl(locus.url
|
|
552
|
+
this.updateLocusUrl(locus.url);
|
|
553
553
|
this.updateMeetingInfo(locus.info, locus.self);
|
|
554
554
|
this.updateMediaShares(locus.mediaShares);
|
|
555
555
|
this.updateParticipantsUrl(locus.participantsUrl);
|
|
@@ -895,7 +895,6 @@ export default class LocusInfo extends EventsScope {
|
|
|
895
895
|
hasAnnotationControlChanged,
|
|
896
896
|
hasRemoteDesktopControlChanged,
|
|
897
897
|
hasPollingQAControlChanged,
|
|
898
|
-
hasAutoEndMeetingChanged,
|
|
899
898
|
},
|
|
900
899
|
current,
|
|
901
900
|
} = ControlsUtils.getControls(this.controls, controls);
|
|
@@ -1170,14 +1169,6 @@ export default class LocusInfo extends EventsScope {
|
|
|
1170
1169
|
);
|
|
1171
1170
|
}
|
|
1172
1171
|
|
|
1173
|
-
if (hasAutoEndMeetingChanged) {
|
|
1174
|
-
this.emitScoped(
|
|
1175
|
-
{file: 'locus-info', function: 'updateControls'},
|
|
1176
|
-
LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED,
|
|
1177
|
-
{state: current.autoEndMeetingWarning}
|
|
1178
|
-
);
|
|
1179
|
-
}
|
|
1180
|
-
|
|
1181
1172
|
this.controls = controls;
|
|
1182
1173
|
}
|
|
1183
1174
|
}
|
|
@@ -1741,11 +1732,10 @@ export default class LocusInfo extends EventsScope {
|
|
|
1741
1732
|
/**
|
|
1742
1733
|
* handles when the locus.url is updated
|
|
1743
1734
|
* @param {String} url
|
|
1744
|
-
* @param {Boolean} isMainLocus
|
|
1745
1735
|
* @returns {undefined}
|
|
1746
1736
|
* emits internal event locus_info_update_url
|
|
1747
1737
|
*/
|
|
1748
|
-
updateLocusUrl(url: string
|
|
1738
|
+
updateLocusUrl(url: string) {
|
|
1749
1739
|
if (url && this.url !== url) {
|
|
1750
1740
|
this.url = url;
|
|
1751
1741
|
this.updateMeeting({locusUrl: url});
|
|
@@ -1755,7 +1745,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1755
1745
|
function: 'updateLocusUrl',
|
|
1756
1746
|
},
|
|
1757
1747
|
EVENTS.LOCUS_INFO_UPDATE_URL,
|
|
1758
|
-
|
|
1748
|
+
url
|
|
1759
1749
|
);
|
|
1760
1750
|
}
|
|
1761
1751
|
}
|
package/src/media/index.ts
CHANGED
|
@@ -194,12 +194,6 @@ Media.createMediaConnection = (
|
|
|
194
194
|
config.stopIceGatheringAfterFirstRelayCandidate = stopIceGatheringAfterFirstRelayCandidate;
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
-
if (BrowserInfo.isEdge() || BrowserInfo.isChrome()) {
|
|
198
|
-
// we need this for getting inbound audio metadata
|
|
199
|
-
// but the audioLevel that we use is only available on Chromium based browsers
|
|
200
|
-
config.enableInboundAudioLevelMonitoring = true;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
197
|
return new MultistreamRoapMediaConnection(
|
|
204
198
|
config,
|
|
205
199
|
meetingId,
|
|
@@ -41,8 +41,6 @@ interface IInMeetingActions {
|
|
|
41
41
|
isLocalRecordingStarted?: boolean;
|
|
42
42
|
isLocalRecordingStopped?: boolean;
|
|
43
43
|
isLocalRecordingPaused?: boolean;
|
|
44
|
-
isLocalStreamingStarted?: boolean;
|
|
45
|
-
isLocalStreamingStopped?: boolean;
|
|
46
44
|
|
|
47
45
|
isManualCaptionActive?: boolean;
|
|
48
46
|
isSaveTranscriptsEnabled?: boolean;
|
|
@@ -94,7 +92,6 @@ interface IInMeetingActions {
|
|
|
94
92
|
canDoVideo?: boolean;
|
|
95
93
|
canAnnotate?: boolean;
|
|
96
94
|
canUseVoip?: boolean;
|
|
97
|
-
showAutoEndMeetingWarning?: boolean;
|
|
98
95
|
supportHQV?: boolean;
|
|
99
96
|
supportHDV?: boolean;
|
|
100
97
|
canShareWhiteBoard?: boolean;
|
|
@@ -189,10 +186,6 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
189
186
|
|
|
190
187
|
isManualCaptionActive = null;
|
|
191
188
|
|
|
192
|
-
isLocalStreamingStarted = null;
|
|
193
|
-
|
|
194
|
-
isLocalStreamingStopped = null;
|
|
195
|
-
|
|
196
189
|
isSaveTranscriptsEnabled = null;
|
|
197
190
|
|
|
198
191
|
isSpokenLanguageAutoDetectionEnabled = null;
|
|
@@ -291,8 +284,6 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
291
284
|
|
|
292
285
|
canUseVoip = null;
|
|
293
286
|
|
|
294
|
-
showAutoEndMeetingWarning = null;
|
|
295
|
-
|
|
296
287
|
supportHQV = null;
|
|
297
288
|
|
|
298
289
|
enforceVirtualBackground = null;
|
|
@@ -372,8 +363,6 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
372
363
|
isLocalRecordingStarted: this.isLocalRecordingStarted,
|
|
373
364
|
isLocalRecordingStopped: this.isLocalRecordingStopped,
|
|
374
365
|
isLocalRecordingPaused: this.isLocalRecordingPaused,
|
|
375
|
-
isLocalStreamingStarted: this.isLocalStreamingStarted,
|
|
376
|
-
isLocalStreamingStopped: this.isLocalStreamingStopped,
|
|
377
366
|
canStopManualCaption: this.canStopManualCaption,
|
|
378
367
|
isManualCaptionActive: this.isManualCaptionActive,
|
|
379
368
|
isSaveTranscriptsEnabled: this.isSaveTranscriptsEnabled,
|
|
@@ -416,7 +405,6 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
416
405
|
canShareFile: this.canShareFile,
|
|
417
406
|
canShareApplication: this.canShareApplication,
|
|
418
407
|
canShareCamera: this.canShareCamera,
|
|
419
|
-
showAutoEndMeetingWarning: this.showAutoEndMeetingWarning,
|
|
420
408
|
canShareDesktop: this.canShareDesktop,
|
|
421
409
|
canShareContent: this.canShareContent,
|
|
422
410
|
canTransferFile: this.canTransferFile,
|
package/src/meeting/index.ts
CHANGED
|
@@ -30,7 +30,6 @@ import {
|
|
|
30
30
|
NetworkQualityMonitor,
|
|
31
31
|
StatsMonitor,
|
|
32
32
|
StatsMonitorEventNames,
|
|
33
|
-
InboundAudioIssueSubTypes,
|
|
34
33
|
} from '@webex/internal-media-core';
|
|
35
34
|
|
|
36
35
|
import {
|
|
@@ -58,7 +57,6 @@ import {
|
|
|
58
57
|
NoMediaEstablishedYetError,
|
|
59
58
|
UserNotJoinedError,
|
|
60
59
|
AddMediaFailed,
|
|
61
|
-
SdpResponseTimeoutError,
|
|
62
60
|
} from '../common/errors/webex-errors';
|
|
63
61
|
|
|
64
62
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
@@ -2978,18 +2976,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2978
2976
|
);
|
|
2979
2977
|
});
|
|
2980
2978
|
|
|
2981
|
-
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED, ({state}) => {
|
|
2982
|
-
Trigger.trigger(
|
|
2983
|
-
this,
|
|
2984
|
-
{
|
|
2985
|
-
file: 'meeting/index',
|
|
2986
|
-
function: 'setupLocusControlsListener',
|
|
2987
|
-
},
|
|
2988
|
-
EVENT_TRIGGERS.MEETING_CONTROLS_AUTO_END_MEETING_WARNING_UPDATED,
|
|
2989
|
-
{state}
|
|
2990
|
-
);
|
|
2991
|
-
});
|
|
2992
|
-
|
|
2993
2979
|
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED, ({state}) => {
|
|
2994
2980
|
Trigger.trigger(
|
|
2995
2981
|
this,
|
|
@@ -3370,31 +3356,27 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
3370
3356
|
* @memberof Meeting
|
|
3371
3357
|
*/
|
|
3372
3358
|
private setUpLocusUrlListener() {
|
|
3373
|
-
this.locusInfo.on(
|
|
3374
|
-
|
|
3375
|
-
(payload
|
|
3376
|
-
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
|
|
3382
|
-
|
|
3383
|
-
this.recordingController.setLocusUrl(this.locusUrl);
|
|
3384
|
-
this.controlsOptionsManager.setLocusUrl(this.locusUrl, !!isMainLocus);
|
|
3385
|
-
this.webinar.locusUrlUpdate(url);
|
|
3359
|
+
this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_URL, (payload) => {
|
|
3360
|
+
this.members.locusUrlUpdate(payload);
|
|
3361
|
+
this.breakouts.locusUrlUpdate(payload);
|
|
3362
|
+
this.simultaneousInterpretation.locusUrlUpdate(payload);
|
|
3363
|
+
this.annotation.locusUrlUpdate(payload);
|
|
3364
|
+
this.locusUrl = payload;
|
|
3365
|
+
this.locusId = this.locusUrl?.split('/').pop();
|
|
3366
|
+
this.recordingController.setLocusUrl(this.locusUrl);
|
|
3367
|
+
this.controlsOptionsManager.setLocusUrl(this.locusUrl);
|
|
3368
|
+
this.webinar.locusUrlUpdate(payload);
|
|
3386
3369
|
|
|
3387
|
-
|
|
3388
|
-
|
|
3389
|
-
|
|
3390
|
-
|
|
3391
|
-
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
3395
|
-
|
|
3396
|
-
|
|
3397
|
-
);
|
|
3370
|
+
Trigger.trigger(
|
|
3371
|
+
this,
|
|
3372
|
+
{
|
|
3373
|
+
file: 'meeting/index',
|
|
3374
|
+
function: 'setUpLocusSelfListener',
|
|
3375
|
+
},
|
|
3376
|
+
EVENT_TRIGGERS.MEETING_LOCUS_URL_UPDATE,
|
|
3377
|
+
{locusUrl: payload}
|
|
3378
|
+
);
|
|
3379
|
+
});
|
|
3398
3380
|
}
|
|
3399
3381
|
|
|
3400
3382
|
/**
|
|
@@ -4237,7 +4219,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4237
4219
|
this.userDisplayHints,
|
|
4238
4220
|
this.selfUserPolicies
|
|
4239
4221
|
),
|
|
4240
|
-
showAutoEndMeetingWarning: MeetingUtil.showAutoEndMeetingWarning(this.userDisplayHints),
|
|
4241
4222
|
canRaiseHand: MeetingUtil.canUserRaiseHand(this.userDisplayHints),
|
|
4242
4223
|
canLowerAllHands: MeetingUtil.canUserLowerAllHands(this.userDisplayHints),
|
|
4243
4224
|
canLowerSomeoneElsesHand: MeetingUtil.canUserLowerSomeoneElsesHand(this.userDisplayHints),
|
|
@@ -4253,8 +4234,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4253
4234
|
isLocalRecordingStarted: MeetingUtil.isLocalRecordingStarted(this.userDisplayHints),
|
|
4254
4235
|
isLocalRecordingStopped: MeetingUtil.isLocalRecordingStopped(this.userDisplayHints),
|
|
4255
4236
|
isLocalRecordingPaused: MeetingUtil.isLocalRecordingPaused(this.userDisplayHints),
|
|
4256
|
-
isLocalStreamingStarted: MeetingUtil.isLocalStreamingStarted(this.userDisplayHints),
|
|
4257
|
-
isLocalStreamingStopped: MeetingUtil.isLocalStreamingStopped(this.userDisplayHints),
|
|
4258
4237
|
isManualCaptionActive: MeetingUtil.isManualCaptionActive(this.userDisplayHints),
|
|
4259
4238
|
isSaveTranscriptsEnabled: MeetingUtil.isSaveTranscriptsEnabled(this.userDisplayHints),
|
|
4260
4239
|
isSpokenLanguageAutoDetectionEnabled: MeetingUtil.isSpokenLanguageAutoDetectionEnabled(
|
|
@@ -7453,7 +7432,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
7453
7432
|
} seconds`
|
|
7454
7433
|
);
|
|
7455
7434
|
|
|
7456
|
-
const error = new
|
|
7435
|
+
const error = new Error('Timed out waiting for REMOTE SDP ANSWER');
|
|
7457
7436
|
|
|
7458
7437
|
// @ts-ignore
|
|
7459
7438
|
this.webex.internal.newMetrics.submitClientEvent({
|
|
@@ -9470,36 +9449,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
9470
9449
|
return Promise.reject(new Error('Error sending reaction, service url not found.'));
|
|
9471
9450
|
}
|
|
9472
9451
|
|
|
9473
|
-
/**
|
|
9474
|
-
* Extend the current meeting duration.
|
|
9475
|
-
*
|
|
9476
|
-
* @param {number} extensionMinutes - how many minutes to extend
|
|
9477
|
-
* @returns {Promise}
|
|
9478
|
-
* @public
|
|
9479
|
-
* @memberof Meeting
|
|
9480
|
-
*/
|
|
9481
|
-
public extendMeeting({
|
|
9482
|
-
meetingPolicyUrl,
|
|
9483
|
-
meetingInstanceId,
|
|
9484
|
-
participantId,
|
|
9485
|
-
extensionMinutes = 30,
|
|
9486
|
-
}) {
|
|
9487
|
-
if (!meetingInstanceId || !participantId) {
|
|
9488
|
-
return Promise.reject(new Error('Missing meetingInstanceId or participantId'));
|
|
9489
|
-
}
|
|
9490
|
-
|
|
9491
|
-
if (!meetingPolicyUrl) {
|
|
9492
|
-
return Promise.reject(new Error('Missing meetingPolicyUrl'));
|
|
9493
|
-
}
|
|
9494
|
-
|
|
9495
|
-
return this.meetingRequest.extendMeeting({
|
|
9496
|
-
meetingInstanceId,
|
|
9497
|
-
participantId,
|
|
9498
|
-
extensionMinutes,
|
|
9499
|
-
meetingPolicyUrl,
|
|
9500
|
-
});
|
|
9501
|
-
}
|
|
9502
|
-
|
|
9503
9452
|
/**
|
|
9504
9453
|
* Method to enable or disable reactions inside the meeting.
|
|
9505
9454
|
*
|
|
@@ -10045,31 +9994,4 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
10045
9994
|
displayName
|
|
10046
9995
|
);
|
|
10047
9996
|
}
|
|
10048
|
-
|
|
10049
|
-
/**
|
|
10050
|
-
* Call out a SIP participant to a meeting
|
|
10051
|
-
* @param {string} address - The SIP address or phone number
|
|
10052
|
-
* @param {string} displayName - The display name for the participant
|
|
10053
|
-
* @param {string} [correlationId] - Optional correlation ID
|
|
10054
|
-
* @returns {Promise} Promise that resolves when the call-out is initiated
|
|
10055
|
-
*/
|
|
10056
|
-
sipCallOut(address: string, displayName: string) {
|
|
10057
|
-
return this.meetingRequest.sipCallOut(
|
|
10058
|
-
this.meetingInfo.meetingId,
|
|
10059
|
-
this.meetingInfo.meetingId,
|
|
10060
|
-
address,
|
|
10061
|
-
displayName
|
|
10062
|
-
);
|
|
10063
|
-
}
|
|
10064
|
-
|
|
10065
|
-
/**
|
|
10066
|
-
* Cancel an ongoing SIP call-out
|
|
10067
|
-
* @param {string} participantId - The participant ID to cancel
|
|
10068
|
-
* @returns {Promise} Promise that resolves when the call-out is cancelled
|
|
10069
|
-
* @public
|
|
10070
|
-
* @memberof Meetings
|
|
10071
|
-
*/
|
|
10072
|
-
cancelSipCallOut(participantId: string) {
|
|
10073
|
-
return this.meetingRequest.cancelSipCallOut(participantId);
|
|
10074
|
-
}
|
|
10075
9997
|
}
|
package/src/meeting/request.ts
CHANGED
|
@@ -886,44 +886,6 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
886
886
|
});
|
|
887
887
|
}
|
|
888
888
|
|
|
889
|
-
/**
|
|
890
|
-
* Extend the current meeting duration.
|
|
891
|
-
*
|
|
892
|
-
* @param {Object} params - Parameters for extending the meeting.
|
|
893
|
-
* @param {string} params.meetingInstanceId - The unique ID of the meeting instance.
|
|
894
|
-
* @param {string} params.participantId - The ID of the participant requesting the extension.
|
|
895
|
-
* @param {number} params.extensionMinutes - The number of minutes to extend the meeting by.
|
|
896
|
-
* @param {string} params.meetingPolicyUrl - The base URL for meeting policy service (dynamic, from locus links)
|
|
897
|
-
* @returns {Promise<any>} A promise that resolves with the server response.
|
|
898
|
-
*/
|
|
899
|
-
extendMeeting({
|
|
900
|
-
meetingInstanceId,
|
|
901
|
-
participantId,
|
|
902
|
-
extensionMinutes,
|
|
903
|
-
meetingPolicyUrl,
|
|
904
|
-
}: {
|
|
905
|
-
meetingInstanceId: string;
|
|
906
|
-
participantId: string;
|
|
907
|
-
extensionMinutes: number;
|
|
908
|
-
meetingPolicyUrl: string;
|
|
909
|
-
}) {
|
|
910
|
-
if (!meetingPolicyUrl) {
|
|
911
|
-
return Promise.reject(new Error('meetingPolicyUrl is required'));
|
|
912
|
-
}
|
|
913
|
-
const uri = `${meetingPolicyUrl}/continueMeeting`;
|
|
914
|
-
|
|
915
|
-
// @ts-ignore
|
|
916
|
-
return this.request({
|
|
917
|
-
method: HTTP_VERBS.POST,
|
|
918
|
-
uri,
|
|
919
|
-
body: {
|
|
920
|
-
meetingInstanceId,
|
|
921
|
-
requestParticipantId: participantId,
|
|
922
|
-
extensionMinutes,
|
|
923
|
-
},
|
|
924
|
-
});
|
|
925
|
-
}
|
|
926
|
-
|
|
927
889
|
/**
|
|
928
890
|
* Make a network request to enable or disable reactions.
|
|
929
891
|
* @param {boolean} options.enable - determines if we need to enable or disable.
|
|
@@ -1046,84 +1008,4 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
1046
1008
|
},
|
|
1047
1009
|
});
|
|
1048
1010
|
}
|
|
1049
|
-
|
|
1050
|
-
/**
|
|
1051
|
-
* Call out to a SIP participant
|
|
1052
|
-
*
|
|
1053
|
-
* @param {any} meetingId - The meeting ID.
|
|
1054
|
-
* @param {any} meetingNumber - The meeting number.
|
|
1055
|
-
* @param {string} address - The SIP address to call out.
|
|
1056
|
-
* @param {string} displayName - The display name for the participant.
|
|
1057
|
-
* @returns {Promise} The API response
|
|
1058
|
-
*/
|
|
1059
|
-
public async sipCallOut(meetingId, meetingNumber, address, displayName) {
|
|
1060
|
-
const body: any = {
|
|
1061
|
-
meetingId,
|
|
1062
|
-
meetingNumber,
|
|
1063
|
-
address,
|
|
1064
|
-
displayName,
|
|
1065
|
-
};
|
|
1066
|
-
try {
|
|
1067
|
-
// @ts-ignore
|
|
1068
|
-
const response = await this.request({
|
|
1069
|
-
method: HTTP_VERBS.POST,
|
|
1070
|
-
service: 'hydra',
|
|
1071
|
-
resource: 'meetingParticipants/callout',
|
|
1072
|
-
body,
|
|
1073
|
-
headers: {
|
|
1074
|
-
Accept: 'application/json',
|
|
1075
|
-
},
|
|
1076
|
-
});
|
|
1077
|
-
|
|
1078
|
-
LoggerProxy.logger.info('Meetings:request#sipCallOut --> SIP call-out successful', response);
|
|
1079
|
-
|
|
1080
|
-
return response.body;
|
|
1081
|
-
} catch (err) {
|
|
1082
|
-
LoggerProxy.logger.error(
|
|
1083
|
-
`Meetings:request#sipCallOut --> Error calling out SIP participant, error ${JSON.stringify(
|
|
1084
|
-
err
|
|
1085
|
-
)}`
|
|
1086
|
-
);
|
|
1087
|
-
throw err;
|
|
1088
|
-
}
|
|
1089
|
-
}
|
|
1090
|
-
|
|
1091
|
-
/**
|
|
1092
|
-
* Cancel an ongoing SIP call-out
|
|
1093
|
-
*
|
|
1094
|
-
* @param {string} participantId - The ID of the participant whose SIP call-out should be cancelled.
|
|
1095
|
-
* @returns {Promise} The API response
|
|
1096
|
-
*/
|
|
1097
|
-
public async cancelSipCallOut(participantId) {
|
|
1098
|
-
const body = {
|
|
1099
|
-
participantId,
|
|
1100
|
-
};
|
|
1101
|
-
|
|
1102
|
-
try {
|
|
1103
|
-
// @ts-ignore
|
|
1104
|
-
const response = await this.request({
|
|
1105
|
-
method: HTTP_VERBS.POST,
|
|
1106
|
-
service: 'hydra',
|
|
1107
|
-
resource: 'meetingParticipants/cancelCallout',
|
|
1108
|
-
body,
|
|
1109
|
-
headers: {
|
|
1110
|
-
Accept: 'application/json',
|
|
1111
|
-
},
|
|
1112
|
-
});
|
|
1113
|
-
|
|
1114
|
-
LoggerProxy.logger.info(
|
|
1115
|
-
'Meetings:request#cancelSipCallOut --> SIP call-out cancelled successfully',
|
|
1116
|
-
response
|
|
1117
|
-
);
|
|
1118
|
-
|
|
1119
|
-
return response.body;
|
|
1120
|
-
} catch (err) {
|
|
1121
|
-
LoggerProxy.logger.error(
|
|
1122
|
-
`Meetings:request#cancelSipCallOut --> Error cancelling SIP participant call-out, error ${JSON.stringify(
|
|
1123
|
-
err
|
|
1124
|
-
)}`
|
|
1125
|
-
);
|
|
1126
|
-
throw err;
|
|
1127
|
-
}
|
|
1128
|
-
}
|
|
1129
1011
|
}
|
package/src/meeting/util.ts
CHANGED
|
@@ -633,12 +633,6 @@ const MeetingUtil = {
|
|
|
633
633
|
isLocalRecordingPaused: (displayHints) =>
|
|
634
634
|
displayHints.includes(DISPLAY_HINTS.LOCAL_RECORDING_STATUS_PAUSED),
|
|
635
635
|
|
|
636
|
-
isLocalStreamingStarted: (displayHints) =>
|
|
637
|
-
displayHints.includes(DISPLAY_HINTS.STREAMING_STATUS_STARTED),
|
|
638
|
-
|
|
639
|
-
isLocalStreamingStopped: (displayHints) =>
|
|
640
|
-
displayHints.includes(DISPLAY_HINTS.STREAMING_STATUS_STOPPED),
|
|
641
|
-
|
|
642
636
|
canStopManualCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.MANUAL_CAPTION_STOP),
|
|
643
637
|
|
|
644
638
|
isManualCaptionActive: (displayHints) =>
|
|
@@ -660,9 +654,6 @@ const MeetingUtil = {
|
|
|
660
654
|
|
|
661
655
|
waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),
|
|
662
656
|
|
|
663
|
-
showAutoEndMeetingWarning: (displayHints) =>
|
|
664
|
-
displayHints.includes(DISPLAY_HINTS.SHOW_AUTO_END_MEETING_WARNING),
|
|
665
|
-
|
|
666
657
|
canSendReactions: (originalValue, displayHints) => {
|
|
667
658
|
if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {
|
|
668
659
|
return true;
|
package/src/member/index.ts
CHANGED
|
@@ -42,7 +42,6 @@ export default class Member {
|
|
|
42
42
|
status: any;
|
|
43
43
|
supportsBreakouts: boolean;
|
|
44
44
|
supportsInterpretation: boolean;
|
|
45
|
-
supportsSingleUserAutoEndMeeting: boolean;
|
|
46
45
|
supportLiveAnnotation: boolean;
|
|
47
46
|
type: any;
|
|
48
47
|
namespace = MEETINGS;
|
|
@@ -131,13 +130,6 @@ export default class Member {
|
|
|
131
130
|
* @memberof Member
|
|
132
131
|
*/
|
|
133
132
|
this.supportsBreakouts = null;
|
|
134
|
-
/**
|
|
135
|
-
* @instance
|
|
136
|
-
* @type {Boolean}
|
|
137
|
-
* @public
|
|
138
|
-
* @memberof Member
|
|
139
|
-
*/
|
|
140
|
-
this.supportsSingleUserAutoEndMeeting = null;
|
|
141
133
|
/**
|
|
142
134
|
* @instance
|
|
143
135
|
* @type {Boolean}
|
|
@@ -347,8 +339,6 @@ export default class Member {
|
|
|
347
339
|
this.isVideoMuted = MemberUtil.isVideoMuted(participant);
|
|
348
340
|
this.isHandRaised = MemberUtil.isHandRaised(participant);
|
|
349
341
|
this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
|
|
350
|
-
this.supportsSingleUserAutoEndMeeting =
|
|
351
|
-
MemberUtil.isSupportsSingleUserAutoEndMeeting(participant);
|
|
352
342
|
this.supportsInterpretation = MemberUtil.isInterpretationSupported(participant);
|
|
353
343
|
this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
|
|
354
344
|
this.isGuest = MemberUtil.isGuest(participant);
|
package/src/member/util.ts
CHANGED
|
@@ -207,20 +207,6 @@ const MemberUtil = {
|
|
|
207
207
|
return !participant.doesNotSupportBreakouts;
|
|
208
208
|
},
|
|
209
209
|
|
|
210
|
-
/**
|
|
211
|
-
* @param {Object} participant - The locus participant object.
|
|
212
|
-
* @returns {Boolean}
|
|
213
|
-
*/
|
|
214
|
-
isSupportsSingleUserAutoEndMeeting: (participant) => {
|
|
215
|
-
if (!participant) {
|
|
216
|
-
throw new ParameterError(
|
|
217
|
-
'Single user auto end meeting support could not be processed, participant is undefined.'
|
|
218
|
-
);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
return !participant.doesNotSupportSingleUserAutoEndMeeting;
|
|
222
|
-
},
|
|
223
|
-
|
|
224
210
|
/**
|
|
225
211
|
* @param {Object} participant - The locus participant object.
|
|
226
212
|
* @returns {Boolean}
|
|
@@ -133,7 +133,6 @@ describe('plugin-meetings', () => {
|
|
|
133
133
|
|
|
134
134
|
manager.set({
|
|
135
135
|
locusUrl: 'test/id',
|
|
136
|
-
mainLocusUrl: '',
|
|
137
136
|
displayHints: [],
|
|
138
137
|
});
|
|
139
138
|
});
|
|
@@ -202,38 +201,6 @@ describe('plugin-meetings', () => {
|
|
|
202
201
|
Util.canUpdate = restorable;
|
|
203
202
|
});
|
|
204
203
|
});
|
|
205
|
-
|
|
206
|
-
it('should call request with mainLocusUrl and locusUrl as authorizingLocusUrl if mainLocusUrl is exist and not same with locusUrl', () => {
|
|
207
|
-
const restorable = Util.canUpdate;
|
|
208
|
-
Util.canUpdate = sinon.stub().returns(true);
|
|
209
|
-
manager.mainLocusUrl = 'test/main';
|
|
210
|
-
|
|
211
|
-
const audio = {scope: 'audio', properties: {a: 1, b: 2}};
|
|
212
|
-
const reactions = {scope: 'reactions', properties: {c: 3, d: 4}};
|
|
213
|
-
|
|
214
|
-
return manager.update(audio, reactions)
|
|
215
|
-
.then(() => {
|
|
216
|
-
assert.calledWith(request.request, {
|
|
217
|
-
uri: 'test/main/controls',
|
|
218
|
-
body: {
|
|
219
|
-
audio: audio.properties,
|
|
220
|
-
authorizingLocusUrl: 'test/id'
|
|
221
|
-
},
|
|
222
|
-
method: HTTP_VERBS.PATCH,
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
assert.calledWith(request.request, {
|
|
226
|
-
uri: 'test/main/controls',
|
|
227
|
-
body: {
|
|
228
|
-
reactions: reactions.properties,
|
|
229
|
-
authorizingLocusUrl: 'test/id'
|
|
230
|
-
},
|
|
231
|
-
method: HTTP_VERBS.PATCH,
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
Util.canUpdate = restorable;
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
204
|
});
|
|
238
205
|
|
|
239
206
|
describe('Mute/Unmute All', () => {
|
|
@@ -247,7 +214,6 @@ describe('plugin-meetings', () => {
|
|
|
247
214
|
|
|
248
215
|
manager.set({
|
|
249
216
|
locusUrl: 'test/id',
|
|
250
|
-
mainLocusUrl: '',
|
|
251
217
|
displayHints: [],
|
|
252
218
|
})
|
|
253
219
|
});
|
|
@@ -339,19 +305,6 @@ describe('plugin-meetings', () => {
|
|
|
339
305
|
|
|
340
306
|
assert.deepEqual(result, request.request.firstCall.returnValue);
|
|
341
307
|
});
|
|
342
|
-
|
|
343
|
-
it('request with mainLocusUrl and make locusUrl as authorizingLocusUrl if mainLocusUrl is exist and not same with locusUrl', () => {
|
|
344
|
-
manager.setDisplayHints(['MUTE_ALL', 'DISABLE_HARD_MUTE', 'DISABLE_MUTE_ON_ENTRY']);
|
|
345
|
-
manager.mainLocusUrl = `test/main`;
|
|
346
|
-
|
|
347
|
-
const result = manager.setMuteAll(true, true, true, ['attendee']);
|
|
348
|
-
|
|
349
|
-
assert.calledWith(request.request, { uri: 'test/main/controls',
|
|
350
|
-
body: { audio: { muted: true, disallowUnmute: true, muteOnEntry: true, roles: ['attendee'] }, authorizingLocusUrl: 'test/id' },
|
|
351
|
-
method: HTTP_VERBS.PATCH});
|
|
352
|
-
|
|
353
|
-
assert.deepEqual(result, request.request.firstCall.returnValue);
|
|
354
|
-
});
|
|
355
308
|
});
|
|
356
309
|
});
|
|
357
310
|
});
|
|
@@ -3020,45 +3020,6 @@ describe('plugin-meetings', () => {
|
|
|
3020
3020
|
});
|
|
3021
3021
|
});
|
|
3022
3022
|
|
|
3023
|
-
describe('#updateLocusUrl', () => {
|
|
3024
|
-
it('trigger LOCUS_INFO_UPDATE_URL event with isMainLocus is true as default', () => {
|
|
3025
|
-
const fakeUrl = "https://fake.com/locus";
|
|
3026
|
-
locusInfo.emitScoped = sinon.stub();
|
|
3027
|
-
locusInfo.updateLocusUrl(fakeUrl);
|
|
3028
|
-
|
|
3029
|
-
assert.calledWith(
|
|
3030
|
-
locusInfo.emitScoped,
|
|
3031
|
-
{
|
|
3032
|
-
file: 'locus-info',
|
|
3033
|
-
function: 'updateLocusUrl',
|
|
3034
|
-
},
|
|
3035
|
-
EVENTS.LOCUS_INFO_UPDATE_URL,
|
|
3036
|
-
{
|
|
3037
|
-
url: fakeUrl,
|
|
3038
|
-
isMainLocus: true
|
|
3039
|
-
},
|
|
3040
|
-
);
|
|
3041
|
-
});
|
|
3042
|
-
it('trigger LOCUS_INFO_UPDATE_URL event with isMainLocus is false', () => {
|
|
3043
|
-
const fakeUrl = "https://fake.com/locus";
|
|
3044
|
-
locusInfo.emitScoped = sinon.stub();
|
|
3045
|
-
locusInfo.updateLocusUrl(fakeUrl, false);
|
|
3046
|
-
|
|
3047
|
-
assert.calledWith(
|
|
3048
|
-
locusInfo.emitScoped,
|
|
3049
|
-
{
|
|
3050
|
-
file: 'locus-info',
|
|
3051
|
-
function: 'updateLocusUrl',
|
|
3052
|
-
},
|
|
3053
|
-
EVENTS.LOCUS_INFO_UPDATE_URL,
|
|
3054
|
-
{
|
|
3055
|
-
url: fakeUrl,
|
|
3056
|
-
isMainLocus: false
|
|
3057
|
-
},
|
|
3058
|
-
);
|
|
3059
|
-
});
|
|
3060
|
-
});
|
|
3061
|
-
|
|
3062
3023
|
// semi-integration tests that use real LocusInfo with real Parser
|
|
3063
3024
|
// and test various scenarios related to handling out-of-order Locus delta events
|
|
3064
3025
|
describe('handling of out-of-order Locus delta events', () => {
|