@webex/plugin-meetings 2.35.4 → 2.36.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/media/index.js +6 -2
- package/dist/media/index.js.map +1 -1
- package/dist/meeting/index.js +55 -14
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +28 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/reactions/reactions.js +111 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +40 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/package.json +17 -17
- package/src/media/index.ts +6 -2
- package/src/meeting/index.ts +47 -15
- package/src/meeting/request.ts +23 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +36 -0
- package/test/unit/spec/meeting/index.js +120 -14
- package/test/unit/spec/meeting/request.js +25 -1
package/dist/media/index.js
CHANGED
|
@@ -474,11 +474,15 @@ Media.getMedia = function (audio, video, config) {
|
|
|
474
474
|
video: video ? isBrowser('firefox') && video.width && video.width.max === 320 ? {
|
|
475
475
|
deviceId: video.deviceId ? video.deviceId : undefined,
|
|
476
476
|
width: 320,
|
|
477
|
-
height: 180
|
|
477
|
+
height: 180,
|
|
478
|
+
frameRate: video.frameRate ? video.frameRate : undefined,
|
|
479
|
+
facingMode: video.facingMode ? video.facingMode : undefined
|
|
478
480
|
} : {
|
|
479
481
|
deviceId: video.deviceId ? video.deviceId : undefined,
|
|
480
482
|
width: video.width ? video.width : defaultWidth,
|
|
481
|
-
height: video.height ? video.height : defaultHeight
|
|
483
|
+
height: video.height ? video.height : defaultHeight,
|
|
484
|
+
frameRate: video.frameRate ? video.frameRate : undefined,
|
|
485
|
+
facingMode: video.facingMode ? video.facingMode : undefined
|
|
482
486
|
} : false,
|
|
483
487
|
fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing
|
|
484
488
|
|
package/dist/media/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","reconnectMedia","peerConnection","meetingId","remoteQualityLevel","enableRtx","enableExtmap","connectionState","PEER_CONNECTION_STATE","CLOSED","FAILED","reject","ReconnectionError","PeerConnectionManager","createOffer","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","checkTracks","trackType","receiveTracks","getDirection","sendTracks","direction","attachMedia","mediaProperties","mediaDirection","audioTrack","videoTrack","shareTrack","result","receiveAudio","audioTransceiver","addTransceiver","receiveVideo","videoTransceiver","receiveShare","shareTransceiver","onnegotiationneeded","event","LoggerProxy","logger","info","updateMedia","setTrackOnTransceiver","type","sendTrack","receiveTrack","transceiver","sender","replaceTrack","e","error","updateTransceiver","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","meetings","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","audio","video","navigator","mediaDevices","then","stream","getVideoTracks","length","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","MediaError","toggleStream","stopTracks","stop","readyState","stopStream","warn","getTracks","forEach","mediaSetting","audioVideo","localStream","shareStream"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n AUDIO_INPUT,\n VIDEO_INPUT,\n PEER_CONNECTION_STATE,\n MEDIA_TRACK_CONSTRAINT\n} from '../constants';\nimport Config from '../config';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport ReconnectionError from '../common/errors/reconnection';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {\n if (track) {\n track.enabled = enabled;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {RTCPeerConnection} peerConnection\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.reconnectMedia = (\n peerConnection: RTCPeerConnection,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any\n }\n) => {\n if (peerConnection.connectionState === PEER_CONNECTION_STATE.CLOSED ||\n peerConnection.connectionState === PEER_CONNECTION_STATE.FAILED) {\n return Promise.reject(new ReconnectionError('Reinitiate peerconnection'));\n }\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * format the media array for send\n * @param {String} mediaId\n * @param {Boolean} audioMuted\n * @param {Boolean} videoMuted\n * @returns {Array} medias\n */\nMedia.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {\n if (mediaId) {\n return [\n {\n localSdp: JSON.stringify({\n audioMuted,\n videoMuted\n }),\n mediaId\n }\n ];\n }\n\n return [];\n};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {\n sendAudio, sendVideo, sendShare, sharePreferences, isSharing\n } = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n/**\n * Returns the direction and tracks\n * @param {string} trackType type of track (audio/video)\n * @param {object} track tracks passed\n * @param {boolean} receiveTracks do you want to receive tracks from the remote side\n * @returns {Object} returns direction tracks to be added in transceiver\n */\nMedia.checkTracks = (trackType: string, track: object, receiveTracks: boolean) => {\n const getDirection = (sendTracks, receiveTracks) => {\n if (sendTracks && receiveTracks) {\n return 'sendrecv';\n } if (sendTracks && !receiveTracks) {\n return 'sendonly';\n } if (!sendTracks && receiveTracks) {\n return 'recvonly';\n }\n\n return 'inactive';\n };\n\n if (track) {\n return {track, direction: getDirection(!!track, receiveTracks)};\n }\n\n return {track: trackType, direction: getDirection(!!track, receiveTracks)};\n};\n/**\n * creates peerconnection and attaches streams\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Array} [peerConnection, ]\n */\nMedia.attachMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n let result = null;\n\n // Add Transceiver for audio\n result = Media.checkTracks('audio', mediaDirection.sendAudio && audioTrack, mediaDirection.receiveAudio);\n peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for video\n result = Media.checkTracks('video', mediaDirection.sendVideo && videoTrack, mediaDirection.receiveVideo);\n peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for share\n result = Media.checkTracks('video', mediaDirection.sendShare && shareTrack, mediaDirection.receiveShare);\n peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * updates all the media streams and creates a new media offer\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.updateMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n // update audio transceiver\n Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {\n type: 'audio',\n track: audioTrack,\n sendTrack: mediaDirection.sendAudio && audioTrack,\n receiveTrack: mediaDirection.receiveAudio\n });\n\n // update video transceiver\n Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {\n type: 'video',\n track: videoTrack,\n sendTrack: mediaDirection.sendVideo && videoTrack,\n receiveTrack: mediaDirection.receiveVideo\n });\n\n // update content transceiver\n Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {\n type: 'video',\n track: shareTrack,\n sendTrack: mediaDirection.sendShare && shareTrack,\n receiveTrack: mediaDirection.receiveShare\n });\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options\n * @param {MediaStreamTrack} options.track\n * @returns {undefined}\n */\nMedia.setTrackOnTransceiver = (\n transceiver: RTCRtpTransceiver,\n options: {\n track: MediaStreamTrack;\n type: any;\n sendTrack: any;\n receiveTrack: any;\n }\n) => {\n const {\n type, track, sendTrack, receiveTrack\n } = options;\n\n try {\n const result = Media.checkTracks(type, sendTrack && track, receiveTrack);\n\n transceiver.direction = result.direction;\n if (options.track) {\n transceiver.sender.replaceTrack(track);\n }\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#setTrackOnTransceiver --> ${e}`);\n throw e;\n }\n};\n\n/**\n * creates a new offer\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @param {RTCPeerConnection} peerConnection\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options see #Media.setTrackOnTransceiver\n * @returns {Promise}\n */\nMedia.updateTransceiver = (\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n },\n peerConnection: RTCPeerConnection,\n transceiver: RTCRtpTransceiver,\n options: object\n) => {\n Media.setTrackOnTransceiver(transceiver, options);\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {\n screenResolution,\n resolution,\n videoShareFrameRate,\n screenFrameRate,\n aspectRatio\n } = Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n }\n else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution\n };\n }\n else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare\n };\n\n\n return navigator.mediaDevices.getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video ?\n isBrowser('firefox') && video.width && video.width.max === 320 ?\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180\n } :\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight\n } :\n false,\n fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices\n .getUserMedia(mediaConfig)\n .catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({ sendAudio, sendVideo }: { sendAudio: boolean; sendVideo: boolean }) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track: any) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`);\n }\n }\n });\n};\n\n/**\n *\n * Stop input stream\n * @param {Stream} stream A media stream\n * @returns {null}\n * @deprecated after v1.89.3\n */\nMedia.stopStream = (stream: any) => {\n LoggerProxy.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');\n if (!stream) {\n return Promise.resolve();\n }\n\n /*\n * To release local media\n * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)\n * 2) Firefox requires the stream to be stopped\n */\n return Promise.resolve().then(() => {\n if (stream.getTracks) {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n }\n else if (stream.stop) {\n stream.stop();\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\nMedia.getLocalMedia({\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false\n}, config).then((localStream) => Media.getLocalMedia({\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences\n}, config).then((shareStream) => [localStream, shareStream]));\n\nexport default Media;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","reconnectMedia","peerConnection","meetingId","remoteQualityLevel","enableRtx","enableExtmap","connectionState","PEER_CONNECTION_STATE","CLOSED","FAILED","reject","ReconnectionError","PeerConnectionManager","createOffer","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","checkTracks","trackType","receiveTracks","getDirection","sendTracks","direction","attachMedia","mediaProperties","mediaDirection","audioTrack","videoTrack","shareTrack","result","receiveAudio","audioTransceiver","addTransceiver","receiveVideo","videoTransceiver","receiveShare","shareTransceiver","onnegotiationneeded","event","LoggerProxy","logger","info","updateMedia","setTrackOnTransceiver","type","sendTrack","receiveTrack","transceiver","sender","replaceTrack","e","error","updateTransceiver","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","meetings","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","audio","video","navigator","mediaDevices","then","stream","getVideoTracks","length","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","MediaError","toggleStream","stopTracks","stop","readyState","stopStream","warn","getTracks","forEach","mediaSetting","audioVideo","localStream","shareStream"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n AUDIO_INPUT,\n VIDEO_INPUT,\n PEER_CONNECTION_STATE,\n MEDIA_TRACK_CONSTRAINT\n} from '../constants';\nimport Config from '../config';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport ReconnectionError from '../common/errors/reconnection';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {\n if (track) {\n track.enabled = enabled;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {RTCPeerConnection} peerConnection\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.reconnectMedia = (\n peerConnection: RTCPeerConnection,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any\n }\n) => {\n if (peerConnection.connectionState === PEER_CONNECTION_STATE.CLOSED ||\n peerConnection.connectionState === PEER_CONNECTION_STATE.FAILED) {\n return Promise.reject(new ReconnectionError('Reinitiate peerconnection'));\n }\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * format the media array for send\n * @param {String} mediaId\n * @param {Boolean} audioMuted\n * @param {Boolean} videoMuted\n * @returns {Array} medias\n */\nMedia.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {\n if (mediaId) {\n return [\n {\n localSdp: JSON.stringify({\n audioMuted,\n videoMuted\n }),\n mediaId\n }\n ];\n }\n\n return [];\n};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {\n sendAudio, sendVideo, sendShare, sharePreferences, isSharing\n } = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n/**\n * Returns the direction and tracks\n * @param {string} trackType type of track (audio/video)\n * @param {object} track tracks passed\n * @param {boolean} receiveTracks do you want to receive tracks from the remote side\n * @returns {Object} returns direction tracks to be added in transceiver\n */\nMedia.checkTracks = (trackType: string, track: object, receiveTracks: boolean) => {\n const getDirection = (sendTracks, receiveTracks) => {\n if (sendTracks && receiveTracks) {\n return 'sendrecv';\n } if (sendTracks && !receiveTracks) {\n return 'sendonly';\n } if (!sendTracks && receiveTracks) {\n return 'recvonly';\n }\n\n return 'inactive';\n };\n\n if (track) {\n return {track, direction: getDirection(!!track, receiveTracks)};\n }\n\n return {track: trackType, direction: getDirection(!!track, receiveTracks)};\n};\n/**\n * creates peerconnection and attaches streams\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Array} [peerConnection, ]\n */\nMedia.attachMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n let result = null;\n\n // Add Transceiver for audio\n result = Media.checkTracks('audio', mediaDirection.sendAudio && audioTrack, mediaDirection.receiveAudio);\n peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for video\n result = Media.checkTracks('video', mediaDirection.sendVideo && videoTrack, mediaDirection.receiveVideo);\n peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for share\n result = Media.checkTracks('video', mediaDirection.sendShare && shareTrack, mediaDirection.receiveShare);\n peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * updates all the media streams and creates a new media offer\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.updateMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n // update audio transceiver\n Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {\n type: 'audio',\n track: audioTrack,\n sendTrack: mediaDirection.sendAudio && audioTrack,\n receiveTrack: mediaDirection.receiveAudio\n });\n\n // update video transceiver\n Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {\n type: 'video',\n track: videoTrack,\n sendTrack: mediaDirection.sendVideo && videoTrack,\n receiveTrack: mediaDirection.receiveVideo\n });\n\n // update content transceiver\n Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {\n type: 'video',\n track: shareTrack,\n sendTrack: mediaDirection.sendShare && shareTrack,\n receiveTrack: mediaDirection.receiveShare\n });\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options\n * @param {MediaStreamTrack} options.track\n * @returns {undefined}\n */\nMedia.setTrackOnTransceiver = (\n transceiver: RTCRtpTransceiver,\n options: {\n track: MediaStreamTrack;\n type: any;\n sendTrack: any;\n receiveTrack: any;\n }\n) => {\n const {\n type, track, sendTrack, receiveTrack\n } = options;\n\n try {\n const result = Media.checkTracks(type, sendTrack && track, receiveTrack);\n\n transceiver.direction = result.direction;\n if (options.track) {\n transceiver.sender.replaceTrack(track);\n }\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#setTrackOnTransceiver --> ${e}`);\n throw e;\n }\n};\n\n/**\n * creates a new offer\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @param {RTCPeerConnection} peerConnection\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options see #Media.setTrackOnTransceiver\n * @returns {Promise}\n */\nMedia.updateTransceiver = (\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n },\n peerConnection: RTCPeerConnection,\n transceiver: RTCRtpTransceiver,\n options: object\n) => {\n Media.setTrackOnTransceiver(transceiver, options);\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {\n screenResolution,\n resolution,\n videoShareFrameRate,\n screenFrameRate,\n aspectRatio\n } = Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n }\n else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution\n };\n }\n else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare\n };\n\n\n return navigator.mediaDevices.getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video ?\n isBrowser('firefox') && video.width && video.width.max === 320 ?\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n } :\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n } :\n false,\n fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices\n .getUserMedia(mediaConfig)\n .catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({ sendAudio, sendVideo }: { sendAudio: boolean; sendVideo: boolean }) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track: any) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`);\n }\n }\n });\n};\n\n/**\n *\n * Stop input stream\n * @param {Stream} stream A media stream\n * @returns {null}\n * @deprecated after v1.89.3\n */\nMedia.stopStream = (stream: any) => {\n LoggerProxy.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');\n if (!stream) {\n return Promise.resolve();\n }\n\n /*\n * To release local media\n * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)\n * 2) Firefox requires the stream to be stopped\n */\n return Promise.resolve().then(() => {\n if (stream.getTracks) {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n }\n else if (stream.stop) {\n stream.stop();\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\nMedia.getLocalMedia({\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false\n}, config).then((localStream) => Media.getLocalMedia({\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences\n}, config).then((shareStream) => [localStream, shareStream]));\n\nexport default Media;\n"],"mappings":"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"}
|
package/dist/meeting/index.js
CHANGED
|
@@ -132,6 +132,8 @@ var _browserDetection = _interopRequireDefault(require("../common/browser-detect
|
|
|
132
132
|
|
|
133
133
|
var _collection = _interopRequireDefault(require("../roap/collection"));
|
|
134
134
|
|
|
135
|
+
var _reactions = require("../reactions/reactions");
|
|
136
|
+
|
|
135
137
|
var _inMeetingActions = _interopRequireDefault(require("./in-meeting-actions"));
|
|
136
138
|
|
|
137
139
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
@@ -1957,7 +1959,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
1957
1959
|
|
|
1958
1960
|
|
|
1959
1961
|
if (_this7.floorGrantPending && payload.newSelf.state === _constants.MEETING_STATE.STATES.JOINED) {
|
|
1960
|
-
_this7.
|
|
1962
|
+
_this7.requestScreenShareFloor().then(function () {
|
|
1961
1963
|
_this7.floorGrantPending = false;
|
|
1962
1964
|
});
|
|
1963
1965
|
}
|
|
@@ -2241,7 +2243,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
2241
2243
|
case _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE:
|
|
2242
2244
|
_triggerProxy.default.trigger(_this12, {
|
|
2243
2245
|
file: 'meeting/index',
|
|
2244
|
-
function: '
|
|
2246
|
+
function: 'localShare'
|
|
2245
2247
|
}, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL, {
|
|
2246
2248
|
reason: _constants.SHARE_STOPPED_REASON.SELF_STOPPED
|
|
2247
2249
|
});
|
|
@@ -4499,7 +4501,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
4499
4501
|
}
|
|
4500
4502
|
|
|
4501
4503
|
_context4.next = 4;
|
|
4502
|
-
return _this36.
|
|
4504
|
+
return _this36.releaseScreenShareFloor();
|
|
4503
4505
|
|
|
4504
4506
|
case 4:
|
|
4505
4507
|
mediaSettings = {
|
|
@@ -4812,7 +4814,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
4812
4814
|
|
|
4813
4815
|
if (mediaSettings && mediaSettings.sendShare && localShare) {
|
|
4814
4816
|
if (_this38.state === _constants.MEETING_STATE.STATES.JOINED) {
|
|
4815
|
-
return _this38.
|
|
4817
|
+
return _this38.requestScreenShareFloor();
|
|
4816
4818
|
} // When the self state changes to JOINED then request the floor
|
|
4817
4819
|
|
|
4818
4820
|
|
|
@@ -4991,7 +4993,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
4991
4993
|
// we actually get a OFFER from the server and a GLAR condition happens
|
|
4992
4994
|
if (startShare) {
|
|
4993
4995
|
// We are assuming that the clients are connected when doing an update
|
|
4994
|
-
return _this40.
|
|
4996
|
+
return _this40.requestScreenShareFloor();
|
|
4995
4997
|
}
|
|
4996
4998
|
|
|
4997
4999
|
return _promise.default.resolve();
|
|
@@ -5193,7 +5195,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5193
5195
|
|
|
5194
5196
|
if (!sendShare && previousShareStatus) {
|
|
5195
5197
|
// When user stops sharing
|
|
5196
|
-
return this.
|
|
5198
|
+
return this.releaseScreenShareFloor().then(function () {
|
|
5197
5199
|
return _promise.default.resolve(false);
|
|
5198
5200
|
});
|
|
5199
5201
|
}
|
|
@@ -5255,7 +5257,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5255
5257
|
id: _this43.id
|
|
5256
5258
|
}).then(function () {
|
|
5257
5259
|
if (startShare) {
|
|
5258
|
-
return _this43.
|
|
5260
|
+
return _this43.requestScreenShareFloor();
|
|
5259
5261
|
}
|
|
5260
5262
|
|
|
5261
5263
|
return _promise.default.resolve();
|
|
@@ -5562,15 +5564,15 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5562
5564
|
return _promise.default.reject(new _parameter.default('Cannot stop share without whiteboard.'));
|
|
5563
5565
|
}
|
|
5564
5566
|
/**
|
|
5565
|
-
*
|
|
5567
|
+
* Sends a request to Locus to obtain the screen share floor
|
|
5566
5568
|
* @returns {Promise} see #meetingRequest.changeMeetingFloor
|
|
5567
5569
|
* @private
|
|
5568
5570
|
* @memberof Meeting
|
|
5569
5571
|
*/
|
|
5570
5572
|
|
|
5571
5573
|
}, {
|
|
5572
|
-
key: "
|
|
5573
|
-
value: function
|
|
5574
|
+
key: "requestScreenShareFloor",
|
|
5575
|
+
value: function requestScreenShareFloor() {
|
|
5574
5576
|
var _this49 = this;
|
|
5575
5577
|
|
|
5576
5578
|
var content = this.locusInfo.mediaShares.find(function (element) {
|
|
@@ -5627,15 +5629,15 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5627
5629
|
}, options));
|
|
5628
5630
|
}
|
|
5629
5631
|
/**
|
|
5630
|
-
*
|
|
5632
|
+
* Sends a request to Locus to release the screen share floor.
|
|
5631
5633
|
* @returns {Promise} see #meetingRequest.changeMeetingFloor
|
|
5632
5634
|
* @private
|
|
5633
5635
|
* @memberof Meeting
|
|
5634
5636
|
*/
|
|
5635
5637
|
|
|
5636
5638
|
}, {
|
|
5637
|
-
key: "
|
|
5638
|
-
value: function
|
|
5639
|
+
key: "releaseScreenShareFloor",
|
|
5640
|
+
value: function releaseScreenShareFloor() {
|
|
5639
5641
|
var _this50 = this;
|
|
5640
5642
|
|
|
5641
5643
|
var content = this.locusInfo.mediaShares.find(function (element) {
|
|
@@ -5663,7 +5665,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5663
5665
|
uri: content.url,
|
|
5664
5666
|
resourceUrl: this.resourceUrl
|
|
5665
5667
|
}).catch(function (error) {
|
|
5666
|
-
_loggerProxy.default.logger.error('Meeting:index#
|
|
5668
|
+
_loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
|
|
5667
5669
|
|
|
5668
5670
|
_metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
|
|
5669
5671
|
correlation_id: _this50.correlationId,
|
|
@@ -6584,6 +6586,45 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6584
6586
|
* @memberof Meeting
|
|
6585
6587
|
*/
|
|
6586
6588
|
|
|
6589
|
+
}, {
|
|
6590
|
+
key: "sendReaction",
|
|
6591
|
+
value:
|
|
6592
|
+
/**
|
|
6593
|
+
* Send a reaction inside the meeting.
|
|
6594
|
+
*
|
|
6595
|
+
* @param {ReactionType} reactionType - type of reaction to be sent. Example: "thumbs_up"
|
|
6596
|
+
* @param {SkinToneType} skinToneType - skin tone for the reaction. Example: "medium_dark"
|
|
6597
|
+
* @returns {Promise}
|
|
6598
|
+
* @public
|
|
6599
|
+
* @memberof Meeting
|
|
6600
|
+
*/
|
|
6601
|
+
function sendReaction(reactionType, skinToneType) {
|
|
6602
|
+
var _this$locusInfo, _this$locusInfo$contr2, _this$locusInfo$contr3;
|
|
6603
|
+
|
|
6604
|
+
var reactionChannelUrl = (_this$locusInfo = this.locusInfo) === null || _this$locusInfo === void 0 ? void 0 : (_this$locusInfo$contr2 = _this$locusInfo.controls) === null || _this$locusInfo$contr2 === void 0 ? void 0 : (_this$locusInfo$contr3 = _this$locusInfo$contr2.reactions) === null || _this$locusInfo$contr3 === void 0 ? void 0 : _this$locusInfo$contr3.reactionChannelUrl;
|
|
6605
|
+
var participantId = this.members.selfId;
|
|
6606
|
+
var reactionData = _reactions.Reactions[reactionType];
|
|
6607
|
+
|
|
6608
|
+
if (!reactionData) {
|
|
6609
|
+
return _promise.default.reject(new Error("".concat(reactionType, " is not a valid reaction.")));
|
|
6610
|
+
}
|
|
6611
|
+
|
|
6612
|
+
var skinToneData = _reactions.SkinTones[skinToneType] || _reactions.SkinTones.normal;
|
|
6613
|
+
|
|
6614
|
+
var reaction = _objectSpread(_objectSpread({}, reactionData), {}, {
|
|
6615
|
+
tone: skinToneData
|
|
6616
|
+
});
|
|
6617
|
+
|
|
6618
|
+
if (reactionChannelUrl) {
|
|
6619
|
+
return this.meetingRequest.sendReaction({
|
|
6620
|
+
reactionChannelUrl: reactionChannelUrl,
|
|
6621
|
+
reaction: reaction,
|
|
6622
|
+
participantId: participantId
|
|
6623
|
+
});
|
|
6624
|
+
}
|
|
6625
|
+
|
|
6626
|
+
return _promise.default.reject(new Error('Error sending reaction, service url not found.'));
|
|
6627
|
+
}
|
|
6587
6628
|
}]);
|
|
6588
6629
|
return Meeting;
|
|
6589
6630
|
}(_webexCore.StatelessWebexPlugin);
|