@webex/plugin-meetings 3.0.0-beta.34 → 3.0.0-beta.36
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/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/index.js +86 -2
- package/dist/breakouts/index.js.map +1 -1
- package/dist/constants.js +14 -2
- package/dist/constants.js.map +1 -1
- package/dist/media/index.js +4 -18
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +3 -3
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/index.js +194 -306
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +7 -2
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +135 -85
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +2 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/metrics/constants.js +0 -4
- package/dist/metrics/constants.js.map +1 -1
- package/dist/reachability/index.js +25 -17
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +12 -5
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +1 -2
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/request.js +114 -83
- package/dist/roap/request.js.map +1 -1
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/constants.d.ts +13 -1
- package/dist/types/media/properties.d.ts +7 -6
- package/dist/types/meeting/index.d.ts +11 -36
- package/dist/types/meeting/request.d.ts +10 -0
- package/dist/types/metrics/constants.d.ts +0 -4
- package/dist/types/reachability/request.d.ts +5 -3
- package/dist/types/roap/request.d.ts +6 -3
- package/package.json +19 -19
- package/src/breakouts/README.md +8 -2
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/index.ts +73 -0
- package/src/constants.ts +13 -1
- package/src/media/index.ts +14 -24
- package/src/media/properties.ts +16 -10
- package/src/meeting/index.ts +122 -204
- package/src/meeting/muteState.ts +5 -5
- package/src/meeting/request.ts +35 -1
- package/src/meeting/util.ts +5 -4
- package/src/metrics/constants.ts +0 -4
- package/src/reachability/index.ts +12 -4
- package/src/reachability/request.ts +10 -5
- package/src/reconnection-manager/index.ts +1 -1
- package/src/roap/request.ts +93 -78
- package/test/integration/spec/converged-space-meetings.js +3 -3
- package/test/integration/spec/journey.js +3 -3
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/index.ts +92 -1
- package/test/unit/spec/media/index.ts +8 -6
- package/test/unit/spec/meeting/index.js +87 -114
- package/test/unit/spec/meeting/muteState.js +21 -22
- package/test/unit/spec/meeting/request.js +27 -0
- package/test/unit/spec/meeting/utils.js +3 -1
- package/test/unit/spec/reachability/index.ts +18 -7
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/roap/request.ts +187 -84
- package/test/utils/testUtils.js +30 -25
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/types/meeting/effectsState.d.ts +0 -42
- package/src/meeting/effectsState.ts +0 -211
- package/test/unit/spec/meeting/effectsState.js +0 -285
package/dist/roap/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["RoapRequest","localSdp","webex","boundedStorage","get","REACHABILITY","namespace","
|
|
1
|
+
{"version":3,"names":["RoapRequest","localSdp","webex","boundedStorage","get","REACHABILITY","namespace","localStorageResult","catch","reachabilityData","reachabilityResult","JSON","parse","length","reachability","e","LoggerProxy","logger","error","localStorageJoinCookie","joinCookieRaw","joinCookie","options","roapMessage","locusSelfUrl","mediaId","correlationId","meetingId","info","attachReachabilityData","audioMuted","videoMuted","localSdpWithReachabilityData","mediaUrl","MEDIA","deviceUrl","internal","device","url","messageType","seq","Metrics","postEvent","event","eventType","MEDIA_REQUEST","request","uri","method","HTTP_VERBS","PUT","body","deviceType","config","meetings","localMedias","clientMediaPreferences","preferTranscoding","then","res","MEDIA_RESPONSE","mediaConnections","debug","statusCode","locus","roapSeq","err","data","parseLocusError","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["/* global window */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEDIA, HTTP_VERBS, REACHABILITY} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\n\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Returns reachability data.\n * @param {Object} localSdp\n * @returns {Object}\n */\n async attachReachabilityData(localSdp) {\n let joinCookie;\n\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResult = JSON.parse(reachabilityData);\n\n /* istanbul ignore else */\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n joinCookie = JSON.parse(joinCookieRaw);\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return {localSdp, joinCookie};\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {Object} options.roapMessage\n * @param {String} options.locusSelfUrl\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @param {String} options.meetingId\n * @param {Boolean} options.preferTranscoding\n * @returns {Promise} returns the response/failure of the request\n */\n async sendRoap(options: {\n roapMessage: any;\n locusSelfUrl: string;\n mediaId: string;\n correlationId: string;\n audioMuted: boolean;\n videoMuted: boolean;\n meetingId: string;\n preferTranscoding?: boolean;\n }) {\n const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');\n }\n\n const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!options.audioMuted,\n videoMuted: !!options.videoMuted,\n });\n\n const mediaUrl = `${locusSelfUrl}/${MEDIA}`;\n // @ts-ignore\n const deviceUrl = this.webex.internal.device.url;\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> ${mediaUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`\n );\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});\n\n // @ts-ignore\n return this.request({\n uri: mediaUrl,\n method: HTTP_VERBS.PUT,\n body: {\n device: {\n url: deviceUrl,\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n },\n correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(localSdpWithReachabilityData),\n mediaId: options.mediaId,\n },\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true,\n joinCookie,\n },\n },\n })\n .then((res) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});\n\n // always it will be the first mediaConnection Object\n const mediaConnections =\n res.body.mediaConnections &&\n res.body.mediaConnections.length > 0 &&\n res.body.mediaConnections[0];\n\n LoggerProxy.logger.debug(\n `Roap:request#sendRoap --> response:${JSON.stringify(\n mediaConnections,\n null,\n 2\n )}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),\n };\n })\n .catch((err) => {\n Metrics.postEvent({\n event: eventType.MEDIA_RESPONSE,\n meetingId,\n data: {error: Metrics.parseLocusError(err, true)},\n });\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(\n roapMessage,\n null,\n 2\n )} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extended Error object to signify breakout related errors
|
|
3
|
+
*/
|
|
4
|
+
export default class BreakoutEditLockedError extends Error {
|
|
5
|
+
code: any;
|
|
6
|
+
error: any;
|
|
7
|
+
sdkMessage: any;
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* @constructor
|
|
11
|
+
* @param {String} [message]
|
|
12
|
+
* @param {Object} [error]
|
|
13
|
+
*/
|
|
14
|
+
constructor(message?: string, error?: any);
|
|
15
|
+
}
|
|
@@ -331,6 +331,11 @@ export declare const ERROR_DICTIONARY: {
|
|
|
331
331
|
MESSAGE: string;
|
|
332
332
|
CODE: number;
|
|
333
333
|
};
|
|
334
|
+
BREAKOUT_EDIT: {
|
|
335
|
+
NAME: string;
|
|
336
|
+
MESSAGE: string;
|
|
337
|
+
CODE: number;
|
|
338
|
+
};
|
|
334
339
|
};
|
|
335
340
|
export declare const FLOOR_ACTION: {
|
|
336
341
|
GRANTED: string;
|
|
@@ -407,6 +412,12 @@ export declare const BREAKOUTS: {
|
|
|
407
412
|
REQUESTED: string;
|
|
408
413
|
};
|
|
409
414
|
BREAKOUTS_SUPPORTED: string;
|
|
415
|
+
ACTION_TYPES: {
|
|
416
|
+
DELETE: string;
|
|
417
|
+
};
|
|
418
|
+
ERROR_CODE: {
|
|
419
|
+
EDIT_LOCK_TOKEN_MISMATCH: number;
|
|
420
|
+
};
|
|
410
421
|
};
|
|
411
422
|
export declare const LOCUSINFO: {
|
|
412
423
|
EVENTS: {
|
|
@@ -679,7 +690,8 @@ export declare const RESOURCE: {
|
|
|
679
690
|
LOCI: string;
|
|
680
691
|
};
|
|
681
692
|
export declare const REACHABILITY: {
|
|
682
|
-
|
|
693
|
+
localStorageResult: string;
|
|
694
|
+
localStorageJoinCookie: string;
|
|
683
695
|
namespace: string;
|
|
684
696
|
};
|
|
685
697
|
export declare const ROAP: {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { LocalCameraTrack, LocalMicrophoneTrack, LocalDisplayTrack } from '@webex/internal-media-core';
|
|
1
2
|
/**
|
|
2
3
|
* @class MediaProperties
|
|
3
4
|
*/
|
|
4
5
|
export default class MediaProperties {
|
|
5
|
-
audioTrack:
|
|
6
|
+
audioTrack: LocalMicrophoneTrack | null;
|
|
6
7
|
localQualityLevel: any;
|
|
7
8
|
mediaDirection: any;
|
|
8
9
|
mediaSettings: any;
|
|
@@ -11,9 +12,9 @@ export default class MediaProperties {
|
|
|
11
12
|
remoteQualityLevel: any;
|
|
12
13
|
remoteShare: any;
|
|
13
14
|
remoteVideoTrack: any;
|
|
14
|
-
shareTrack:
|
|
15
|
+
shareTrack: LocalDisplayTrack | null;
|
|
15
16
|
videoDeviceId: any;
|
|
16
|
-
videoTrack:
|
|
17
|
+
videoTrack: LocalCameraTrack | null;
|
|
17
18
|
namespace: string;
|
|
18
19
|
/**
|
|
19
20
|
* @param {Object} [options] -- to auto construct
|
|
@@ -28,10 +29,10 @@ export default class MediaProperties {
|
|
|
28
29
|
setMediaDirection(mediaDirection: any): void;
|
|
29
30
|
setMediaSettings(type: any, values: any): void;
|
|
30
31
|
setMediaPeerConnection(mediaPeerConnection: any): void;
|
|
31
|
-
setLocalVideoTrack(videoTrack:
|
|
32
|
-
setLocalAudioTrack(audioTrack:
|
|
32
|
+
setLocalVideoTrack(videoTrack: LocalCameraTrack | null): void;
|
|
33
|
+
setLocalAudioTrack(audioTrack: LocalMicrophoneTrack | null): void;
|
|
33
34
|
setLocalQualityLevel(localQualityLevel: any): void;
|
|
34
|
-
setLocalShareTrack(shareTrack:
|
|
35
|
+
setLocalShareTrack(shareTrack: LocalDisplayTrack | null): void;
|
|
35
36
|
setRemoteQualityLevel(remoteQualityLevel: any): void;
|
|
36
37
|
setRemoteShare(remoteShare: any): void;
|
|
37
38
|
/**
|
|
@@ -290,7 +290,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
290
290
|
destination: string;
|
|
291
291
|
destinationType: string;
|
|
292
292
|
deviceUrl: string;
|
|
293
|
-
effects: any;
|
|
294
293
|
hostId: string;
|
|
295
294
|
id: string;
|
|
296
295
|
isMultistream: boolean;
|
|
@@ -838,7 +837,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
838
837
|
private sendLocalMediaReadyEvent;
|
|
839
838
|
/**
|
|
840
839
|
* Sets the local audio track on the class and emits an event to the developer
|
|
841
|
-
* @param {MediaStreamTrack}
|
|
840
|
+
* @param {MediaStreamTrack} rawAudioTrack
|
|
842
841
|
* @param {Boolean} emitEvent if true, a media ready event is emitted to the developer
|
|
843
842
|
* @returns {undefined}
|
|
844
843
|
* @private
|
|
@@ -847,7 +846,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
847
846
|
private setLocalAudioTrack;
|
|
848
847
|
/**
|
|
849
848
|
* Sets the local video track on the class and emits an event to the developer
|
|
850
|
-
* @param {MediaStreamTrack}
|
|
849
|
+
* @param {MediaStreamTrack} rawVideoTrack
|
|
851
850
|
* @param {Boolean} emitEvent if true, a media ready event is emitted to the developer
|
|
852
851
|
* @returns {undefined}
|
|
853
852
|
* @private
|
|
@@ -864,12 +863,12 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
864
863
|
setLocalTracks(localStream: any): void;
|
|
865
864
|
/**
|
|
866
865
|
* Sets the local media stream on the class and emits an event to the developer
|
|
867
|
-
* @param {MediaStreamTrack}
|
|
866
|
+
* @param {MediaStreamTrack} rawLocalShareTrack the local share media track
|
|
868
867
|
* @returns {undefined}
|
|
869
868
|
* @public
|
|
870
869
|
* @memberof Meeting
|
|
871
870
|
*/
|
|
872
|
-
setLocalShareTrack(
|
|
871
|
+
setLocalShareTrack(rawLocalShareTrack: MediaStreamTrack | null): void;
|
|
873
872
|
/**
|
|
874
873
|
* Closes the local stream from the class and emits an event to the developer
|
|
875
874
|
* @returns {undefined}
|
|
@@ -1165,6 +1164,12 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1165
1164
|
*/
|
|
1166
1165
|
setupStatsAnalyzerEventHandlers: () => void;
|
|
1167
1166
|
getMediaConnectionDebugId(): string;
|
|
1167
|
+
/**
|
|
1168
|
+
* Creates a webrtc media connection
|
|
1169
|
+
*
|
|
1170
|
+
* @param {Object} turnServerInfo TURN server information
|
|
1171
|
+
* @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
|
|
1172
|
+
*/
|
|
1168
1173
|
createMediaConnection(turnServerInfo: any): any;
|
|
1169
1174
|
/**
|
|
1170
1175
|
* Listens for an event emitted by eventEmitter and emits it from the meeting object
|
|
@@ -1532,8 +1537,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1532
1537
|
private sendNetworkQualityEvent;
|
|
1533
1538
|
/**
|
|
1534
1539
|
* Handle logging the media
|
|
1535
|
-
* @param {Object}
|
|
1536
|
-
* @param {Object} videoTrack The video track
|
|
1540
|
+
* @param {Object} mediaProperties
|
|
1537
1541
|
* @private
|
|
1538
1542
|
* @returns {undefined}
|
|
1539
1543
|
*/
|
|
@@ -1632,35 +1636,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1632
1636
|
* @memberof Meeting
|
|
1633
1637
|
*/
|
|
1634
1638
|
clearMeetingData: () => void;
|
|
1635
|
-
/**
|
|
1636
|
-
* Internal API to return status of BNR
|
|
1637
|
-
* @returns {Boolean}
|
|
1638
|
-
* @public
|
|
1639
|
-
* @memberof Meeting
|
|
1640
|
-
*/
|
|
1641
|
-
isBnrEnabled(): any;
|
|
1642
|
-
/**
|
|
1643
|
-
* Internal API to obtain BNR enabled MediaStream
|
|
1644
|
-
* @returns {Promise<MediaStreamTrack>}
|
|
1645
|
-
* @private
|
|
1646
|
-
* @param {MedaiStreamTrack} audioTrack from updateAudio
|
|
1647
|
-
* @memberof Meeting
|
|
1648
|
-
*/
|
|
1649
|
-
private internal_enableBNR;
|
|
1650
|
-
/**
|
|
1651
|
-
* Enable the audio track with BNR for a meeting
|
|
1652
|
-
* @returns {Promise} resolves the data from enable bnr or rejects if there is no audio or audio is muted
|
|
1653
|
-
* @public
|
|
1654
|
-
* @memberof Meeting
|
|
1655
|
-
*/
|
|
1656
|
-
enableBNR(): any;
|
|
1657
|
-
/**
|
|
1658
|
-
* Disable the BNR for an audio track
|
|
1659
|
-
* @returns {Promise} resolves the data from disable bnr or rejects if there is no audio set
|
|
1660
|
-
* @public
|
|
1661
|
-
* @memberof Meeting
|
|
1662
|
-
*/
|
|
1663
|
-
disableBNR(): any;
|
|
1664
1639
|
/**
|
|
1665
1640
|
* starts keepAlives being sent
|
|
1666
1641
|
* @returns {void}
|
|
@@ -5,7 +5,17 @@ import { SendReactionOptions, ToggleReactionsOptions } from './request.type';
|
|
|
5
5
|
*/
|
|
6
6
|
export default class MeetingRequest extends StatelessWebexPlugin {
|
|
7
7
|
changeVideoLayoutDebounced: any;
|
|
8
|
+
/**
|
|
9
|
+
* Constructor
|
|
10
|
+
* @param {Object} attrs
|
|
11
|
+
* @param {Object} options
|
|
12
|
+
*/
|
|
8
13
|
constructor(attrs: any, options: any);
|
|
14
|
+
/**
|
|
15
|
+
* Returns joinCookie from boundedStorage if present.
|
|
16
|
+
* @returns {Object} joinCookie
|
|
17
|
+
*/
|
|
18
|
+
private getJoinCookie;
|
|
9
19
|
/**
|
|
10
20
|
* Make a network request to join a meeting
|
|
11
21
|
* @param {Object} options
|
|
@@ -37,10 +37,6 @@ declare const BEHAVIORAL_METRICS: {
|
|
|
37
37
|
INVALID_ICE_CANDIDATE: string;
|
|
38
38
|
UPLOAD_LOGS_FAILURE: string;
|
|
39
39
|
RECEIVE_TRANSCRIPTION_FAILURE: string;
|
|
40
|
-
ENABLE_BNR_SUCCESS: string;
|
|
41
|
-
ENABLE_BNR_FAILURE: string;
|
|
42
|
-
DISABLE_BNR_SUCCESS: string;
|
|
43
|
-
DISABLE_BNR_FAILURE: string;
|
|
44
40
|
FETCH_MEETING_INFO_V1_SUCCESS: string;
|
|
45
41
|
FETCH_MEETING_INFO_V1_FAILURE: string;
|
|
46
42
|
ADHOC_MEETING_SUCCESS: string;
|
|
@@ -19,12 +19,14 @@ declare class ReachabilityRequest {
|
|
|
19
19
|
*/
|
|
20
20
|
constructor(webex: object);
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Gets the cluster information
|
|
23
23
|
*
|
|
24
|
-
* @param {boolean} includeVideoMesh whether to include the video mesh clusters in the result or not
|
|
25
24
|
* @returns {Promise}
|
|
26
25
|
*/
|
|
27
|
-
getClusters: () => Promise<
|
|
26
|
+
getClusters: () => Promise<{
|
|
27
|
+
clusters: ClusterList;
|
|
28
|
+
joinCookie: any;
|
|
29
|
+
}>;
|
|
28
30
|
/**
|
|
29
31
|
* gets remote SDP For Clusters
|
|
30
32
|
* @param {Object} localSDPList localSDPs for the cluster
|
|
@@ -4,11 +4,14 @@ import { StatelessWebexPlugin } from '@webex/webex-core';
|
|
|
4
4
|
*/
|
|
5
5
|
export default class RoapRequest extends StatelessWebexPlugin {
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Returns reachability data.
|
|
8
8
|
* @param {Object} localSdp
|
|
9
|
-
* @returns {
|
|
9
|
+
* @returns {Object}
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
attachReachabilityData(localSdp: any): Promise<{
|
|
12
|
+
localSdp: any;
|
|
13
|
+
joinCookie: any;
|
|
14
|
+
}>;
|
|
12
15
|
/**
|
|
13
16
|
* Sends a ROAP message
|
|
14
17
|
* @param {Object} options
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.36",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
6
|
"contributors": [
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
36
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
38
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
39
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
40
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
35
|
+
"@webex/plugin-meetings": "3.0.0-beta.36",
|
|
36
|
+
"@webex/test-helper-chai": "3.0.0-beta.36",
|
|
37
|
+
"@webex/test-helper-mocha": "3.0.0-beta.36",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.36",
|
|
39
|
+
"@webex/test-helper-retry": "3.0.0-beta.36",
|
|
40
|
+
"@webex/test-helper-test-users": "3.0.0-beta.36",
|
|
41
41
|
"chai": "^4.3.4",
|
|
42
42
|
"chai-as-promised": "^7.1.1",
|
|
43
43
|
"jsdom-global": "3.0.2",
|
|
@@ -46,18 +46,18 @@
|
|
|
46
46
|
"typescript": "^4.7.4"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@webex/common": "3.0.0-beta.
|
|
50
|
-
"@webex/internal-media-core": "1.35.
|
|
51
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
52
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
53
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
54
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
55
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
56
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
57
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
58
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
59
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
60
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
49
|
+
"@webex/common": "3.0.0-beta.36",
|
|
50
|
+
"@webex/internal-media-core": "1.35.1",
|
|
51
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.36",
|
|
52
|
+
"@webex/internal-plugin-device": "3.0.0-beta.36",
|
|
53
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.36",
|
|
54
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.36",
|
|
55
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.36",
|
|
56
|
+
"@webex/internal-plugin-support": "3.0.0-beta.36",
|
|
57
|
+
"@webex/internal-plugin-user": "3.0.0-beta.36",
|
|
58
|
+
"@webex/plugin-people": "3.0.0-beta.36",
|
|
59
|
+
"@webex/plugin-rooms": "3.0.0-beta.36",
|
|
60
|
+
"@webex/webex-core": "3.0.0-beta.36",
|
|
61
61
|
"ampersand-collection": "^2.0.2",
|
|
62
62
|
"bowser": "^2.11.0",
|
|
63
63
|
"btoa": "^1.2.1",
|
package/src/breakouts/README.md
CHANGED
|
@@ -119,8 +119,14 @@ breakout.remove(participant)
|
|
|
119
119
|
// This can only be done when breakouts are inactive
|
|
120
120
|
breakout.delete()
|
|
121
121
|
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
/*
|
|
123
|
+
Create breakout sessions, Type is array
|
|
124
|
+
Format: [{'name':'session1', "anyoneCanJoin" : true}]
|
|
125
|
+
*/
|
|
126
|
+
breakouts.create(sessions)
|
|
127
|
+
|
|
128
|
+
// Delete all breakout sessions
|
|
129
|
+
breakouts.clearSessions()
|
|
124
130
|
|
|
125
131
|
// Rename an existing breakout session
|
|
126
132
|
breakout.rename(newSessionName)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {ERROR_DICTIONARY} from '../constants';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Extended Error object to signify breakout related errors
|
|
5
|
+
*/
|
|
6
|
+
export default class BreakoutEditLockedError extends Error {
|
|
7
|
+
code: any;
|
|
8
|
+
error: any;
|
|
9
|
+
sdkMessage: any;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @constructor
|
|
14
|
+
* @param {String} [message]
|
|
15
|
+
* @param {Object} [error]
|
|
16
|
+
*/
|
|
17
|
+
constructor(message: string = ERROR_DICTIONARY.BREAKOUT_EDIT.MESSAGE, error: any = null) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = ERROR_DICTIONARY.BREAKOUT_EDIT.NAME;
|
|
20
|
+
this.sdkMessage = ERROR_DICTIONARY.BREAKOUT_EDIT.MESSAGE;
|
|
21
|
+
this.error = error;
|
|
22
|
+
this.stack = error ? error.stack : new Error().stack;
|
|
23
|
+
this.code = ERROR_DICTIONARY.BREAKOUT_EDIT.CODE;
|
|
24
|
+
}
|
|
25
|
+
}
|
package/src/breakouts/index.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {BREAKOUTS, HTTP_VERBS, MEETINGS} from '../constants';
|
|
|
10
10
|
import Breakout from './breakout';
|
|
11
11
|
import BreakoutCollection from './collection';
|
|
12
12
|
import BreakoutRequest from './request';
|
|
13
|
+
import BreakoutEditLockedError from './edit-lock-error';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* @class Breakouts
|
|
@@ -34,6 +35,7 @@ const Breakouts = WebexPlugin.extend({
|
|
|
34
35
|
url: 'string', // appears from the moment you enable breakouts
|
|
35
36
|
locusUrl: 'string', // the current locus url
|
|
36
37
|
breakoutServiceUrl: 'string', // the current breakout resouce url
|
|
38
|
+
groups: 'array', // appears when create breakouts
|
|
37
39
|
},
|
|
38
40
|
|
|
39
41
|
children: {
|
|
@@ -348,6 +350,77 @@ const Breakouts = WebexPlugin.extend({
|
|
|
348
350
|
},
|
|
349
351
|
});
|
|
350
352
|
},
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Create new breakout sessions
|
|
356
|
+
* @param {object} sessions -- breakout session group
|
|
357
|
+
* @returns {Promise}
|
|
358
|
+
*/
|
|
359
|
+
async create(sessions) {
|
|
360
|
+
// @ts-ignore
|
|
361
|
+
const breakInfo = await this.webex
|
|
362
|
+
.request({
|
|
363
|
+
method: HTTP_VERBS.PUT,
|
|
364
|
+
uri: this.url,
|
|
365
|
+
body: {
|
|
366
|
+
groups: [
|
|
367
|
+
{
|
|
368
|
+
sessions,
|
|
369
|
+
},
|
|
370
|
+
],
|
|
371
|
+
},
|
|
372
|
+
})
|
|
373
|
+
.catch((error) => {
|
|
374
|
+
if (error.body && error.body.errorCode === BREAKOUTS.ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH) {
|
|
375
|
+
LoggerProxy.logger.info(`Breakouts#create --> Edit lock token mismatch`);
|
|
376
|
+
|
|
377
|
+
return Promise.reject(new BreakoutEditLockedError('Edit lock token mismatch', error));
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
return Promise.reject(error);
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
if (breakInfo.body && breakInfo.body.groups && breakInfo.body.groups) {
|
|
384
|
+
this.set('groups', breakInfo.body.groups);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
return Promise.resolve(breakInfo);
|
|
388
|
+
},
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Delete all breakout sessions
|
|
392
|
+
* @returns {Promise}
|
|
393
|
+
*/
|
|
394
|
+
async clearSessions() {
|
|
395
|
+
// @ts-ignore
|
|
396
|
+
const breakInfo = await this.webex
|
|
397
|
+
.request({
|
|
398
|
+
method: HTTP_VERBS.PUT,
|
|
399
|
+
uri: this.url,
|
|
400
|
+
body: {
|
|
401
|
+
groups: [
|
|
402
|
+
{
|
|
403
|
+
action: BREAKOUTS.ACTION_TYPES.DELETE,
|
|
404
|
+
},
|
|
405
|
+
],
|
|
406
|
+
},
|
|
407
|
+
})
|
|
408
|
+
.catch((error) => {
|
|
409
|
+
if (error.body && error.body.errorCode === BREAKOUTS.ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH) {
|
|
410
|
+
LoggerProxy.logger.info(`Breakouts#clearSessions --> Edit lock token mismatch`);
|
|
411
|
+
|
|
412
|
+
return Promise.reject(new BreakoutEditLockedError('Edit lock token mismatch', error));
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
return Promise.reject(error);
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
if (breakInfo.body && breakInfo.body.groups && breakInfo.body.groups) {
|
|
419
|
+
this.set('groups', breakInfo.body.groups);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
return Promise.resolve(breakInfo);
|
|
423
|
+
},
|
|
351
424
|
});
|
|
352
425
|
|
|
353
426
|
export default Breakouts;
|
package/src/constants.ts
CHANGED
|
@@ -452,6 +452,11 @@ export const ERROR_DICTIONARY = {
|
|
|
452
452
|
MESSAGE: 'Captcha is required.',
|
|
453
453
|
CODE: 8,
|
|
454
454
|
},
|
|
455
|
+
BREAKOUT_EDIT: {
|
|
456
|
+
NAME: 'BreakoutEditLockedError',
|
|
457
|
+
MESSAGE: 'Edit lock token mismatch',
|
|
458
|
+
CODE: 9,
|
|
459
|
+
},
|
|
455
460
|
};
|
|
456
461
|
|
|
457
462
|
export const FLOOR_ACTION = {
|
|
@@ -538,6 +543,12 @@ export const BREAKOUTS = {
|
|
|
538
543
|
REQUESTED: 'requested',
|
|
539
544
|
},
|
|
540
545
|
BREAKOUTS_SUPPORTED: 'BREAKOUTS_SUPPORTED',
|
|
546
|
+
ACTION_TYPES: {
|
|
547
|
+
DELETE: 'DELETE',
|
|
548
|
+
},
|
|
549
|
+
ERROR_CODE: {
|
|
550
|
+
EDIT_LOCK_TOKEN_MISMATCH: 201409024,
|
|
551
|
+
},
|
|
541
552
|
};
|
|
542
553
|
|
|
543
554
|
export const LOCUSINFO = {
|
|
@@ -854,7 +865,8 @@ export const RESOURCE = {
|
|
|
854
865
|
};
|
|
855
866
|
|
|
856
867
|
export const REACHABILITY = {
|
|
857
|
-
|
|
868
|
+
localStorageResult: 'reachability.result',
|
|
869
|
+
localStorageJoinCookie: 'reachability.joinCookie',
|
|
858
870
|
namespace: 'Reachability',
|
|
859
871
|
};
|
|
860
872
|
|
package/src/media/index.ts
CHANGED
|
@@ -3,7 +3,13 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/* globals navigator */
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
LocalCameraTrack,
|
|
8
|
+
LocalDisplayTrack,
|
|
9
|
+
LocalMicrophoneTrack,
|
|
10
|
+
RoapMediaConnection,
|
|
11
|
+
MultistreamRoapMediaConnection,
|
|
12
|
+
} from '@webex/internal-media-core';
|
|
7
13
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
8
14
|
import {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';
|
|
9
15
|
import Config from '../config';
|
|
@@ -43,22 +49,6 @@ const {isBrowser} = BrowserDetection();
|
|
|
43
49
|
*/
|
|
44
50
|
const Media: any = {};
|
|
45
51
|
|
|
46
|
-
/**
|
|
47
|
-
* @param {boolean} enabled
|
|
48
|
-
* @param {MediaStreamTrack} track
|
|
49
|
-
* @returns {Boolean}
|
|
50
|
-
* @public
|
|
51
|
-
*/
|
|
52
|
-
Media.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {
|
|
53
|
-
if (track) {
|
|
54
|
-
track.enabled = enabled;
|
|
55
|
-
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return false;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
52
|
/**
|
|
63
53
|
* format the media array for send
|
|
64
54
|
* @param {String} mediaId
|
|
@@ -121,7 +111,7 @@ Media.getLocalMedia = (options: any, config: object) => {
|
|
|
121
111
|
* @param {boolean} [options.enableRtx] applicable only to non-multistream connections
|
|
122
112
|
* @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
|
|
123
113
|
* @param {Object} [options.turnServerInfo]
|
|
124
|
-
* @returns {RoapMediaConnection}
|
|
114
|
+
* @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
|
|
125
115
|
*/
|
|
126
116
|
Media.createMediaConnection = (
|
|
127
117
|
isMultistream: boolean,
|
|
@@ -133,9 +123,9 @@ Media.createMediaConnection = (
|
|
|
133
123
|
receiveVideo: boolean;
|
|
134
124
|
receiveShare: boolean;
|
|
135
125
|
};
|
|
136
|
-
audioTrack?:
|
|
137
|
-
videoTrack?:
|
|
138
|
-
shareTrack?:
|
|
126
|
+
audioTrack?: LocalMicrophoneTrack;
|
|
127
|
+
videoTrack?: LocalCameraTrack;
|
|
128
|
+
shareTrack?: LocalDisplayTrack;
|
|
139
129
|
};
|
|
140
130
|
remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
|
|
141
131
|
enableRtx?: boolean;
|
|
@@ -194,9 +184,9 @@ Media.createMediaConnection = (
|
|
|
194
184
|
},
|
|
195
185
|
{
|
|
196
186
|
send: {
|
|
197
|
-
audio: audioTrack,
|
|
198
|
-
video: videoTrack,
|
|
199
|
-
screenShareVideo: shareTrack,
|
|
187
|
+
audio: audioTrack?.underlyingTrack,
|
|
188
|
+
video: videoTrack?.underlyingTrack,
|
|
189
|
+
screenShareVideo: shareTrack?.underlyingTrack,
|
|
200
190
|
},
|
|
201
191
|
receive: {
|
|
202
192
|
audio: mediaDirection.receiveAudio,
|