{"version":3,"sources":["Ajax.ts","MakeModal.ts","Start.ts","URLSearchParamsPollyfill.js","VidyoClient.ts","VidyoClientMessages.ts","VidyoDetection.ts","VidyoMain.ts","umd.js","VidyoClientForWeb/ChromeProxy.ts","VidyoClientForWeb/ChromeWrapper.ts","VidyoClientForWeb/VideoHandler.ts","WebRTC/WebRTCAdapter.ts","WebRTC/WebRTCClient.ts","WebRTC/WebRTCPlugin.ts"],"names":[],"mappings":"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","file":"SmartVideo.js","sourcesContent":["/**\n * Simple Ajax class\n */\n\nnamespace SmartVideo {\nexport class Ajax {\n\n static ajaxSendRequest(url: string, action: string, request?: Object, callback?: Function, responseType?: string) {\n let jsonRequest = null;\n const ajax = new XMLHttpRequest();\n let ajaxurl: string;\n ajax.onload = function(e) {\n const xhr = e.target;\n console.log('AJAX request to ' + url + ' returned status of: ' + xhr.status);\n if (callback) {\n callback(e);\n }\n };\n ajax.onerror = e => {\n console.log(`Failed to send ajax request ${ajaxurl}`);\n if (callback) {\n callback(e);\n }\n }\n if (request) {\n jsonRequest = JSON.stringify(request);\n }\n\n if (url && jsonRequest !== null && action === 'POST') {\n ajaxurl = url;\n ajax.open(action, ajaxurl, true);\n ajax.setRequestHeader('Content-Type', 'application/json');\n ajax.setRequestHeader('Accept', '*/*');\n ajax.responseType = 'json';\n ajax.send(jsonRequest);\n } else if (url && action === 'GET') {\n ajaxurl = url;\n ajax.open(action, ajaxurl, true);\n ajax.setRequestHeader('Accept', '*/*');\n // ajax.setRequestHeader(\"Content-Type\", \"application/json\");\n // Allow for different response types when doing GET\n if (responseType) {\n ajax.responseType = responseType;\n }\n // ajax.responseType = \"json\";\n ajax.send();\n } else {\n console.log('smartVideoIntegrationServiceUrl not defined');\n return;\n }\n }\n\n constructor() {\n }\n}}\n","/**\n * Class responsible for HTML templating\n * Constructs all GUI elements/modals used by SmartVideo\n */\nnamespace SmartVideo {\n export class MakeModal implements IMakeModal {\n currentModal: HTMLElement;\n params: any[];\n chromeStoreWindow: Window;\n installComponent: string;\n InstallersPath: string;\n CssPath: string;\n ImagePath: string;\n CustomerLogo: string;\n chromeExtensionUrl: string;\n VidyoWebRTCScreenShareChromeExtensionUrl: string;\n VidyoClientForWebChromeExtensionUrl: string;\n AndroidInstallLink: string;\n IOSInstallLink: string;\n StyleSheet: string;\n UseWebRTC: boolean;\n isWebRTCCapable: boolean;\n isWebRTCAvailable: boolean;\n config: ISmartVideoConfig;\n browser: string;\n vidyoDetection: IVidyoDetection;\n MobileClient: string;\n\n constructor() {\n this.installComponent = window.localStorage.getItem('installComponent');\n if (this.installComponent === null) {\n console.log(\n 'MakeModal: No installComponent in window.localStorage. Appears all installations are complete.'\n );\n } else {\n console.log(\n 'MakeModal: installComponent found in window.localStorage: ' +\n this.installComponent\n );\n }\n\n this.config = null;\n // Set default values, to be overriden by config values if set\n this.UseWebRTC = false;\n this.CssPath = './css/';\n this.InstallersPath = './installers/';\n this.ImagePath = './images/';\n this.CustomerLogo = null;\n this.MobileClient = 'VidyoConnect';\n this.AndroidInstallLink =\n 'https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.vidyo.neomobile';\n this.IOSInstallLink =\n 'itms-apps://itunes.apple.com/us/app/vidyoconnect/id1103823278?mt=8';\n this.StyleSheet = 'SmartVideo.css';\n }\n\n // Object extend\n extend(objectToExtend: any, jsonObjects: Array) {\n objectToExtend = objectToExtend || {};\n for (let i = 0; i < jsonObjects.length; i++) {\n if (!jsonObjects[i]) {\n continue;\n }\n for (const key in jsonObjects[i]) {\n if (jsonObjects[i].hasOwnProperty(key)) {\n objectToExtend[key] = jsonObjects[i][key];\n }\n }\n }\n return objectToExtend;\n }\n\n // init(config: ISmartVideoConfig, browser, isWebRTCCapable: boolean, isWebRTCAvailable: boolean) {\n init(config: ISmartVideoConfig, vidyoDetection: IVidyoDetection) {\n this.vidyoDetection = vidyoDetection;\n this.isWebRTCCapable = vidyoDetection.isWebRTCCapable;\n this.browser = vidyoDetection.browserReport.browser.name;\n const that = this;\n\n this.config = config;\n this.extend(this, [this.config]);\n this.continueInit();\n }\n\n continueInit() {\n if (this.vidyoDetection.isInitialized) {\n this.UseWebRTC = this.vidyoDetection.isWebRTCAvailable;\n } else {\n setTimeout(() => {\n this.continueInit();\n }, 500);\n }\n console.log('Initializing MakeModal');\n if (this.UseWebRTC) {\n if (this.VidyoWebRTCScreenShareChromeExtensionUrl) {\n this.chromeExtensionUrl = this.VidyoWebRTCScreenShareChromeExtensionUrl;\n }\n } else {\n if (this.VidyoClientForWebChromeExtensionUrl) {\n this.chromeExtensionUrl = this.VidyoClientForWebChromeExtensionUrl;\n }\n }\n /* if (this.MobileClient === 'VidyoConnect') {\n this.AndroidInstallLink =\n 'https://play.google.com/store/apps/details?id=com.vidyo.neomobile';\n this.IOSInstallLink =\n 'itms-apps://itunes.apple.com/us/app/vidyoconnect/id1103823278?mt=8';\n } */\n this.loadCss();\n }\n\n loadCss() {\n const styleSheets = document.styleSheets;\n let isLinkedSmartVideoStyleSheet = false;\n const SmartVideoStyleSheetLowerCase = this.StyleSheet.toLowerCase();\n for (let index = 0; index < styleSheets.length; index++) {\n const element = styleSheets[index];\n if (element.href) {\n const hRef = element.href\n .toLowerCase()\n .indexOf(SmartVideoStyleSheetLowerCase);\n if (hRef !== -1) {\n isLinkedSmartVideoStyleSheet = true;\n }\n }\n }\n // If not loaded and not disabled, load the smartVideoStyleSheet\n if (!isLinkedSmartVideoStyleSheet && this.StyleSheet !== 'none') {\n const head = document.getElementsByTagName('head')[0];\n const link = document.createElement('link');\n link.id = 'smartVideoCss';\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = this.CssPath + this.StyleSheet;\n link.media = 'all';\n head.appendChild(link);\n }\n }\n\n isFunction(possibleFunction) {\n return typeof possibleFunction === typeof Function;\n }\n\n doCallback(possiblecallback: Function) {\n if (this.isFunction(possiblecallback)) {\n possiblecallback();\n }\n }\n\n successFunction() {}\n\n errorFunction() {\n this.openChromeWebStore();\n }\n\n openChromeWebStore() {\n this.chromeStoreWindow = window.open(\n this.chromeExtensionUrl,\n 'chromeStoreWindow',\n 'status=1,width=1000, height=300'\n );\n }\n\n htmlModal(config: any, callback?: Function) {\n const conf = config || {};\n let modalPop: HTMLElement;\n let existingModals: NodeListOf;\n\n // remove adapt-modals\n existingModals = document.getElementsByTagName('adapt-modal');\n if (existingModals && existingModals.length > 0) {\n for (let i = 0; i < existingModals.length; i++) {\n document.body.removeChild(existingModals[i]);\n }\n }\n\n // create modal\n if (conf.fullmodal === true) {\n modalPop = document.createElement('adapt-fullmodal');\n } else {\n modalPop = document.createElement('adapt-modal');\n modalPop.innerHTML = `\n
\n
\n
\n
\n \n

\n
\n
\n
\n
\n
\n
\n
`;\n }\n\n // disable close button if modal shouldn't have one\n if (!conf.hasCloseButton) {\n const closeButton = (\n modalPop.getElementsByClassName('close')[0]\n );\n if (closeButton && closeButton !== null) {\n closeButton.style.display = 'none';\n }\n }\n // use Element or innerHTML\n if (conf.fullmodal) {\n modalPop.appendChild(conf.bodyElement);\n } else {\n if (conf.bodyElement) {\n modalPop\n .getElementsByClassName('modal-body')[0]\n .appendChild(conf.bodyElement);\n } else {\n modalPop.getElementsByClassName('modal-body')[0].innerHTML =\n conf.innerHtml || '';\n }\n }\n\n // populate OK/Cancel/etc buttons, if any\n if (conf.footerButtons && conf.footerButtons.length > 0) {\n for (let j = 0; j < conf.footerButtons.length; j++) {\n modalPop\n .getElementsByClassName('modal-footer')[0]\n .appendChild(conf.footerButtons[j]);\n }\n }\n\n this.currentModal = modalPop;\n\n if (conf.hasCloseButton === true) {\n const modalClose = modalPop.getElementsByClassName('close')[0];\n modalClose.addEventListener(\n 'click',\n () => {\n this.close();\n },\n false\n );\n }\n }\n\n welcomeModal(\n workgroups: Object,\n isVidyoInstalled: boolean,\n callback: Function\n ) {\n const welcomeDiv = document.createElement('div');\n welcomeDiv.className = 'welcome-body';\n const select = document.createElement('select');\n\n for (const workgrp in workgroups) {\n if (workgroups.hasOwnProperty(workgrp)) {\n const option = document.createElement('option');\n option.textContent = workgrp;\n option.value = workgroups[workgrp];\n select.appendChild(option);\n }\n }\n welcomeDiv.appendChild(select);\n\n const customerNameDiv = document.createElement('div');\n customerNameDiv.className = 'yournamelabel';\n\n const customerNameInput = document.createElement('input');\n customerNameInput.type = 'text';\n customerNameInput.className = 'customerName';\n\n const startButton = document.createElement('button');\n startButton.className = 'btn btn-primary welcomestart-button';\n startButton.addEventListener(\n 'click',\n () => {\n callback(select.value, customerNameInput.value);\n console.log(\n `Workgroup Selected: ${select.value}, Customer Name: ${customerNameInput.value}`\n );\n },\n false\n );\n\n startButton.disabled = true;\n\n const cancelButton = document.createElement('button');\n cancelButton.className = 'btn btn-danger cancelButton';\n cancelButton.addEventListener(\n 'click',\n () => {\n this.close();\n },\n false\n );\n\n // Add listener to customerNameInput, now that start button is created\n // Don't enable start unless they've entered a name\n customerNameInput.addEventListener('keyup', () => {\n if (customerNameInput.value.length !== 0) {\n startButton.disabled = false;\n } else {\n startButton.disabled = true;\n }\n });\n\n welcomeDiv.appendChild(customerNameDiv);\n welcomeDiv.appendChild(customerNameInput);\n\n const footerButtons = [startButton, cancelButton];\n\n const welcomeConfig = {\n titleclass: 'welcome-tital',\n bodyElement: welcomeDiv,\n hasCloseButton: false,\n footerButtons: footerButtons,\n };\n\n this.htmlModal(welcomeConfig);\n this.show();\n }\n\n chromeInstallExtensionModal(\n chromeExtensionUrl: string,\n callback: Function\n ) {\n const that = this;\n // Check to see if the chrome webstore is in the web page. If not, create it.\n const links = document.links;\n let isLinkedChromeStoreExtension = false;\n const chromeStoreLinkLowerCase = this.chromeExtensionUrl.toLowerCase();\n for (let index = 0; index < links.length; index++) {\n const element = links[index];\n const hRef = element.href\n .toLowerCase()\n .indexOf(chromeStoreLinkLowerCase);\n if (hRef !== -1) {\n isLinkedChromeStoreExtension = true;\n }\n }\n if (!isLinkedChromeStoreExtension) {\n const head = document.getElementsByTagName('head')[0];\n const link = document.createElement('link');\n link.id = 'smartVideoChromeStoreExtension';\n link.rel = 'chrome-webstore-item';\n link.href = this.chromeExtensionUrl;\n head.appendChild(link);\n }\n const cancelButton = document.createElement('button');\n cancelButton.className = 'btn btn-danger cancelButton';\n cancelButton.addEventListener(\n 'click',\n () => {\n window.localStorage.clear();\n this.close();\n },\n false\n );\n\n const footerButtons = [cancelButton];\n let installButtonClass;\n if (!this.UseWebRTC) {\n installButtonClass = 'chromeinstallvidyowebextension-button';\n } else {\n installButtonClass = 'chromeinstallvidyowebrtcextension-button';\n }\n let chromeInstallExtensionConfig;\n if (this.browser.toLowerCase() === 'chrome') {\n chromeInstallExtensionConfig = {\n titleclass: 'chromeinstallextension-tital',\n installButtonType: 'button',\n isChromeExtensionInstall: true,\n installButtonText: 'installButtonText',\n installButtonClass: installButtonClass,\n footerButtons: footerButtons,\n installButtonOnClick() {\n // webstore.install deprecated\n /* chrome.webstore.install(\n chromeExtensionUrl,\n that.successFunction.bind(that),\n that.errorFunction.bind(that)\n ); */\n window.open(that.chromeExtensionUrl);\n },\n };\n } else if (this.browser.toLowerCase() === 'opera') {\n chromeInstallExtensionConfig = {\n titleclass: 'chromeinstallextension-tital',\n installButtonType: 'button',\n isChromeExtensionInstall: true,\n installButtonText: 'installButtonText',\n installButtonClass: installButtonClass,\n footerButtons: footerButtons,\n installButtonOnClick() {\n /* that.openChromeWebStore(); */\n window.open(that.chromeExtensionUrl);\n },\n };\n }\n\n this.installModal(chromeInstallExtensionConfig);\n }\n\n chromeInstallNativeMessagingHostModal(\n chromeNMSVersion: string,\n os: string,\n callback: Function\n ) {\n let configTitle: string;\n let downloadLink = '';\n let configTitleClass: string;\n /*\n Replace the underscore at the end of chromeNMSVersion,\n because for some reason Vidyo uses x.x.x.xxxx for file name, but x.x.x_xxxx for connecting to NMS host\n */\n const chromeNMSFileNameVersion = chromeNMSVersion.replace('_', '.');\n if (os === 'Windows') {\n downloadLink =\n this.InstallersPath +\n 'VidyoClientForWeb-win32-' +\n chromeNMSFileNameVersion +\n '.msi';\n } else if (os === 'OS X') {\n downloadLink =\n this.InstallersPath +\n 'VidyoClientForWeb-macosx-x64-' +\n chromeNMSFileNameVersion +\n '.pkg';\n }\n\n if (this.installComponent === 'Chrome Extension') {\n configTitle =\n 'Next, we need to also install the VidyoWeb plugin for Chrome.';\n configTitleClass = 'chromeNMS-extension-was-installed-title';\n } else {\n configTitle =\n 'Looks like we need to install some software for your web browser to connect your video call';\n configTitleClass = 'chromeNMS-extension-was-present-title';\n }\n\n const cancelButton = document.createElement('button');\n cancelButton.className = 'btn btn-danger cancelButton';\n cancelButton.addEventListener(\n 'click',\n () => {\n const chromeStoreWindowName = window.localStorage.getItem(\n 'chromeStoreWindow'\n );\n const chromeStoreWindow = window.open('', chromeStoreWindowName);\n window.localStorage.clear();\n this.close();\n if (chromeStoreWindow) {\n chromeStoreWindow.close();\n }\n },\n false\n );\n\n const footerButtons = [cancelButton];\n\n const chromeInstallNmsConfig = {\n titleclass: configTitleClass,\n installButtonClass: 'chromeinstallNMS-button',\n installButtonType: 'a',\n installButtonLink: downloadLink,\n footerButtons: footerButtons,\n };\n this.installModal(chromeInstallNmsConfig);\n }\n\n installNpApiPluginModal(\n mimePluginVersion: string,\n os: string,\n callback: Function\n ) {\n let downloadLink = '';\n\n if (os === 'Windows') {\n downloadLink =\n this.InstallersPath + 'VidyoWeb-win32-' + mimePluginVersion + '.msi';\n } else if (os === 'OS X') {\n downloadLink =\n this.InstallersPath +\n 'VidyoWeb-macosx-x64-' +\n mimePluginVersion +\n '.pkg';\n }\n\n const cancelButton = document.createElement('button');\n cancelButton.className = 'btn btn-danger cancelButton';\n cancelButton.addEventListener(\n 'click',\n () => {\n window.localStorage.clear();\n this.close();\n },\n false\n );\n\n const footerButtons = [cancelButton];\n\n const pluginConfig = {\n titleclass: 'npapiinstall-title',\n installButtonClass: 'npapiinstall-button',\n installButtonType: 'a',\n installButtonLink: downloadLink,\n footerButtons: footerButtons,\n };\n\n this.installModal(pluginConfig);\n }\n\n installNeoModal(cpuClass: string, callback: Function) {\n let downloadLink: string;\n const ol = document.createElement('ol');\n let innerHtml = '';\n\n if (cpuClass === 'Win32' || cpuClass === 'x86') {\n downloadLink = this.InstallersPath + 'VidyoNeoInstaller-win32.exe';\n } else if (cpuClass === 'Win64' || cpuClass === 'x64') {\n downloadLink = this.InstallersPath + 'VidyoNeoInstaller-win64.exe';\n } else {\n this.noOsSupportedModal(null);\n return;\n }\n\n const okButton = document.createElement('button');\n okButton.className = 'btn btn-primary okButton';\n okButton.addEventListener(\n 'click',\n () => {\n window.localStorage.setItem('useNeoVidyo', 'true');\n this.doCallback(callback);\n },\n false\n );\n okButton.disabled = true;\n\n const cancelButton = document.createElement('button');\n cancelButton.className = 'btn btn-danger cancelButton';\n cancelButton.addEventListener(\n 'click',\n () => {\n this.close();\n },\n false\n );\n\n const footerButtons = [okButton, cancelButton];\n\n const installButtonListener = () => {\n this.elementEnableDisable(okButton);\n };\n\n for (let i = 0; i < 3; i++) {\n innerHtml =\n innerHtml + `
  • `;\n }\n\n ol.innerHTML = innerHtml;\n\n const neoConfig = {\n titleclass: 'neoinstall-title',\n hasCloseButton: false,\n installButtonClass: 'neoinstall-button',\n installButtonType: 'a',\n installButtonLink: downloadLink,\n installButtonListener: installButtonListener,\n innerHtml: ol.outerHTML,\n footerButtons: footerButtons,\n };\n\n this.installModal(neoConfig);\n }\n\n noOsSupportedModal(callback?: Function) {\n const noOsDiv =\n \"Unfortunately, it appears we can't provide video at this time for your browser and operating system.\";\n\n const cancelButton = document.createElement('button');\n cancelButton.className = 'btn btn-danger cancelButton';\n cancelButton.addEventListener(\n 'click',\n () => {\n this.close();\n },\n false\n );\n\n const footerButtons = [cancelButton];\n\n const pluginConfig = {\n titleclass: 'noOSSupported-title',\n innerHtml: noOsDiv,\n hasCloseButton: false,\n footerButtons: footerButtons,\n };\n\n this.htmlModal(pluginConfig);\n this.show();\n }\n\n noConferencingAvailable(callback?: Function) {\n const noConfAvailableDiv = document.createElement('div');\n noConfAvailableDiv.id = 'noConfAvailableDiv';\n\n const cancelButton = document.createElement('button');\n cancelButton.className = 'btn btn-danger cancelButton';\n cancelButton.addEventListener(\n 'click',\n () => {\n this.close();\n },\n false\n );\n\n const footerButtons = [cancelButton];\n\n const pluginConfig = {\n titleclass: 'noConfAvailableDiv-title',\n bodyElement: noConfAvailableDiv,\n hasCloseButton: false,\n footerButtons: footerButtons,\n };\n\n this.htmlModal(pluginConfig);\n this.show();\n }\n\n checkingSoftwareModal(callback: Function) {\n const checkSoftwareDiv = `
    \n
    \n
    `;\n\n const checkSoftwareConfig = {\n titleclass: 'checkSoftware-tital',\n innerHtml: checkSoftwareDiv,\n progressbar: true,\n };\n\n this.htmlModal(checkSoftwareConfig);\n this.show();\n this.runProgressBar();\n setTimeout(() => {\n this.doCallback(callback);\n }, 3000);\n }\n\n acdWaitModal(isRickAstley, framesrc, callback: Function) {\n const acdwaitDiv = document.createElement('div');\n let titleclass = 'acdwait-title';\n acdwaitDiv.className = 'youtube-container';\n acdwaitDiv.id = 'acdWaitDiv';\n if (isRickAstley) {\n framesrc =\n 'https://www.youtube.com/embed/dQw4w9WgXcQ?autoplay=1&rel=0&loop=1';\n titleclass = 'rickroll-title';\n }\n acdwaitDiv.innerHTML = `
    \n

    \n \n
    \n `;\n\n const acdwaitConfig = {\n bodyElement: acdwaitDiv,\n fullmodal: true,\n };\n this.htmlModal(acdwaitConfig);\n this.show();\n const abandonButton = document.getElementById('btnAcdAbandon');\n abandonButton.addEventListener(\n 'click',\n () => {\n this.close();\n Start.customerHasAbandoned = true;\n },\n false\n );\n }\n\n installModal(config: any, callback?: Function) {\n const conf = config || {};\n const installDiv = document.createElement('div');\n const installButtonDiv = document.createElement('div');\n const installBodyDiv = document.createElement('div');\n const ol = document.createElement('ol');\n let installButton: HTMLAnchorElement | HTMLButtonElement;\n let innerHtml = '';\n let footerButtons;\n\n if (conf.installButtonType === 'a') {\n installButton = document.createElement('a');\n installButton.href = conf.installButtonLink;\n installButton.className = 'btn btn-primary ' + conf.installButtonClass;\n if (conf.installButtonListener) {\n installButton.addEventListener(\n 'click',\n conf.installButtonListener.bind(this)\n );\n }\n } else {\n installButton = document.createElement('button');\n installButton.onclick = conf.installButtonOnClick.bind(this);\n installButton.className = 'btn btn-primary ' + conf.installButtonClass;\n }\n\n if (conf.isChromeExtensionInstall) {\n for (let i = 0; i < 5; i++) {\n innerHtml =\n innerHtml +\n `
  • `;\n }\n } else if (conf.innerHtml) {\n innerHtml = conf.innerHtml;\n } else {\n for (let i = 0; i < 3; i++) {\n innerHtml =\n innerHtml + `
  • `;\n }\n }\n\n installButtonDiv.className = 'install-button';\n installBodyDiv.className = 'install-instructions';\n ol.innerHTML = innerHtml;\n\n installButtonDiv.appendChild(installButton);\n installBodyDiv.appendChild(ol);\n installDiv.appendChild(installButtonDiv);\n installDiv.appendChild(installBodyDiv);\n\n const installModalConfig = {\n titleclass: conf.titleclass,\n bodyElement: installDiv,\n };\n\n if (Array.isArray(conf.footerButtons)) {\n footerButtons = conf.footerButtons;\n installModalConfig.footerButtons = footerButtons;\n }\n\n this.htmlModal(installModalConfig);\n\n this.show();\n this.doCallback(callback);\n }\n\n vidyoConferenceModal(vidyoMain: VidyoMain, callback?: Function) {\n const vidyoConferenceDiv = document.createElement('div');\n const logo = this.makeCustomLogo();\n\n vidyoConferenceDiv.id = 'webRTCConferenceDiv';\n vidyoConferenceDiv.innerHTML =\n `

    Your video conference request has been received, your conference will begin in a moment.

    \n
    \n
    \n
    \n \n
    \n
    \n ${logo}\n ${logo}\n
    ` +\n this.makeConferenceFooter() +\n '
    ';\n\n const vidyoConferenceConfig = {\n bodyElement: vidyoConferenceDiv,\n fullmodal: true,\n };\n\n this.htmlModal(vidyoConferenceConfig);\n this.currentModal.style.display = 'none';\n\n this.show();\n const cameraButton = document.getElementById('camera_toggle');\n const micButton = document.getElementById('microphone_toggle');\n const speakerButton = document.getElementById('speaker_toggle');\n const disconnectButton = document.getElementById('disconnect_toggle');\n const shareSelect = document.getElementById('share_select');\n cameraButton.addEventListener(\n 'click',\n vidyoMain.toggleConferenceButton.bind(vidyoMain)\n );\n micButton.addEventListener(\n 'click',\n vidyoMain.toggleConferenceButton.bind(vidyoMain)\n );\n speakerButton.addEventListener(\n 'click',\n vidyoMain.toggleConferenceButton.bind(vidyoMain)\n );\n shareSelect.addEventListener(\n 'mouseenter',\n vidyoMain.updateShareList.bind(vidyoMain)\n );\n shareSelect.addEventListener(\n 'change',\n vidyoMain.shareChanged.bind(vidyoMain)\n );\n disconnectButton.addEventListener(\n 'click',\n vidyoMain.sendLeaveEvent.bind(vidyoMain)\n );\n }\n\n webRTCConferenceModal(vidyoMain: VidyoMain, callback?: Function) {\n const webRTCConferenceDiv = document.createElement('div');\n const logo = this.makeCustomLogo();\n\n webRTCConferenceDiv.id = 'webRTCConferenceDiv';\n webRTCConferenceDiv.innerHTML =\n `

    Your video conference request has been received, your conference will begin in a moment.

    \n \n
    \n\n \n
    \n
    \n \n
    \n\n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n ${logo}\n \n ${logo}\n
    ` +\n this.makeConferenceFooter() +\n '
    ';\n\n const webRTCConferenceConfig = {\n bodyElement: webRTCConferenceDiv,\n fullmodal: true,\n };\n\n this.htmlModal(webRTCConferenceConfig);\n this.currentModal.style.display = 'none';\n\n this.show();\n const cameraButton = document.getElementById('camera_toggle');\n const micButton = document.getElementById('microphone_toggle');\n const speakerButton = document.getElementById('speaker_toggle');\n const disconnectButton = document.getElementById('disconnect_toggle');\n const shareButton = document.getElementById('share_toggle');\n cameraButton.addEventListener(\n 'click',\n vidyoMain.toggleConferenceButton.bind(vidyoMain)\n );\n micButton.addEventListener(\n 'click',\n vidyoMain.toggleConferenceButton.bind(vidyoMain)\n );\n speakerButton.addEventListener(\n 'click',\n vidyoMain.toggleConferenceButton.bind(vidyoMain)\n );\n shareButton.addEventListener(\n 'click',\n vidyoMain.toggleConferenceButton.bind(vidyoMain)\n );\n disconnectButton.addEventListener(\n 'click',\n vidyoMain.sendLeaveEvent.bind(vidyoMain)\n );\n }\n\n makeConferenceFooter() {\n let shareElement;\n if (\n this.UseWebRTC &&\n this.isWebRTCCapable &&\n this.vidyoDetection.isWebRTCAvailable\n ) {\n shareElement = `
    \n \n \n
    `;\n } else {\n shareElement = `
    \n \n
    `;\n }\n const conferenceFooter = `
    \n
    \n ${shareElement}\n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    `;\n\n return conferenceFooter;\n }\n\n makeCustomLogo() {\n let logo;\n let logoDisplay = '';\n let logosrc;\n if (this.CustomerLogo === null) {\n logoDisplay = `display=\"none\"`;\n logosrc = '';\n } else {\n logosrc = this.ImagePath + this.CustomerLogo;\n }\n\n logo = `
    `;\n return logo;\n }\n\n mobileLaunchModal(vidyoMobileUrl: string, mobileOS: string) {\n console.log('Launching mobile modal for OS: ' + mobileOS);\n const mobileLaunchDiv = document.createElement('div');\n const joinButtonTextDiv = document.createElement('div');\n const joinButtonDiv = document.createElement('div');\n const joinButton = document.createElement('button');\n const installButtonDiv = document.createElement('div');\n const installButtonTextDiv = document.createElement('div');\n const installButtonTextNode = document.createTextNode('For iOS');\n const installOSXButtonTextNode = document.createTextNode('For OSX');\n const installButton = document.createElement('button');\n const installOSXButtonDiv = document.createElement('div');\n const installOSXButtonTextDiv = document.createElement('div');\n const installOSXButton = document.createElement('button');\n let installUrl: string;\n let installOSXUrl: string;\n\n if (this.MobileClient.toLowerCase() === 'vidyoconnect') {\n joinButtonTextDiv.id = 'vidyoConnectjoinButtonTextDiv';\n installButtonTextDiv.id = 'vidyoConnectinstallButtonTextDiv';\n installOSXButtonTextDiv.id = 'vidyoConnectinstallOSXButtonTextDiv';\n } else {\n joinButtonTextDiv.id = 'vidyoMobilejoinButtonTextDiv';\n installButtonTextDiv.id = 'vidyoMobileinstallButtonTextDiv';\n }\n\n mobileLaunchDiv.id = 'mobileLaunchDiv';\n joinButtonDiv.id = 'mobilejoinButtonDiv';\n joinButton.id = 'mobilejoinButton';\n joinButton.className =\n 'btn btn-primary btn-lg center-block mobilejoinButton';\n\n installButtonDiv.id = 'mobileinstallButtonDiv';\n if (mobileOS === 'Android') {\n installButton.id = 'androidInstallButton';\n installButton.style.backgroundImage =\n \"url('\" + this.ImagePath + \"android_download.png')\";\n installUrl = this.AndroidInstallLink;\n }\n if (mobileOS === 'iOS') {\n installButton.id = 'iOSInstallButton';\n installButton.style.backgroundImage =\n \"url('\" + this.ImagePath + \"ios_download.svg')\";\n installUrl = this.IOSInstallLink;\n }\n if (mobileOS === 'OS X') {\n /* When a browser is running in Desktop mode on a mobile device,\n we can't tell. So if we see OS X, the browser may be running on either\n desktop or mobile. Therefore, show install buttons for iOS and OSX, and\n let the user select the correct install for the OS they are actually\n running on. */\n installButtonDiv.id = 'iOSInstallButtonDiv';\n installButton.id = 'iOSInstallButton';\n installButton.style.backgroundImage =\n \"url('\" + this.ImagePath + \"ios_download.svg')\";\n installUrl = this.IOSInstallLink;\n installOSXButtonDiv.id = 'OSXInstallButtonDiv';\n installOSXButton.id = 'OSXInstallButton';\n installOSXButton.style.backgroundImage =\n \"url('\" + this.ImagePath + \"cloud_download-24px.svg')\";\n installOSXUrl =\n this.config.InstallersPath + 'VidyoConnectInstaller-macosx.dmg';\n }\n installButton.className = 'btn btn-primary center-block';\n installOSXButton.className = 'btn btn-primary center-block';\n\n joinButton.addEventListener('click', () => {\n // window.open(vidyoMobileUrl);\n this.closeMobile();\n window.location.href = vidyoMobileUrl;\n });\n installButton.addEventListener('click', () => {\n // window.open(installUrl);\n window.location.href = installUrl;\n });\n installOSXButton.addEventListener('click', () => {\n // window.open(installUrl);\n window.location.href = installOSXUrl;\n });\n\n const cancelButton = document.createElement('button');\n cancelButton.className = 'btn btn-danger cancelButton';\n cancelButton.addEventListener(\n 'click',\n () => {\n this.closeMobile();\n },\n false\n );\n\n const footerButtons = [cancelButton];\n\n if (mobileOS === 'iOS' || mobileOS === 'Android' || mobileOS === 'OS X') {\n joinButtonDiv.appendChild(joinButton);\n if (mobileOS === 'iOS' || mobileOS === 'OS X') {\n installButtonDiv.appendChild(installButtonTextNode);\n }\n installButtonDiv.appendChild(installButton);\n mobileLaunchDiv.appendChild(joinButtonTextDiv);\n mobileLaunchDiv.appendChild(joinButtonDiv);\n mobileLaunchDiv.appendChild(installButtonTextDiv);\n mobileLaunchDiv.appendChild(installButtonDiv);\n if (mobileOS === 'OS X') {\n installOSXButtonDiv.appendChild(installOSXButtonTextNode);\n installOSXButtonDiv.appendChild(installOSXButton);\n mobileLaunchDiv.appendChild(installOSXButtonTextDiv);\n mobileLaunchDiv.appendChild(installOSXButtonDiv);\n }\n } else {\n // Should never get here, as we detect whether we support their device prior to this\n // However, should have fallback just in case we get here somehow when we shouldn't\n // Give them a button to click to close out the modal(s)\n // TODO: Provide a button to invoke a tel://, so they can place a regular call\n mobileLaunchDiv.innerHTML = `
    \n We're sorry, but we currently don't support your device for video.\n /* */\n
    `;\n }\n\n const mobileLaunchConfig = {\n titleclass: 'mobilelaunch-title',\n bodyElement: mobileLaunchDiv,\n fullmodal: false,\n hasCloseButton: false,\n footerButtons: footerButtons,\n };\n\n this.htmlModal(mobileLaunchConfig);\n this.show();\n }\n\n cameraNotReadyModal(callbackForCancel?: Function) {\n const cameraNotReadyDiv = document.createElement('div');\n cameraNotReadyDiv.id = 'cameraNotReadyDiv';\n const cancelButton = document.createElement('button');\n cancelButton.className = 'btn btn-danger cancelButton';\n cancelButton.addEventListener(\n 'click',\n () => {\n this.close();\n if (callbackForCancel) {\n this.doCallback(callbackForCancel);\n }\n },\n false\n );\n\n const footerButtons = [cancelButton];\n\n const cameraNotReadyConfig = {\n titleclass: 'cameraNotReady-title',\n bodyElement: cameraNotReadyDiv,\n hasCloseButton: false,\n footerButtons: footerButtons,\n };\n\n this.htmlModal(cameraNotReadyConfig);\n this.show();\n }\n\n show() {\n // insert modal in web page body\n document.body.appendChild(this.currentModal);\n // Mobile modals are positioned in upper-left corner\n // Automatically scroll to top-left, so that modal is visible on all devices\n window.scrollTo(0, 0);\n }\n\n close() {\n if (this.currentModal) {\n document.body.removeChild(this.currentModal);\n this.currentModal = undefined;\n }\n }\n\n closeMobile() {\n if (this.currentModal) {\n document.body.removeChild(this.currentModal);\n this.currentModal = undefined;\n }\n const modals = document.getElementsByTagName('adapt-modal');\n for (let index = 0; index < modals.length; index++) {\n const modal = modals[index];\n document.body.removeChild(modal);\n }\n const fullmodals = document.getElementsByTagName('adapt-fullmodal');\n for (let index = 0; index < fullmodals.length; index++) {\n const fullmodal = fullmodals[index];\n document.body.removeChild(fullmodal);\n }\n }\n\n elementEnableDisable(element: any) {\n if (element.disabled) {\n element.disabled = !element.disabled;\n }\n }\n\n runProgressBar() {\n const progressBar = (\n this.currentModal.getElementsByClassName('progress-bar')[0]\n );\n let width = 1;\n const id = setInterval(frame, 10);\n\n function frame() {\n if (width >= 100) {\n clearInterval(id);\n } else {\n width++;\n progressBar.style.width = width + '%';\n }\n }\n }\n }\n}\n","/**\n * SmartVideo Start class\n * This class is used to start or join video conferences\n * It is responsible for getting configuration information,\n * driving install modals for Vidyo software if needed,\n * and communicating with the Smart Video server for various\n * conference related operations (request/check room created,\n * signal customer connected, signal leave conference)\n */\nnamespace SmartVideo {\n interface IOptions {\n config?: ISmartVideoConfig;\n configPath?: string;\n modal?: IMakeModal;\n vidyoDetection?: IVidyoDetection;\n jumpToModal?: string;\n }\n\n export class Start {\n static customerHasAbandoned: boolean;\n vidyoDetection: IVidyoDetection;\n modal: IMakeModal;\n vidyoMain: VidyoMain;\n Workgroups: Object;\n WorkgroupAttributes: any;\n GlobalAttributes: any;\n customerName: string;\n SVSIntegrationServiceUrl: string;\n ACDWaitVideoUrl: string;\n ChromeExtensionUrl: string;\n VidyoClientForWebChromeExtensionUrl: string;\n VidyoWebRTCScreenShareChromeExtensionUrl: string;\n VidyoClientForWebVersion: string;\n VidyoWebVersion: string;\n WebRTCSessionManager: string;\n isJoinRequest: boolean;\n isConfigLoaded: boolean;\n doSoftwareCheck: boolean;\n isCheckingCamera: boolean;\n isCheckingSoftware: boolean;\n isCameraCheckCancelled: boolean;\n isSmartVideoAvailable: boolean;\n UseWebRTC: boolean;\n configLoadFunction: number;\n cameraCheckFunction: number;\n options: IOptions;\n config: ISmartVideoConfig;\n smartVideoAjaxRoutes: any[];\n customerlocation: string;\n\n constructor(options: IOptions) {\n this.isConfigLoaded = false;\n this.isJoinRequest = false;\n this.configLoadFunction = null;\n this.cameraCheckFunction = null;\n this.doSoftwareCheck = true;\n this.isCheckingCamera = false;\n this.isCameraCheckCancelled = false;\n this.isCheckingSoftware = false;\n this.isSmartVideoAvailable = false;\n this.options = null;\n this.vidyoMain = null;\n const that = this;\n this.smartVideoAjaxRoutes = [{}];\n this.customerlocation = '';\n\n if (options) {\n this.options = options;\n // Check if config is undefined. If undefined, this means the config file needs to be dynamically loaded\n if (!options.config) {\n if (options.configPath) {\n this.loadVariablesFromJSONFile(options.configPath);\n } else {\n this.loadVariablesFromJSONFile('./scripts/');\n }\n } else {\n this.isConfigLoaded = true;\n this.config = options.config;\n console.log(\n 'Configuration was passed into SmartVideo constructor: ' +\n JSON.stringify(options.config)\n );\n // Config was either passed in or dynamic load was done previously\n this.loadExistingConfigVariables();\n }\n if (options.modal) {\n this.modal = options.modal;\n } else {\n this.modal = new MakeModal();\n }\n if (options.vidyoDetection) {\n this.vidyoDetection = options.vidyoDetection;\n } else {\n this.vidyoDetection = new VidyoDetection();\n }\n if (options.jumpToModal) {\n console.log('Jumping to modal: ' + options.jumpToModal);\n const fn = this[options.jumpToModal].bind(this);\n console.log(fn);\n if (typeof fn === 'function') {\n console.log('Invoking: ' + options.jumpToModal);\n fn();\n }\n }\n } else {\n this.loadVariablesFromJSONFile('./scripts/');\n this.modal = new MakeModal();\n this.vidyoDetection = new VidyoDetection();\n }\n\n // Detect location in URL, which can be prepended to the customer's name\n const urlParams = new URLSearchParams(window.location.search);\n const mylocation = urlParams.get('mylocation');\n if (mylocation) {\n this.customerlocation = mylocation;\n }\n\n /*\n installComponent would still have a value in it if the page reloaded\n prior to everything being installed. This is expected when\n the VidyoClientForWeb Chrome Extension is being installed, because it\n won't be recognized as installed until the page is refreshed.\n This is because Vidyo didn't put logic into the extension to inject an HTML element when background.js\n loads (background.js loads/executes as soon as extension is installed)\n */\n if (window.localStorage.getItem('installComponent') !== null) {\n // Check whether install was launched from a request for a new video call, or launched from a join (agent popup, guest link)\n const requestOrJoin = window.localStorage.getItem('RequestOrJoin');\n if (requestOrJoin !== null) {\n if (requestOrJoin === 'Request') {\n // Give the extension time to load after page reload\n setTimeout(function() {\n that.requestVidyoCall();\n }, 3000);\n } else {\n setTimeout(function() {\n that.joinVidyoCall();\n }, 3000);\n }\n }\n }\n }\n\n // Object extend\n extend(objectToExtend: any, jsonObjects: Array) {\n objectToExtend = objectToExtend || {};\n for (let i = 0; i < jsonObjects.length; i++) {\n if (!jsonObjects[i]) {\n continue;\n }\n\n for (const key in jsonObjects[i]) {\n if (jsonObjects[i].hasOwnProperty(key)) {\n objectToExtend[key] = jsonObjects[i][key];\n }\n }\n }\n return objectToExtend;\n }\n\n loadVariablesFromJSONFile(configPath: string) {\n const ajaxUrl = configPath + 'SmartVideoConfig.json';\n const that = this;\n let config = null;\n Ajax.ajaxSendRequest(ajaxUrl, 'GET', null, function(e: Event) {\n if (e) {\n const xhr = e.target;\n if (xhr.responseType === 'json') {\n config = xhr.response;\n } else {\n // Strip comments out of JSON, as JSON doesn't allow comments\n config = xhr.responseText.replace(\n /\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/gm,\n '$1'\n );\n config = JSON.parse(config);\n }\n if (config !== null) {\n that.extend(that, [config]);\n that.config = config;\n that.isConfigLoaded = true;\n if (that.UseWebRTC) {\n that.ChromeExtensionUrl =\n that.VidyoWebRTCScreenShareChromeExtensionUrl;\n } else {\n that.ChromeExtensionUrl =\n that.VidyoClientForWebChromeExtensionUrl;\n }\n console.log('Received config from AJAX: ' + JSON.stringify(config));\n that.getAjaxRoutes();\n } else {\n console.log(\n 'AJAX request for JSON config returned successfully, but xhr.response was null'\n );\n }\n } else {\n console.log('Failed to get JSON from config file');\n }\n });\n }\n\n loadExistingConfigVariables() {\n this.extend(this, [this.config]);\n // Set the Chrome extension URL based on whether we are using WebRTC or not\n if (this.UseWebRTC) {\n this.ChromeExtensionUrl = this.VidyoWebRTCScreenShareChromeExtensionUrl;\n } else {\n this.ChromeExtensionUrl = this.VidyoClientForWebChromeExtensionUrl;\n }\n this.getAjaxRoutes();\n }\n\n getAjaxRoutes() {\n /*Get AJAX route info. Route info allows us to determine what routes to use when working with different versions\n of Smart Video server*/\n const url =\n this.SVSIntegrationServiceUrl + '/ininvid/v1/coreservice/info/routes';\n Ajax.ajaxSendRequest(\n url,\n 'GET',\n '',\n this.setAjaxRoutes.bind(this),\n 'json'\n );\n }\n\n setAjaxRoutes(e: Event) {\n let data = null;\n if (e) {\n const xhr = e.target;\n if (e.type && e.type === 'error') {\n this.isSmartVideoAvailable = false;\n return;\n }\n try {\n if (xhr.responseType === 'json') {\n data = xhr.response;\n } else {\n data = JSON.parse(xhr.responseText);\n }\n if (data !== null) {\n this.smartVideoAjaxRoutes = data[0].routes;\n this.isSmartVideoAvailable = true;\n } else {\n this.isSmartVideoAvailable = false;\n }\n } catch (error) {\n this.isSmartVideoAvailable = false;\n }\n }\n }\n\n hasAjaxRoute(routeToCheck: string): boolean {\n for (let index = 0; index < this.smartVideoAjaxRoutes.length; index++) {\n const route = this.smartVideoAjaxRoutes[index];\n if (route.path === routeToCheck) {\n return true;\n }\n }\n return false;\n }\n\n requestVidyoCall(\n workgroups?: Object,\n workgroupAttributes?: any,\n globalAttributes?: any\n ) {\n if (workgroups) {\n this.Workgroups = workgroups;\n }\n if (workgroupAttributes) {\n this.WorkgroupAttributes = workgroupAttributes;\n }\n if (globalAttributes) {\n this.GlobalAttributes = globalAttributes;\n }\n // Make sure we have config before starting\n if (this.isConfigLoaded) {\n if (this.configLoadFunction !== null) {\n // clearInterval(this.configLoadFunction);\n this.configLoadFunction = null;\n console.log('Config check interval cleared');\n }\n this.vidyoDetection.init(this.config);\n this.modal.init(this.config, this.vidyoDetection);\n window.localStorage.setItem('RequestOrJoin', 'Request');\n this.checkSoftware();\n }\n if (!this.isConfigLoaded && this.configLoadFunction === null) {\n console.log('Config checked interval started');\n this.configLoadFunction = setTimeout(\n this.requestVidyoCall.bind(this),\n 1000\n );\n } else if (!this.isConfigLoaded) {\n console.log('Config not yet received, rechecking in 1 second');\n this.configLoadFunction = setTimeout(\n this.requestVidyoCall.bind(this),\n 1000\n );\n }\n }\n\n joinVidyoCall(bypassSoftwareCheck?: boolean) {\n this.isJoinRequest = true;\n if (bypassSoftwareCheck) {\n this.doSoftwareCheck = false;\n }\n if (this.isConfigLoaded) {\n if (this.configLoadFunction !== null) {\n // clearInterval(this.configLoadFunction);\n this.configLoadFunction = null;\n console.log('Config check interval cleared');\n }\n this.vidyoDetection.init(this.config);\n this.modal.init(this.config, this.vidyoDetection);\n window.localStorage.setItem('RequestOrJoin', 'Join');\n console.log('joinVidyoCall invoked, now checking software');\n this.checkSoftware();\n }\n if (!this.isConfigLoaded && this.configLoadFunction === null) {\n console.log('Config checked interval started');\n this.configLoadFunction = setTimeout(\n this.joinVidyoCall.bind(this),\n 1000\n );\n } else if (!this.isConfigLoaded) {\n console.log('Config not yet received, rechecking in 1 second');\n this.configLoadFunction = setTimeout(\n this.requestVidyoCall.bind(this),\n 1000\n );\n }\n }\n\n checkCamera() {\n // console.log(\"Performing camera check\");\n if (this.isCameraCheckCancelled) {\n clearInterval(this.cameraCheckFunction);\n this.cameraCheckFunction = null;\n this.isCheckingCamera = false;\n this.isCameraCheckCancelled = false;\n return;\n }\n\n if (!this.vidyoDetection.isMobile) {\n if (!this.vidyoDetection.isCameraReady) {\n if (!this.isCheckingCamera) {\n console.log('Camera not detected, invoking cameraNotReadyModal');\n this.modal.cameraNotReadyModal(this.cancelCameraCheck.bind(this));\n clearInterval(this.cameraCheckFunction);\n this.cameraCheckFunction = setInterval(\n this.checkCamera.bind(this),\n 1000\n );\n this.isCheckingCamera = true;\n // Clear checking software modal flag once we get here\n this.isCheckingSoftware = false;\n }\n } else {\n clearInterval(this.cameraCheckFunction);\n this.cameraCheckFunction = null;\n this.isCheckingCamera = false;\n // Clear checking software modal flag once we get here\n this.isCheckingSoftware = false;\n this.checkVidyo();\n }\n }\n }\n\n cancelCameraCheck() {\n this.isCameraCheckCancelled = true;\n }\n\n checkSoftware() {\n if (!this.vidyoDetection.isInitialized) {\n if (this.configLoadFunction != null) {\n // clearInterval(this.configLoadFunction);\n // this.configLoadFunction = null;\n }\n this.configLoadFunction = setTimeout(\n this.checkSoftware.bind(this),\n 1000\n );\n console.log('Awaiting vidyoDetection initialization');\n return;\n } else {\n // clearInterval(this.configLoadFunction);\n this.configLoadFunction = null;\n this.vidyoDetection.checkVidyoComponents();\n }\n if (\n !this.vidyoDetection.isMobile &&\n !this.vidyoDetection.isSmartVideoAgent &&\n this.doSoftwareCheck\n ) {\n if (!this.isCheckingSoftware) {\n this.modal.checkingSoftwareModal(this.checkCamera.bind(this));\n this.isCheckingSoftware = true;\n }\n } else {\n this.checkVidyo();\n }\n }\n\n checkVidyo() {\n if (!this.vidyoDetection.isInitialized) {\n this.configLoadFunction = setTimeout(this.checkVidyo.bind(this), 1000);\n return;\n } else {\n // clearInterval(this.configLoadFunction);\n this.configLoadFunction = null;\n }\n\n // Check if Smart Video is available\n // If not, then show noConferencingAvailable modal and return\n\n if (!this.isSmartVideoAvailable) {\n this.modal.noConferencingAvailable();\n return;\n }\n\n let haveVidyo = false;\n if (\n (this.vidyoDetection.isInstalled && this.vidyoDetection.isBrowserSupported) ||\n (this.vidyoDetection.isMobile && this.vidyoDetection.isOsSupported)\n ) {\n haveVidyo = true;\n }\n if (!this.doSoftwareCheck) {\n haveVidyo = true;\n }\n\n console.log('HaveVidyo: ' + haveVidyo);\n console.log('isMobile: ' + this.vidyoDetection.isMobile);\n console.log('isOsSupported: ' + this.vidyoDetection.isOsSupported);\n console.log('isInstalled: ' + this.vidyoDetection.isInstalled);\n console.log('isBrowserSupported: ', + this.vidyoDetection.isBrowserSupported)\n console.log('isWebRTCAvailable: ' + this.vidyoDetection.isWebRTCAvailable);\n console.log('browser: ' + this.vidyoDetection.browserReport.browser.name);\n\n if (haveVidyo) {\n console.log('Vidyo available');\n window.localStorage.removeItem('installComponent');\n if (this.isJoinRequest) {\n this.startVidyo(window.location.href);\n } else {\n this.modal.welcomeModal(\n this.Workgroups,\n this.vidyoDetection.isInstalled,\n this.initVidyoConversation.bind(this)\n );\n }\n return;\n } else if (this.vidyoDetection.isChrome || this.vidyoDetection.isOpera) {\n // We check if browser is supported, because Chrome can run on multiple OS's\n // If not using WebRTC and not using Windoows, then Chrome can't be supported\n if (this.vidyoDetection.isBrowserSupported) {\n console.log(\n 'Vidyo not available, now starting chrome extension install'\n );\n this.installChromeExtension();\n } else {\n if (\n this.UseWebRTC &&\n !this.vidyoDetection.isWebRTCAvailable &&\n this.vidyoDetection.isOsSupported\n ) {\n this.modal.noConferencingAvailable();\n console.log(\n 'Vidyo not available due to not receiving response from WebRTC session manager'\n );\n return;\n } else {\n this.modal.noOsSupportedModal();\n return;\n }\n }\n } else if (this.vidyoDetection.isFireFox) {\n if (\n this.UseWebRTC &&\n !this.vidyoDetection.isWebRTCAvailable &&\n this.vidyoDetection.isWindows\n ) {\n this.modal.noConferencingAvailable();\n console.log(\n 'Vidyo not available due to not receiving response from WebRTC session manager'\n );\n return;\n } else {\n this.modal.noOsSupportedModal();\n return;\n }\n } else if (this.vidyoDetection.isBrowserSupported) {\n console.log(\n 'Vidyo not available, now starting NPAPI plugin installation'\n );\n this.installNpApiPlugin();\n } else {\n console.log('Vidyo not available, not a supported platform');\n this.modal.noOsSupportedModal(null);\n return;\n }\n }\n\n installChromeExtension() {\n const installComponent = 'Chrome Extension';\n\n if (\n this.vidyoDetection.isChromeExtensionInstalled &&\n this.vidyoDetection.isOsSupported\n ) {\n console.log(\n 'Chrome Extension detected: ' +\n this.vidyoDetection.isChromeExtensionInstalled\n );\n if (!this.vidyoDetection.useWebRTC) {\n this.installChromeNativeMessagingHost();\n } else {\n this.installComplete();\n }\n }\n if (\n !this.vidyoDetection.isChromeExtensionInstalled &&\n (this.vidyoDetection.isChrome || this.vidyoDetection.isOpera)\n ) {\n console.log(\n 'Chrome Extension detected: ' +\n this.vidyoDetection.isChromeExtensionInstalled\n );\n this.modal.chromeInstallExtensionModal(this.ChromeExtensionUrl, null);\n let nextInstallFunction = null;\n if (!this.vidyoDetection.useWebRTC) {\n nextInstallFunction = this.installChromeNativeMessagingHost.bind(\n this\n );\n } else {\n nextInstallFunction = this.installComplete.bind(this);\n }\n\n this.vidyoDetection.checkInstallProgress(\n installComponent,\n nextInstallFunction,\n this.asyncInstallResponse.bind(this)\n );\n }\n }\n\n installChromeNativeMessagingHost() {\n if (\n !this.vidyoDetection.isChromeNativeMessagingHostInstalled &&\n this.vidyoDetection.isChrome &&\n this.vidyoDetection.isOsSupported\n ) {\n this.modal.chromeInstallNativeMessagingHostModal(\n this.VidyoClientForWebVersion,\n this.vidyoDetection.supportedOsName,\n null\n );\n const nextInstallFunction = this.installComplete.bind(this);\n const installComponent = 'Chrome Plugin';\n this.vidyoDetection.checkInstallProgress(\n installComponent,\n nextInstallFunction,\n this.asyncInstallResponse.bind(this)\n );\n }\n }\n\n installNpApiPlugin() {\n if (\n !this.vidyoDetection.isInstalled &&\n this.vidyoDetection.isOsSupported\n ) {\n this.modal.installNpApiPluginModal(\n this.VidyoWebVersion,\n this.vidyoDetection.supportedOsName,\n null\n );\n const nextInstallFunction = this.installComplete.bind(this);\n const installComponent = 'NPAPI Plugin';\n this.vidyoDetection.checkInstallProgress(\n installComponent,\n nextInstallFunction,\n this.asyncInstallResponse.bind(this)\n );\n }\n }\n\n installNeo() {\n this.modal.installNeoModal(\n this.vidyoDetection.browserReport.os.cpu,\n null\n );\n const nextInstallFunction = this.installComplete.bind(this);\n const installComponent = 'Neo';\n this.vidyoDetection.checkInstallProgress(\n installComponent,\n nextInstallFunction,\n this.asyncInstallResponse.bind(this)\n );\n }\n\n installNotAvailable() {\n this.modal.noOsSupportedModal(null);\n }\n\n installComplete() {\n window.localStorage.removeItem('installComponent');\n if (this.isJoinRequest) {\n this.startVidyo(window.location.href);\n } else {\n this.modal.welcomeModal(\n this.Workgroups,\n this.vidyoDetection.isInstalled,\n this.initVidyoConversation.bind(this)\n );\n }\n }\n\n asyncInstallResponse(response) {\n if (response.installComponent === 'Chrome Extension') {\n /*\n The VidyoWebConnector extension requires the page be reloaded, the WebRTC Screen Share extension does not.\n This is because, for some reason, Vidyo didn't inject any HTML in the web page with VidyoWebConnector extension,\n but did with Screen Share extension.\n It is standard for extension writers to inject HTML to allow javascript to detect whether extension is installed or not.\n */\n if (!this.vidyoDetection.useWebRTC) {\n window.location.reload(false);\n return;\n }\n }\n if (response.isInstalled) {\n if (response.nextInstallFunction) {\n response.nextInstallFunction();\n }\n }\n }\n\n initVidyoConversation(selectedWorkgroup: string, customerName: string) {\n const additionalAttributes = new Array();\n let remoteNameTemplateFound = false;\n this.customerName = customerName;\n\n if (this.GlobalAttributes) {\n const attributeNames = Object.keys(this.GlobalAttributes);\n\n attributeNames.forEach(attributeName => {\n const attributeValue = this.GlobalAttributes[attributeName];\n const tempAttribute = {};\n tempAttribute.key = attributeName;\n tempAttribute.value = attributeValue;\n additionalAttributes.push(tempAttribute);\n });\n }\n\n if (this.WorkgroupAttributes) {\n if (additionalAttributes.length > 0) {\n const workgroups = Object.keys(this.WorkgroupAttributes);\n workgroups.forEach(workgroup => {\n if (selectedWorkgroup === workgroup) {\n const workgroupAttributes = this.WorkgroupAttributes[workgroup];\n const workgroupAttributeNames = Object.keys(workgroupAttributes);\n workgroupAttributeNames.forEach(WorkgroupAttributeName => {\n const attributeValue = this.WorkgroupAttributes[workgroup][\n WorkgroupAttributeName\n ];\n const tempAttribute = {};\n tempAttribute.key = WorkgroupAttributeName;\n tempAttribute.value = attributeValue;\n // Check to see if a global attribute name matches workgroup attribute name. If so, override the global\n additionalAttributes.forEach(additionalAttribute => {\n const keys = Object.keys(additionalAttribute);\n keys.forEach(key => {\n const additionalAttributeKey = additionalAttribute[key];\n if (additionalAttribute[key] === WorkgroupAttributeName) {\n const index = additionalAttributes.indexOf(\n additionalAttribute\n );\n if (index > -1) {\n const remove = additionalAttributes.splice(index, 1);\n }\n }\n });\n });\n additionalAttributes.push(tempAttribute);\n });\n }\n });\n } else {\n const workgroups = Object.keys(this.WorkgroupAttributes);\n workgroups.forEach(workgroup => {\n if (selectedWorkgroup === workgroup) {\n const workgroupAttributes = this.WorkgroupAttributes[workgroup];\n const workgroupAttributeNames = Object.keys(workgroupAttributes);\n workgroupAttributeNames.forEach(WorkgroupAttributeName => {\n const attributeValue = this.WorkgroupAttributes[workgroup][\n WorkgroupAttributeName\n ];\n const tempAttribute = {};\n tempAttribute.key = WorkgroupAttributeName;\n tempAttribute.value = attributeValue;\n additionalAttributes.push(tempAttribute);\n });\n }\n });\n }\n }\n\n // Check if Eic_RemoteName template defined in global/workgroups attributes\n additionalAttributes.forEach(attribute => {\n const additionalAttributeKeys = Object.keys(attribute);\n additionalAttributeKeys.forEach(key => {\n const attributeName = attribute[key];\n if (attributeName.toLocaleLowerCase() === 'eic_remotename') {\n // Append customers name to template, make attributeName Eic_RemoteName for readability/correctness\n attribute[key] = 'Eic_RemoteName';\n const attributeValue = attribute['value'];\n let tempattributeValue = `${attributeValue.trim()} ${customerName}`;\n if (this.customerlocation) {\n tempattributeValue = `${attributeValue.trim()} ${\n this.customerlocation\n } - ${customerName}`;\n }\n\n attribute['value'] = tempattributeValue;\n remoteNameTemplateFound = true;\n }\n });\n });\n\n // If Eic_RemoteName template not set in global or workgroup attributes, then add that as an addtionalAttribute now\n if (!remoteNameTemplateFound) {\n let customerNameAdditionalAttribute = {\n key: 'Eic_RemoteName',\n value: `Smart Video: ${customerName}`\n };\n if (this.customerlocation) {\n customerNameAdditionalAttribute = {\n key: 'Eic_RemoteName',\n value: `Smart Video: ${this.customerlocation} - ${customerName}`\n };\n additionalAttributes.push(customerNameAdditionalAttribute);\n }\n }\n\n // Finally, pass all the attributes on in the ajax request object\n const vidyoConversationRequest = {\n queueName: selectedWorkgroup,\n queueType: 'Workgroup',\n mediaTypeParameters: {\n mediaType: 'GenericInteraction',\n initialState: 'Offering',\n additionalAttributes: additionalAttributes\n },\n isCustomerRequest: true\n };\n\n const lowerCaseCustomerName = customerName.toLocaleLowerCase();\n console.log(JSON.stringify(vidyoConversationRequest));\n this.ajaxSendVidyoConversationRequest(\n vidyoConversationRequest,\n this.saveVidyoSessionData.bind(this)\n );\n if (lowerCaseCustomerName === 'rick astley') {\n this.modal.acdWaitModal(true, null, null);\n } else {\n this.modal.acdWaitModal(null, this.ACDWaitVideoUrl, null);\n }\n }\n\n ajaxSendVidyoConversationRequest(request: Object, callback: Function) {\n const url = this.SVSIntegrationServiceUrl + '/ininvid/v1/conversations';\n Ajax.ajaxSendRequest(url, 'POST', request, callback);\n }\n\n saveVidyoSessionData(e: Event) {\n let dataString = null;\n if (e) {\n const xhr = e.target;\n if (xhr.responseType === 'json') {\n dataString = JSON.stringify(xhr.response);\n } else {\n dataString = xhr.responseText;\n }\n if (dataString !== null) {\n window.localStorage.setItem('VidyoSessionData', dataString);\n }\n this.checkConversationStatus(this.evalConversationStatus.bind(this));\n }\n }\n\n checkConversationStatus(callback: Function) {\n const vidyoSessionData = JSON.parse(\n window.localStorage.getItem('VidyoSessionData')\n );\n const conversationsBaseUrl =\n this.SVSIntegrationServiceUrl + '/ininvid/v1/conversations/';\n\n if (vidyoSessionData) {\n let ajaxUrl;\n if (\n !this.hasAjaxRoute(\n this.SVSIntegrationServiceUrl +\n '/ininvid/v1/conversations/interactionId/{interactionId}'\n )\n ) {\n ajaxUrl = conversationsBaseUrl + vidyoSessionData.conversationId;\n } else {\n ajaxUrl =\n conversationsBaseUrl +\n 'interactionId/' +\n vidyoSessionData.interactionId;\n }\n\n Ajax.ajaxSendRequest(ajaxUrl, 'GET', null, callback, 'json');\n }\n }\n\n evalConversationStatus(e: Event) {\n let data = null;\n if (e) {\n const xhr = e.target;\n const vidyoSessionData = JSON.parse(\n window.localStorage.getItem('VidyoSessionData')\n );\n let roomUrl = vidyoSessionData.roomUrl;\n if (xhr.status === 410) {\n /* Conversation no longer exists, interaction may have been disconnected\n before being assigned or picked up by agent*/\n console.log(\n 'Received status code 410, appears conversation no longer exists.',\n 'Interaction may have been disconnected prior to being assigned to agent.'\n );\n this.endVidyo();\n }\n if (xhr.responseType === 'json') {\n data = xhr.response;\n } else {\n data = JSON.parse(xhr.responseText);\n }\n if (\n data &&\n data.userOwner !== undefined &&\n data.userOwner !== '' &&\n data.userOwner !== null\n ) {\n // Redirect user to join url\n console.log(this.customerName);\n\n if (this.vidyoDetection.isMobile) {\n const tmpUrl = decodeURIComponent(vidyoSessionData.roomUrl);\n roomUrl = this.getMobileUrl(tmpUrl);\n console.log(roomUrl);\n // VidyoMobile requires guestname parameter as all lowercase characters\n // Since we are invoking VidyoMobile via URL, encode the guestname. VidyoMobile appears to decode correctly\n // Append \"-Customer\" so the Smart Video server can detect who initiated the conversation\n let guestNameParam = 'guestname'\n if (this.config.MobileClient.toLowerCase() === 'vidyoconnect') {\n // Using VidyoConnect, so use displayName param to pass guest name\n guestNameParam = 'dispName';\n }\n roomUrl =\n roomUrl +\n '&' + guestNameParam + '=' +\n encodeURIComponent(this.customerName) +\n '-Customer';\n } else {\n // No need to encode guestname, as we'll be passing it via SendEvent to the plugin\n // VidyoMain parses the URL for params, those params are used in SendEvent, so URL isn't used directly\n // and therefore doesn't really need to be properly encoded\n roomUrl = roomUrl + '&guestName=' + this.customerName;\n }\n this.sendCustomerConnected(data.room.roomKey);\n this.startVidyo(roomUrl);\n } else {\n console.log(data);\n if (data) {\n console.log(`Interaction is waiting on ${data.scopedQueueName}`);\n setTimeout(() => {\n if (!Start.customerHasAbandoned) {\n this.checkConversationStatus(\n this.evalConversationStatus.bind(this)\n );\n } else {\n // Customer abandoned, reset abandon flag for next call\n Start.customerHasAbandoned = false;\n this.sendDisconnect(data.room.roomKey);\n }\n }, 1000);\n }\n }\n }\n }\n\n sendCustomerConnected(roomkey: string) {\n const vidyoSessionData = JSON.parse(\n window.localStorage.getItem('VidyoSessionData')\n );\n const customerConnectedBaseUrl =\n this.SVSIntegrationServiceUrl + '/ininvid/v1/customerconnected';\n\n if (vidyoSessionData) {\n let ajaxUrl;\n if (\n !this.hasAjaxRoute(\n this.SVSIntegrationServiceUrl +\n '/ininvid/v1/customerconnected/interactionId/{interactionId}'\n )\n ) {\n ajaxUrl = customerConnectedBaseUrl;\n } else {\n ajaxUrl =\n customerConnectedBaseUrl +\n '/interactionId/' +\n vidyoSessionData.interactionId;\n }\n const request = {};\n request.RoomKey = roomkey;\n if (!this.isJoinRequest) {\n console.log(\n 'Sending customer connected request: ' + JSON.stringify(request)\n );\n Ajax.ajaxSendRequest(ajaxUrl, 'POST', request);\n }\n }\n }\n\n sendDisconnect(roomkey: string) {\n const url =\n this.config.SVSIntegrationServiceUrl + '/ininvid/v1/disconnect';\n const request = {};\n let isCustomer;\n if (this.isJoinRequest) {\n isCustomer = false;\n } else {\n isCustomer = true;\n }\n request.RoomKey = roomkey;\n request.IsCustomer = isCustomer;\n\n if (isCustomer) {\n // Send the interactionId, in case the Ajax request gets routed to a server that\n // isn't currently aware of the interaction\n const vidyoSessionData = JSON.parse(\n window.localStorage.getItem('VidyoSessionData')\n );\n request.InteractionId = vidyoSessionData.interactionId;\n }\n console.log(\n 'Sending disconnect request due to customer abandon: ' +\n JSON.stringify(request)\n );\n Ajax.ajaxSendRequest(url, 'POST', request);\n }\n\n startVidyo(url: string) {\n console.log(\n 'startVidyo(), isMoble: ' +\n this.vidyoDetection.isMobile +\n ', isOsSupported: ' +\n this.vidyoDetection.isOsSupported\n );\n if (this.vidyoDetection.isMobile && this.vidyoDetection.isOsSupported) {\n console.log(\n 'Launching for mobile, OS: ' +\n this.vidyoDetection.mobileOS +\n ', URL: ' +\n url\n );\n let roomUrl = url;\n // Mobile launcher will close modal once they join, no need to go to endVidyo() because we don't create vidyoMain\n if (this.isJoinRequest) {\n const tmpUrl = decodeURIComponent(roomUrl);\n roomUrl = this.getMobileUrl(tmpUrl);\n }\n this.modal.mobileLaunchModal(roomUrl, this.vidyoDetection.mobileOS);\n }\n if (!this.vidyoDetection.isMobile) {\n if (!this.vidyoDetection.useWebRTC) {\n if (this.vidyoMain === null) {\n this.vidyoMain = new VidyoMain(\n this.config,\n this.vidyoDetection,\n 'VidyoArea',\n 'pluginHolder',\n this.config.ImagePath\n );\n }\n this.modal.vidyoConferenceModal(this.vidyoMain);\n } else {\n if (this.vidyoMain === null) {\n this.vidyoMain = new VidyoMain(\n this.config,\n this.vidyoDetection,\n 'VidyoArea',\n 'pluginHolder',\n this.config.ImagePath,\n this.WebRTCSessionManager\n );\n }\n this.modal.webRTCConferenceModal(this.vidyoMain);\n }\n this.vidyoMain.initVidyo(\n url,\n this.isJoinRequest,\n this.endVidyo.bind(this)\n );\n }\n }\n\n endVidyo() {\n this.modal.close();\n }\n\n getMobileUrl(parseUrl: string): string {\n console.log('getMobileUrl received url argument: ' + parseUrl);\n if (\n this.config.MobileClient &&\n this.config.MobileClient === 'VidyoConnect'\n ) {\n return this.getVidyoConnectMobileUrl(parseUrl);\n }\n // comes in similar to this\n // http://vidyo1.teamadapt.com/vidyo/index.html?portalUri=\n // http://teamadapt.sandboxga2.vidyo.com/flex.html?roomdirect.html&\n // key=Lb9VCUV0zu9wxYAkgL3FuvRAT7k&key=Lb9VCUV0zu9wxYAkgL3FuvRAT7k&roomPin=727848\"\n\n const vars = [];\n let hash: string[];\n let finalUrl: string;\n const firstslice = parseUrl.slice(parseUrl.indexOf('?') + 1);\n console.log(`firstslice=${firstslice}`);\n let baseUrl = firstslice.slice(\n firstslice.indexOf('=') + 1,\n firstslice.indexOf('?')\n );\n baseUrl = baseUrl.replace(/https|http/gi, 'vidyomobile');\n baseUrl = baseUrl.replace('flex', 'mobile');\n console.log(`baseurl=${baseUrl}`);\n\n const hashes = firstslice.slice(firstslice.indexOf('?') + 1).split('&');\n console.log(hashes);\n for (let i = 0; i < hashes.length; i++) {\n hash = hashes[i].split('=');\n vars.push(hash[0]);\n vars[hash[0]] = hash[1];\n }\n finalUrl = baseUrl + '?key=' + vars['key'];\n\n if (vars['roomPin']) {\n finalUrl = finalUrl + '&pin=' + vars['roomPin'];\n }\n\n if (vars['guestName']) {\n // VidyoMobile requires guestname parameter as all lowercase characters\n finalUrl = finalUrl + '&guestname=' + vars['guestName'];\n }\n\n if (this.config.VidyoMobileSecure) {\n finalUrl = finalUrl + '&secure=yes';\n }\n\n console.log(finalUrl);\n return finalUrl;\n }\n\n getVidyoConnectMobileUrl(parseUrl: string): string {\n /* comes in similar to this\n http://vidyo1.teamadapt.com/vidyo/index.html?portalUri=\n http://teamadapt.sandboxga2.vidyo.com/flex.html?roomdirect.html&\n key=Lb9VCUV0zu9wxYAkgL3FuvRAT7k&key=Lb9VCUV0zu9wxYAkgL3FuvRAT7k&roomPin=727848\" */\n\n const vars = [];\n let hash: string[];\n let finalUrl: string;\n const firstslice = parseUrl.slice(parseUrl.indexOf('?') + 1);\n const hashes = firstslice.slice(firstslice.indexOf('?') + 1).split('&');\n console.log(hashes);\n\n for (let i = 0; i < hashes.length; i++) {\n hash = hashes[i].split('=');\n vars.push(hash[0]);\n vars[hash[0]] = hash[1];\n }\n\n console.log(`firstslice=${firstslice}`);\n let baseUrl = 'vidyo://join?portal=';\n let portalUri = vars['portalUri'] as string;\n if (portalUri && (portalUri.indexOf('/join') !== -1)) {\n portalUri = portalUri.slice(0, portalUri.indexOf('/join'));\n } else {\n portalUri = portalUri.slice(0, portalUri.indexOf('/flex'));\n }\n baseUrl = baseUrl + portalUri;\n console.log(`baseurl=${baseUrl}`);\n\n finalUrl = baseUrl + '&roomKey=' + vars['key'];\n\n if (vars['roomPin']) {\n finalUrl = finalUrl + '&roomPin=' + vars['roomPin'];\n }\n\n if (vars['guestName']) {\n finalUrl = finalUrl + '&dispName=' + vars['guestName'];\n }\n\n finalUrl = finalUrl + '&beautyScr=false&loginMod=false&welcomePage=false'\n\n console.log(finalUrl);\n return finalUrl;\n }\n\n clearUseNeoFlag() {\n window.localStorage.removeItem('useNeoVidyo');\n }\n\n isFunction(possibleFunction) {\n return typeof possibleFunction === typeof Function;\n }\n\n doCallback(possiblecallback: Function) {\n if (this.isFunction(possiblecallback)) {\n possiblecallback.call(this);\n }\n }\n\n executeFunctionByName(functionName, context /*, args */) {\n const args = [].slice.call(arguments).splice(2);\n const namespaces = functionName.split('.');\n const func = namespaces.pop();\n for (let i = 0; i < namespaces.length; i++) {\n context = context[namespaces[i]];\n }\n return context[func].apply(context, args);\n }\n\n showInstallChromeExtensionModal() {\n this.modal.chromeInstallExtensionModal(this.ChromeExtensionUrl, null);\n }\n\n showInstallChromeNativeMessagingHostModal() {\n this.modal.chromeInstallNativeMessagingHostModal(\n this.VidyoClientForWebVersion,\n 'Windows',\n null\n );\n }\n\n showInstallNpApiPluginModal() {\n this.modal.installNpApiPluginModal(this.VidyoWebVersion, 'Windows', null);\n }\n\n showcheckingSoftwareModal() {\n this.modal.checkingSoftwareModal(null);\n }\n\n showVidyoConferenceModal() {\n console.log('showVidyoConferenceModal Called');\n if (this.vidyoDetection.useWebRTC) {\n this.modal.webRTCConferenceModal(this.vidyoMain);\n } else {\n this.modal.vidyoConferenceModal(this.vidyoMain);\n }\n }\n\n showAcdWaitModal() {\n console.log('showAcdWaitModal invoked');\n this.modal.acdWaitModal(true, this.ACDWaitVideoUrl, null);\n }\n }\n}\n","(function (self) {\n 'use strict';\n\n var nativeURLSearchParams = self.URLSearchParams ? self.URLSearchParams : null,\n isSupportObjectConstructor = nativeURLSearchParams && (new nativeURLSearchParams({\n a: 1\n })).toString() === 'a=1',\n // There is a bug in safari 10.1 (and earlier) that incorrectly decodes `%2B` as an empty space and not a plus.\n decodesPlusesCorrectly = nativeURLSearchParams && (new nativeURLSearchParams('s=%2B').get('s') === '+'),\n __URLSearchParams__ = \"__URLSearchParams__\",\n prototype = URLSearchParamsPolyfill.prototype,\n iterable = !!(self.Symbol && self.Symbol.iterator);\n\n if (nativeURLSearchParams && isSupportObjectConstructor && decodesPlusesCorrectly) {\n return;\n }\n\n\n /**\n * Make a URLSearchParams instance\n *\n * @param {object|string|URLSearchParams} search\n * @constructor\n */\n function URLSearchParamsPolyfill(search) {\n search = search || \"\";\n\n // support construct object with another URLSearchParams instance\n if (search instanceof URLSearchParams || search instanceof URLSearchParamsPolyfill) {\n search = search.toString();\n }\n this[__URLSearchParams__] = parseToDict(search);\n }\n\n\n /**\n * Appends a specified key/value pair as a new search parameter.\n *\n * @param {string} name\n * @param {string} value\n */\n prototype.append = function (name, value) {\n appendTo(this[__URLSearchParams__], name, value);\n };\n\n /**\n * Deletes the given search parameter, and its associated value,\n * from the list of all search parameters.\n *\n * @param {string} name\n */\n prototype.delete = function (name) {\n delete this[__URLSearchParams__][name];\n };\n\n /**\n * Returns the first value associated to the given search parameter.\n *\n * @param {string} name\n * @returns {string|null}\n */\n prototype.get = function (name) {\n var dict = this[__URLSearchParams__];\n return name in dict ? dict[name][0] : null;\n };\n\n /**\n * Returns all the values association with a given search parameter.\n *\n * @param {string} name\n * @returns {Array}\n */\n prototype.getAll = function (name) {\n var dict = this[__URLSearchParams__];\n return name in dict ? dict[name].slice(0) : [];\n };\n\n /**\n * Returns a Boolean indicating if such a search parameter exists.\n *\n * @param {string} name\n * @returns {boolean}\n */\n prototype.has = function (name) {\n return name in this[__URLSearchParams__];\n };\n\n /**\n * Sets the value associated to a given search parameter to\n * the given value. If there were several values, delete the\n * others.\n *\n * @param {string} name\n * @param {string} value\n */\n prototype.set = function set(name, value) {\n this[__URLSearchParams__][name] = ['' + value];\n };\n\n /**\n * Returns a string containg a query string suitable for use in a URL.\n *\n * @returns {string}\n */\n prototype.toString = function () {\n var dict = this[__URLSearchParams__],\n query = [],\n i, key, name, value;\n for (key in dict) {\n name = encode(key);\n for (i = 0, value = dict[key]; i < value.length; i++) {\n query.push(name + '=' + encode(value[i]));\n }\n }\n return query.join('&');\n };\n\n // There is a bug in Safari 10.1 and `Proxy`ing it is not enough.\n var forSureUsePolyfill = !decodesPlusesCorrectly;\n var useProxy = (!forSureUsePolyfill && nativeURLSearchParams && !isSupportObjectConstructor && self.Proxy)\n /*\n * Apply polifill to global object and append other prototype into it\n */\n self.URLSearchParams = useProxy ?\n // Safari 10.0 doesn't support Proxy, so it won't extend URLSearchParams on safari 10.0\n new Proxy(nativeURLSearchParams, {\n construct: function (target, args) {\n return new target((new URLSearchParamsPolyfill(args[0]).toString()));\n }\n }) :\n URLSearchParamsPolyfill;\n\n\n var USPProto = self.URLSearchParams.prototype;\n\n USPProto.polyfill = true;\n\n /**\n *\n * @param {function} callback\n * @param {object} thisArg\n */\n USPProto.forEach = USPProto.forEach || function (callback, thisArg) {\n var dict = parseToDict(this.toString());\n Object.getOwnPropertyNames(dict).forEach(function (name) {\n dict[name].forEach(function (value) {\n callback.call(thisArg, value, name, this);\n }, this);\n }, this);\n };\n\n /**\n * Sort all name-value pairs\n */\n USPProto.sort = USPProto.sort || function () {\n var dict = parseToDict(this.toString()),\n keys = [],\n k, i, j;\n for (k in dict) {\n keys.push(k);\n }\n keys.sort();\n\n for (i = 0; i < keys.length; i++) {\n this.delete(keys[i]);\n }\n for (i = 0; i < keys.length; i++) {\n var key = keys[i],\n values = dict[key];\n for (j = 0; j < values.length; j++) {\n this.append(key, values[j]);\n }\n }\n };\n\n /**\n * Returns an iterator allowing to go through all keys of\n * the key/value pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.keys = USPProto.keys || function () {\n var items = [];\n this.forEach(function (item, name) {\n items.push([name]);\n });\n return makeIterator(items);\n };\n\n /**\n * Returns an iterator allowing to go through all values of\n * the key/value pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.values = USPProto.values || function () {\n var items = [];\n this.forEach(function (item) {\n items.push([item]);\n });\n return makeIterator(items);\n };\n\n /**\n * Returns an iterator allowing to go through all key/value\n * pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.entries = USPProto.entries || function () {\n var items = [];\n this.forEach(function (item, name) {\n items.push([name, item]);\n });\n return makeIterator(items);\n };\n\n\n if (iterable) {\n USPProto[self.Symbol.iterator] = USPProto[self.Symbol.iterator] || USPProto.entries;\n }\n\n\n function encode(str) {\n var replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'\\(\\)~]|%20|%00/g, function (match) {\n return replace[match];\n });\n }\n\n function decode(str) {\n return decodeURIComponent(str.replace(/\\+/g, ' '));\n }\n\n function makeIterator(arr) {\n var iterator = {\n next: function () {\n var value = arr.shift();\n return {\n done: value === undefined,\n value: value\n };\n }\n };\n\n if (iterable) {\n iterator[self.Symbol.iterator] = function () {\n return iterator;\n };\n }\n\n return iterator;\n }\n\n function parseToDict(search) {\n var dict = {};\n\n if (typeof search === \"object\") {\n for (var key in search) {\n if (search.hasOwnProperty(key)) {\n appendTo(dict, key, search[key])\n }\n }\n\n } else {\n // remove first '?'\n if (search.indexOf(\"?\") === 0) {\n search = search.slice(1);\n }\n\n var pairs = search.split(\"&\");\n for (var j = 0; j < pairs.length; j++) {\n var value = pairs[j],\n index = value.indexOf('=');\n\n if (-1 < index) {\n appendTo(dict, decode(value.slice(0, index)), decode(value.slice(index + 1)));\n\n } else {\n if (value) {\n appendTo(dict, decode(value), '');\n }\n }\n }\n }\n\n return dict;\n }\n\n function appendTo(dict, name, value) {\n var val = typeof value === 'string' ? value : (\n value !== null && typeof value.toString === 'function' ? value.toString() : JSON.stringify(value)\n )\n\n if (name in dict) {\n dict[name].push(val);\n } else {\n dict[name] = [val];\n }\n }\n\n})(typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : this));","/**\n * VidyoClient\n * Handles starting/stopping of Vidyo and sending/receiving In/Out Events.\n * Provides one interface when working with either VidyoClientForWeb (Chrome) or NPAPI plugin\n */\nnamespace SmartVideo {\nexport class VidyoClient implements IVidyoClient {\n private plugin: any;\n private proxy: ChromeProxy;\n private outEventCallbackObject: Function;\n private outEventCallbackMethods: any;\n private defaultOutEventCallbackMethod: any;\n private logCallback: any;\n private useCallbackWithPlugin: boolean;\n private config: any;\n private isChrome: boolean;\n private browser: string;\n private isSmartVideoAgent: boolean;\n\n constructor(isChrome: boolean, browser: string) {\n this.plugin = null;\n this.proxy = null;\n this.outEventCallbackObject = null;\n this.defaultOutEventCallbackMethod = '';\n this.logCallback = null;\n this.useCallbackWithPlugin = true;\n this.outEventCallbackMethods = {};\n this.isChrome = isChrome;\n this.browser = browser;\n this.isSmartVideoAgent = false;\n if (browser === 'SmartVideoAgent') {\n this.isSmartVideoAgent = true;\n }\n }\n\n setConfig(config) {\n if (config && config.plugin !== undefined) {\n this.plugin = config.plugin;\n }\n if (config && config.outEventCallbackObject !== undefined) {\n this.outEventCallbackObject = config.outEventCallbackObject;\n }\n if (config && config.defaultOutEventCallbackMethod !== undefined) {\n this.defaultOutEventCallbackMethod = config.defaultOutEventCallbackMethod;\n }\n if (config && config.logCallback !== undefined) {\n this.logCallback = config.logCallback;\n }\n if (config && config.useCallbackWithPlugin !== undefined) {\n this.useCallbackWithPlugin = config.useCallbackWithPlugin;\n }\n }\n\n log(message) {\n if (this.logCallback) {\n this.logCallback(message);\n }\n }\n\n setPlugin(plugin) {\n this.plugin = plugin;\n }\n\n setProxy(proxy: ChromeProxy) {\n this.proxy = proxy;\n }\n\n setOutEventCallbackObject(outEventCallbackObject) {\n this.outEventCallbackObject = outEventCallbackObject;\n }\n\n setDefaultOutEventCallbackMethod(defaultOutEventCallbackMethod) {\n this.defaultOutEventCallbackMethod = defaultOutEventCallbackMethod;\n }\n\n setLogCallback(logCallback) {\n this.logCallback = logCallback;\n }\n\n setUseCallbackWithPlugin(useCallbackWithPlugin) {\n this.useCallbackWithPlugin = useCallbackWithPlugin;\n }\n\n setOutEventCallbackMethod(outEventType, callbackMethod) {\n this.outEventCallbackMethods[outEventType] = callbackMethod;\n }\n\n start(config?) {\n let retVal = false;\n this.setConfig(config);\n\n if (this.isChrome || this.isSmartVideoAgent) {\n return false;\n }\n if (!this.plugin) {\n this.log('VidyoClient start invoked without plugin');\n return false;\n }\n try {\n if (this.useCallbackWithPlugin) {\n this.plugin.useCallbackForOutEvents = true;\n this.plugin.outEventCallbackObject = this;\n this.plugin.outEventCallbackMethod = 'dispatchOutEvent';\n } else {\n this.plugin.useCallbackForOutEvents = false;\n if (this.plugin.attachEvent) {\n this.log('start() will call plugin.attachEvent()');\n this.plugin.attachEvent('onouteventcallback', this.dispatchOutEvent.bind(this));\n } else if (this.plugin.addEventListener) {\n this.log('start() will call plugin.addEventListener()');\n this.plugin.addEventListener('outeventcallback', this.dispatchOutEvent.bind(this), false);\n }\n }\n retVal = this.plugin.start();\n } catch (error) {\n this.log('plugin.start() threw an exception!');\n this.log(error);\n return retVal;\n }\n if (retVal) {\n this.log('start() called plug-in with successful return.');\n } else {\n this.log('start() called plug-in with return of error!');\n }\n return retVal;\n }\n\n stop() {\n if (this.isChrome) {\n const request = {\n 'type': 'TabUnload'\n };\n this.sendRequest(request, null);\n console.log('Tab unloaded via VidyoClient.stop()');\n return true;\n }\n let retVal = false;\n\n if (!this.plugin) {\n this.log('stop() invoked without plugin!');\n return false;\n }\n /* DEBUG: retVal = true;*/\n try {\n retVal = this.plugin.stop();\n } catch (error) {\n this.log('plugin.stop() threw an exception!');\n this.log(error);\n return retVal;\n }\n if (retVal) {\n console.log('stop() called plug-in with successful return.');\n this.log('stop() called plug-in with successful return.');\n } else {\n this.log('stop() called plug-in with return of error!');\n }\n return retVal;\n }\n\n sendEvent(event, callback) {\n let retVal = false;\n if (!this.isChrome && !this.isSmartVideoAgent) {\n if (!this.plugin) {\n this.log('sendEvent() invoked without plugin!');\n return false;\n }\n }\n if (!event || typeof event !== 'object') {\n this.log('sendEvent() invoked without valid event object!');\n return false;\n }\n if (typeof event.length === 'number' && !(event.propertyIsEnumerable('length'))) {\n this.log('sendEvent() invoked without valid event object!');\n return false;\n }\n /* DEBUG: retVal = true;*/\n try {\n if (this.isChrome || this.isSmartVideoAgent) {\n retVal = this.proxy.sendEvent(event, request => {\n if (callback) {\n callback(request);\n }\n });\n } else {\n retVal = this.plugin.sendEvent(event);\n if (callback) {\n callback(event);\n }\n }\n } catch (error) {\n this.log('plugin.sendEvent() threw an exception!');\n this.log(error);\n if (callback) {\n callback(error);\n }\n }\n return retVal;\n\n }\n\n sendRequest(request, callback) {\n let retVal = 'Error';\n if (!this.isChrome && !this.isSmartVideoAgent) {\n if (!this.plugin) {\n this.log('sendRequest() invoked without plugin!');\n return 'ErrorNoPlugin';\n }\n }\n if (!request || typeof request !== 'object') {\n this.log('sendRequest() invoked without valid request object!');\n return 'ErrorInvalidRequest';\n }\n if (typeof request.length === 'number' && !(request.propertyIsEnumerable('length'))) {\n this.log('sendRequest() invoked without valid request object!');\n return 'ErrorInvalidRequest';\n }\n /* DEBUG: retVal = true;*/\n try {\n if (this.isChrome || this.isSmartVideoAgent) {\n retVal = this.proxy.sendRequest(request, request => {\n if (callback) {\n callback(request);\n }\n });\n } else {\n retVal = this.plugin.sendRequest(request);\n if (callback) {\n callback(request);\n }\n }\n } catch (error) {\n this.log('plugin.sendRequest() threw an exception!');\n this.log(error);\n if (callback) {\n callback(error);\n }\n }\n return retVal;\n }\n\n isStarted() {\n if (this.isChrome || this.isSmartVideoAgent) {\n return true;\n }\n\n let retVal = false;\n if (!this.plugin) {\n this.log('isStarted() invoked without plugin!');\n return false;\n }\n /* DEBUG: retVal = true;*/\n try {\n retVal = this.plugin.isStarted();\n } catch (e) {\n this.log('plugin.isStarted() threw an exception!');\n this.log(e);\n return retVal;\n }\n this.log('isStarted() called plug-in.');\n return retVal;\n }\n\n isLoaded() {\n if (this.isChrome || this.isSmartVideoAgent) {\n return true;\n }\n\n if (!this.plugin) {\n this.log('isLoaded() invoked without plugin!');\n return false;\n }\n\n try {\n this.plugin.isStarted();\n } catch (error) {\n this.log('plugin.isLoaded() threw an exception!');\n return false;\n }\n\n return true;\n }\n\n dispatchOutEvent(event) {\n if (this.outEventCallbackObject) {\n if (event && this.outEventCallbackMethods[event.type]) {\n if (typeof this.outEventCallbackMethods[event.type] === 'function') {\n // if method is of function type, just invoke it with default this\n this.outEventCallbackMethods[event.type].call(this.outEventCallbackObject || this, event);\n } else {\n // otherwise, assume method is of string type, invoke it with object as this\n this.outEventCallbackObject[this.outEventCallbackMethods[event.type]](event);\n }\n this.log('dispatchOutEvent() invoked specific out event callback method.');\n } else if (this.defaultOutEventCallbackMethod) {\n if (typeof this.defaultOutEventCallbackMethod === 'function') {\n // if method is of function type, just invoke it with default this\n this.defaultOutEventCallbackMethod.call(this.outEventCallbackObject || this, event);\n } else {\n // otherwise, assume method is of string type, invoke it with object as this\n this.outEventCallbackObject[this.defaultOutEventCallbackMethod](event);\n }\n this.log('dispatchOutEvent() invoked default out event callback method.');\n }\n }\n }\n\n // Only here for inteface matching\n setSessionManager(sessionManager) {\n return;\n }\n}\n}\n","/**\n * VidyoClientMessages\n * Helper class for creating Vidyo InEvent/OutEvent messages\n */\nnamespace SmartVideo {\nexport class VidyoClientMessages {\n constructor() {\n }\n\n message(type) {\n const obj = {};\n obj.type = type;\n return obj;\n }\n\n inEvent(type) {\n const inEvent = this.message(type);\n return inEvent;\n }\n\n event(type) {\n const event = this.message(type);\n return event;\n }\n\n request(type) {\n const request = this.message(type);\n return request;\n }\n\n inEventleave() {\n const inEventleave = this.inEvent('InEventLeave');\n return inEventleave;\n }\n\n eventPreview(params) {\n const eventPreview = this.event('EventPreview');\n eventPreview.previewMode = params && params.previewMode || 'None';\n return eventPreview;\n }\n\n inEventMute(type, params) {\n const inEventMute = this.inEvent(type);\n inEventMute.willMute = params && params.willMute || false;\n return inEventMute;\n }\n\n inEventMuteAudioIn(params) {\n const inEventMuteAudioIn = this.inEventMute('InEventMuteAudioIn', params);\n return inEventMuteAudioIn;\n }\n\n inEventMuteAudioOut(params) {\n const inEventMuteAudioOut = this.inEventMute('InEventMuteAudioOut', params);\n return inEventMuteAudioOut;\n }\n\n inEventMuteVideo(params) {\n const inEventMuteVideo = this.inEventMute('InEventMuteVideo', params);\n return inEventMuteVideo;\n }\n\n inEventShare(params) {\n const inEventShare = this.inEvent('InEventShare');\n inEventShare.window = params && params.window || '0x0000000000000000';\n return inEventShare;\n }\n\n inEventUnshare() {\n const inEventUnshare = this.inEvent('InEventUnshare');\n return inEventUnshare;\n }\n\n inEventLayout(params) {\n const inEventLayout = this.inEvent('InEventLayout');\n inEventLayout.numPreferred = params && params.numPreferred || 0;\n return inEventLayout;\n }\n\n inEventPrivateChat(params) {\n const inEventPrivateChat = this.inEvent('InEventPrivateChat');\n inEventPrivateChat.uri = params && params.uri || '';\n inEventPrivateChat.message = params && params.message || '';\n return inEventPrivateChat;\n }\n\n inEventGroupChat(params) {\n const inEventGroupChat = this.inEvent('InEventGroupChat');\n inEventGroupChat.message = params && params.message || '';\n return inEventGroupChat;\n }\n\n inEventSetFreezeImage(params) {\n const inEventSetFreezeImage = this.inEvent('InEventSetFreezeImage');\n inEventSetFreezeImage.freeze = params && (params.freeze !== undefined) || true;\n return inEventSetFreezeImage;\n }\n\n outEventLogicStartedType() {\n return 'OutEventLogicStarted';\n }\n\n outEventConferenceActiveType() {\n return 'OutEventConferenceActive';\n }\n\n outEventConferenceEndedType() {\n return 'OutEventConferenceEnded';\n }\n\n outEventParticipantsChangedType() {\n return 'OutEventParticipantsChanged';\n }\n\n outEventMutedAudioInType() {\n return 'OutEventMutedAudioIn';\n }\n\n outEventMutedAudioOutType() {\n return 'OutEventMutedAudioOut';\n }\n\n outEventMutedVideoType() {\n return 'OutEventMutedVideo';\n }\n\n outEventMutedServerAudioInType() {\n return 'OutEventMutedServerAudioIn';\n }\n\n outEventMutedServerVideoType() {\n return 'OutEventMutedServerVideo';\n }\n\n outEventAddShareType() {\n return 'OutEventAddShare';\n }\n\n outEventRemoveShareType() {\n return 'OutEventRemoveShare';\n }\n\n outEventPrivateChatType() {\n return 'OutEventPrivateChat';\n }\n\n outEventGroupChatType() {\n return 'OutEventGroupChat';\n }\n\n outEventConferenceInfoUpdateType() {\n return 'OutEventConferenceInfoUpdate';\n }\n\n outEventCallStateType() {\n return 'OutEventCallState';\n }\n\n requestConfiguration(type, params) {\n const requestConfiguration = this.request(type);\n\n requestConfiguration.microphones = params && params.microphones || [''];\n requestConfiguration.numberMicrophones = params && params.numberMicrophones || 0;\n requestConfiguration.currentMicrophone = params && params.currentMicrophone || 0;\n requestConfiguration.speakers = params && params.speakers || [''];\n requestConfiguration.numberSpeakers = params && params.numberSpeakers || 0;\n requestConfiguration.currentSpeaker = params && params.currentSpeaker || 0;\n requestConfiguration.cameras = params && params.cameras || [''];\n requestConfiguration.numberCameras = params && params.numberCameras || 0;\n requestConfiguration.currentCamera = params && params.currentCamera || 0;\n requestConfiguration.enableFeccEndpoint = params && params.enableFeccEndpoint || 0;\n requestConfiguration.enableFeccController = params && params.enableFeccController || 0;\n requestConfiguration.vidyoProxies = params && params.vidyoProxies || [''];\n requestConfiguration.numberVidyoProxies = params && params.numberVidyoProxies || 0;\n requestConfiguration.currentVidyoProxy = params && params.currentVidyoProxy || 0;\n requestConfiguration.userID = params && params.userID || '';\n requestConfiguration.password = params && params.password || '';\n requestConfiguration.serverAddress = params && params.serverAddress || '';\n requestConfiguration.serverPort = params && params.serverPort || '';\n requestConfiguration.vidyoProxyAddress = params && params.vidyoProxyAddress || '';\n requestConfiguration.vidyoProxyPort = params && params.vidyoProxyPort || '';\n requestConfiguration.webProxyAddress = params && params.webProxyAddress || '';\n requestConfiguration.webProxyPort = params && params.webProxyPort || '';\n requestConfiguration.webProxyUsername = params && params.webProxyUsername || '';\n requestConfiguration.webProxyPassword = params && params.webProxyPassword || '';\n requestConfiguration.webProxyIeAddress = params && params.webProxyIeAddress || '';\n requestConfiguration.webProxyIePort = params && params.webProxyIePort || '';\n requestConfiguration.portalAddress = params && params.portalAddress || '';\n requestConfiguration.ringtoneDeviceName = params && params.ringtoneDeviceName || '';\n requestConfiguration.verifyCertPortalAcct = params && params.verifyCertPortalAcct || '';\n requestConfiguration.webProxyScriptUrl = params && params.webProxyScriptUrl || '';\n requestConfiguration.webProxyIeScriptUrl = params && params.webProxyIeScriptUrl || '';\n requestConfiguration.mediaLowPort = params && params.mediaLowPort || 0;\n requestConfiguration.mediaHighPort = params && params.mediaHighPort || 0;\n requestConfiguration.proxySettings = params && params.proxySettings || 0;\n requestConfiguration.videoPreferences = params && params.videoPreferences || 'BestQuality';\n requestConfiguration.enableLogging = params && params.enableLogging || 0;\n requestConfiguration.enableAutoAnswer = params && params.enableAutoAnswer || 0;\n requestConfiguration.enableForceProxy = params && params.enableForceProxy || 0;\n requestConfiguration.enableLogWindow = params && params.enableLogWindow || 0;\n requestConfiguration.enableEntryTone = params && params.enableEntryTone || 0;\n requestConfiguration.enableEchoDetection = params && params.enableEchoDetection || 0;\n requestConfiguration.enableEchoCancellation = params && params.enableEchoCancellation || 0;\n requestConfiguration.enableFullScreenVideo = params && params.enableFullScreenVideo || 0;\n requestConfiguration.showToolbarInFullScreenVideo = params && params.showToolbarInFullScreenVideo || 0;\n requestConfiguration.enableAudioAGC = params && params.enableAudioAGC || 0;\n requestConfiguration.enableAutoStart = params && params.enableAutoStart || 0;\n requestConfiguration.enableShowConfParticipantName = params && params.enableShowConfParticipantName || 0;\n requestConfiguration.enableMuteMicrophoneOnJoin = params && params.enableMuteMicrophoneOnJoin || 0;\n requestConfiguration.enableHideCameraOnJoin = params && params.enableHideCameraOnJoin || 0;\n requestConfiguration.enableMuteSpeakerOnJoin = params && params.enableMuteSpeakerOnJoin || 0;\n requestConfiguration.enableEulaAgreed = params && params.enableEulaAgreed || 0;\n requestConfiguration.enableRendering = params && params.enableRendering || 0;\n requestConfiguration.enableBackgrounding = params && params.enableBackgrounding || 0;\n requestConfiguration.enableFullDisplaySharing = params && params.enableFullDisplaySharing || 0;\n requestConfiguration.selfViewLoopbackPolicy = params && params.selfViewLoopbackPolicy || 2;\n\n return requestConfiguration;\n }\n\n requestGetConfiguration(params) {\n const requestGetConfiguration = this.requestConfiguration('RequestGetConfiguration', params);\n return requestGetConfiguration;\n }\n\n requestSetConfiguration(params) {\n const requestSetConfiguration = this.requestConfiguration('RequestSetConfiguration', params);\n return requestSetConfiguration;\n }\n\n requestVolumeAudio(type, params) {\n const requestVolumeAudio = this.request(type);\n requestVolumeAudio.volume = params && params.volume || 0;\n return requestVolumeAudio;\n }\n\n requestGetVolumeAudioIn(params) {\n const requestGetVolumeAudioIn = this.requestVolumeAudio('RequestGetVolumeAudioIn', params);\n return requestGetVolumeAudioIn;\n }\n\n requestSetVolumeAudioIn(params) {\n const requestSetVolumeAudioIn = this.requestVolumeAudio('RequestSetVolumeAudioIn', params);\n return requestSetVolumeAudioIn;\n }\n\n requestGetVolumeAudioOut(params) {\n const requestGetVolumeAudioOut = this.requestVolumeAudio('RequestGetVolumeAudioOut', params);\n return requestGetVolumeAudioOut;\n }\n\n requestSetVolumeAudioOut(params) {\n const requestSetVolumeAudioOut = this.requestVolumeAudio('RequestSetVolumeAudioOut', params);\n return requestSetVolumeAudioOut;\n }\n\n requestWindowShares(type?, params?) {\n const requestWindowShares = this.request(type);\n requestWindowShares.requestType = params && params.requestType || '';\n requestWindowShares.remoteAppUri = params && params.remoteAppUri || [''];\n requestWindowShares.remoteAppName = params && params.remoteAppName || [''];\n requestWindowShares.numApp = params && params.numApp || 0;\n requestWindowShares.currApp = params && params.currApp || 0;\n requestWindowShares.eventUri = params && params.eventUri || '';\n requestWindowShares.newApp = params && params.newApp || 0;\n return requestWindowShares;\n }\n\n requestGetWindowShares(params) {\n const requestGetWindowShares = this.requestWindowShares('RequestGetWindowShares', params);\n return requestGetWindowShares;\n }\n\n requestSetWindowShares(params) {\n const requestSetWindowShares = this.requestWindowShares('RequestSetWindowShares', params);\n return requestSetWindowShares;\n }\n\n requestGetCurrentSessionDisplayInfo(params) {\n const requestGetCurrentSessionDisplayInfo = this.request('RequestGetCurrentSessionDisplayInfo');\n requestGetCurrentSessionDisplayInfo.sessionDisplayContext = params && params.sessionDisplayContext || 'Conf';\n requestGetCurrentSessionDisplayInfo.sessionDisplayText = params && params.sessionDisplayText || '';\n return requestGetCurrentSessionDisplayInfo;\n }\n\n requestGetParticipants(params) {\n const requestGetParticipants = this.request('RequestGetParticipants');\n requestGetParticipants.name = params && params.name || [];\n return requestGetParticipants;\n }\n\n requestGetNumParticipants(params) {\n const requestGetNumParticipants = this.request('RequestGetNumParticipants');\n requestGetNumParticipants.numParticipants = params && params.numParticipants || 0;\n return requestGetNumParticipants;\n }\n\n requestGetParticipantStatisticsAt(params) {\n const requestGetParticipantStatisticsAt = this.request('RequestGetParticipantStatisticsAt');\n requestGetParticipantStatisticsAt.index = params && params.index || 0;\n requestGetParticipantStatisticsAt.result = params && params.result || false;\n requestGetParticipantStatisticsAt.uri = params && params.uri || '';\n requestGetParticipantStatisticsAt.name = params && params.name || '';\n requestGetParticipantStatisticsAt.videoResolution = params && params.videoResolution || {\n 'xPos': 0,\n 'yPos': 0,\n 'width': 0,\n 'height': 0\n };\n requestGetParticipantStatisticsAt.videoKBitsPerSecRecv = params && params.videoKBitsPerSecRecv || 0;\n requestGetParticipantStatisticsAt.audioKBitsPerSecRecv = params && params.audioKBitsPerSecRecv || 0;\n requestGetParticipantStatisticsAt.firs = params && params.firs || 0;\n requestGetParticipantStatisticsAt.nacks = params && params.nacks || 0;\n requestGetParticipantStatisticsAt.videoFrameRate = params && params.videoFrameRate || 0;\n requestGetParticipantStatisticsAt.videoDecodedFrameRate = params && params.videoDecodedFrameRate || 0;\n requestGetParticipantStatisticsAt.videoDisplayedFrameRate = params && params.videoDisplayedFrameRate || 0;\n return requestGetParticipantStatisticsAt;\n }\n\n requestGetWindowsAndDesktops(params) {\n const requestGetWindowsAndDesktops = this.request('RequestGetWindowsAndDesktops');\n requestGetWindowsAndDesktops.numApplicationWindows = params && params.numApplicationWindows || 0;\n requestGetWindowsAndDesktops.appWindowName = params && params.appWindowName || [''];\n requestGetWindowsAndDesktops.appWindowAppName = params && params.appWindowAppName || [''];\n requestGetWindowsAndDesktops.appWindowId = params && params.appWindowId || ['0x0000000000000000'];\n requestGetWindowsAndDesktops.numSystemDesktops = params && params.numSystemDesktops || 0;\n requestGetWindowsAndDesktops.sysDesktopName = params && params.sysDesktopName || [''];\n requestGetWindowsAndDesktops.sysDesktopId = params && params.sysDesktopId || ['0x0000000000000000'];\n return requestGetWindowsAndDesktops;\n }\n\n requestGetPreviewMode(params) {\n const requestGetPreviewMode = this.request('RequestGetPreviewMode');\n requestGetPreviewMode.previewMode = params && params.previewMode || '';\n return requestGetPreviewMode;\n }\n\n requestGetMutedAudioIn(params) {\n const requestGetMutedAudioIn = this.request('RequestGetMutedAudioIn');\n requestGetMutedAudioIn.isMuted = params && params.isMuted || false;\n return requestGetMutedAudioIn;\n }\n\n requestGetMutedAudioOut(params) {\n const requestGetMutedAudioOut = this.request('RequestGetMutedAudioOut');\n requestGetMutedAudioOut.isMuted = params && params.isMuted || false;\n return requestGetMutedAudioOut;\n }\n\n requestGetMutedVideo(params) {\n const requestGetMutedVideo = this.request('RequestGetMutedVideo');\n requestGetMutedVideo.isMuted = params && params.isMuted || false;\n return requestGetMutedVideo;\n }\n\n requestGetMutedServerAudioIn(params) {\n const requestGetMutedServerAudioIn = this.request('RequestGetMutedServerAudioIn');\n requestGetMutedServerAudioIn.isMuted = params && params.isMuted || false;\n return requestGetMutedServerAudioIn;\n }\n\n requestGetMutedServerVideo(params) {\n const requestGetMutedServerVideo = this.request('RequestGetMutedServerVideo');\n requestGetMutedServerVideo.isMuted = params && params.isMuted || false;\n return requestGetMutedServerVideo;\n }\n\n requestGetCurrentUser(params) {\n const requestGetCurrentUser = this.request('RequestGetCurrentUser');\n requestGetCurrentUser.currentUserID = params && params.currentUserID || '';\n requestGetCurrentUser.currentUserDisplay = params && params.currentUserDisplay || '';\n return requestGetCurrentUser;\n }\n\n requestGetConferenceInfo(params) {\n const requestGetConferenceInfo = this.request('RequestGetConferenceInfo');\n requestGetConferenceInfo.recording = params && params.recording || false;\n requestGetConferenceInfo.webcasting = params && params.webcasting || false;\n return requestGetConferenceInfo;\n }\n\n requestGetCallState(params) {\n const requestGetCallState = this.request('RequestGetCallState');\n requestGetCallState.callState = params && params.callState || '';\n return requestGetCallState;\n }\n\n requestGetEncodeResolution(params) {\n const requestGetEncodeResolution = this.request('RequestGetEncodeResolution');\n requestGetEncodeResolution.rect = params && params.rect || {xPos: 0, yPos: 0, width: 0, height: 0};\n return requestGetEncodeResolution;\n }\n\n requestGetVideoFrameRateInfo(params) {\n const requestGetVideoFrameRateInfo = this.request('RequestGetVideoFrameRateInfo');\n requestGetVideoFrameRateInfo.captureFrameRate\t= params && params.captureFrameRate || 0;\n requestGetVideoFrameRateInfo.encodeFrameRate\t= params && params.encodeFrameRate || 0;\n requestGetVideoFrameRateInfo.sendFrameRate\t= params && params.sendFrameRate || 0;\n return requestGetVideoFrameRateInfo;\n }\n\n requestGetMediaInfo(params) {\n const requestGetMediaInfo = this.request('RequestGetMediaInfo');\n requestGetMediaInfo.numIFrames = params && params.numIFrames || 0;\n requestGetMediaInfo.numFirs = params && params.numFirs || 0;\n requestGetMediaInfo.numNacks = params && params.numNacks || 0;\n requestGetMediaInfo.mediaRTT = params && params.mediaRTT || 0;\n return requestGetMediaInfo;\n }\n}\n}\n","/**\n * VidyoDetection class\n *\n * This is a utility class that does browser interrogation\n * and detection of whether Vidyo components are installed\n * 1. Vidyo NPAPI plugin\n * 2. Vidyo Chrome Extensions (VidyoWebConnector, Vidyo Screen Share for WebRTC)\n * 3. Vidyo Chrome Native Messaging Host (VidyoClientForWeb, connected to by the VidyoWebConnector extension)\n */\nnamespace SmartVideo {\n interface CustomPluginType extends Plugin {\n type: string;\n }\n\n export class VidyoDetection implements IVidyoDetection {\n config: ISmartVideoConfig;\n pluginVersion: string;\n chromeExtensionUrl: string;\n extensionId: string;\n chromeNativeMessagingHostVersion: string;\n isInstalled: boolean;\n isChrome: boolean;\n isFireFox: boolean;\n isEdge: boolean;\n isOpera: boolean;\n isIE: boolean;\n isSafari: boolean;\n isSmartVideoAgent: boolean;\n isChromeExtensionInstalled: boolean;\n isChromeNativeMessagingHostInstalled: boolean;\n isBrowserSupported: boolean;\n isWebRTCCapable: boolean;\n isWebRTCAvailable: boolean;\n isCameraReady: boolean;\n isNeoSupported: boolean;\n isOsSupported: boolean;\n isMobile: boolean;\n isOSX: boolean;\n isIOS: boolean;\n isWindows: boolean;\n isInitializing: boolean;\n isInitialized: boolean;\n mobileOS: string;\n supportedOsName: string;\n installTimer: number;\n img: HTMLImageElement;\n // TODO: Need to create an interface defining browserReport for type safety\n browserReport: any;\n callbacks: Object;\n timeouts: Object;\n receiveListener: EventListener;\n useWebRTC: boolean;\n fireFoxCameraDetectionFunction: number;\n\n constructor() {\n this.img = new Image();\n this.isInstalled = false;\n this.isChrome = false;\n this.isFireFox = false;\n this.isEdge = false;\n this.isOpera = false;\n this.isIE = false;\n this.isIOS = false;\n this.isSmartVideoAgent = false;\n this.isChromeExtensionInstalled = false;\n this.isChromeNativeMessagingHostInstalled = false;\n this.isBrowserSupported = false;\n this.isWebRTCCapable = false;\n this.isWebRTCAvailable = false;\n this.isNeoSupported = false;\n this.isOsSupported = false;\n this.isOSX = false;\n this.isWindows = false;\n this.browserReport = this.extractDataFromClient();\n this.callbacks = new Object();\n this.timeouts = new Object();\n this.isMobile = this.isSupportedMobile();\n this.receiveListener = this.receiveVidyoAppEvent.bind(this);\n this.useWebRTC = false;\n this.isCameraReady = false;\n this.isInitialized = false;\n this.isInitializing = false;\n\n window.addEventListener('message', this.receiveListener, false);\n }\n // Need to rework init to just pass in config, since all the params currently passed are already in the config\n // init(mimePluginVersion: string, chromeNMSVersion: string, chromeExtensionUrl: string, useWebRTC: boolean, callback?: Function) {\n init(config: ISmartVideoConfig, callback?: Function) {\n this.config = config;\n const that = this;\n console.log('Initializing VidyoDetection');\n this.isInitializing = true;\n this.useWebRTC = config.UseWebRTC;\n this.browserSupported();\n\n /* If modern browser, hook change for media devices and do initial camera check.\n Exclude mobile devices, since we use VidyoMobile app */\n if (navigator.mediaDevices && !this.isIOS) {\n if (this.isChrome) {\n navigator.mediaDevices.ondevicechange = this.detectCamera.bind(this);\n }\n if (this.isFireFox) {\n /*\n ondevicechange doesn't work under Firefox unless you first call getUserMedia\n That's stupid, because you only want to call getUserMedia if you've detected a valid\n device first.\n So for Firefox, we just periodically poll the devices, which is a waste of CPU cycles\n */\n this.fireFoxCameraDetectionFunction = setInterval(\n this.detectCamera.bind(this),\n 500\n );\n }\n this.detectCamera();\n }\n\n if (config.VidyoWebVersion && config.VidyoWebVersion !== '') {\n this.pluginVersion = config.VidyoWebVersion;\n } else {\n this.pluginVersion = '1.3.10.0004';\n }\n if (\n config.VidyoClientForWebVersion &&\n config.VidyoClientForWebVersion !== ''\n ) {\n this.chromeNativeMessagingHostVersion = config.VidyoClientForWebVersion;\n } else {\n this.chromeNativeMessagingHostVersion = '1.3.10.0005';\n }\n if (config.UseWebRTC && this.isWebRTCCapable) {\n /*All WebRTC capable browsers support Promises, so safe to use it here*/\n console.log('UseWebRTC config set to true, and is WebRTCCapable');\n this.detectWebRTCAvailable().then(\n function (response) {\n that.chromeExtensionUrl =\n config.VidyoWebRTCScreenShareChromeExtensionUrl;\n that.isWebRTCAvailable = true;\n console.log(\n 'Successfully contacted WebRTC Session Manager and recieved IP address to use for WebRTC'\n );\n that.finalizeInit();\n },\n function (error) {\n console.log(error.message);\n that.chromeExtensionUrl =\n config.VidyoClientForWebChromeExtensionUrl;\n that.finalizeInit();\n }\n );\n } else {\n this.finalizeInit();\n }\n }\n\n finalizeInit() {\n if (this.chromeExtensionUrl && this.chromeExtensionUrl !== '') {\n // this.chromeExtensionUrl = chromeExtensionUrl;\n // Get extensionId from chromeExtensionUrl\n this.extensionId = this.chromeExtensionUrl.split('/').slice(-1)[0];\n console.log('ExtensionId set as: ' + this.extensionId);\n }\n\n if (this.config.UseWebRTC) {\n if (!this.isWebRTCCapable || !this.isWebRTCAvailable) {\n this.useWebRTC = false;\n }\n } else {\n if (this.browserReport.os.name === 'Windows' && this.isOsSupported) {\n this.isNeoSupported = true;\n }\n }\n this.isInitialized = true;\n this.isInitializing = false;\n }\n\n isFunction(possibleFunction) {\n return typeof possibleFunction === typeof Function;\n }\n\n isSupportedMobile() {\n let isSupportedMobile = false;\n switch (this.browserReport.os.name) {\n case 'Android':\n isSupportedMobile = true;\n break;\n case 'iOS':\n isSupportedMobile = true;\n break;\n case 'OS X':\n if (this.browserReport.browser.name === 'Safari') {\n /* Treat Safari as mobile, for the purpose of showing the mobile modal so\n user can install the VidyoConnect package */\n isSupportedMobile = true;\n }\n break;\n default:\n break;\n }\n return isSupportedMobile;\n }\n\n doCallback(possiblecallback: Function) {\n if (this.isFunction(possiblecallback)) {\n possiblecallback();\n }\n }\n\n extractDataFromClient() {\n let report, match, uuid, definePropertySupported;\n const userAgent = navigator.userAgent;\n let isWin64;\n\n // initialize object to store results\n report = {\n browser: {\n name: null,\n version: null,\n },\n cookies: null,\n flash: {\n version: null,\n },\n ip: null,\n java: {\n version: null,\n },\n os: {\n name: null,\n version: null,\n cpu: null,\n },\n screen: {\n colors: null,\n dppx: null,\n height: null,\n width: null,\n },\n scripts: true,\n userAgent: userAgent,\n viewport: {\n height: null,\n layout: {\n height: null,\n width: null,\n },\n width: null,\n zoom: null,\n },\n websockets: null,\n };\n\n // extract cpuClass\n isWin64 =\n navigator.userAgent.indexOf('WOW64') > -1 ||\n navigator.userAgent.indexOf('Win64') > -1;\n if (isWin64) {\n report.os.cpu = 'Win64';\n } else {\n report.os.cpu = window.navigator.platform;\n }\n\n // extract browser name from user agent\n if (userAgent.indexOf('Trident') >= 0 || userAgent.indexOf('MSIE') >= 0) {\n if (userAgent.indexOf('Mobile') >= 0) {\n report.browser.name = 'IE Mobile';\n } else {\n report.browser.name = 'Internet Explorer';\n }\n }\n\n if (\n userAgent.indexOf('Firefox') >= 0 &&\n userAgent.indexOf('Seamonkey') === -1\n ) {\n if (userAgent.indexOf('Android') >= 0) {\n report.browser.name = 'Firefox for Android';\n } else {\n report.browser.name = 'Firefox';\n }\n }\n\n if (\n userAgent.indexOf('Safari') >= 0 &&\n userAgent.indexOf('Chrome') === -1 &&\n userAgent.indexOf('Chromium') === -1 &&\n userAgent.indexOf('Android') === -1\n ) {\n if (userAgent.indexOf('CriOS') >= 0) {\n report.browser.name = 'Chrome for iOS';\n } else if (userAgent.indexOf('FxiOS') >= 0) {\n report.browser.name = 'Firefox for iOS';\n } else {\n report.browser.name = 'Safari';\n }\n }\n\n if (userAgent.indexOf('Chrome') >= 0) {\n if (userAgent.match(/\\bChrome\\/[.0-9]* Mobile\\b/)) {\n if (\n userAgent.match(/\\bVersion\\/\\d+\\.\\d+\\b/) ||\n userAgent.match(/\\bwv\\b/)\n ) {\n report.browser.name = 'WebView on Android';\n } else {\n report.browser.name = 'Chrome for Android';\n }\n } else {\n report.browser.name = 'Chrome';\n }\n }\n\n if (\n userAgent.indexOf('Android') >= 0 &&\n userAgent.indexOf('Chrome') === -1 &&\n userAgent.indexOf('Chromium') === -1 &&\n userAgent.indexOf('Trident') === -1 &&\n userAgent.indexOf('Firefox') === -1\n ) {\n report.browser.name = 'Android Browser';\n }\n\n if (userAgent.indexOf('Edge') >= 0) {\n report.browser.name = 'Edge';\n }\n\n if (userAgent.indexOf('UCBrowser') >= 0) {\n report.browser.name = 'UC Browser for Android';\n }\n\n if (userAgent.indexOf('OPR') >= 0 || userAgent.indexOf('Opera') >= 0) {\n if (userAgent.indexOf('Opera Mini') >= 0) {\n report.browser.name = 'Opera Mini';\n } else {\n report.browser.name = 'Opera';\n }\n }\n\n if (\n userAgent.indexOf('BB10') >= 0 ||\n userAgent.indexOf('PlayBook') >= 0 ||\n userAgent.indexOf('BlackBerry') >= 0\n ) {\n report.browser.name = 'BlackBerry';\n }\n\n if (userAgent.indexOf('SmartVideoAgent') >= 0) {\n report.browser.name = 'SmartVideoAgent';\n }\n\n // extract browser version number from user agent\n match = null;\n\n switch (report.browser.name) {\n case 'Chrome':\n case 'Chrome for Android':\n case 'WebView on Android':\n match = userAgent.match(/Chrome\\/((\\d+\\.)+\\d+)/);\n break;\n case 'Firefox':\n case 'Firefox for Android':\n match = userAgent.match(/Firefox\\/((\\d+\\.)+\\d+)/);\n break;\n case 'Firefox for iOS':\n match = userAgent.match(/FxiOS\\/((\\d+\\.)+\\d+)/);\n break;\n case 'Edge':\n case 'Internet Explorer':\n case 'IE Mobile':\n if (userAgent.indexOf('Edge') >= 0) {\n match = userAgent.match(/Edge\\/((\\d+\\.)+\\d+)/);\n } else if (userAgent.indexOf('rv:11') >= 0) {\n match = userAgent.match(/rv:((\\d+\\.)+\\d+)/);\n } else if (userAgent.indexOf('MSIE') >= 0) {\n match = userAgent.match(/MSIE\\ ((\\d+\\.)+\\d+)/);\n }\n\n break;\n case 'Safari':\n case 'Android Browser':\n match = userAgent.match(/Version\\/((\\d+\\.)+\\d+)/);\n break;\n case 'UC Browser for Android':\n match = userAgent.match(/UCBrowser\\/((\\d+\\.)+\\d+)/);\n break;\n case 'Opera Mini':\n match = userAgent.match(/Opera Mini\\/((\\d+\\.)+\\d+)/);\n break;\n case 'Opera':\n if (userAgent.match(/OPR/)) {\n match = userAgent.match(/OPR\\/((\\d+\\.)+\\d+)/);\n } else if (userAgent.match(/Version/)) {\n match = userAgent.match(/Version\\/((\\d+\\.)+\\d+)/);\n } else {\n match = userAgent.match(/Opera\\/((\\d+\\.)+\\d+)/);\n }\n break;\n case 'BlackBerry':\n match = userAgent.match(/Version\\/((\\d+\\.)+\\d+)/);\n break;\n default:\n match = userAgent.match(/\\/((\\d+\\.)+\\d+)$/);\n break;\n }\n\n if (match && match[1]) {\n report.browser.version = match[1];\n }\n\n // pull in browser window size from the visual viewport\n report.viewport.width =\n window.innerWidth || document.documentElement.clientWidth;\n report.viewport.height =\n window.innerHeight || document.documentElement.clientHeight;\n\n /*\n * test if Object.defineProperty function is fully supported\n */\n try {\n Object.defineProperty({}, 'x', {});\n definePropertySupported = true;\n } catch (e) {\n definePropertySupported = false;\n }\n\n /*\n * helper function to safely log warning messages\n */\n function warning(msg) {\n if (window.console) {\n if (console.warn) {\n console.warn(msg);\n } else {\n console.log(msg);\n }\n }\n }\n\n // deprecate report.browser.size\n if (definePropertySupported) {\n Object.defineProperty(report.browser, 'size', {\n get() {\n warning(\n 'browser.size is deprecated; use viewport.width and viewport.height'\n );\n return report.viewport.width + ' x ' + report.viewport.height;\n },\n });\n }\n\n // pull in raw values for layout viewport\n report.viewport.layout.width = document.documentElement.clientWidth;\n report.viewport.layout.height = document.documentElement.clientHeight;\n\n // define viewport zoom property\n report.viewport.zoom =\n report.viewport.layout.width / report.viewport.width;\n\n // are cookies enabled\n // can't trust this value (Microsoft Edge lies)\n // report.cookies = !!navigator.cookieEnabled;\n\n // truely check if cookies are enabled\n // generate UUID for cookie name\n uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n uuid = uuid.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n\n return v.toString(16);\n });\n document.cookie = uuid;\n\n if (document.cookie.indexOf(uuid) >= 0) {\n report.cookies = true;\n } else {\n report.cookies = false;\n }\n // delete temporoary cookie\n document.cookie = uuid + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';\n\n // check plugins\n ((plugins) => {\n let i: number, l: number, plugin;\n\n if (plugins) {\n l = plugins.length;\n\n for (i = 0; i < l; i += 1) {\n plugin = plugins.item(i);\n // console.log(plugin.name);\n // what version of Adobe Flash\n if (plugin.name.indexOf('Flash') >= 0) {\n match = plugin.description.match(/\\b((\\d+\\.)+\\d+)\\b/);\n if (match && match[1]) {\n report.flash.version = match[1];\n }\n }\n\n // what version of Java\n if (plugin.name.indexOf('Java') >= 0) {\n match = plugin.description.match(/\\b((\\d+\\.)+\\d+)\\b/);\n if (match && match[1]) {\n report.java.version = match[1];\n }\n }\n }\n }\n })(navigator.plugins);\n\n // extract operating system name from user agent\n if (\n userAgent.indexOf('Windows') >= 0 ||\n userAgent.indexOf('SmartVideoAgent') >= 0\n ) {\n if (userAgent.indexOf('Windows Phone') >= 0) {\n report.os.name = 'Windows Phone';\n } else {\n report.os.name = 'Windows';\n }\n }\n\n if (\n userAgent.indexOf('OS X') >= 0 &&\n userAgent.indexOf('Android') === -1\n ) {\n report.os.name = 'OS X';\n this.mobileOS = 'OS X';\n }\n\n if (userAgent.indexOf('Linux') >= 0) {\n report.os.name = 'Linux';\n }\n\n if (userAgent.indexOf('like Mac OS X') >= 0) {\n report.os.name = 'iOS';\n this.mobileOS = 'iOS';\n }\n\n if (\n (userAgent.indexOf('Android') >= 0 || userAgent.indexOf('Adr') >= 0) &&\n userAgent.indexOf('Windows Phone') === -1\n ) {\n report.os.name = 'Android';\n this.mobileOS = 'Android';\n }\n\n if (userAgent.indexOf('BB10') >= 0) {\n report.os.name = 'BlackBerry';\n }\n\n if (userAgent.indexOf('RIM Tablet OS') >= 0) {\n report.os.name = 'BlackBerry Tablet OS';\n }\n\n if (userAgent.indexOf('BlackBerry') >= 0) {\n report.os.name = 'BlackBerryOS';\n }\n\n // extract operating system version from user agent\n match = null;\n\n switch (report.os.name) {\n case 'Windows':\n case 'Windows Phone':\n if (userAgent.indexOf('Win16') >= 0) {\n report.os.version = '3.1.1';\n } else if (userAgent.indexOf('Windows CE') >= 0) {\n report.os.version = 'CE';\n } else if (userAgent.indexOf('Windows 95') >= 0) {\n report.os.version = '95';\n } else if (userAgent.indexOf('Windows 98') >= 0) {\n if (userAgent.indexOf('Windows 98; Win 9x 4.90') >= 0) {\n report.os.version = 'Millennium Edition';\n } else {\n report.os.version = '98';\n }\n } else {\n match = userAgent.match(\n /Win(?:dows)?(?: Phone)?[\\ _]?(?:(?:NT|9x)\\ )?((?:(\\d+\\.)*\\d+)|XP|ME|CE)\\b/\n );\n\n if (match && match[1]) {\n switch (match[1]) {\n case '6.4':\n match[1] = '10.0';\n break;\n case '6.3':\n match[1] = '8.1';\n break;\n case '6.2':\n match[1] = '8';\n break;\n case '6.1':\n match[1] = '7';\n break;\n case '6.0':\n match[1] = 'Vista';\n break;\n case '5.2':\n match[1] = 'Server 2003';\n break;\n case '5.1':\n match[1] = 'XP';\n break;\n case '5.01':\n match[1] = '2000 SP1';\n break;\n case '5.0':\n match[1] = '2000';\n break;\n case '4.0':\n match[1] = '4.0';\n break;\n default:\n // nothing\n break;\n }\n }\n }\n break;\n case 'OS X':\n match = userAgent.match(/OS\\ X\\ ((\\d+[._])+\\d+)\\b/);\n break;\n case 'Linux':\n // linux user agent strings do not usually include the version\n report.os.version = null;\n break;\n case 'iOS':\n match = userAgent.match(/OS\\ ((\\d+[._])+\\d+)\\ like\\ Mac\\ OS\\ X/);\n break;\n case 'Android':\n match = userAgent.match(/(?:Android|Adr)\\ ((\\d+[._])+\\d+)/);\n break;\n case 'BlackBerry':\n case 'BlackBerryOS':\n match = userAgent.match(/Version\\/((\\d+\\.)+\\d+)/);\n break;\n case 'BlackBerry Tablet OS':\n match = userAgent.match(/RIM Tablet OS ((\\d+\\.)+\\d+)/);\n break;\n default:\n // no good default behavior\n report.os.version = null;\n break;\n }\n\n if (match && match[1]) {\n // replace underscores in version number with periods\n match[1] = match[1].replace(/_/g, '.');\n report.os.version = match[1];\n }\n\n // pull in screen info from W3C standard properties\n report.screen.width = screen.width;\n report.screen.height = screen.height;\n report.screen.colors = screen.colorDepth;\n if (window.devicePixelRatio && !isNaN(window.devicePixelRatio)) {\n report.screen.dppx = window.devicePixelRatio;\n } else {\n report.screen.dppx = 1;\n }\n\n // deprecate report.screen.size\n if (definePropertySupported) {\n Object.defineProperty(report.screen, 'size', {\n get() {\n warning(\n 'screen.size is deprecated; use screen.width and screen.height'\n );\n return report.screen.width + ' x ' + report.screen.height;\n },\n });\n }\n\n // deprecate report.screen.resolution\n if (definePropertySupported) {\n Object.defineProperty(report.screen, 'resolution', {\n get() {\n warning(\n 'screen.resolution is deprecated; multiply screen.width and screen.height by screen.dppx'\n );\n return (\n report.screen.dppx * report.screen.width +\n ' x ' +\n report.screen.dppx * report.screen.height\n );\n },\n });\n }\n\n // are web sockets supported\n report.websockets = !!window['WebSocket'];\n\n // preferred language(s) for displaying pages\n report.lang = navigator.languages || navigator.language;\n\n // local date, time, and time zone\n report.timestamp = new Date().toString();\n\n return report;\n }\n\n browserSupported() {\n let isOsSupported = false;\n let isBrowserSupported = false;\n let versionOsArray;\n let majorOsVersion;\n let minorOsVersion;\n let revOsVersion;\n let versionBrowserArray;\n let majorBrowserVersion;\n let minorBrowserVersion;\n let revBrowserVersion;\n const report = this.browserReport;\n\n if (report.os.version && report.os.version.indexOf('.') === -1) {\n majorOsVersion = report.os.version;\n }\n if (report.os.version && report.os.version.indexOf('.') > 0) {\n versionOsArray = report.os.version.split('.');\n majorOsVersion = versionOsArray[0];\n minorOsVersion = versionOsArray[1] ? versionOsArray[1] : 0;\n revOsVersion = versionOsArray[2] ? versionOsArray[2] : 0;\n }\n if (report.browser.version && report.browser.version.indexOf('.') > 0) {\n versionBrowserArray = report.browser.version.split('.');\n majorBrowserVersion = versionBrowserArray[0];\n minorBrowserVersion = versionBrowserArray[1]\n ? versionBrowserArray[1]\n : 0;\n revBrowserVersion = versionBrowserArray[2] ? versionBrowserArray[2] : 0;\n }\n\n switch (report.os.name) {\n case 'Windows':\n switch (majorOsVersion) {\n case '7':\n isOsSupported = true;\n this.isWindows = true;\n break;\n case '8':\n isOsSupported = true;\n this.isWindows = true;\n break;\n case '10':\n isOsSupported = true;\n this.isWindows = true;\n break;\n default:\n this.isWindows = true;\n break;\n }\n break;\n case 'OS X':\n const osxVersion = report.os.version.replace('.', '');\n if (osxVersion >= 108) {\n isOsSupported = true;\n }\n this.isOSX = true;\n break;\n case 'iOS':\n isOsSupported = true;\n this.isIOS = true;\n /* if (report.browser.name === 'Safari') {\n isOsSupported = true;\n } else {\n isOsSupported = false;\n } */\n\n break;\n case 'Android':\n isOsSupported = true;\n break;\n default:\n break;\n }\n\n switch (report.browser.name) {\n case 'Internet Explorer':\n if (majorBrowserVersion === '11') {\n isBrowserSupported = false;\n this.isIE = true;\n }\n break;\n case 'Safari':\n /* if (\n majorBrowserVersion === 9 &&\n minorBrowserVersion === 0 &&\n revBrowserVersion >= 3\n ) {\n isBrowserSupported = true;\n }\n if (majorBrowserVersion === 9 && minorBrowserVersion >= 1) {\n isBrowserSupported = true;\n }\n if (majorBrowserVersion > 9) {\n isBrowserSupported = true;\n }\n if (majorBrowserVersion >= 11) {\n this.isWebRTCCapable = true;\n } */\n if (this.isOSX) {\n isBrowserSupported = true;\n } else if (this.isIOS) {\n isBrowserSupported = true;\n }\n this.isWebRTCCapable = false;\n this.isSafari = true;\n break;\n case 'Firefox for Android':\n this.isFireFox = true;\n isBrowserSupported = true;\n this.isWebRTCCapable = true;\n break;\n case 'Firefox':\n this.isFireFox = true;\n if (this.useWebRTC) {\n if (majorBrowserVersion >= 53 && isOsSupported) {\n isBrowserSupported = true;\n this.isWebRTCCapable = true;\n }\n } else {\n isBrowserSupported = false;\n this.isWebRTCCapable = false;\n }\n\n break;\n case 'Firefox for iOS':\n this.isFireFox = true;\n isBrowserSupported = true;\n this.isWebRTCCapable = false;\n break;\n case 'Chrome for Android':\n case 'Chrome':\n this.isChrome = true;\n if (majorBrowserVersion >= 48 && isOsSupported) {\n isBrowserSupported = true;\n this.isWebRTCCapable = true;\n }\n break;\n case 'Chrome for iOS':\n this.isChrome = true;\n if (majorBrowserVersion >= 48 && isOsSupported) {\n isBrowserSupported = true;\n this.isWebRTCCapable = false;\n }\n break;\n case 'Edge':\n this.isEdge = true;\n /*\n Edge does not fully support WebRTC. Microsoft has said they will not be\n implementing the full WebRTC 1.0 standard. They only fully support ORTC.\n Until Microsoft fully supports WebRTC, or Vidyo supports ORTC,\n it's likely Edge may never work with Vidyo\n */\n /*if (this.useWebRTC) {\n if (majorBrowserVersion >= 15 && minorBrowserVersion >=15063) {\n isBrowserSupported = true;\n this.isWebRTCCapable = true;\n }\n }*/\n break;\n case 'Opera':\n if (this.useWebRTC && isOsSupported) {\n isBrowserSupported = true;\n this.isOpera = true;\n this.isWebRTCCapable = true;\n }\n break;\n default:\n break;\n }\n\n this.isOsSupported = isOsSupported;\n this.isBrowserSupported = isBrowserSupported;\n if (isOsSupported) {\n this.supportedOsName = report.os.name;\n }\n console.log(JSON.stringify(this.browserReport));\n }\n\n detectExtension(extensionId: string) {\n console.log('Now checking Vidyo Chrome extension');\n // Only check for VidyoClientForWeb extension if Windows\n if (!this.useWebRTC && this.isWindows) {\n /* Vidyo exposes an icon for the purpose of detection with their NMS extension.\n This is a hack. This hack also fails inexplicably at times.\n As a backup, receiveVidyoAppEvent() will also set isChromeExtensionInstalled when the icon detection fails\n but we are receiving messages from the extension.\n The combination of the two seems to ensure the extension is correctly detected in all circumstances\n */\n this.img.src =\n 'chrome-extension://' + extensionId + '/icons/128x128.png';\n if (this.img.naturalWidth > 0) {\n this.isChromeExtensionInstalled = true;\n console.log('Chrome NMS extension found');\n return true;\n } else {\n console.log(\n 'Chrome NMS Extension image src not found,' +\n 'may be due to Chrome bug, will send message to extension and look for response'\n );\n return false;\n }\n }\n if (!this.useWebRTC && !this.isWindows) {\n console.log(\n 'Ignoring extension check since WebRTC not available and not using Windows'\n );\n return false;\n }\n if (this.useWebRTC) {\n /* Vidyo learned their lessons when creating the the WebRTC Screen Share extension.\n The extension inserts an element into the web page, and we check for that element.\n So if the element exists, it means the extension has been installed/loaded.\n That's what they should have done with the NMS extension but didn't.\n */\n if (document.getElementById('vidyowebrtcscreenshare_is_installed')) {\n this.isChromeExtensionInstalled = true;\n // Since this is WebRTC, and the screen share extension is all that is needed, also mark isInstalled as true\n this.isInstalled = true;\n console.log('Chrome Sharing Extension found');\n return true;\n } else {\n console.log('Chrome Sharing Extension not found');\n return false;\n }\n }\n }\n\n connectVidyoClientForWeb(callback?: Function) {\n const connectVersionRequest = {\n type: 'RequestConnectVersion',\n version: this.chromeNativeMessagingHostVersion,\n };\n /*\n Don't care about the response(for now), but have to call RequestConnectVersion\n before Extension will connect to Native Messaging Host.\n So we kick this off as soon as we can when class inits.\n */\n this.sendVidyoAppRequest(connectVersionRequest, () => {\n this.doCallback(callback);\n });\n }\n\n detectVidyoClientForWeb(callback?: Function) {\n console.log('Now checking for VidyoClientForWeb (Chrome NMS)');\n const getVersionRequest = {\n type: 'RequestGetVersion',\n };\n\n this.connectVidyoClientForWeb();\n\n this.sendVidyoAppRequest(getVersionRequest, (getVersionResponse) => {\n if (\n getVersionResponse.version === this.chromeNativeMessagingHostVersion\n ) {\n this.isChromeNativeMessagingHostInstalled = true;\n this.isInstalled = true;\n console.log('Chrome NMS found');\n console.log('Removing the message listener');\n window.removeEventListener('message', this.receiveListener, false);\n if (callback) {\n this.doCallback(callback);\n }\n }\n });\n }\n\n detectCamera() {\n this.isCameraReady = false;\n const that = this;\n navigator.mediaDevices.enumerateDevices().then(function (sourceInfos) {\n for (let index = 0; index < sourceInfos.length; index++) {\n const deviceInfo = sourceInfos[index];\n if (deviceInfo.kind === 'videoinput') {\n console.log('Camera found: ' + deviceInfo.deviceId);\n that.isCameraReady = true;\n if (that.fireFoxCameraDetectionFunction) {\n clearInterval(that.fireFoxCameraDetectionFunction);\n }\n }\n }\n if (!that.isCameraReady) {\n // console.log(\"Camera not found\");\n }\n });\n }\n\n detectWebRTCAvailable(): Promise {\n /*Check if we can successfully connect to the WebRTC session manager\n This is just an initial check, if this fails then WebRTC is definitely\n not available*/\n /*All WebRTC capable browsers support Promises, so safe to use it here*/\n const that = this;\n let data = null;\n console.log(\n 'Contacting WebRTCSessionManager to determine if WebRTC available'\n );\n return new Promise(function (resolve, reject) {\n if (\n that.config.WebRTCSessionManager &&\n that.config.WebRTCSessionManager !== ''\n ) {\n let instancePath = '/zincadmin/service/getinstance.htm';\n if (that.config.UseNeoOrAnyConnect) {\n instancePath = '/webrtc/service/getinstance.htm';\n }\n const url =\n window.location.protocol +\n '//' +\n that.config.WebRTCSessionManager +\n instancePath;\n Ajax.ajaxSendRequest(\n url,\n 'GET',\n null,\n function (e) {\n const xhr = e.target;\n if (xhr.responseType === 'json') {\n data = xhr.response;\n } else {\n data = JSON.parse(xhr.responseText);\n }\n if (data !== null) {\n if (data.ip) {\n resolve(data.ip);\n } else {\n reject(\n Error(\n 'detectWebRTCAvailable: Did not get IP field from response'\n )\n );\n }\n } else {\n // If we get no response at all, we'll get here\n reject(\n Error(\n 'detectWebRTCAvailable: Did not get IP field from response'\n )\n );\n }\n },\n 'json'\n );\n } else {\n console.log(\n 'detectWebRTCAvailable: WebRTCSessionManager value is empty'\n );\n reject(\n Error('detectWebRTCAvailable: WebRTCSessionManager value is empty')\n );\n }\n });\n }\n\n npApiPluginInstalled() {\n navigator.plugins.refresh(false);\n let vidyoPluginMimeType = 'application/x-vidyoweb-';\n vidyoPluginMimeType += this.pluginVersion;\n const mimes = navigator.mimeTypes;\n\n /*We can't tell from plugin if camera is ready, so have\n to assume that it is.\n Mark the camera as ready so we bypass camera check when NPAPI,\n so we can then move to install modals, if necessary*/\n\n this.isCameraReady = true;\n\n /* Check NPAPI\n NOTE: Every damn browser has different implementation of MimeType Arrays,\n so have to check properties on plugin to determine how to interrogate it.\n The only browser we support that allows NPAPI still is Safari */\n if (!this.isIE) {\n for (let i = 0; i < mimes.length; i++) {\n // if (mimes[i].type === pluginMimeType) {\n const plugin = mimes[i];\n if (plugin.item && plugin.item(0).type === vidyoPluginMimeType) {\n console.log('NPAPI plugin found');\n return true;\n }\n if (plugin.type && plugin.type === vidyoPluginMimeType) {\n console.log('NPAPI plugin found');\n return true;\n }\n }\n }\n // Check IE\n if (this.isIE) {\n try {\n const control = new ActiveXObject(\n 'VidyoInc.VidyoWeb_' + this.pluginVersion\n );\n if (control) {\n console.log('ActiveX plugin found');\n return true;\n }\n } catch (e) {\n console.log(\n 'Tried to load ActiveX control, but failed: ' + e.message\n );\n }\n }\n\n return false;\n }\n\n checkVidyoComponents(callback?: Function) {\n console.log('Now checking Vidyo components');\n if (window.localStorage.getItem('useNeoVidyo')) {\n console.log(\n 'useNeo flag found in local storage, setting isInstalled to true'\n );\n this.isInstalled = true;\n return;\n }\n\n if (this.isSmartVideoAgent) {\n console.log('isSmartVideoAgent flag set, setting isInstalled to true');\n this.isInstalled = true;\n return;\n }\n\n if (this.isSafari && this.useWebRTC) {\n if (this.isWebRTCAvailable) {\n console.log('Using WebRTC and Safari, setting isInstalled to true');\n this.isInstalled = true;\n return;\n }\n }\n\n if (!this.isChrome) {\n // Not using WebRTC. Firefox not longer supports NPAPI, so exclude it (Only IE/Safari still support NPAPI)\n if (!this.useWebRTC && !this.isFireFox) {\n console.log('Not using WebRTC and not Chrome, checking NPAPI');\n this.isInstalled = this.npApiPluginInstalled();\n return;\n } else if (this.isFireFox || this.isEdge) {\n /*\n Using WebRTC but not Chrome\n Edge does not fully implement WebRTC 1.0. Currently only fully supports ORTC.\n There is a WebRTC shim/polyfill for Edge, but it would greatly increase the size/complexity of WebRTCAdapter.ts\n Opera uses Chromium, so works largely the same as Chrome,\n but can't use Chrome extensions directly (although programmatically they work exactly the same)\n So for Opera, can't do screen share until an Opera Vidyo extension is created\n (which would be simple for Vidyo or even Adapt to do)\n */\n if (this.isWebRTCAvailable) {\n console.log(\n 'Using WebRTC and Firefox/Edge, setting isInstalled to true'\n );\n this.isInstalled = true;\n } else {\n /*\n If we are configured for WebRTC, but it's not available,\n there is no fallback avaialble for Firefox/Edge. In that case,\n mark browser as unsupported\n */\n this.isInstalled = false;\n this.isBrowserSupported = false;\n }\n return;\n } else {\n // Using WebRTC, but not supported browser (Chrome/Firefox), so fall back to plugin\n console.log('Using WebRTC and non-WebRTC browser, checking NPAPI');\n this.isInstalled = this.npApiPluginInstalled();\n }\n return;\n }\n if (this.isChrome || this.isOpera) {\n // setTimeout(() => { this.detectExtension(this.extensionId) }, 2000);\n console.log('Now checking for Chrome extension: ' + this.extensionId);\n this.detectExtension(this.extensionId);\n // Only check for Chrome NMS (plugin) if not using WebRTC and if Windows\n if (!this.useWebRTC && this.isWindows) {\n console.log(\n 'Not using WebRTC and is Chrome on Windows, now checking for Chrome NMS'\n );\n // setTimeout(() => { this.detectVidyoClientForWeb() }, 2000);\n this.detectVidyoClientForWeb();\n }\n // If not using WebRTC and not Windows, then we can't support Chrome\n if (!this.useWebRTC && !this.isWindows) {\n this.isInstalled = false;\n this.isBrowserSupported = false;\n }\n return;\n }\n }\n\n checkInstallProgress(\n installComponent: string,\n nextInstallFunction: Function,\n callback: Function\n ) {\n const timeoutcallback = () => {\n this.checkInstallProgress(\n installComponent,\n nextInstallFunction,\n callback\n );\n };\n const response = {\n isInstalled: false,\n nextInstallFunction: nextInstallFunction,\n installComponent: installComponent,\n hasError: false,\n errorMsg: '',\n };\n\n /*\n Save install information, because we may need to refresh page (for Chrome extension)\n and in case something happens before install(s) complete\n */\n window.localStorage.setItem('installComponent', installComponent);\n\n switch (installComponent) {\n case 'Chrome Extension':\n const chromeExtensionPresent = this.detectExtension(this.extensionId);\n if (chromeExtensionPresent) {\n this.isChromeExtensionInstalled = true;\n response.isInstalled = true;\n response.hasError = false;\n }\n // Only check for Chrome NMS (plugin) if not using WebRTC\n if (!this.useWebRTC) {\n this.detectVidyoClientForWeb();\n }\n\n if (this.isChromeExtensionInstalled) {\n response.isInstalled = true;\n response.hasError = false;\n }\n break;\n case 'Chrome Plugin':\n if (!this.isChromeNativeMessagingHostInstalled) {\n this.detectVidyoClientForWeb();\n }\n if (this.isChromeNativeMessagingHostInstalled) {\n this.isChromeNativeMessagingHostInstalled = true;\n response.isInstalled = true;\n response.hasError = false;\n console.log('Removing the message listener');\n window.removeEventListener('message', this.receiveListener);\n }\n break;\n case 'NPAPI Plugin':\n const npApiPluginPresent = this.npApiPluginInstalled();\n if (npApiPluginPresent) {\n this.isInstalled = true;\n response.isInstalled = true;\n response.hasError = false;\n }\n break;\n case 'Neo':\n if (window.localStorage.getItem('useNeoVidyo') === 'true') {\n this.isInstalled = true;\n response.isInstalled = true;\n response.hasError = false;\n }\n break;\n default:\n response.errorMsg = `Install component is not recognized: ${installComponent}`;\n }\n if (response.isInstalled || response.hasError) {\n this.doCallback(callback(response));\n return;\n } else {\n console.log('Starting install timer');\n this.installTimer = setTimeout(timeoutcallback.bind(this), 3000);\n }\n }\n\n sendVidyoAppRequest(obj: any, callback: Function) {\n obj._id = Math.floor(Math.random() * 1000000);\n this.callbacks[obj._id] = callback;\n clearTimeout(this.timeouts[obj._id]);\n\n this.timeouts[obj._id] = setTimeout(() => {\n console.log('timeout:', obj.type);\n obj.error = 'connection timeout';\n if (this.callbacks[obj._id] && this.timeouts[obj._id]) {\n this.callbacks[obj._id](obj);\n }\n }, 2000);\n\n obj._direction = 1;\n\n console.log('snd to ext:', JSON.stringify(obj));\n window.postMessage(obj, '*');\n }\n\n receiveVidyoAppEvent(event: any) {\n const message = event.data;\n if (message.type === 'log') {\n console.log('rcv from ext:', JSON.stringify(message));\n } else {\n console.log('rcv from ext:', JSON.stringify(message));\n }\n\n if (message._direction === 2) {\n /*\n We are setting isChromeExtensionInstalled to true here because sometimes detectExtension fails inexplicably, yet we get messages\n So when this occurs, setting isChromeExtensionInstalled here ensures the state of extension install is correct.\n */\n this.isChromeExtensionInstalled = true;\n console.log(\n 'Received message from Chrome extension, this verifies extension is installed'\n );\n console.log(\n 'Chrome Install boolean set to: ' + this.isChromeExtensionInstalled\n );\n if (message.type) {\n if (message.type.indexOf('OUT_EVENT') === -1) {\n if (this.callbacks[message._id] && this.timeouts[message._id]) {\n clearTimeout(this.timeouts[message._id]);\n delete this.timeouts[message._id];\n this.callbacks[message._id](message);\n delete this.callbacks[message._id];\n }\n return;\n }\n }\n }\n }\n }\n}\n","/**\n * VidyoMain class for Vidyo functionality.\n * This class loads Vidyo-related functionality and manages the video conference\n *\n * Vidyo provides three mechanisms for providing conference capabilities\n * 1. NPAPI plugin\n * 2. Chrome Extension (VidyoWebConnecter) coupled with Native Messaging Host (VidyoClientForWeb)\n * 3. WebRTC\n *\n * Which mechanism is used is dependent on the browser in use, and whether WebRTC is configured/available\n *\n * The VidyoMain.vidyoClient property will either be of type VidyoClient (for NPAPI or VidyoClientForWeb)\n * or of type WebRTCClient. Vidyo conference events are sent/received through VidyoMain.vidyoClient\n */\n\nnamespace SmartVideo {\n export class VidyoMain {\n timer: number;\n config: ISmartVideoConfig;\n\n // conference properties\n fullScreenShare: boolean;\n isSharing: boolean;\n sharesInCall: number;\n currentShareId: string;\n participantsInCall: number;\n newShareUri: string;\n // appWindowId property doesn't appear to be used at the moment\n appWindowId: any;\n sysDesktopId: string[];\n callState: string;\n progressStep: number;\n\n // configuration of behavior for this code\n useConsoleForLogging: boolean;\n useAlertsForLogging: boolean;\n useCallbackForOutEvents: boolean; // if false, use a JavaScript event instead of callback\n willStartOnLoad: boolean; // if true, will invoke start() on plug-in object from bodyLoaded()\n useLoginEvent: boolean;\n useWebRTC: boolean;\n isChrome: boolean;\n isFireFox: boolean;\n isSmartVideoAgent: boolean;\n browser: string;\n isJoinRequest: boolean;\n pluginVersion: string;\n chromeNMSVersion: string;\n\n urlPortalAddress: string;\n urlUser: string;\n urlPass: string;\n urlPortalUri: string;\n urlGuestName: string;\n urlRoomKey: string;\n urlRoomPin: string;\n urlEncoded: string;\n urlUseSignIn: string;\n urlInteractionId: string;\n urlMuteVideoOnJoin: boolean;\n urlMuteAudioOnJoin: boolean;\n webRTCSessionManager: string;\n ImagePath: string;\n\n // Toggle Divs\n vidyoArea: string;\n pluginHolder: string;\n videoElem: HTMLVideoElement;\n shareSelect: HTMLSelectElement;\n\n // Classes\n vidyoClient: IVidyoClient;\n chromeWrapper: ChromeWrapper;\n\n // Vidyo ended callback\n vidyoEndedCallback: Function;\n showConferenceCallback: Function;\n\n // Conference modal\n conferenceModal: HTMLElement;\n\n // Queue object, used to queue events that should be sent when conference starts\n inEventQueueForSend: Array;\n\n constructor(config: any, vidyoDetection: IVidyoDetection, vidyoArea: string, pluginHolder: string,\n ImagePath?: string, webRTCSessionManager?: string) {\n this.isChrome = vidyoDetection.isChrome;\n this.isFireFox = vidyoDetection.isFireFox;\n this.isSmartVideoAgent = false;\n this.browser = vidyoDetection.browserReport.browser.name;\n if (this.browser === 'SmartVideoAgent') {\n this.isSmartVideoAgent = true;\n }\n this.isJoinRequest = false;\n this.useWebRTC = vidyoDetection.useWebRTC;\n this.webRTCSessionManager = webRTCSessionManager;\n this.config = config;\n\n this.log('VidyoMain Chrome Detection: ' + this.isChrome);\n this.chromeNMSVersion = vidyoDetection.chromeNativeMessagingHostVersion;\n this.pluginVersion = vidyoDetection.pluginVersion;\n // init the Classes\n if (!vidyoDetection.useWebRTC) {\n this.vidyoClient = new VidyoClient(this.isChrome, this.browser);\n } else {\n this.vidyoClient = new WebRTCClient(this.isChrome, this.browser);\n }\n\n // in-call variables to manage display modes, etc\n this.fullScreenShare = false;\n this.isSharing = false;\n this.sharesInCall = 0;\n this.currentShareId = '-1';\n this.participantsInCall = 0;\n this.appWindowId = [];\n this.sysDesktopId = [];\n this.callState = 'Idle';\n\n // configuration of behavior for this code\n this.useConsoleForLogging = true;\n this.useAlertsForLogging = false;\n this.useCallbackForOutEvents = true; // if false, use a JavaScript event instead of callback\n this.willStartOnLoad = true; // if true, will invoke start() on plug-in object\n this.useLoginEvent = true;\n this.progressStep = 0;\n\n\n this.urlPortalAddress = '';\n this.urlUser = '';\n this.urlPass = '';\n this.urlPortalUri = '';\n this.urlGuestName = '';\n this.urlRoomKey = '';\n this.urlRoomPin = '';\n this.urlEncoded = '';\n this.urlInteractionId = '';\n this.urlMuteAudioOnJoin = false;\n this.urlMuteVideoOnJoin = false;\n if (ImagePath) {\n this.ImagePath = ImagePath;\n } else {\n this.ImagePath = './images/';\n }\n\n // Define Divs that hold/display Vidyo player\n this.vidyoArea = vidyoArea;\n this.pluginHolder = pluginHolder;\n\n this.conferenceModal = null;\n this.inEventQueueForSend = [];\n }\n\n initVidyo(url: string, isJoinRequest: boolean, vidyoEndedCallback: Function, showConferenceCallback?: Function) {\n // document.addEventListener(\"beforeunload\", this.beforeUnload);\n this.vidyoEndedCallback = vidyoEndedCallback;\n this.showConferenceCallback = showConferenceCallback;\n this.isJoinRequest = isJoinRequest;\n this.parseUrlArgs(url);\n this.sendCustomerConnected();\n if (!this.useWebRTC) {\n if (this.isChrome || this.isSmartVideoAgent) {\n this.startChromeWrapper();\n } else {\n this.startPlugin();\n }\n } else {\n this.startWebRTCClient();\n }\n }\n\n beforeUnload() {\n /* Modern browsers no longer allow any action except to show a browser-generated warning dialog\n * So attempting to do anything other than returning a string which will be contained in the dialog\n * is useless. Commenting out the code just for historical purposes */\n\n // document.removeEventListener(\"beforeunload\", this.beforeUnload);\n // this.setParticipantLimit(16);\n\n // if (this.callState !== \"InConference\") {\n // var inEvent = {\n // 'type': \"InEventCancel\"\n // };\n // this.vidyoClient.sendEvent(inEvent, null);\n // }\n // this.sendDisconnect();\n // return null;\n }\n\n updateShareDropDown(response) {\n this.log(`updateShareDropDown(): ${JSON.stringify(response)}`);\n\n const transformedData = {\n windows: [],\n desktops: [],\n sharing: !(this.currentShareId === '-1')\n };\n let i: number,\n name,\n mywindow: { id; name; highlight: boolean },\n desktop: { id; name: string; highlight: boolean };\n\n // windows and desktops are separated in the response\n // you may choose not to expose all windows and/or desktops based on the use case. The filtering would happen here.\n for (i = 0; i < response.numApplicationWindows; i++) {\n name = (response.appWindowAppName[i] && response.appWindowAppName[i].length)\n ? response.appWindowAppName[i] : response.appWindowName[i];\n mywindow = {\n id: response.appWindowId[i],\n name: name,\n highlight: (this.currentShareId === response.appWindowId[i])\n };\n transformedData.windows.push(mywindow);\n }\n this.sysDesktopId.length = 0;\n for (i = 0; i < response.numSystemDesktops; i++) {\n // Custom text for sharing full displays\n let desktopName = 'Desktop ';\n desktopName = desktopName + (i + 1).toString();\n desktop = {\n id: response.sysDesktopId[i],\n name: desktopName,\n highlight: (this.currentShareId === response.sysDesktopId[i])\n };\n transformedData.desktops.push(desktop);\n this.sysDesktopId.push(response.sysDesktopId[i]);\n }\n\n // var select = document.getElementById(\"share_select\");\n const select = this.shareSelect;\n\n for (i = select.options.length - 1; i >= 0; i--) {\n select.remove(i);\n }\n\n // note that using an HTML dropdown list allows the dropdown to appear over the video window.\n // Javascript and other more complex UI may not always overlay plugin/video divs in some browsers.\n if (this.isSharing) {\n const option = document.createElement('option');\n option.value = '-1';\n option.text = 'Stop Sharing';\n select.add(option);\n\n } else {\n const option = document.createElement('option');\n option.value = '-1';\n option.text = 'Select an App or Desktop to Share';\n select.add(option);\n }\n\n transformedData.windows.forEach(element => {\n if (element.highlight) {\n const option = document.createElement('option');\n option.value = element.id;\n option.text = element.name;\n option.selected = true;\n select.add(option);\n } else {\n const option = document.createElement('option');\n option.value = element.id;\n option.text = element.name;\n select.add(option);\n }\n });\n\n transformedData.desktops.forEach(element => {\n if (element.highlight) {\n const option = document.createElement('option');\n option.value = element.id;\n option.text = element.name;\n option.selected = true;\n select.add(option);\n } else {\n const option = document.createElement('option');\n option.value = element.id;\n option.text = element.name;\n select.add(option);\n }\n });\n }\n\n updateShareList(e: Event) {\n this.log('updateShareList()');\n const request = {\n 'type': 'RequestGetWindowsAndDesktops'\n };\n this.shareSelect = e.target;\n this.vidyoClient.sendRequest(request, this.updateShareDropDown.bind(this));\n }\n\n shareChanged(e: Event) {\n // keep track of what's newly shared to updated highlighting on share dropdown\n const selectShare = e.target;\n this.currentShareId = selectShare.value;\n // shareId = -1 means stop sharing\n if (this.currentShareId === '-1') {\n this.isSharing = false;\n this.log('sending unshare event');\n this.sendUnshareEvent();\n } else {\n this.isSharing = true;\n this.log(`sending share event with id ${this.currentShareId}`);\n this.sendShareEvent(this.currentShareId);\n }\n }\n\n toggleConferenceButton(e: Event) {\n const togglebutton = e.target;\n const togglelabel = document.getElementById('lbl_' + togglebutton.id);\n this.log(togglebutton);\n switch (togglebutton.id) {\n case 'camera_toggle':\n if (togglebutton.checked) {\n togglelabel.innerText = 'Camera ON';\n this.sendMuteCameraEvent(false);\n } else {\n togglelabel.innerText = 'Camera OFF';\n // For NPAPI plugins, need to queue the event if plugin isn't loaded yet\n this.sendMuteCameraEvent(true);\n }\n break;\n case 'share_toggle':\n const inEvent = {};\n let msg;\n if (togglebutton.checked) {\n inEvent.type = 'InEventShare';\n inEvent.shareType = 'DesktopWindow';\n inEvent.window = '1';\n togglelabel.innerText = 'Sharing In Progress';\n\n } else {\n inEvent.type = 'InEventUnshare';\n togglelabel.innerText = 'Click to Share';\n }\n if (this.vidyoClient.sendEvent(inEvent)) {\n msg = 'Sent ' + inEvent.type + ' successfully';\n } else {\n msg = 'Not in a call!';\n alert(msg);\n }\n this.log(msg);\n break;\n case 'microphone_toggle':\n if (togglebutton.checked) {\n togglelabel.innerText = 'Microphone ON';\n this.sendMuteMicEvent(false);\n } else {\n togglelabel.innerText = 'Microphone OFF';\n // For NPAPI plugins, need to queue the event if plugin isn't loaded yet\n this.sendMuteMicEvent(true);\n }\n break;\n case 'speaker_toggle':\n if (togglebutton.checked) {\n togglelabel.innerText = 'Speaker ON';\n this.sendMuteSpeakerEvent(false);\n } else {\n togglelabel.innerText = 'Speaker OFF';\n this.sendMuteSpeakerEvent(true);\n }\n break;\n default:\n break;\n }\n\n this.log('toggleConferenceButton: ' + togglebutton.id + ':' + togglebutton.checked);\n }\n\n clientGetNumParticipants(callback) {\n const request = {\n 'type': 'RequestGetNumParticipants',\n 'numParticipants': 0\n };\n this.vidyoClient.sendRequest(request, response => {\n this.log(`clientGetNumParticipants(): ${response}`);\n callback(response.numParticipants);\n });\n }\n\n clientGetParticipants(callback) {\n let actualParticipantCount = 0;\n const request = {\n 'type': 'RequestGetParticipants',\n 'numberParticipants': 0,\n 'name': ''\n };\n this.vidyoClient.sendRequest(request, response => {\n if (response) {\n const responseJson = JSON.stringify(response);\n this.log(responseJson);\n } else {\n this.log('Did not get a response object back to clientGetParticipants request');\n return;\n };\n this.log(`clientGetParticipants(): ${response}`);\n actualParticipantCount = response.numberParticipants;\n // Eliminate the VidyoReplay Recorder participant and any Supervisor Monitor participants\n // Similar logic exists in WebRTCPlugin to prevent OutEventParticpantsChanged from being raised\n // when Recorder or Monitor joins/leaves\n for (let i = 0; i < response.name.length; i++) {\n // Recorder is counted as a participant, so need to make sure we don't try to get it's stream\n // Monitoring supervisors also don't send a stream, so exclude them from list of participants\n // Effectively, we want to ignore these participants\n if (response.name[i] === 'Recorder' || response.name[i].indexOf('-Monitor') >= 0) {\n actualParticipantCount = actualParticipantCount - 1;\n }\n }\n this.log('clientGetParticipants returned participant count: ' + actualParticipantCount);\n\n const participants = {\n 'names': response.name,\n 'actualParticipantCount': actualParticipantCount\n }\n callback(participants);\n });\n }\n\n enableAppSharing() {\n const requestEnableAppShare = {\n type: 'RequestEnableAppShare',\n isEnable: true\n };\n\n this.vidyoClient.sendRequest(requestEnableAppShare, function (response) { });\n }\n\n clientShareGet(callback) {\n const request = {};\n\n request.type = 'RequestGetWindowShares';\n\n // public properties for created object,\n // initial values of which are potentially passed\n // into this function\n request.requestType = ''; // params && params.requestType || \"\";\n request.remoteAppUri = ['']; // params && params.remoteAppUri || [\"\"];\n request.remoteAppName = ['']; // params && params.remoteAppName || [\"\"];\n request.numApp = 0; // params && params.numApp || 0;\n request.currApp = 0; // params && params.currApp || 0;\n request.eventUri = ''; // params && params.eventUri || \"\";\n request.newApp = 0; // params && params.newApp || 0;\n\n this.vidyoClient.sendRequest(request, callback);\n }\n\n displayNewShare(request) {\n // if there's a new share, display it\n if (this.newShareUri) {\n for (let i = 0; i < request.numApp; i++) {\n if (request.remoteAppUri[i] === this.newShareUri) {\n request.newApp = i + 1;\n break;\n }\n }\n // otherwise (when shares are removed), display the last share added\n } else {\n request.newApp = request.numApp;\n }\n request.type = 'RequestSetWindowShares';\n request.requestType = 'ChangeSharingWindow';\n\n // FIX: add response callback to check for success\n this.vidyoClient.sendRequest(request, null);\n if (this.useWebRTC) {\n const numberOfShares = request.newApp;\n if (numberOfShares > 0) {\n this.adjustWebRTCLayoutWithShare();\n } else {\n this.adjustWebRTCLayout();\n }\n }\n }\n\n clientSharesSetCurrent() {\n this.clientShareGet(this.displayNewShare.bind(this));\n }\n\n onOutEvent(event) {\n let logMesg;\n let waitingForConnection: boolean;\n event = event || {};\n let msg = `Received out event with type of ${event.type}`;\n this.log(msg);\n msg = 'Event: ' + JSON.stringify(event);\n this.log(msg);\n switch (event.type) {\n case 'OutEventSignIn':\n if (parseInt(event.activeEid, 10) === 0) {\n const licenseEvent = {\n 'type': 'InEventLicense'\n };\n this.vidyoClient.sendEvent(licenseEvent, null);\n this.log('Sent InEventLicense');\n } else {\n this.log('Received activeEid: ' + event.activeEid);\n // When using NPAPI plugin, may encounter instances where send events were issued before\n // plugin is started. In that case, we queue the events and then resend once\n // plugin is started and we are at point the events are safe to send\n if (this.inEventQueueForSend.length > 0) {\n for (let index = 0; index < this.inEventQueueForSend.length; index++) {\n const inEventToSend = this.inEventQueueForSend[index];\n this.vidyoClient.sendEvent(inEventToSend);\n }\n this.inEventQueueForSend = [];\n }\n }\n break;\n case 'OutEventPluginConnectionSuccess':\n waitingForConnection = false;\n if (this.isChrome && !this.useWebRTC) {\n this.vidyoClient.sendRequest({\n type: 'RequestSetDomain',\n 'domain': this.urlPortalAddress\n }, function (response) {\n if (response.result !== 'ok') {\n this.log('RequestSetDomain: Error setting domain');\n }\n });\n }\n break;\n case 'OutEventPluginConnectionFailure':\n waitingForConnection = false;\n if (!this.isChrome || !this.isSmartVideoAgent) {\n const stoppedPluginFailure = this.vidyoClient.stop();\n }\n break;\n case 'OutEventPluginError':\n waitingForConnection = false;\n if (!this.isChrome || !this.isSmartVideoAgent) {\n const stoppedPluginError = this.vidyoClient.stop();\n }\n break;\n case 'OutEventReloaded':\n waitingForConnection = false;\n if (!this.isChrome || !this.isSmartVideoAgent) {\n const stoppedReloaded = this.vidyoClient.stop();\n }\n break;\n case 'extensionMsgClientClosed':\n if (event.message === 'Native host has exited.') {\n this.log('VidyoClientForWeb stopped for some reason');\n } else if (event.message === 'Specified native messaging host not found.') {\n this.log('VidyoClientForWeb not Found or not installed');\n }\n break;\n // ---------typical OUT EVENTS-------------\n case 'OutEventCallState':\n logMesg = `********* Call State Changed to: ${event.callState}**********`;\n this.log(logMesg);\n break;\n case 'OutEventLogicStarted':\n if (this.willStartOnLoad) {\n if (!this.useWebRTC) {\n this.enableAppSharing();\n }\n this.sendGuestLogin();\n }\n break;\n case 'OutEventConferenceActive':\n if (this.isChrome || this.useWebRTC || this.isSmartVideoAgent) {\n this.log('Conference Active, useWebRTC is set to: ' + this.useWebRTC);\n this.switchToConference();\n }\n if (this.useWebRTC) {\n this.adjustWebRTCLayout();\n break;\n }\n if (this.isChrome || this.isSmartVideoAgent) {\n this.videoElem.style.width = '100%';\n this.videoElem.style.height = '100%';\n // Confirmed in conference, display video\n this.videoElem.style.display = 'block';\n\n document.getElementById('lbl_usermedia').style.display = 'none';\n }\n\n this.setPreferredMode(1);\n this.setParticipantLimit(16);\n this.sendAgentConnected();\n break;\n case 'OutEventConferenceEnded':\n this.conferenceModal.style.display = 'none';\n this.setParticipantLimit(16);\n // Assume want to stop the plugin after conference is over.\n const stoppedConferenceEnded = this.vidyoClient.stop();\n // Add an additional call to clean up/reset\n this.vidyoEndedCallback();\n break;\n case 'OutEventJoinProgress':\n // WebRTC doesn't use OutEventJoinProgress, so only do progress for plugins\n if (!this.useWebRTC) {\n this.progressStep++;\n logMesg = `Join Progress Step: ${this.progressStep}`;\n this.log(logMesg);\n }\n break;\n case 'OutEventAddShare':\n this.sharesInCall++;\n logMesg = `Share added from URI: ${event.URI}`;\n this.log(logMesg);\n this.newShareUri = event.URI;\n this.clientSharesSetCurrent();\n this.setPreviewModeOnStatusChange();\n break;\n case 'OutEventRemoveShare':\n this.sharesInCall--;\n if (this.sharesInCall === 0) {\n this.fullScreenShare = false;\n this.setParticipantLimit(16);\n }\n this.clientSharesSetCurrent();\n this.setPreviewModeOnStatusChange();\n break;\n case 'OutEventParticipantsChanged':\n this.log('Participants changed, event: ' + JSON.stringify(event));\n this.log('useWebRTC is set to ' + this.useWebRTC);\n if (!this.useWebRTC) {\n // this.participantsInCall = event.participantCount;\n this.clientGetParticipants(participants => {\n this.participantsInCall = participants.actualParticipantCount;\n })\n this.setPreviewModeOnStatusChange();\n } else {\n this.log('Adjusting WebRTC layout due to participant change');\n this.adjustWebRTCLayout();\n }\n break;\n case 'OutEventVideoStreamsChanged':\n this.log('Video Streams changed, event: ' + JSON.stringify(event));\n // this.participantsInCall = event.streamCount + 1;\n this.adjustWebRTCLayout();\n break;\n case 'OutEventActiveTalkersChanged':\n this.adjustWebRTCLayout();\n break;\n case 'PrivateOutEventVcsoapGuestLink':\n this.log(`****** GuestID = ${event.guestID}********`);\n this.log(JSON.stringify(event));\n break;\n case 'OutEventLicense':\n if (event.OutOfLicenses === true) {\n console.error('Received license error');\n console.error(event);\n }\n break;\n case 'VidyoOutEventCancelShare':\n const lbl_sharetoggle = document.getElementById('lbl_share_toggle');\n const sharetoggle = document.getElementById('share_toggle');\n lbl_sharetoggle.innerText = 'Click to Share';\n sharetoggle.checked = false;\n // this.toggleShareIcon();\n break;\n // please add additional OutEvents as needed\n case 'OutEventRemoteSourceAdded':\n const eventDisplayName = event.displayName;\n const eventDisplayNameArray = eventDisplayName.split('-');\n const inEvent = {\n 'type': 'InEventSetDisplayName',\n 'uri': event.participantURI,\n 'displayName': ''\n };\n // Remove the -Customer suffix when displaying name\n if (event.displayName.indexOf('-Customer') !== -1) {\n const newDisplayName = eventDisplayName.substring(0, eventDisplayName.indexOf('-Customer'));\n inEvent.displayName = newDisplayName;\n this.vidyoClient.sendEvent(inEvent);\n return;\n }\n // Remove the InteractionId when displaying name\n eventDisplayNameArray.forEach(element => {\n if (element.length === 10 && !isNaN(+element)) {\n inEvent.displayName = eventDisplayNameArray[0];\n this.vidyoClient.sendEvent(inEvent);\n return;\n }\n });\n break;\n default:\n this.log('Did not have a matching case for OutEvent: ' + event.type);\n break;\n }\n }\n\n onDoubleClickChrome() {\n if (this.sharesInCall > 0) {\n if (this.fullScreenShare) {\n this.setParticipantLimit(16);\n this.fullScreenShare = false;\n } else {\n this.setParticipantLimit(0);\n this.fullScreenShare = true;\n }\n this.setPreviewModeOnStatusChange();\n }\n }\n\n addPluginToDom() {\n\n // don't add if already added\n const pluginElement = document.getElementById('plugin');\n if (!pluginElement) {\n this.log('Attempting to add plugin to the DOM...');\n\n let pluginMimeType = 'application/x-vidyoweb-';\n pluginMimeType += this.pluginVersion;\n\n const pluginObject = document.createElement('object');\n pluginObject.className = 'plugin';\n pluginObject.id = 'plugin';\n pluginObject.width = '100%';\n pluginObject.height = '100%';\n\n const holder = document.getElementById('pluginHolder');\n\n try {\n pluginObject.type = pluginMimeType;\n this.log('Plugin type successfully set to: ' + pluginMimeType);\n } catch (error) {\n const mesg = `Unable to Instantiate VidyoWeb: ${pluginMimeType}; Error: ${error}`;\n this.log(mesg);\n return false;\n }\n\n if (!pluginObject.parentNode) {\n holder.appendChild(pluginObject);\n this.log('Plugin added to DOM');\n }\n\n if (!pluginObject['start']) {\n /* Keep object in the DOM. Browsers commonly invoke \"Click to Play\" functionality\n which causes pluginObject.start to fail, but plugin will be loaded when user clicks\n to allow/trust */\n this.log('Could not find start property on Plugin, probably due to plugin not having permissions to run yet');\n }\n }\n\n return true;\n }\n\n startPlugin() {\n this.log('startPlugin() called');\n this.switchToConference();\n if (this.addPluginToDom()) {\n const pluginHtml = document.getElementById('plugin');\n const config = {\n plugin: pluginHtml,\n outEventCallbackObject: this,\n defaultOutEventCallbackMethod: 'onOutEvent',\n useCallbackWithPlugin: this.useCallbackForOutEvents\n };\n if (pluginHtml['start']) {\n clearTimeout(this.timer);\n if (this.vidyoClient.start(config)) {\n this.log('VidyoWeb started successfully');\n } else {\n this.log('VidyoWeb did not start successfully!');\n }\n } else {\n // Retry startPlugin, in case plugin needs to be activated before plugin.start will work\n this.log('plugin.start not yet available in startPlugin(), retrying in 1 second');\n this.timer = setTimeout(this.startPlugin.bind(this), 1000);\n }\n\n } else {\n this.log('addPluginToDom returned false');\n this.log('VidyoWeb did not start successfully!');\n }\n }\n\n startWebRTCClient() {\n this.vidyoClient.setDefaultOutEventCallbackMethod('onOutEvent');\n this.vidyoClient.setOutEventCallbackObject(this);\n this.vidyoClient.setLogCallback(this.log.bind(this));\n this.vidyoClient.setSessionManager(this.webRTCSessionManager);\n this.vidyoClient.start();\n }\n\n startChromeWrapper() {\n if (!this.chromeWrapper) {\n this.chromeWrapper = new ChromeWrapper(this.browser);\n }\n this.vidyoClient.setProxy(this.chromeWrapper.chromeproxy);\n this.chromeWrapper.chromeproxy.connect();\n this.chromeWrapper.chromeproxy.setOutEventDispatchMethod(this.onOutEvent.bind(this));\n\n this.chromeWrapper.chromeproxy.start(this.chromeNMSVersion, startResult => {\n const result = JSON.stringify(startResult.result);\n this.log(`ChromeProxy.start: ${result}`);\n }, null);\n\n if (!this.chromeWrapper.chromeproxy.started) {\n this.detectCameraStatusAndContinue();\n } else {\n this.startChromeVideo();\n }\n }\n\n startChromeVideo() {\n this.log('startChromeVideo called');\n let retval = false;\n const holder = document.getElementById(this.pluginHolder);\n holder.innerHTML = '' +\n '';\n\n const usermediaMessage = document.getElementById('lbl_usermedia');\n this.videoElem = holder.childNodes[0];\n this.videoElem.addEventListener('dblclick', this.onDoubleClickChrome.bind(this), false);\n\n // Don't display the video element until we've confirmed we are in the conference\n this.videoElem.style.display = 'none';\n\n this.chromeWrapper.chromeproxy.useVideoElem(this.videoElem, (message, permissionDeniedError) => {\n usermediaMessage.innerHTML = message;\n if (!permissionDeniedError && !message) {\n retval = true;\n } else if (permissionDeniedError) {\n window.alert('VidyoWeb needs access to your camera in order to join a conference.' +\n 'If you change your mind, click the camera icon in your url bar and allow the browser to use your devices');\n // Should not actually ever reach this part of code if they have a camera\n } else {\n window.alert('VidyoWeb could not start your camera. Please check your camera is plugged in and then press OK.');\n this.detectCameraStatusAndContinue();\n }\n });\n\n return retval;\n }\n\n detectCameraStatusAndContinue() {\n this.vidyoClient.sendRequest({ type: 'RequestGetCameraStatus' }, cameraReady => {\n /*Note: Need to check this code. It appears we get a status even if a camera isn't actually plugged in\n This is likely a bug in Vidyo's code, where it's saying/returning the *WebVirtualCamera* is ready, but what\n we want is the status of whether that virtual camera has successfully connected to a physical camera*/\n if (cameraReady.status) {\n console.log('Camera status check returned: ' + cameraReady.status);\n this.startChromeVideo();\n } else {\n // loop until camera detected\n console.log('Camera not detected, rechecking in two seconds...');\n setTimeout(this.detectCameraStatusAndContinue.bind(this), 2000);\n }\n });\n }\n\n setParticipantLimit(count) {\n if (count > 8 || count < 0) {\n count = 8;\n }\n\n const inEvent = {\n 'type': 'InEventParticipantsLimit',\n 'maxNumParticipants': count\n };\n\n this.vidyoClient.sendEvent(inEvent, null);\n }\n\n setPreferredMode(preferred) {\n const inEvent = {\n 'type': 'InEventLayout'\n };\n\n inEvent.numPreferred = preferred;\n this.vidyoClient.sendEvent(inEvent, null);\n\n }\n\n setPreviewMode(previewMode) {\n const inEvent = {\n 'type': 'EventPreview'\n };\n this.log('Setting preview mode to: ' + previewMode);\n inEvent.previewMode = previewMode;\n this.vidyoClient.sendEvent(inEvent, null);\n\n }\n\n setPreviewModeOnStatusChange() {\n if (isNaN(this.participantsInCall)) {\n this.log('Participants in call isn\\'t defined for some reason');\n }\n\n this.log('Participants in Call: ' + this.participantsInCall)\n if (this.fullScreenShare) {\n this.setPreviewMode('PIP');\n } else {\n if (this.participantsInCall <= 3) {\n if (this.sharesInCall > 0) {\n this.setPreviewMode('Dock');\n } else {\n this.setPreviewMode('PIP');\n }\n\n } else {\n this.setPreviewMode('Dock');\n }\n }\n }\n\n sendGuestLogin() {\n\n if (!this.urlPortalUri) {\n return 0;\n }\n\n if (!this.urlGuestName) {\n this.urlGuestName = 'Guest';\n }\n // replace ALL occurrences of \"+\" in Guest name (in case of multiple spaces\n this.urlGuestName = this.urlGuestName.replace(/\\+/g, ' ');\n const requestId = Math.floor(Math.random() * 1000000);\n\n const inEvent = {\n 'type': 'PrivateInEventVcsoapGuestLink',\n 'typeRequest': 'GuestLink',\n 'requestId': requestId,\n 'portalUri': this.urlPortalAddress,\n 'roomKey': this.urlRoomKey,\n 'guestName': this.urlGuestName,\n 'loginType': 'guest'\n };\n\n if (this.urlRoomPin) {\n inEvent.pin = this.urlRoomPin;\n this.log('sendGuestLink passed : ' + this.urlRoomPin + ', ' + this.urlPortalAddress + ', ' +\n this.urlRoomKey + ', ' + this.urlGuestName)\n }\n this.log('Sending guest login: ' + JSON.stringify(inEvent));\n this.vidyoClient.sendEvent(inEvent);\n return 0;\n }\n\n sendCustomerConnected() {\n const url = this.config.SVSIntegrationServiceUrl + '/ininvid/v1/customerconnected';\n const request = {};\n request.RoomKey = this.urlRoomKey;\n\n if (!this.isJoinRequest) {\n const vidyoSessionData = JSON.parse(window.localStorage.getItem('VidyoSessionData'));\n request.InteractionId = vidyoSessionData.interactionId;\n this.log('Sending customer connected request: ' + JSON.stringify(request));\n Ajax.ajaxSendRequest(url, 'POST', request);\n }\n }\n\n sendAgentConnected() {\n const url = this.config.SVSIntegrationServiceUrl + '/ininvid/v1/agentconnected';\n const request = {};\n request.RoomKey = this.urlRoomKey;\n\n if (this.isJoinRequest && this.urlInteractionId) {\n request.InteractionId = this.urlInteractionId;\n this.log('Sending agent connected request: ' + JSON.stringify(request));\n Ajax.ajaxSendRequest(url, 'POST', request);\n }\n }\n\n sendDisconnect() {\n const url = this.config.SVSIntegrationServiceUrl + '/ininvid/v1/disconnect';\n const request = {};\n let isCustomer;\n if (this.isJoinRequest) {\n isCustomer = false;\n } else {\n isCustomer = true;\n }\n request.RoomKey = this.urlRoomKey;\n request.IsCustomer = isCustomer;\n\n if (isCustomer) {\n // Send the interactionId, in case the Ajax request gets routed to a server that\n // isn't currently aware of the interaction\n const vidyoSessionData = JSON.parse(window.localStorage.getItem('VidyoSessionData'));\n request.InteractionId = vidyoSessionData.interactionId;\n } else {\n // This user joined the video call\n // The Vidyo AddIn in IC client appends the IC user's interactionId to the URL that is popped\n request.InteractionId = this.urlInteractionId;\n }\n this.log('Sending disconnect request: ' + JSON.stringify(request));\n Ajax.ajaxSendRequest(url, 'POST', request);\n\n }\n\n sendLeaveEvent(splashElement: string, pluginHolderElement: string, vidyoAreaElement: string) {\n const inEvent = {\n 'type': 'InEventLeave'\n };\n\n this.vidyoClient.sendEvent(inEvent, null);\n this.sendDisconnect();\n this.vidyoEndedCallback();\n }\n\n sendMuteCameraEvent(mute: boolean) {\n const inEvent = {\n 'type': 'InEventMuteVideo',\n 'willMute': true\n };\n inEvent.willMute = mute;\n if (this.vidyoClient.sendEvent(inEvent, null)) {\n this.log('Send Mute Camera sent successfully');\n } else {\n this.log('Send Mute Camera failed');\n this.log('Send Mute Camera failure may be due to plugin not being started yet, queueing event');\n this.inEventQueueForSend.push(inEvent);\n }\n }\n\n sendMuteMicEvent(mute: boolean) {\n const inEvent = {\n 'type': 'InEventMuteAudioIn',\n 'willMute': true\n };\n inEvent.willMute = mute;\n\n if (this.vidyoClient.sendEvent(inEvent, null)) {\n this.log('Send Mute Microphone sent successfully');\n } else {\n this.log('Send Mute Microphone failed');\n this.log('Send Mute Microphone failure may be due to plugin not being started yet, queueing event');\n this.inEventQueueForSend.push(inEvent);\n }\n }\n\n sendMuteSpeakerEvent(mute: boolean) {\n const inEvent = {\n 'type': 'InEventMuteAudioOut',\n 'willMute': true\n };\n inEvent.willMute = mute;\n\n if (this.vidyoClient.sendEvent(inEvent, null)) {\n this.log('Send Mute Speaker sent successfully');\n } else {\n this.log('Send Mute Speaker failed');\n this.log('Send Mute Speaker failure may be due to plugin not being started yet, queueing event');\n this.inEventQueueForSend.push(inEvent);\n }\n }\n\n sendShareEvent(shareId) {\n let shareType: string;\n let window = shareId;\n\n if (this.sysDesktopId.indexOf(shareId) !== -1) {\n shareType = 'DesktopWindow';\n if (this.isChrome || this.isSmartVideoAgent) {\n window = this.sysDesktopId.indexOf(shareId);\n }\n } else {\n shareType = 'ApplicationWindow';\n }\n const inEvent = {\n 'type': 'InEventShare',\n 'window': window,\n 'shareType': shareType\n };\n\n this.vidyoClient.sendEvent(inEvent, null);\n }\n\n sendUnshareEvent() {\n const inEvent = {\n 'type': 'InEventUnshare'\n };\n\n this.vidyoClient.sendEvent(inEvent, null);\n this.updateShareList(null);\n }\n\n getUrlVars(url) {\n let match;\n // Regex to find the space substitutions\n const pl = /(\\+|_)/g,\n search = /([^&=]+)=?([^&]*)/g,\n decode = function (s) {\n // Return spaces to string, trim extraneous spaces\n return decodeURIComponent(s.replace(pl, ' ').replace(/\\s+/g, ' ').replace(/^\\s+|\\s+$/, ''));\n },\n query = url.substring(url.indexOf('?') + 1);\n\n const urlParams = {};\n while ((match = search.exec(query)) !== null) {\n urlParams[decode(match[1])] = decode(match[2]);\n }\n\n return urlParams;\n }\n\n parseUrlArgs(url) {\n this.log('Parsing arguments from URL: ' + url);\n const urlParams = this.getUrlVars(url);\n this.log('Arguments parsed: ' + JSON.stringify(urlParams));\n let portalRes;\n this.urlPortalUri = urlParams['portalUri'];\n this.urlRoomPin = urlParams['roomPin'];\n this.urlEncoded = urlParams['encoded'];\n this.urlRoomKey = urlParams['key'];\n this.urlInteractionId = urlParams['interactionId'];\n if (urlParams['isVideoMuted']) {\n this.urlMuteVideoOnJoin = (urlParams['isVideoMuted'].toLowerCase() === 'true');\n }\n if (urlParams['isAudioMuted']) {\n this.urlMuteAudioOnJoin = (urlParams['isAudioMuted'].toLowerCase() === 'true');\n }\n\n if (this.isJoinRequest && this.urlInteractionId) {\n // This is an IC agent, append the InteractionId to guest name so we can track on the SmartVideo server\n this.urlGuestName = urlParams['guestName'] + '-' + this.urlInteractionId;\n } else if (!this.isJoinRequest) {\n // This is the customer's request for a video call, append -Customer to guest name so we can track on the SmartVideo server\n this.urlGuestName = urlParams['guestName'] + '-Customer';\n } else {\n // This is someone joining who was invited to conference via GuestLink\n this.urlGuestName = urlParams['guestName'];\n }\n this.log(urlParams);\n this.log('parseUrlArgs set roomKey to: ' + this.urlRoomKey + ', roomPin to: ' +\n this.urlRoomPin + ', guestName to: ' + this.urlGuestName);\n const isMobileUrl = url.indexOf('mobile')\n if (isMobileUrl <= 0) {\n if (this.urlPortalUri.indexOf('flex') > -1) {\n portalRes = this.urlPortalUri.split('\\/flex.html\\?roomdirect.html');\n this.urlPortalAddress = portalRes[0];\n } else if (this.urlPortalUri.indexOf('join') > -1) {\n portalRes = this.urlPortalUri.split('\\/join');\n this.urlPortalAddress = portalRes[0];\n }\n } else {\n portalRes = this.urlPortalUri.split('\\/mobile.html');\n this.urlPortalAddress = portalRes[0];\n }\n this.log('urlPortalAddress set to: ' + this.urlPortalAddress);\n\n }\n\n timeStamp() {\n const now = new Date();\n const date = [now.getMonth() + 1, now.getDate(), now.getFullYear()];\n const time = [now.getHours(), now.getMinutes(), now.getSeconds()];\n const suffix = (time[0] < 12) ? 'AM' : 'PM';\n time[0] = (time[0] < 12) ? time[0] : time[0] - 12;\n time[0] = time[0] || 12;\n\n for (let i = 1; i < 3; i++) {\n if (time[i] < 10) {\n time[i] = (`0${time[i]}`);\n }\n }\n\n // Return the formatted string\n return date.join('/') + ' ' + time.join(':') + ' ' + suffix;\n }\n\n log(msg) {\n if (this.useConsoleForLogging) {\n console.log(this.timeStamp() + ' ' + msg);\n }\n if (this.useAlertsForLogging) {\n alert(msg);\n }\n }\n\n cancelContextMenu() {\n return false;\n }\n\n adjustWebRTCLayout() {\n let participantCount = 1;\n // The number of participants in the conference can be different from those that\n // are actually active in conference. For example, can have participants like Recorder, Supervisor,\n // etc., that are in conference and therefore count as participants, but don't have audio/video streams\n this.vidyoClient.sendRequest({ type: 'RequestActiveTalkers' }, function (request) {\n // When a conference starts, activeTalkers may not be populated yet, so make sure we at least return a value of 1.\n participantCount = request.numActiveTalkers;\n console.log('Active Talkers found: ' + participantCount);\n // Check for NaN or less than one\n if (participantCount !== participantCount || participantCount < 1) {\n participantCount = 1;\n }\n });\n this.participantsInCall = participantCount;\n\n if (this.sharesInCall > 0) {\n this.adjustWebRTCLayoutWithShare();\n } else {\n const self = this;\n // Hide the share Div\n document.getElementById('shareVideoDiv').style.display = 'none';\n // Resize participants box to full\n document.getElementById('participants_box').className = 'participants-box';\n // We get participants directly, because sometimes we don't reliably get out events\n // For example, when joining conference we sometimes do not get OutEventVideoStreamsChanged, even though we should\n /* this.vidyoClient.sendRequest({ type: 'RequestGetNumParticipants' }, function (request) {\n // Subtract one from count, since the local participant video is handled separately from remote participant streams\n participantCount = request.numParticipants - 1;\n }); */\n\n this.log('RequestGetNumParticipants returned ' + participantCount + ' participants');\n this.log('adjustWebRTCLayout: Participants in call: ' + this.participantsInCall);\n const participantTest = false;\n\n // For testing purposes only\n /*participantDivsCount = 8;\n participantTest = true;*/\n\n let DivHeight;\n let participantDivClassName;\n\n\n\n if (participantCount <= 1) {\n participantDivClassName = 'participant-100-wrapper';\n DivHeight = '100%';\n } else if (participantCount === 2 || participantCount === 4) {\n participantDivClassName = 'participant-50-wrapper';\n DivHeight = '50%';\n } else {\n participantDivClassName = 'participant-33-wrapper';\n DivHeight = '33%';\n }\n\n if (participantCount < 1) {\n participantCount = 1;\n }\n\n // Hide all participants before applying changes\n this.log('Hiding all the participants');\n const participantsBox = document.getElementById('participants_box');\n const participantDivs = participantsBox.children;\n for (let index = 0; index < participantDivs.length; index++) {\n const participantDiv = participantDivs[index];\n participantDiv.className = 'hide';\n // Setting className to hide should cause display to be set to 'none', however this doesn't always work\n participantDiv.style.display = 'none';\n }\n\n this.log('Resizing participants');\n this.log('Participant DivHeight calculated at ' + DivHeight);\n for (let index = 0; index < participantCount; index++) {\n const participantDiv = document.getElementById('participantDiv' + index.toString());\n participantDiv.className = participantDivClassName;\n const video = document.getElementById('remoteVideo' + index.toString());\n // When sharing under Firefox, we use inline-block, so switch back to flex after sharing done\n if (!(participantDiv.style.display === 'flex')) {\n participantDiv.style.display = 'flex';\n }\n video.style.display = 'none';\n setTimeout(function () {\n video.style.display = 'block';\n // Firefox totally screws up sizing the participant Div, so we force a sane size based on the video width\n if (self.isFireFox) {\n const videowidthpx = (video.offsetWidth + 1).toString() + 'px';\n // participantDiv.style.width = videowidthpx;\n participantDiv.style.width = videowidthpx;\n console.log('Participant Div' + index + ' resized to ' + participantDiv.style.width);\n }\n }, 200);\n\n if (participantTest) {\n const participantTitle = document.getElementById('participant' + index.toString());\n // Real participants have their media streams assigned as srcObject on video player\n // If srcObject doesn't exist, then simulate the participant\n if (!video.srcObject) {\n participantTitle.innerText = 'Simulated Participant ' + index.toString();\n video.src = this.ImagePath + 'SampleVideo_720x480_10mb.mp4';\n }\n }\n }\n }\n }\n\n adjustWebRTCLayoutWithShare() {\n let participantCount = 1;\n // The number of participants in the conference can be different from those that\n // are actually active in conference. For example, can have participants like Recorder, Supervisor,\n // etc., that are in conference and therefore count as participants, but don't have audio/video streams\n this.vidyoClient.sendRequest({ type: 'RequestActiveTalkers' }, function (request) {\n // When a conference starts, activeTalkers may not be populated yet, so make sure we at least return a value of 1.\n participantCount = request.numActiveTalkers;\n console.log('Active Talkers found: ' + participantCount);\n // Check for NaN or less than one\n if (participantCount !== participantCount || participantCount < 1) {\n participantCount = 1;\n }\n });\n this.participantsInCall = participantCount;\n // Show the share Div\n document.getElementById('shareVideoDiv').style.display = 'block';\n document.getElementById('participants_box').className = 'participants-box-share';\n /* const participantSelectors = 'div.participant-wrapper, div.participant-33-wrapper,' +\n ' div.participant-50-wrapper, div.participant-100-wrapper, div.participant-share-wrapper';\n const participantNodes = document.querySelectorAll(participantSelectors);\n const participantDivsCount = participantNodes.length; */\n\n for (let index = 0; index < participantCount; index++) {\n const participantDiv = document.getElementById('participantDiv' + index.toString());\n participantDiv.className = 'participant-share-wrapper';\n const video = document.getElementById('remoteVideo' + index.toString());\n // Firefox totally screws up sizing the participant Div, so we force a sane size based on the video width\n if (this.isFireFox) {\n participantDiv.style.display = 'inline-block';\n const videowidthpx = (video.offsetWidth + 1).toString() + 'px';\n participantDiv.style.width = videowidthpx;\n }\n }\n }\n\n switchToConference() {\n document.getElementById('videoStartMessage').style.display = 'none';\n let acdModal = null;\n let conferenceModal = null;\n const fullmodals = document.getElementsByTagName('adapt-fullmodal');\n for (let i = 0; i < fullmodals.length; i++) {\n if (fullmodals[i].firstElementChild.className === 'youtube-container') {\n acdModal = fullmodals[i];\n }\n if (fullmodals[i].firstElementChild.id === 'webRTCConferenceDiv' ||\n fullmodals[i].firstElementChild.id === 'vidyoConferenceDiv') {\n this.log('Showing conference modal');\n conferenceModal = fullmodals[i];\n }\n }\n if (acdModal !== null) {\n document.body.removeChild(acdModal);\n }\n if (conferenceModal !== null) {\n conferenceModal.style.display = 'block';\n // Toggle camera and mic if mute options passed in\n const cameraButton = document.getElementById('camera_toggle');\n const micButton = document.getElementById('microphone_toggle');\n if (this.urlMuteVideoOnJoin) {\n cameraButton.click();\n }\n if (this.urlMuteAudioOnJoin) {\n micButton.click();\n }\n this.conferenceModal = conferenceModal;\n }\n }\n }\n}\n","// UMD export\n// Typescript UMD module compile option does not support globals\n// Typescript module compile also does not work with namespaces\n// Since we use SmartVideo namespace (internal module) and that creates global SmartVideo object,\n// we need to make that SmartVideo global visible to loaders\n// Hopefully one day TS module compile will support globals, at which point we can stop using namespace\n// and do straight external modules\nvar SmartVideo;\nif (typeof define === 'function' && define.amd) {\n define('SmartVideo', [], SmartVideo);\n}\nelse if (typeof module !== 'undefined' && module.exports && window.module !== module) {\n module.exports = SmartVideo;\n}\nelse {\n window.SmartVideo = SmartVideo;\n}","/**\n * ChromeProxy\n * This should probably just be rolled up into ChromeWrapper.\n */\n\nnamespace SmartVideo {\nexport class ChromeProxy {\n started: boolean;\n starting: boolean;\n browser: string;\n isSmartVideoAgent: boolean;\n startDisallowed: boolean;\n dispatchFunction: Function;\n receivedEvent: EventListener;\n sendRequest: Function;\n sendEvent: Function;\n videoHandler: VideoHandler;\n\n constructor(browser, videoHandler, sendEvent, receivedEvent) {\n this.videoHandler = videoHandler;\n this.sendRequest = sendEvent;\n this.sendEvent = sendEvent;\n this.receivedEvent = receivedEvent;\n this.started = false;\n this.starting = false;\n this.browser = browser;\n this.isSmartVideoAgent = false;\n if (browser === 'SmartVideoAgent') {\n this.isSmartVideoAgent = true;\n }\n\n }\n\n connect() {\n window.addEventListener('message', this.receivedEvent, false);\n }\n\n disconnect() {\n window.removeEventListener('message', this.receivedEvent);\n }\n\n setOutEventDispatchMethod(method) {\n this.dispatchFunction = method;\n }\n\n useVideoElem(videoElement, callback) {\n console.log('ChromeProxy.useVideoElem called');\n this.videoHandler.start(videoElement, callback);\n }\n\n start(chromeNMSVersion, callback, timeout) {\n this.starting = true;\n /*\n Adding this code to ensure Native Messaging Host is connected.\n Vidyo added a listener to window.unload that sends a TabUnload to background.js\n When they added the listener, this broke our code, because we expect by the time we get here that the NMS is already connected\n Sending RequestConnectVersion causes background.js to connect to NMS\n */\n if (!this.isSmartVideoAgent) {\n const connectVersionRequest = {\n type: 'RequestConnectVersion',\n version: chromeNMSVersion\n }\n console.log('Sending connect version before InEventStart in ChromeProxy');\n this.sendEvent(connectVersionRequest, connectRequest => {\n this.sendEvent({ type: 'InEventStart' }, startRequest => {\n this.startRequest(startRequest, callback);\n });\n });\n } else {\n // SmartVideoAgent handles lifetime of NMS, so no need to request a connect\n this.sendEvent({ type: 'InEventStart' }, request => {\n this.startRequest(request, callback);\n });\n }\n\n }\n\n startRequest(request, callback) {\n this.starting = false;\n console.log(request);\n if (request.error && !this.isSmartVideoAgent) {\n if (request.error === 'VidyoClient already started') {\n this.startDisallowed = true;\n this.dispatchFunction({type: 'OutEventPluginConnectionFailure'});\n } else {\n this.dispatchFunction({type: 'OutEventPluginError', error: request.error});\n }\n } else {\n if (!this.isSmartVideoAgent) {\n this.sendEvent({type: 'ActiveTab'}, null);\n }\n this.started = true;\n this.dispatchFunction({type: 'OutEventPluginConnectionSuccess'});\n }\n if (callback) {\n callback(request);\n }\n }\n\n stop(callback, timeout) {\n console.log(`Started: ${this.started}, Disallowed: ${this.startDisallowed}, Starting: ${this.starting}`);\n if (!this.started && !this.startDisallowed || this.starting) {\n this.sendEvent({type: 'InEventStop'}, request => {\n this.started = false;\n if (!request.error) {\n\n }\n if (callback) {\n callback(request);\n }\n });\n }\n }\n\n stopPlayback() {\n this.videoHandler.stop();\n }\n}\n}\n","/**\n * ChromeWrapper\n * Class for working with Chrome Extension and plugin, since Chrome's implementation works differently\n * than the NPAPI plugin for IE/FireFox/Safari\n * Main intent is to wrap ChromeProxy\n */\n\nconst EventNames = {\n 99: 'VIDYO_CLIENT_IN_EVENT_MIN',\n 100: 'VIDYO_CLIENT_OUT_EVENT_USER_MESSAGE',\n 200: 'VIDYO_CLIENT_OUT_EVENT_LOGIC_STARTED',\n 300: 'VIDYO_CLIENT_OUT_EVENT_SIGN_IN',\n 301: 'VIDYO_CLIENT_OUT_EVENT_SIGN_OUT',\n 400: 'VIDYO_CLIENT_OUT_EVENT_SUBSCRIBING',\n 500: 'VIDYO_CLIENT_OUT_EVENT_APP_EXIT',\n 600: 'VIDYO_CLIENT_OUT_EVENT_DEVICE_SELECT',\n 601: 'VIDYO_CLIENT_OUT_EVENT_DEVICES_CHANGED',\n 602: 'VIDYO_CLIENT_OUT_EVENT_DEVICE_SELECTION_CHANGED',\n 603: 'VIDYO_CLIENT_OUT_EVENT_SELECTED_DEVICE_ON_OS_CHANGED',\n 700: 'VIDYO_CLIENT_OUT_EVENT_RINGING',\n 701: 'VIDYO_CLIENT_OUT_EVENT_RING_PROGRESS',\n 702: 'VIDYO_CLIENT_OUT_EVENT_END_RINGING',\n 800: 'VIDYO_CLIENT_OUT_EVENT_CALLING',\n 801: 'VIDYO_CLIENT_OUT_EVENT_CALL_PROGRESS',\n 802: 'VIDYO_CLIENT_OUT_EVENT_END_CALLING',\n 900: 'VIDYO_CLIENT_OUT_EVENT_JOINING',\n 901: 'VIDYO_CLIENT_OUT_EVENT_JOIN_PROGRESS',\n 1000: 'VIDYO_CLIENT_OUT_EVENT_RETRYING',\n 1001: 'VIDYO_CLIENT_OUT_EVENT_RETRY_PROGRESS',\n 1100: 'VIDYO_CLIENT_OUT_EVENT_END_PROCESSING',\n 1200: 'VIDYO_CLIENT_OUT_EVENT_CONFERENCE_ACTIVE',\n 1201: 'VIDYO_CLIENT_OUT_EVENT_CONFERENCE_ENDED',\n 1202: 'VIDYO_CLIENT_OUT_EVENT_PARTICIPANTS_CHANGED',\n 1203: 'VIDYO_CLIENT_OUT_EVENT_CONFERENCE_CLEARED',\n 1210: 'VIDYO_CLIENT_OUT_EVENT_REMOTE_SOURCE_ADDED',\n 1211: 'VIDYO_CLIENT_OUT_EVENT_REMOTE_SOURCE_REMOVED',\n 1300: 'VIDYO_CLIENT_OUT_EVENT_INCOMING_CALL',\n 1301: 'VIDYO_CLIENT_OUT_EVENT_END_INCOMING_CALL',\n 1400: 'VIDYO_CLIENT_OUT_EVENT_PREVIEW',\n 1500: 'VIDYO_CLIENT_OUT_EVENT_MUTED_AUDIO_IN',\n 1501: 'VIDYO_CLIENT_OUT_EVENT_MUTED_AUDIO_OUT',\n 1502: 'VIDYO_CLIENT_OUT_EVENT_MUTED_VIDEO',\n 1503: 'VIDYO_CLIENT_OUT_EVENT_MUTED_SERVER_AUDIO_IN',\n 1504: 'VIDYO_CLIENT_OUT_EVENT_MUTED_SERVER_VIDEO',\n 1600: 'VIDYO_CLIENT_OUT_EVENT_ADD_SHARE',\n 1601: 'VIDYO_CLIENT_OUT_EVENT_REMOVE_SHARE',\n 1602: 'VIDYO_CLIENT_OUT_EVENT_SHARE_CLOSED',\n 1700: 'VIDYO_CLIENT_OUT_EVENT_RESIZE',\n 1800: 'VIDYO_CLIENT_OUT_EVENT_PARTICIPANTS_LIMIT',\n 1900: 'VIDYO_CLIENT_OUT_EVENT_ECHO_DETECTED',\n 2000: 'VIDYO_CLIENT_OUT_EVENT_KEYDOWN',\n 2001: 'VIDYO_CLIENT_OUT_EVENT_KEYUP',\n 2002: 'VIDYO_CLIENT_OUT_EVENT_MOUSE_DOWN',\n 2003: 'VIDYO_CLIENT_OUT_EVENT_MOUSE_UP',\n 2004: 'VIDYO_CLIENT_OUT_EVENT_MOUSE_MOVE',\n 2005: 'VIDYO_CLIENT_OUT_EVENT_MOUSE_SCROLL',\n 2006: 'VIDYO_CLIENT_OUT_EVENT_TOUCH',\n 2007: 'VIDYO_CLIENT_OUT_EVENT_FLOATING_WINDOW',\n 2100: 'VIDYO_CLIENT_OUT_EVENT_FECC_LIST_UPDATED',\n 2101: 'VIDYO_CLIENT_OUT_EVENT_CONTROL_CAMERA',\n 2102: 'VIDYO_CLIENT_OUT_EVENT_SET_PARTICIPANT_VIDEO_MODE_DONE',\n 2103: 'VIDYO_CLIENT_OUT_EVENT_CONFERENCE_INFO_UPDATE',\n 2104: 'VIDYO_CLIENT_OUT_EVENT_FECC_STATUS_UPDATE',\n 2105: 'VIDYO_CLIENT_OUT_EVENT_PARTICIPANT_BUTTON_CLICK',\n 2200: 'VIDYO_CLIENT_OUT_EVENT_MEDIA_CONTROL',\n 2300: 'VIDYO_CLIENT_OUT_EVENT_LOGIN',\n 2301: 'VIDYO_CLIENT_OUT_EVENT_LICENSE',\n 2302: 'VIDYO_CLIENT_OUT_EVENT_LINKED',\n 2303: 'VIDYO_CLIENT_OUT_EVENT_SIGNED_IN',\n 2304: 'VIDYO_CLIENT_OUT_EVENT_SIGNED_OUT',\n 2305: 'VIDYO_CLIENT_OUT_EVENT_ROOM_LINK',\n 2306: 'VIDYO_CLIENT_OUT_EVENT_CLIENT_VERSION_ON_SERVER',\n 2400: 'VIDYO_CLIENT_OUT_EVENT_ENABLED_STATUS_BAR',\n 2401: 'VIDYO_CLIENT_OUT_EVENT_ENABLED_BUTTON_BAR',\n 2450: 'VIDYO_CLIENT_OUT_EVENT_SELECTED_PARTICIPANTS_CHANGED',\n 2500: 'VIDYO_CLIENT_OUT_EVENT_CALL_STATE',\n 2600: 'VIDYO_CLIENT_OUT_EVENT_GROUP_CHAT',\n 2601: 'VIDYO_CLIENT_OUT_EVENT_PRIVATE_CHAT',\n 2700: 'VIDYO_CLIENT_OUT_EVENT_ALARMS_RAISED',\n 2701: 'VIDYO_CLIENT_OUT_EVENT_ALARMS_CLEARED',\n 2710: 'VIDYO_CLIENT_OUT_EVENT_PORTAL_PREFIX',\n 2715: 'VIDYO_CLIENT_OUT_EVENT_PORTAL_FEATURES',\n 2720: 'VIDYO_CLIENT_OUT_EVENT_CPU_USAGE_ACTIONS',\n 2800: 'VIDYO_CLIENT_OUT_EVENT_LECTURE_MODE_STAGE',\n 2802: 'VIDYO_CLIENT_OUT_EVENT_LECTURE_MODE_PRESENTER_CHANGED',\n 2803: 'VIDYO_CLIENT_OUT_EVENT_LECTURE_HAND_CLEARED',\n 2810: 'VIDYO_CLIENT_OUT_EVENT_AUDIO_FRAME_RECEIVED',\n 2811: 'VIDYO_CLIENT_OUT_EVENT_VIDEO_FRAME_RECEIVED',\n 2812: 'VIDYO_CLIENT_OUT_EVENT_SELF_VIEW_VIDEO_FRAME_RECEIVED',\n 2820: 'VIDYO_CLIENT_OUT_EVENT_CONTROL_CONFERENCE_ROOM_SETTINGS',\n 2830: 'VIDYO_CLIENT_OUT_EVENT_PRECALL_TEST_DEVICE',\n 2850: 'VIDYO_CLIENT_OUT_EVENT_SHARED_WINDOW_CLOSED',\n 2851: 'VIDYO_CLIENT_OUT_EVENT_SHARED_SCREEN_DISCONNECTED',\n 2855: 'VIDYO_CLIENT_OUT_EVENT_CONFERENCE_CONTROL_ALL_PARTICIPANTS',\n 2860: 'VIDYO_CLIENT_OUT_EVENT_NETWORK_INTERFACE_CHANGED',\n 3000: 'VIDYO_CLIENT_OUT_EVENT_PORTAL_SERVICE',\n 99999: 'VIDYO_CLIENT_OUT_EVENT_MAX'\n}\n\nconst PrivateEventNames = {\n 200100: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_MIN',\n 200200: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_SHARED_APP_ADD',\n 200201: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_SHARED_APP_REM',\n 200300: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_ALARMS_RAISED',\n 200301: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_ALARMS_CLEARED',\n 200400: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_PARTICIPANTS_LIMIT_BANDW',\n 200401: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_PARTICIPANTS_LIMIT_SAFE',\n // Use VIDYO_CLIENT_OUT_EVENT_PARTICIPANTS_CHANGED instead of this\n 200600: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_PARTICIPANTS_CHANGED',\n 200700: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_ALLOW_UPGRADE',\n 200800: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_GET_CONFIGURATION_RESPONSE',\n 200900: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_VCSOAP',\n // all OUT events related to caching portal data and operations on cache\n 201000: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_PORTAL_DATA_CACHE',\n // inform the user that a sound buffer finished playing , using VidyoClientInEventPlaySound structure\n 201100: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_PLAY_SOUND_DONE',\n // Inform listener (Android app. for example) to run the Web Proxy PAC script\n 201200: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_WEBPROXY_UPDATE_NEEDED',\n // Inform listener that a guest conference has just ended\n 201300: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_GUEST_CONFERENCE_ENDED',\n // Inform listener that a reset emcp after guest conference has just failed. client is now in a logout state.\n 201400: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_RESET_EMCP_AFTER_GUEST_FAILED',\n 201600: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_LOG', // logs sent to application\n 201700: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_GUEST_CONFERENCE_BEGIN_PROMPT', // guest link notification\n // 201810: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_CONFERENCE_CLEARED',\n /*!\n Report the status of communication with Portal. This out event is used\n report the portal communication status for searching contact, add or remove contacts,\n control meeting etc.\n\n @see Corresponding parameter structure #VidyoClientPrivateOutEventPortalCommunicationStatus\n */\n 201900: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_PORTAL_COMMUNICATION_STATUS',\n /*!\n Report the changes in signin flow. Example of changes are retry to secure portal,\n redirecting to secure portal.\n\n @see Corresponding parameter structure #VidyoClientPrivateOutEventSignInUpdate\n */\n 202000: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_SIGNIN_UPDATE',\n /*!\n Report that user login using external (e.g. browser) or Report that automatic login\n using previously provided credntial is started.\n\n @see Corresponding parameter structure #VidyoClientPrivateOutEventLoginStarted\n */\n 202001: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_LOGIN_STARTED',\n /*!\n Report that credential required to login are not present or client is working again older\n portal and manual sign-in required.\n\n @see Corresponding parameter structure #VidyoClientPrivateOutEventNoLoginCredential\n */\n 202002: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_NO_LOGIN_CREDENTIAL',\n /*!\n Report the status change Kiosk device.\n\n @see Corresponding parameter structure #VidyoClientPrivateOutEventKioskDeviceStateChanged\n */\n 202100: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_KIOSK_DEVICE_STATE_CHANGED',\n /*!\n Report the low master volume indication for a audio device.\n\n @see Corresponding parameter structure #VidyoClientPrivateOutEventLowMasterVolume\n */\n 202110: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_LOW_MASTER_VOLUME',\n\n // /* Start of messages for VidyoRoom only */\n // 250000: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_VISCA',\n // 250001: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_SWB',\n // 250002: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_USB_CAPTURE',\n // 250003: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_CHANGE_FOCUS',\n // 250004: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_NETWORK_CONTROL',\n // 250005: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_CHANGE_CAMERA_MODE',\n // 250006: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_FRAMEWORK_DONE',\n // 250007: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_ADJUST_MONITORS',\n // 250008: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_SET_VISCA',\n // /* End of messages for VidyoRoom only */\n\n // /* Start of messages used by Android (currently) */\n // /*!\n // Report that a Remote source is added or removed. Android needs to know when remote\n // sources are added and removed so that if the menu bar is visible it can be updated\n // appropriately.\n // */\n // 260000: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_REMOTE_SOURCE_ADD',\n // 260001: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_REMOTE_SOURCE_REM',\n // /* End of messages used by Android (currently) */\n 260002: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_RENDERER_DOCS_CHANGED',\n\n /* Start of messages used by VidyoWeb ONLY */\n 270000: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_PLUGIN_CONNECTION_SUCCESS',\n 270001: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_PLUGIN_CONNECTION_FAILURE',\n 270002: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_GET_WINDOWS_EXT',\n /* Below private out event is for declaration only, as its been sent by the VidyoWeb plugin */\n 270003: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_GET_JOIN_APPROVAL',\n /* End of messages used by VidyoWeb */\n\n 299999: 'VIDYO_CLIENT_PRIVATE_OUT_EVENT_MAX',\n\n\n 300500: 'EXTENSION_MSG_CLIENT_CLOSED',\n 300501: 'EXTENSION_MSG_CLIENT_STARTING',\n 300502: 'EXTENSION_MSG_REQUEST_SET_CHROME_ARCH'\n}\n\nconst VideoQualityLevels = [\n { name: 'BestQuality', title: 'Best Quality (Recommended)', intValue: 0 },\n { name: 'BestFramerate', title: 'Best Frame Rate', intValue: 1 },\n { name: 'BestResolution', title: 'Best Resolution', intValue: 2 },\n { name: 'LimitedBandwidth', title: 'Limited Bandwidth', intValue: 3 },\n { name: 'Advanced450p30', title: 'Advanced: 450p30', intValue: 10 },\n { name: 'Advanced720p15', title: 'Advanced: 720p15', intValue: 11 },\n { name: 'Advanced720p30', title: 'Advanced: 720p30', intValue: 12 }\n]\n\ninterface IVideoQualityLevel {\n name: string\n title: string\n intValue: number\n}\n\n\nnamespace SmartVideo {\nexport class ChromeWrapper {\n eventNames: {};\n privateEventNames: {};\n callbacks: Function[];\n timeouts: number[];\n chromeproxy: ChromeProxy;\n videoHandler: VideoHandler;\n supportedVideoQualityLevels: IVideoQualityLevel[];\n browser: string;\n isSmartVideoAgent: boolean;\n\n constructor(browser: string) {\n this.videoHandler = new VideoHandler(this.sendEvent.bind(this));\n this.chromeproxy = new ChromeProxy(browser, this.videoHandler, this.sendEvent.bind(this), this.receivedEvent.bind(this));\n // this.populateEventNames();\n this.eventNames = EventNames;\n // this.populatePrivateEventNames();\n this.privateEventNames = PrivateEventNames;\n // this.populateQualityLevels();\n this.supportedVideoQualityLevels = VideoQualityLevels;\n this.callbacks = [];\n this.timeouts = [];\n this.browser = browser;\n this.isSmartVideoAgent = false;\n if (browser === 'SmartVideoAgent') {\n this.isSmartVideoAgent = true;\n }\n }\n\n receivedEvent(event) {\n const message = event.data;\n if (message.type === 'log') {\n try {\n console.log('rcv from ext:', JSON.stringify(message));\n } catch (error) {\n console.log(message);\n }\n } else {\n try {\n console.log('rcv from ext:', JSON.stringify(message));\n } catch (error) {\n console.log(message);\n }\n }\n\n if (message._direction === 2) {\n if (message.type) {\n if (message.type.indexOf('OUT_EVENT') === -1) {\n if (this.callbacks[message._id] && this.timeouts[message._id]) {\n clearTimeout(this.timeouts[message._id]);\n delete this.timeouts[message._id];\n this.callbacks[message._id](message);\n delete this.callbacks[message._id];\n }\n return;\n }\n }\n // Handle OutEvents\n const evtCode = message['code'];\n const evtParams = message['params'];\n\n const evt = {};\n // create an object to dispatch\n if (this.eventNames[evtCode] !== undefined) {\n evt.type = this.eventNames[evtCode];\n } else if (this.privateEventNames[evtCode] !== undefined) {\n evt.type = this.privateEventNames[evtCode];\n } else {\n evt.type = null;\n }\n\n for (const param in evtParams) {\n if (evtParams.hasOwnProperty(param)) {\n evt[param] = evtParams[param];\n }\n }\n switch (evt.type) {\n case 'VIDYO_CLIENT_OUT_EVENT_LOGIC_STARTED':\n break;\n case 'VIDYO_CLIENT_OUT_EVENT_CONFERENCE_ENDED':\n console.log('Stopping media stream in VideoHandler');\n this.videoHandler.stop();\n break;\n case 'EXTENSION_MSG_CLIENT_CLOSED':\n this.chromeproxy.starting = false;\n if (evt.message === 'Specified native messaging host not found.' && navigator.appVersion.indexOf('Mac') !== -1) {\n localStorage.setItem('shouldRestartChrome', 'true');\n }\n break;\n default:\n break;\n }\n\n if (evt.type) {\n if (evtCode !== 200900/*VIDYO_CLIENT_PRIVATE_OUT_EVENT_VCSOAP*/) {\n evt.type = evt.type.toLowerCase();\n evt.type = evt.type.replace(/(_([a-zA-Z]{1}))/g, function($1) { return $1.toUpperCase(); });\n evt.type = evt.type.replace(/_/g, '');\n if (evtCode !== 300500 && evtCode !== 300501 && evtCode !== 300502) {\n evt.type = evt.type.substring(11);\n }\n }\n this.dispatch(evt);\n } else {\n console.log('event without type', message);\n }\n }\n }\n\n sendEvent(obj, callback) {\n obj._id = Math.floor(Math.random() * 1000000);\n this.callbacks[obj._id] = callback;\n clearTimeout(this.timeouts[obj._id]);\n\n this.timeouts[obj._id] = setTimeout(() => {\n console.log('Timeout callback has been set for:', obj.type);\n obj.error = 'connection timeout';\n if (this.callbacks[obj._id] && this.timeouts[obj._id]) {\n this.callbacks[obj._id](obj);\n }\n }, 2000);\n\n obj._direction = 1;\n\n console.log('snd to ext:', JSON.stringify(obj));\n if (!this.isSmartVideoAgent) {\n window.postMessage(obj, '*');\n } else {\n // SmartVideoAgent injects this function at runtime, so ignore TS error\n window['VidyoSendMessage'](JSON.stringify(obj));\n }\n }\n\n dispatch(object) {\n if (this.chromeproxy.dispatchFunction) {\n this.chromeproxy.dispatchFunction(object);\n }\n }\n}}\n","/**\n * VideoHandler\n * Class for video operations under Chrome, although curiously there is code for browser compatability.\n * Class only used by ChromeWrapper/ChromeProxy, so not sure why the browser compatibility checks\n */\nnamespace SmartVideo {\n\ninterface IVidSize {\n h: number\n w: number\n}\n\nexport class VideoHandler {\n origCallback: Function;\n streamCount: number;\n streamsChecked: number;\n callbackCalled: boolean;\n inited: boolean;\n userMediaStream: MediaStream;\n video: HTMLVideoElement;\n vidSize: IVidSize;\n intervalFunction: number;\n cameraCheckTimeout: number;\n usermediaMessage: HTMLElement;\n sendEvent: Function;\n sendRequest: Function;\n\n constructor(sendEvent: Function) {\n this.origCallback = null;\n this.streamCount = 0;\n this.streamsChecked = 0;\n this.callbackCalled = false;\n this.inited = false;\n this.userMediaStream = null;\n this.vidSize = { w: 0, h: 0 };\n this.cameraCheckTimeout = null;\n this.video = null;\n this.sendEvent = sendEvent;\n this.sendRequest = sendEvent;\n\n this.intervalFunction = setInterval(() => {\n if (this.video) {\n // Check Video size\n if (this.vidSize.w !== this.video.offsetWidth || this.vidSize.h !== this.video.offsetHeight) {\n this.vidSize.w = this.video.offsetWidth;\n this.vidSize.h = this.video.offsetHeight;\n console.log('video resized to', this.video.offsetWidth, this.video.offsetHeight);\n sendEvent({type: 'InEventResize', x: 0, y: 0, width: this.video.offsetWidth, height: this.video.offsetHeight},\n request => {\n console.log(request);\n });\n }\n }\n }, 200);\n }\n\n start(videoElement, callback) {\n if (!this.cameraCheckTimeout) {\n this.cameraCheckTimeout = setTimeout(() => {\n this.cameraCheckTimeout = null;\n }, 45 * 1000);\n }\n\n this.video = videoElement;\n if (!this.video) {\n console.log('Init the videoHandler before calling this method');\n return;\n }\n if (!this.origCallback) {\n this.origCallback = callback;\n }\n\n this.usermediaMessage = document.getElementById('lbl_usermedia');\n this.video.onloadedmetadata = this.displayVideoDimensions.bind(this);\n\n if (MediaStreamTrack) {\n this.getMediaStreamTrackSource();\n } else {\n this.tempCallback('This browser does not support MediaStreamTrack', null);\n }\n }\n\n stop() {\n if (!this.video) {\n console.log('Init the videoHandler before calling this method');\n return;\n }\n this.video.pause();\n this.video.src = '';\n if (this.userMediaStream) {\n this.userMediaStream.getTracks()[0].stop();\n }\n }\n\n tempCallback(message, permissionDeniedError) {\n if (!this.callbackCalled) {\n this.callbackCalled = true;\n\n }\n }\n\n displayVideoDimensions() {\n if (!this.video.videoWidth || this.video.videoWidth < 100) {\n setTimeout(this.displayVideoDimensions.bind(this), 500);\n return;\n }\n if (navigator.appVersion.indexOf('Windows') !== -1 || navigator.appVersion.indexOf('SmartVideoAgent') !== -1) {\n this.sendRequest({type: 'RequestSetCameraResolution', width: this.video.videoWidth, height: this.video.videoHeight});\n console.log('VideoHandler', 'Windows Video Width: ', this.video.videoWidth, ' Video Height: ', this.video.videoHeight);\n } else {\n // this.sendRequest({type: 'RequestSetCameraResolution', width: 1920, height: 1080});\n console.log('VideoHandler', 'OSX forcing Video Width: 1920 Video Height: 1080');\n }\n }\n\n getMediaStreamTrackSource() {\n const that = this;\n console.log('VideoHandler.getMediaStreamTrackSource called');\n if (navigator.mediaDevices || navigator.mediaDevices.enumerateDevices) {\n navigator.mediaDevices.enumerateDevices().then(function(devices){\n let constraints;\n console.log('getMediaStreamTrackSource: Found ' + devices.length + ' devices.');\n for (let index = 0; index < devices.length; index++) {\n const device = devices[index];\n if (device.kind === 'videoinput') {\n if (navigator.appVersion.indexOf('Windows') !== -1 || navigator.appVersion.indexOf('SmartVideoAgent') !== -1) {\n constraints = {\n audio: false,\n video: {\n optional: [\n {sourceId: device.deviceId},\n {minWidth: 1920},\n {minHeight: 1080}\n ]\n }\n };\n } else {\n // For OSX\n constraints = {\n audio: false,\n video: {\n optional: [\n {sourceId: device.deviceId}\n ]\n }\n };\n }\n }\n }\n navigator.mediaDevices.getUserMedia(constraints)\n .then(that.onStreamSuccess.bind(that))\n .catch(that.onStreamErrors.bind(that));\n });\n return;\n }\n }\n\n onStreamSuccess(stream) {\n const track = stream.getVideoTracks()[0];\n console.log('VideoHandler', 'Source id: ' + track.id);\n console.log('VideoHandler', 'Source label: ' + track.label);\n\n if (track.label.indexOf('WebPluginVirtualCamera') >= 0) {\n console.log('WebPluginVirtualCamera found');\n // Play the media stream in the video element\n this.userMediaStream = stream;\n this.video.src = window.URL.createObjectURL(stream);\n console.log('WebPluginVirtualCamera stream added as video source');\n this.video.play();\n this.tempCallback(null, false);\n clearTimeout(this.cameraCheckTimeout);\n this.cameraCheckTimeout = null;\n } else {\n stream.getTracks()[0].stop();\n this.streamsChecked++;\n if (this.streamsChecked >= this.streamCount) {\n console.log('VideoHandler', 'WebPluginVirtualCamera not found. Cameradriver is not installed or not recognized');\n setTimeout(() => {\n console.log('Reattempting GetUserMedia');\n if (this.cameraCheckTimeout) {\n this.start(this.video, this.origCallback.bind(this));\n } else {\n this.tempCallback('cameraTimeout', false);\n }\n }, 1000);\n }\n }\n }\n\n onStreamErrors(error) {\n this.streamsChecked++;\n if (this.streamsChecked >= this.streamCount) {\n // Handle the permission denied error in Chrome and 'Starting video failed' error in Firefox\n if (error.name === 'PermissionDeniedError' || error === 'Starting video failed') {\n this.tempCallback('Media might already be in use', true);\n console.log('VideoHandler', 'Media might already be in use');\n } else { // Handle all other errors\n this.tempCallback('Something went wrong while getting the video', false);\n console.log('VideoHandler', 'Error: ', JSON.stringify(error));\n }\n }\n }\n}}\n","/**\n * WebRTCAdapter\n * Provides unified interface for Chrome and Firefox\n */\nnamespace SmartVideo {\n export class WebRTCAdapter {\n browser: string;\n isChrome: boolean;\n isFireFox: boolean;\n\n constructor(browser: string) {\n switch (browser) {\n case 'Opera':\n this.isChrome = true;\n break;\n case 'Chrome':\n this.isChrome = true;\n break;\n case 'SmartVideoAgent':\n this.isChrome = true;\n break;\n case 'Firefox':\n this.isFireFox = true;\n break;\n default:\n break;\n }\n\n this.browser = browser;\n // this.setUserMedia();\n }\n\n detachMediaStream(\n element: HTMLVideoElement,\n stream: MediaStream,\n isLocal: boolean,\n stop: boolean\n ) {\n console.log('Detaching media stream ', element, ' stream ', stream);\n if (element) {\n element.pause();\n element.src = '';\n }\n\n // stopping stream (camera, ...)\n\n if (stream) {\n if (this.isFireFox) {\n // no stop method on remote streams in firefox\n if (isLocal && stop) {\n this.stopMediaStream(stream);\n }\n } else {\n if (stop) {\n this.stopMediaStream(stream);\n }\n }\n }\n }\n\n stopMediaStream(stream: MediaStream) {\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n tracks[i].stop();\n }\n }\n\n emptyAudioVideoSources(callback: Function) {\n const audioSources = [{ id: '0', label: 'Default' }];\n const videoSources = [{ id: '0', label: 'Default' }];\n setTimeout(function () {\n callback(audioSources, videoSources);\n }, 100);\n }\n\n fixConfig(pcConfig: RTCConfiguration) {\n if (pcConfig === null) {\n return;\n }\n\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n if (pcConfig.iceServers[i].hasOwnProperty('urls')) {\n pcConfig.iceServers[i]['url'] = pcConfig.iceServers[i]['urls'];\n delete pcConfig.iceServers[i]['urls'];\n }\n }\n }\n\n createIceServer(url: string, username: string, password: string) {\n let iceServer = null;\n const urlParts = url.split(':');\n\n if (urlParts[0].indexOf('stun') === 0) {\n // Create iceServer with stun url.\n iceServer = {\n url: url,\n };\n } else if (urlParts[0].indexOf('turn') === 0) {\n // Create iceServer with turn url.\n iceServer = {\n url: url,\n credential: password,\n username: username,\n };\n }\n return iceServer;\n }\n\n createIceServers(urls, username: string, password: string) {\n let iceServers;\n iceServers = {\n urls: urls,\n credential: password,\n username: username,\n };\n return iceServers;\n }\n\n attachMediaStream(element: HTMLVideoElement, stream: MediaStream) {\n console.log('Attaching Media Stream ', element, ' ', stream);\n if (!element) {\n console.log('Error attaching stream to element, element is invalid');\n return;\n }\n if (typeof element.srcObject !== 'undefined') {\n element.srcObject = stream;\n } else if (typeof element.src !== 'undefined') {\n element.src = URL.createObjectURL(stream);\n } else {\n console.log('Error attaching stream to element.');\n }\n }\n\n reattachMediaStream(\n toVideoElement: HTMLVideoElement,\n fromVideoElement: HTMLVideoElement\n ) {\n console.log('Reattaching media stream');\n if (this.isFireFox) {\n toVideoElement.srcObject = fromVideoElement.srcObject;\n toVideoElement.play();\n } else if (this.isChrome) {\n toVideoElement.src = fromVideoElement.src;\n }\n }\n\n getRTCSessionDescription() {\n // Firefox and Chrome both now support without prefix\n return RTCSessionDescription;\n }\n\n getRTCIceCandidate() {\n // Firefox and Chrome both now support without prefix\n return RTCIceCandidate;\n }\n\n getWebRTCSources(callback: Function, secondTime?: boolean) {\n if (this.isFireFox) {\n this.emptyAudioVideoSources(callback);\n } else if (this.isChrome) {\n const self = this;\n if (location.protocol !== 'https:') {\n this.emptyAudioVideoSources(callback);\n return;\n }\n\n // On chrome mobile, https does not store the permissions, hence it goes into an infinite loop of asking for permission\n if (secondTime === undefined) {\n secondTime = false;\n }\n\n navigator.mediaDevices.enumerateDevices().then(function (sourceInfos) {\n const audioSources = [];\n const videoSources = [];\n let hasVideo = false;\n let hasAudio = false;\n for (let i = 0; i < sourceInfos.length; ++i) {\n const sourceInfo = sourceInfos[i];\n if (!sourceInfo.label) {\n if (secondTime) {\n self.emptyAudioVideoSources(callback);\n return;\n }\n switch (sourceInfo.kind) {\n case 'videoinput':\n hasVideo = true;\n break;\n case 'audioinput':\n hasAudio = true;\n break;\n default:\n break;\n }\n const mediaOptions = {\n video: hasVideo,\n audio: hasAudio,\n };\n /* Chrome has this 'security' feature where labels are given only\n if the user has granted permission to access microphone/camera */\n navigator.mediaDevices\n .getUserMedia(mediaOptions)\n .then(function (stream) {\n self.stopMediaStream(stream);\n self.getWebRTCSources(callback, true);\n return;\n })\n .catch(function (err) {\n console.error('Denied getUserMedia - using Default sources');\n self.emptyAudioVideoSources(callback);\n return;\n });\n }\n console.dir(sourceInfo);\n if (sourceInfo.kind === 'audioinput') {\n const audioSource = {\n id: sourceInfo.deviceId,\n label: sourceInfo.label.replace(\n /\\([a-zA-Z0-9]+:[a-zA-Z0-9]+\\)/,\n ''\n ),\n };\n audioSources.push(audioSource);\n } else if (sourceInfo.kind === 'videoinput') {\n const videoSource = {\n id: sourceInfo.deviceId,\n label: sourceInfo.label.replace(\n /\\([a-zA-Z0-9]+:[a-zA-Z0-9]+\\)/,\n ''\n ),\n };\n if (videoSource.label !== 'VidyoCamera') {\n videoSources.push(videoSource);\n } else {\n console.log('Dropping VidyoCamera');\n }\n } else {\n console.log('Some other kind of source: ', sourceInfo);\n }\n }\n callback(audioSources, videoSources);\n });\n }\n }\n\n getWebRTCStats(\n pc: RTCPeerConnection,\n track: MediaStreamTrack,\n callback: Function\n ) {\n /* Start using only WebRTC compliant stats, instead of separate logic for FireFox/Google\n The below stats being retrieved should be safe in both browsers, because they are simple\n statistics */\n pc.getStats(track)\n .then(function (rtcStatsReport) {\n const stats = {};\n stats.videoResolution = {};\n stats.videoResolution.height = 0;\n stats.videoResolution.width = 0;\n\n for (const stat in rtcStatsReport) {\n if (stat.indexOf('rtp') !== -1) {\n if (stat.indexOf('inbound') !== -1) {\n stats.firs = 0;\n stats.nacks = 0;\n stats.videoFrameRate = Math.floor(\n rtcStatsReport[stat]['framesDecoded']\n );\n stats.videoDecodedFrameRate = stats.videoFrameRate;\n stats.videoDisplayedFrameRate = stats.videoFrameRate;\n stats.bytesReceived = rtcStatsReport[stat]['bytesReceived'];\n stats.packetsReceived = rtcStatsReport[stat]['packetsReceived'];\n stats.packetsLost = rtcStatsReport[stat]['packetsLost'];\n callback(stats);\n return;\n } else if (stat.indexOf('outbound') !== -1) {\n stats.captureFrameRate = Math.floor(\n rtcStatsReport[stat]['framesEncoded']\n );\n stats.encodeFrameRate = stats.captureFrameRate;\n stats.numFirs = 0;\n stats.numNacks = 0;\n stats.mediaRTT = 0;\n stats.bytesSent = rtcStatsReport[stat]['bytesSent'];\n callback(stats);\n return;\n }\n }\n }\n })\n .catch(function (err) {\n callback({ error: err });\n });\n }\n }\n}\n","/**\n * WebRTCClient\n */\nnamespace SmartVideo {\nexport class WebRTCClient implements IVidyoClient {\n private webRTCPlugin: WebRTCPlugin;\n private webRTCAdapter: WebRTCAdapter;\n private webRTCServer: any;\n private messages: VidyoClientMessages;\n private outEventCallbackObject: Function;\n private outEventCallbackMethods: any;\n private defaultOutEventCallbackMethod: any;\n private logCallback: any;\n private useCallbackWithPlugin: boolean;\n private config: any;\n private sessionManager: any;\n private isChrome: boolean;\n private isFireFox: boolean;\n private browser: string;\n\n constructor(isChrome: boolean, browser: string) {\n this.webRTCPlugin = null;\n this.outEventCallbackObject = null;\n this.defaultOutEventCallbackMethod = '';\n this.logCallback = null;\n this.useCallbackWithPlugin = true;\n this.outEventCallbackMethods = {};\n this.sessionManager = null;\n this.isChrome = isChrome;\n this.browser = browser;\n this.messages = new VidyoClientMessages();\n this.webRTCAdapter = new WebRTCAdapter(browser);\n\n switch (browser) {\n case 'Opera':\n this.isChrome = true;\n break;\n case 'Chrome':\n this.isChrome = true;\n break;\n case 'SmartVideoAgent':\n this.isChrome = true;\n break;\n case 'Firefox':\n this.isFireFox = true;\n break;\n default:\n break;\n }\n }\n\n isStarted() {\n let retVal = false;\n if (!this.webRTCPlugin) {\n this.log('WebRTCClient.isStarted() invoked without start!');\n return retVal;\n }\n /* DEBUG: retVal = true;*/\n try {\n retVal = this.webRTCPlugin.isStarted();\n } catch (e) {\n this.log('WebRTCClient.isStarted() threw an exception!');\n this.log(e);\n return retVal;\n }\n this.log('WebRTCClient.isStarted() called plug-in.');\n return retVal;\n }\n\n isLoaded() {\n if (!this.webRTCPlugin) {\n this.log('WebRTCClient.isLoaded() invoked without start');\n return false;\n }\n\n try {\n this.webRTCPlugin.isStarted();\n } catch (e) {\n this.log('WebRTCClient.isLoaded() threw an exception!');\n return false;\n }\n\n return true;\n }\n\n setConfig(config) {\n console.log ('Setting config in WebRTCClient');\n if (config && config.outEventCallbackObject) {\n this.outEventCallbackObject = config.outEventCallbackObject;\n console.log('WebRTCClient: Callback object set');\n }\n if (config && config.defaultOutEventCallbackMethod) {\n this.defaultOutEventCallbackMethod = config.defaultOutEventCallbackMethod;\n console.log('WebRTCClient: Default Callback object set');\n }\n if (config && config.logCallback) {\n this.logCallback = config.logCallback;\n console.log('WebRTCClient: Log Callback object set');\n }\n if (config && config.sessionManager) {\n this.sessionManager = config.sessionManager;\n console.log('WebRTCClient: Session Manager set');\n }\n }\n\n setDefaultOutEventCallbackMethod(defaultOutEventCallbackMethodArg) {\n this.defaultOutEventCallbackMethod = defaultOutEventCallbackMethodArg;\n }\n\n setOutEventCallbackObject(outEventCallbackObjectArg) {\n this.outEventCallbackObject = outEventCallbackObjectArg;\n }\n\n setLogCallback(logCallbackArg) {\n this.logCallback = logCallbackArg;\n console.log('WebRTCClient.setLogCallback called');\n }\n\n setSessionManager(sessionManagerArg) {\n this.sessionManager = sessionManagerArg;\n }\n\n setOutEventCallbackMethod(outEventType, callbackMethod) {\n this.outEventCallbackMethods[outEventType] = callbackMethod;\n }\n\n getWebRTCServer(sessionManager, callback) {\n const url = window.location.protocol + '//' + sessionManager + '/zincadmin/service/getinstance.htm';\n const webRTCServer = '';\n const request = new XMLHttpRequest();\n request.open('get', url, true);\n request.onload = () => {\n const response = JSON.parse(request.responseText);\n this.webRTCServer = response.ip;\n callback(this.webRTCServer);\n };\n request.onerror = () => {\n this.webRTCServer = 'null';\n this.log('Ajax call to get webRTCServer IP address failed in WebRTCClient::getWebRTCServer');\n callback('null');\n }\n request.send();\n }\n\n start(config?) {\n let retVal = true;\n const self = this;\n this.setConfig(config);\n if (!this.sessionManager) {\n this.log('WebRTCClient.start() invoked without sessionManager!');\n return false;\n }\n\n try {\n this.getWebRTCServer(this.sessionManager, function() {\n self.log('WebRTCClient.start(): getWebRtcServer: sessionManager = ' +\n self.sessionManager + ' webrtcServer = ' + self.webRTCServer);\n if (self.webRTCPlugin === null) {\n self.webRTCPlugin = new WebRTCPlugin(self.browser, self.messages, self.webRTCServer, self.webRTCAdapter);\n }\n self.dispatchOutEvent({type: 'OutEventLogicStarted'});\n self.webRTCPlugin.useCallbackForOutEvents = true;\n self.webRTCPlugin.outEventCallbackObject = self;\n self.webRTCPlugin.outEventCallbackMethod = 'dispatchOutEvent';\n retVal = self.webRTCPlugin.start();\n });\n } catch (e) {\n this.log('WebRTCClient.start() threw an exception!');\n this.log(e);\n return retVal;\n }\n if (retVal) {\n this.log('WebRTCClient.start() called plug-in with successful return.');\n } else {\n this.log('WebRTCClient.start() called plug-in with return of error!');\n }\n\n return retVal;\n }\n\n stop() {\n let retVal = false;\n if (!this.webRTCPlugin) {\n this.log('WebRTCClient.stop() invoked without start!');\n return retVal;\n }\n /* DEBUG: retVal = true;*/\n try {\n retVal = this.webRTCPlugin.stop();\n } catch (e) {\n this.log('WebRTCClient.stop() threw an exception!');\n this.log(e);\n return retVal;\n }\n if (retVal) {\n this.log('WebRTCClient.stop() called plug-in with successful return.');\n } else {\n this.log('WebRTCClient.stop() called plug-in with return of error!');\n }\n return retVal;\n }\n\n sendEvent(event) {\n let retVal = false;\n if (!this.webRTCPlugin) {\n this.log('WebRTCClient.sendEvent() invoked without start!');\n return retVal;\n }\n if (!event || typeof event !== 'object') {\n this.log('WebRTCClient.sendEvent() invoked without valid event object!');\n return retVal;\n }\n if (typeof event.length === 'number' && !(event.propertyIsEnumerable('length'))) {\n this.log('WebRTCClient.sendEvent() invoked without valid event object!');\n return retVal;\n }\n /* DEBUG: retVal = true;*/\n try {\n retVal = this.webRTCPlugin.sendEvent(event);\n } catch (e) {\n this.log('WebRTCClient.sendEvent() threw an exception!');\n this.log(e);\n return retVal;\n }\n if (retVal) {\n this.log('WebRTCClient.sendEvent() called plug-in with successful return.');\n } else {\n this.log('WebRTCClient.sendEvent() called plug-in with return of error!');\n }\n return retVal;\n }\n\n sendRequest(request, callback) {\n let retVal = 'Error';\n if (!this.webRTCPlugin) {\n this.log('WebRTCClient.sendRequest() invoked without start');\n return 'ErrorNoPlugin';\n }\n if (!request || typeof request !== 'object') {\n this.log('WebRTCClient.sendRequest() invoked without valid request object!');\n return 'ErrorInvalidRequest';\n }\n if (typeof request.length === 'number' && !(request.propertyIsEnumerable('length'))) {\n this.log('WebRTCClient.sendRequest() invoked without valid request object!');\n return 'ErrorInvalidRequest';\n }\n /* DEBUG: retVal = true;*/\n try {\n retVal = this.webRTCPlugin.sendRequest(request);\n } catch (e) {\n this.log('WebRTCClient.sendRequest() threw an exception!');\n this.log(e);\n return 'ErrorInvalidPlugin';\n }\n if (retVal === 'ErrorOk') {\n this.log('WebRTCClient.sendRequest() called plug-in with successful return.');\n } else {\n this.log('WebRTCClient.sendRequest() called plug-in with return of ' + retVal + '!');\n }\n\n if (callback) {\n callback(request);\n }\n return retVal;\n }\n\n dispatchOutEvent(event) {\n if (this.outEventCallbackObject) {\n if (event && this.outEventCallbackMethods[event.type]) {\n if (typeof this.outEventCallbackMethods[event.type] === 'function') {\n // if method is of function type, just invoke it with default this\n this.outEventCallbackMethods[event.type].call(this.outEventCallbackObject || this, event);\n } else {\n // otherwise, assume method is of string type, invoke it with object as this\n this.outEventCallbackObject[this.outEventCallbackMethods[event.type]](event);\n }\n this.log('dispatchOutEvent() invoked specific out event callback method.');\n } else if (this.defaultOutEventCallbackMethod) {\n if (typeof this.defaultOutEventCallbackMethod === 'function') {\n // if method is of function type, just invoke it with default this\n this.defaultOutEventCallbackMethod.call(this.outEventCallbackObject || this, event);\n } else {\n // otherwise, assume method is of string type, invoke it with object as this\n this.outEventCallbackObject[this.defaultOutEventCallbackMethod](event);\n }\n this.log('WebRTCClient.dispatchOutEvent() invoked default out event callback method.');\n }\n }\n }\n\n log(message) {\n if (this.logCallback) {\n this.logCallback(message);\n }\n }\n\n // Only here for inteface matching\n setProxy(proxy?) {\n return;\n }\n}\n}\n","/**\n * WebRTCPlugin\n */\nnamespace SmartVideo {\n export class WebRTCPlugin {\n browser: string;\n isSmartVideo: boolean;\n CallStateEnum: any;\n SDPStateEnum: any;\n pluginIceServer: any;\n resolutionMap: any;\n webRTCServer: string;\n useCallbackForOutEvents: boolean;\n outEventCallbackObject: any;\n outEventCallbackMethod: string;\n messages: VidyoClientMessages;\n configurationRequest: any;\n sendShareResolution: string;\n started: boolean;\n callState: string;\n sdpState: string;\n session: string;\n guestName: string;\n maxSubscriptions: number;\n currentSubscriptions: number;\n callId: number;\n peerConn: RTCPeerConnection;\n additionalPeerConn: RTCPeerConnection[];\n additionalPeerConnOffers: any[];\n localStream: MediaStream;\n remoteStream: any[];\n audioSources: any[];\n videoSources: any[];\n conferenceName: string;\n participants: any[];\n participantUris: any[];\n activeTalkers: Array;\n volume: number;\n audioOutMuted: boolean;\n videoMuted: boolean;\n shareList: {\n remoteAppName: any[];\n newApp: number;\n remoteAppUri: string[];\n numApp: any;\n currApp: any;\n eventUri: any;\n };\n shareApp: number;\n remoteSharePeerConn: RTCPeerConnection;\n remoteSharePeerOffer: any;\n remoteShareStream: MediaStream;\n remoteShareStreamIndex: number;\n pendingAttaches: any[];\n numDesktops: number;\n currentDesktopId: number;\n localSharePeerConn: RTCPeerConnection;\n localShareStream: MediaStream;\n localShareOffer: any;\n serverMutedAudio: boolean;\n serverMutedVideo: boolean;\n recording: boolean;\n webcast: boolean;\n watchInterval: number;\n windowSizes: any[];\n numPreferred: number;\n activeVideoStreams: number;\n pendingRequestId: number;\n localStats: any;\n showStats: boolean;\n lectureModeListener: boolean;\n lectureModeStarted: boolean;\n lectureModePresenterUri: string;\n webRTCAdapter: WebRTCAdapter;\n peerConnIsNegotiating: boolean;\n\n constructor(\n browser: string,\n messages: VidyoClientMessages,\n webRTCServer: string,\n webRTCAdapter: WebRTCAdapter\n ) {\n this.browser = browser;\n this.isSmartVideo = browser === 'SmartVideoAgent';\n this.CallStateEnum = {\n IDLE: 'IDLE',\n CALLING: 'CALLING',\n CONNECTING: 'CONNECTING',\n CONNECTED: 'CONNECTED',\n VIDEO_CONNECTED: 'VIDEO_CONNECTED',\n VIDEO_STARTED: 'VIDEO_STARTED',\n };\n this.SDPStateEnum = {\n IDLE: 'IDLE',\n COLLECTING: 'COLLECTING',\n COLLECTED: 'COLLECTED',\n };\n this.pluginIceServer = {\n iceServers: [],\n };\n this.resolutionMap = {\n '180p': {\n w: 320,\n h: 180,\n br: '256',\n },\n '240p': {\n w: 426,\n h: 240,\n br: '384',\n },\n '270p': {\n w: 480,\n h: 270,\n br: '448',\n },\n '360p': {\n w: 640,\n h: 360,\n br: '512',\n },\n '480p': {\n w: 854,\n h: 480,\n br: '768',\n },\n '540p': {\n w: 960,\n h: 540,\n br: '1024',\n },\n '720p': {\n w: 1280,\n h: 720,\n br: '1536',\n },\n '1080p': {\n w: 1920,\n h: 1080,\n br: '2048',\n },\n };\n this.webRTCServer =\n webRTCServer === undefined\n ? ''\n : window.location.protocol + '//' + webRTCServer;\n this.webRTCAdapter = webRTCAdapter;\n this.useCallbackForOutEvents = null;\n this.outEventCallbackObject = null;\n this.outEventCallbackMethod = null;\n this.messages = messages;\n this.configurationRequest = messages.requestGetConfiguration();\n this.configurationRequest.videoPreferences = '';\n this.sendShareResolution = '';\n this.started = false;\n this.callState = this.CallStateEnum.IDLE;\n this.sdpState = this.SDPStateEnum.IDLE;\n this.session = null;\n this.guestName = '';\n this.maxSubscriptions = 0;\n this.currentSubscriptions = 0;\n this.callId = -1;\n this.peerConn = null;\n this.additionalPeerConn = [];\n this.additionalPeerConnOffers = [];\n this.localStream = null;\n this.remoteStream = [];\n this.audioSources = null;\n this.videoSources = null;\n this.conferenceName = '';\n this.participants = [];\n this.participantUris = [];\n this.activeTalkers = [];\n this.volume = 0;\n this.audioOutMuted = false;\n this.videoMuted = false;\n this.shareList = messages.requestWindowShares();\n this.shareApp = 0;\n this.remoteSharePeerConn = null;\n this.remoteSharePeerOffer = null;\n this.remoteShareStream = null;\n this.remoteShareStreamIndex = -1;\n this.pendingAttaches = [];\n this.numDesktops = 0;\n this.currentDesktopId = 1;\n this.localSharePeerConn = null;\n this.localShareStream = null;\n this.localShareOffer = null;\n this.serverMutedAudio = false;\n this.serverMutedVideo = false;\n this.recording = false;\n this.webcast = false;\n this.watchInterval = null;\n this.windowSizes = [];\n this.numPreferred = 0;\n this.activeVideoStreams = 0;\n this.pendingRequestId = -1;\n this.localStats = {};\n this.showStats = false;\n this.lectureModeListener = false;\n this.lectureModeStarted = false;\n this.lectureModePresenterUri = '';\n window.addEventListener('message', this.shareListener.bind(this), false);\n }\n\n empty() {}\n\n log(level: string, ts: string, str: string) {\n console[level]('' + ts + ' [WebRTCPlugin] ' + str);\n }\n\n logInfo(str: string) {\n const ts = new Date().toLocaleTimeString();\n this.log('info', ts, str);\n }\n\n logError(str: string) {\n const ts = new Date().toLocaleTimeString();\n this.log('error', ts, str);\n }\n\n logDebug(str: string) {\n const ts = new Date().toLocaleTimeString();\n this.log('debug', ts, str);\n }\n\n isBundleSupported() {\n switch (this.browser) {\n case 'Opera':\n return true;\n case 'Chrome':\n return true;\n case 'SmartVideoAgent':\n return true;\n case 'Firefox':\n return false;\n case 'Edge':\n return true;\n default:\n break;\n }\n }\n\n isStarted() {\n return this.started;\n }\n\n ready(callback: () => void) {\n callback();\n }\n\n periodicExtensionCheck() {\n // Do this in VidyoDetection\n }\n\n shareListener(event) {\n if (event.origin !== window.location.origin) {\n return;\n }\n\n if (event.data.type === 'VidyoRequestId') {\n this.logInfo('VidyoRequestId - ' + event.data.requestId);\n this.pendingRequestId = event.data.requestId;\n }\n if (event.data.type === 'VidyoOutEventSourceId') {\n this.pendingRequestId = -1;\n if (event.data.sourceId === '') {\n this.currentDesktopId += 1;\n const k = this.messages.event('VidyoOutEventCancelShare');\n this.outEventCallbackObject.dispatchOutEvent(k);\n return;\n }\n let width = 1280;\n let height = 720;\n if (this.resolutionMap.hasOwnProperty(this.sendShareResolution)) {\n width = this.resolutionMap[this.sendShareResolution].w;\n height = this.resolutionMap[this.sendShareResolution].h;\n }\n const constraints = {\n audio: false,\n video: {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: event.data.sourceId,\n maxWidth: width,\n maxHeight: height,\n maxFrameRate: 5,\n },\n },\n optional: [],\n };\n if (this.isBundleSupported()) {\n constraints.optional[0] = { googTemporalLayeredScreencast: true };\n }\n this.startLocalShare(constraints);\n }\n }\n\n start() {\n if (this.started) {\n this.logInfo('WebRTCClient already started!');\n return true;\n }\n this.started = true;\n this.logDebug('Plugin.start, collecting sources');\n this.webRTCAdapter.getWebRTCSources(this.webRTCGetSources.bind(this));\n return true;\n }\n\n startLocalShare(constraints: MediaStreamConstraints) {\n const self = this;\n this.logInfo(\n 'Starting Local Screen Share with source **' +\n JSON.stringify(constraints) +\n '** ...'\n );\n this.localSharePeerConn = new RTCPeerConnection(this.pluginIceServer);\n this.localSharePeerConn.onicecandidate = function (evt) {\n if (evt.candidate === null) {\n self.logInfo('LocalSharePeerConn: Candidate collection complete');\n } else {\n self.sendCandidate(0, evt.candidate);\n }\n };\n this.localSharePeerConn.oniceconnectionstatechange = function (state) {\n self.logInfo(\n 'share: oniceconnectionstatechange called ' +\n state.target.iceConnectionState\n );\n self.postLogToServer(\n 'share: oniceconnectionstatechange called ' +\n state.target.iceConnectionState\n );\n };\n this.localSharePeerConn.onsignalingstatechange = function (state) {\n self.logInfo(\n 'share: onsignalingstatechange called - ' +\n (state.target ? state.target.signalingState : state)\n );\n self.postLogToServer(\n 'share: onsignalingstatechange called - ' +\n (state.target ? state.target.signalingState : state)\n );\n };\n const triggerOffer = function () {\n self.logDebug('share: onnegotiationneeded called');\n const offerConstraints = {\n offerToReceiveAudio: false,\n offerToReceiveVideo: false,\n };\n self.localSharePeerConn.createOffer(\n function (offer: RTCSessionDescriptionInit) {\n self.logInfo('Share: createoffer success ' + offer.sdp);\n self.logInfo('Share: Session: ' + self.session);\n const params = {};\n params.session = self.session;\n params.callId = self.callId;\n params.sdp = offer;\n self.localShareOffer = offer;\n self.postMessageToServer(\n '/startlocalshare',\n params,\n true,\n function (s: any, e: any) {\n if (s) {\n if (self.localShareOffer !== null) {\n self.localShareOffer = null;\n self.localSharePeerConn.setLocalDescription(\n offer,\n function () {\n self.logInfo('Share: setLocalDescription success');\n },\n function (err) {\n self.logError('Share: SetLocalDescription error');\n }\n );\n } else {\n self.logInfo('startLocalShare - answer came first');\n }\n } else {\n self.logError('Share: SetLocalDescription send error');\n }\n }\n );\n },\n function (err) {\n self.logError('Share: CreateOffer error');\n },\n offerConstraints\n );\n };\n this.localSharePeerConn.onnegotiationneeded = triggerOffer;\n this.localSharePeerConn.onaddstream = function (evt) {\n self.logInfo('share: onaddstream called - Should not happen');\n };\n this.localSharePeerConn.onremovestream = function (evt) {\n self.logInfo('share: onremovestream called - Should not happen');\n };\n navigator.mediaDevices\n .getUserMedia(constraints)\n .then(function (shareStream) {\n self.logInfo('Got user media for screen share');\n self.logInfo(\n 'shareStream active status is: ' +\n shareStream.active +\n ', has tracks: ' +\n shareStream.getTracks().length +\n ', Id: ' +\n shareStream.id\n );\n self.localShareStream = shareStream;\n shareStream.oninactive = function () {\n self.logInfo('share stream inactive, stopping sharing');\n self.currentDesktopId += 1;\n self.stopLocalShare();\n };\n self.localSharePeerConn.addStream(shareStream);\n const lbl_sharetoggle = (\n document.getElementById('lbl_share_toggle')\n );\n lbl_sharetoggle.innerText = 'Sharing ON';\n })\n .catch(function (err) {\n self.logError('Error in Screen Share GUM ' + typeof err);\n console.dir(err);\n self.currentDesktopId += 1;\n });\n }\n\n stop() {\n this.logDebug('WebRTCClient Stop called');\n this.started = false;\n return true;\n }\n\n stopLocalShare() {\n const self = this;\n this.logDebug('stopLocalShare called...');\n if (this.pendingRequestId !== -1) {\n window.postMessage(\n {\n type: 'VidyoCancelRequest',\n requestId: this.pendingRequestId,\n },\n '*'\n );\n this.pendingRequestId = -1;\n }\n if (this.localShareStream !== null) {\n this.logInfo('Stopping local share media stream');\n this.webRTCAdapter.stopMediaStream(this.localShareStream);\n this.localShareStream = null;\n }\n if (this.localSharePeerConn !== null) {\n this.localSharePeerConn.close();\n this.localSharePeerConn = null;\n this.localShareOffer = null;\n const params = {};\n params.session = this.session;\n params.callId = this.callId;\n this.postMessageToServer('/stoplocalshare', params, true, this.empty);\n }\n }\n\n addSubscription() {\n const self = this;\n this.currentSubscriptions += 1;\n if (this.isBundleSupported() || this.currentSubscriptions === 1) {\n this.sendAddStream(\n this.currentSubscriptions,\n {\n sdp: '',\n },\n this.empty\n );\n return;\n }\n const index = this.currentSubscriptions - 1;\n this.additionalPeerConn[index] = new RTCPeerConnection(\n this.pluginIceServer\n );\n this.additionalPeerConn[index].onicecandidate = function (evt) {\n if (evt.candidate === null) {\n self.logInfo('PeerConn' + index + ': Candidate collection complete');\n } else {\n self.sendCandidate(index + 1, evt.candidate);\n }\n };\n this.additionalPeerConn[index].oniceconnectionstatechange = function (\n state\n ) {\n self.logInfo(\n 'PeerConn' +\n index +\n ': oniceconnectionstatechange called ' +\n state.target.iceConnectionState\n );\n self.postLogToServer(\n 'PeerConn' +\n index +\n ': oniceconnectionstatechange called ' +\n state.target.iceConnectionState\n );\n };\n this.additionalPeerConn[index].onsignalingstatechange = function (state) {\n self.logInfo(\n 'PeerConn' +\n index +\n ': onsignalingstatechange called - ' +\n (state.target ? state.target.signalingState : state)\n );\n self.postLogToServer(\n 'PeerConn' +\n index +\n ': onsignalingstatechange called - ' +\n (state.target ? state.target.signalingState : state)\n );\n };\n this.additionalPeerConn[index].onaddstream = function (evt) {\n self.logInfo('PeerConn' + index + ': onaddstream called');\n self.remoteStream[index] = evt.stream;\n self.attachRemoteStream('', index + 1, null);\n if (self.remoteStream[index].getAudioTracks()[0]) {\n self.remoteStream[\n index\n ].getAudioTracks()[0].enabled = !self.audioOutMuted;\n }\n };\n this.additionalPeerConn[index].onremovestream = function (evt) {\n self.logInfo('PeerConn' + index + ': onremovestream called');\n };\n const offerConstraints = {\n offerToReceiveAudio: true,\n offerToReceiveVideo: true,\n };\n this.additionalPeerConn[index].createOffer(\n function (offer) {\n self.logInfo(\n 'PeerConn' + index + ': createOffer success ' + offer.sdp\n );\n self.additionalPeerConnOffers[index] = offer;\n self.sendAddStream(index + 1, offer, function (s: any, e: any) {\n if (s) {\n if (self.additionalPeerConnOffers[index] !== null) {\n self.additionalPeerConnOffers[index] = null;\n self.additionalPeerConn[index].setLocalDescription(\n offer,\n function () {\n self.logDebug(\n 'PeerConn' + index + ': setlocaldescription success '\n );\n },\n function (err) {\n self.logError(\n 'PeerConn' + index + ': SetLocalDescription error'\n );\n }\n );\n } else {\n self.logDebug('PeerConn' + index + ': answer came first');\n }\n } else {\n self.logError(\n 'PeerConn' + index + ': SetLocalDescription send error'\n );\n }\n });\n },\n function (err) {\n self.logError('PeerConn' + index + ': CreateOffer error');\n },\n offerConstraints\n );\n }\n\n addRemoteStream(label: string, id: number, sdp: RTCSessionDescriptionInit) {\n const self = this;\n console.log('Received AddStream event for: ' + label);\n if (this.isBundleSupported() || id === 1) {\n this.attachRemoteStream(label, id, null);\n return;\n }\n id -= 1;\n if (this.additionalPeerConn[id] === null) {\n this.logInfo('PeerConn' + id + ': PeerConnection null, not adding');\n return;\n }\n const setAdditionalPeerConnRemoteDescription = function () {\n self.additionalPeerConn[id].setRemoteDescription(\n new RTCSessionDescription(sdp),\n function () {\n self.logInfo(\n `PeerConn${id}: Remote SDP set successfully with type ${sdp.type} sdp - ${sdp.sdp}`\n );\n },\n function (e) {\n self.logError(`PeerConn${id}: Remote SDP set failed`);\n console.dir(e);\n }\n );\n };\n if (this.additionalPeerConnOffers[id] !== null) {\n const o = this.additionalPeerConnOffers[id];\n this.additionalPeerConnOffers[id] = null;\n this.logInfo('PeerConn' + id + ': setting offer first');\n this.additionalPeerConn[id].setLocalDescription(\n o,\n function () {\n self.logDebug('PeerConn' + id + ': setlocaldescription success ');\n setAdditionalPeerConnRemoteDescription();\n },\n function (err) {\n self.logError('PeerConn' + id + ': SetLocalDescription error');\n }\n );\n } else {\n setAdditionalPeerConnRemoteDescription();\n }\n }\n\n addPendingAttach(elementId: string, stream: MediaStream) {\n const obj = {};\n obj.elemId = elementId;\n obj.stream = stream;\n this.pendingAttaches.push(obj);\n }\n\n attachOrQueueUp(element: string, remoteStream: MediaStream) {\n const remoteView = document.getElementById(element);\n if (this.callState === this.CallStateEnum.VIDEO_STARTED) {\n this.logInfo('Attaching Stream to ' + element);\n this.webRTCAdapter.attachMediaStream(remoteView, remoteStream);\n this.handleActiveTalkers(this.activeTalkers.slice());\n } else {\n this.logInfo('Pending attach stream to ' + element);\n this.addPendingAttach(element, remoteStream);\n }\n }\n\n attachRemoteStream(label: string, id: number, elementId: string) {\n if (this.isBundleSupported()) {\n const remoteStreams = this.peerConn.getRemoteStreams();\n for (let i = 0; i < remoteStreams.length; i++) {\n const remoteStream = remoteStreams[i];\n if (remoteStream && remoteStream.id === label) {\n const elem = elementId || 'remoteVideo' + i;\n this.remoteStream[i] = remoteStream;\n if (this.remoteStream[i].getAudioTracks()[0]) {\n this.remoteStream[i].getAudioTracks()[0].enabled = !this\n .audioOutMuted;\n }\n this.attachOrQueueUp(elem, this.remoteStream[i]);\n return;\n }\n }\n this.logError('Attach Remote Stream label not found - ' + label);\n return;\n }\n id -= 1;\n this.logInfo('Attach Remote Stream using id - ' + id);\n let streamIds = 'Current stream Ids: ';\n this.logInfo('Number of remote streams: ' + this.remoteStream.length);\n this.remoteStream.forEach((stream) => {\n if (stream) {\n streamIds = streamIds + stream.id + ', ';\n } else {\n streamIds = streamIds + 'No stream, ';\n }\n });\n this.logInfo('Current Ids: ' + streamIds);\n const elem1 = elementId || 'remoteVideo' + id;\n this.attachOrQueueUp(elem1, this.remoteStream[id]);\n }\n\n clearStats() {\n let elem: HTMLElement;\n for (let i = 0; i < this.maxSubscriptions; i++) {\n elem = document.getElementById('participantStats' + i);\n elem.style.display = 'none';\n elem.innerHTML = '';\n }\n document.getElementById('selfViewName').innerHTML = 'Self View';\n elem = document.getElementById('shareStats');\n elem.innerHTML = '';\n elem.style.display = 'none';\n }\n\n displayStats() {\n let elem = document.getElementById('participantStats0');\n if (!elem) {\n return;\n }\n if (this.showStats === false) {\n return;\n }\n let name = '';\n let statRequest = {};\n for (let i = 0; i < this.activeVideoStreams; i++) {\n statRequest.uri = this.activeTalkers[i].url;\n this.getStatsForParticipant(statRequest);\n elem = document.getElementById('participantStats' + i);\n elem.innerHTML = this.getReceiveStatsForDisplay(statRequest);\n elem.style.display = 'inline-block';\n }\n if (this.shareApp > 0) {\n statRequest = this.localStats.remoteShare;\n elem = document.getElementById('shareStats');\n elem.innerHTML = this.getReceiveStatsForDisplay(statRequest);\n elem.style.display = 'inline-block';\n }\n const localStats = this.localStats.local;\n name =\n 'Self View
    ' +\n localStats.videoResolution.width +\n 'x' +\n localStats.videoResolution.height +\n ' ';\n name += localStats.videoKBitsPerSecSend + 'kbps ';\n name += localStats.encodeFrameRate + 'fps ';\n name += localStats.numFirs + '/' + localStats.numNacks;\n if (localStats.noStats) {\n name = 'Self View
    ...';\n }\n document.getElementById('selfViewName').innerHTML = name;\n }\n\n doPendingAttaches() {\n this.logDebug(\n 'Doing pending attaches count=' + this.pendingAttaches.length\n );\n for (let i = 0; i < this.pendingAttaches.length; i++) {\n const obj = this.pendingAttaches[i];\n const elemId = obj.elemId;\n const stream = obj.stream;\n const elem = document.getElementById(elemId);\n this.webRTCAdapter.attachMediaStream(elem, stream);\n }\n if (this.shareApp !== 0) {\n const shareName = document.getElementById('shareName');\n shareName.innerHTML = this.shareList.remoteAppName[\n this.shareList.newApp - 1\n ];\n }\n this.pendingAttaches.length = 0;\n this.handleActiveTalkers(this.activeTalkers.slice());\n this.watchForViewChange();\n const disableFunc = function (e) {\n e.preventDefault();\n return false;\n };\n const videoElements = document.getElementsByTagName('video');\n for (let k = 0; k < videoElements.length; k++) {\n videoElements[k].addEventListener('contextmenu', disableFunc);\n }\n }\n\n removeSubscription() {\n this.currentSubscriptions -= 1;\n const index = this.currentSubscriptions;\n if (!this.isBundleSupported()) {\n if (this.additionalPeerConn[index]) {\n this.additionalPeerConn[index].close();\n this.additionalPeerConn[index] = null;\n this.additionalPeerConnOffers[index] = null;\n }\n }\n this.sendRemoveStream(index + 1);\n this.removeRemoteStream(index);\n }\n\n removeRemoteStream(id: number) {\n const remoteStream = this.remoteStream[id];\n if (remoteStream) {\n this.logInfo('Detaching stream from ' + id);\n const remoteView = (\n document.getElementById('remoteVideo' + id)\n );\n this.remoteStream[id] = null;\n this.webRTCAdapter.detachMediaStream(\n remoteView,\n remoteStream,\n false,\n false\n );\n const docElement = document.getElementById('participant' + id);\n if (docElement) {\n docElement.innerHTML = '';\n }\n return;\n }\n }\n\n changeCallState(newState: string) {\n this.logInfo(\n 'Changing CallState from ' + this.callState + ' to ' + newState\n );\n this.callState = newState;\n }\n\n collectIceAndSendSdp() {\n const self = this;\n if (this.sdpState !== this.SDPStateEnum.IDLE) {\n this.logDebug(\n 'Ignore collect SDP request since in state - ' + this.sdpState\n );\n return;\n }\n this.logDebug('Changing SDP State to COLLECTING');\n this.sdpState = this.SDPStateEnum.COLLECTING;\n const rtcConfig = this.pluginIceServer;\n if (\n this.browser.toLowerCase() === 'chrome' ||\n this.browser.toLowerCase() === 'opera'\n ) {\n rtcConfig.sdpSemantics = 'plan-b';\n this.peerConn = new RTCPeerConnection(rtcConfig);\n } else {\n this.peerConn = new RTCPeerConnection(this.pluginIceServer);\n }\n this.peerConn.onicecandidate = function (evt) {\n if (evt.candidate === null) {\n self.logDebug('Main: Candidate collection complete');\n } else {\n self.sendCandidate(1, evt.candidate);\n }\n };\n this.peerConn.oniceconnectionstatechange = function (state) {\n self.logInfo(\n 'oniceconnectionstatechange called - ' +\n state.target.iceConnectionState\n );\n self.postLogToServer(\n 'main: oniceconnectionstatechange called - ' +\n state.target.iceConnectionState\n );\n };\n this.peerConn.onsignalingstatechange = function (state) {\n self.logInfo(\n 'onsignalingstatechange called - ' +\n (state.target ? state.target.signalingState : state)\n );\n self.postLogToServer(\n 'main: onsignalingstatechange called - ' +\n (state.target ? state.target.signalingState : state)\n );\n self.peerConnIsNegotiating = self.peerConn.signalingState !== 'stable';\n };\n // Chrome's onnegotiatied is busted and fires multiple times, creating havoc\n // Add guard to prevent nested negotiations\n this.peerConnIsNegotiating = false;\n const triggerLocalOffer = function () {\n if (this.peerConnIsNegotiating) {\n console.log('Killing nested onnegotiation call');\n return;\n }\n this.peerConnIsNegotiating = true;\n const offerConstraints = {\n offerToReceiveAudio: true,\n offerToReceiveVideo: true,\n };\n self.logDebug('onnegotiationneeded called');\n self.peerConn.createOffer(\n function (offer: any) {\n self.localDescCreated(offer);\n },\n function (err) {\n self.logError('CreateOffer error');\n console.dir(err);\n },\n offerConstraints\n );\n };\n this.peerConn.onnegotiationneeded = triggerLocalOffer;\n this.peerConn.onaddstream = function (evt) {\n self.logInfo('onaddstream called - ' + evt.stream.id);\n if (!self.isBundleSupported()) {\n self.remoteStream[0] = evt.stream;\n }\n };\n this.peerConn.onremovestream = function (evt) {\n self.logError('onremovestream called - ' + evt.stream.id);\n };\n let videoId = '';\n let videoLabel = '';\n let audioId = '';\n\n if (this.configurationRequest.numberCameras > 0) {\n videoId = this.videoSources[self.configurationRequest.currentCamera].id;\n videoLabel = this.videoSources[self.configurationRequest.currentCamera]\n .label;\n this.logInfo(\n 'Current camera ' +\n this.configurationRequest.currentCamera +\n ' Id: ' +\n videoId +\n ' Label: ' +\n videoLabel\n );\n }\n if (this.configurationRequest.numberMicrophones > 0) {\n audioId = this.audioSources[this.configurationRequest.currentMicrophone]\n .id;\n this.logInfo(\n 'Current Mic ' +\n this.configurationRequest.currentMicrophone +\n ' Id: ' +\n audioId +\n ' Label: ' +\n this.audioSources[self.configurationRequest.currentMicrophone].label\n );\n }\n\n this.logInfo(\n 'Video Preference: ' + this.configurationRequest.videoPreferences\n );\n const optionalConstraintObj = [];\n const mandatoryConstraintObj = {};\n const mediaOptions = {\n audio: {\n optional: [\n {\n sourceId: audioId,\n },\n ],\n },\n };\n console.log('VideoId: ' + videoId);\n if (videoId !== '') {\n const w = this.resolutionMap[this.configurationRequest.videoPreferences]\n .w;\n const h = this.resolutionMap[this.configurationRequest.videoPreferences]\n .h;\n switch (this.configurationRequest.videoPreferences) {\n case '1080p':\n case '720p':\n case '540p':\n case '480p':\n case '360p':\n case '270p':\n case '240p':\n case '180p':\n optionalConstraintObj.push({\n height: h,\n });\n optionalConstraintObj.push({\n width: w,\n });\n mandatoryConstraintObj.maxHeight = h;\n mandatoryConstraintObj.maxWidth = w;\n break;\n default:\n this.logInfo(\n 'UNKNOWN VIDEO PREFERENCE - ' +\n this.configurationRequest.videoPreferences\n );\n break;\n }\n optionalConstraintObj.push({\n sourceId: videoId,\n });\n mediaOptions.video = {\n mandatory: mandatoryConstraintObj,\n optional: optionalConstraintObj,\n };\n }\n if (audioId === '0') {\n mediaOptions.audio = true;\n }\n if (videoId === '0') {\n delete mediaOptions.video.optional.sourceId;\n }\n if (videoId === '') {\n mediaOptions.video = {\n width: 320,\n };\n }\n if (audioId === '') {\n mediaOptions.audio = false;\n }\n console.log(mediaOptions);\n try {\n navigator.mediaDevices\n .getUserMedia(mediaOptions)\n .then(function (stream) {\n self.localStream = stream;\n self.addPendingAttach('localVideo', self.localStream);\n self.peerConn.addStream(stream);\n })\n .catch(function (err) {\n self.logError('GetUserMedia error');\n self.postLogToServer('GetUserMedia error: ' + JSON.stringify(err));\n console.dir(err);\n self.handleConnectResponse({\n error: 'Camera/Microphone access failed',\n });\n });\n } catch (error) {\n console.dir(error);\n }\n }\n\n getConfiguration(request: { [x: string]: any }) {\n for (const item in this.configurationRequest) {\n if (this.configurationRequest.hasOwnProperty(item)) {\n request[item] = this.configurationRequest[item];\n }\n }\n }\n\n getLocalEncodeResolution(request: { width: any; height: any }) {\n request.width = this.localStats.local.videoResolution.width;\n request.height = this.localStats.local.videoResolution.height;\n }\n\n getLocalFrameRates(request: {\n captureFrameRate: any;\n encodeFrameRate: any;\n sendFrameRate: any;\n }) {\n request.captureFrameRate = this.localStats.local.captureFrameRate;\n request.encodeFrameRate = this.localStats.local.encodeFrameRate;\n request.sendFrameRate = this.localStats.local.encodeFrameRate;\n }\n\n getLocalMediaInfo(request: {\n numIFrames: number;\n numFirs: any;\n numNacks: any;\n mediaRTT: any;\n }) {\n request.numIFrames = 0;\n request.numFirs = this.localStats.local.numFirs;\n request.numNacks = this.localStats.local.numNacks;\n request.mediaRTT = this.localStats.local.mediaRTT;\n }\n\n getNumberOfLocalShares() {\n // Code should be reworked to be compatible with VidyoDetection\n if (window.location.protocol !== 'https:') {\n return 0;\n }\n if (this.isBundleSupported()) {\n if (document.getElementById('vidyowebrtcscreenshare_is_installed')) {\n this.logInfo('vidyowebrtcscreenshare_is_installed');\n return 1;\n }\n this.periodicExtensionCheck();\n this.logInfo('vidyowebrtcscreenshare_is_installed NOT INSTALLED');\n return 0;\n }\n return 1;\n }\n\n getReceiveStatsForDisplay(statRequest: {\n videoResolution: { width: string; height: string };\n videoKBitsPerSecRecv: string;\n videoDisplayedFrameRate: string;\n firs: string;\n nacks: string;\n packetsLost: string;\n noStats: any;\n }) {\n let name =\n statRequest.videoResolution.width +\n 'x' +\n statRequest.videoResolution.height +\n ' ';\n name += statRequest.videoKBitsPerSecRecv + 'kbps ';\n name += statRequest.videoDisplayedFrameRate + 'fps ';\n name +=\n statRequest.firs +\n '/' +\n statRequest.nacks +\n '/' +\n statRequest.packetsLost;\n if (statRequest.noStats) {\n name = '...';\n }\n return name;\n }\n\n getStreamIndex(uri: any) {\n for (let i = 0; i < this.activeVideoStreams; ++i) {\n if (this.activeTalkers[i].url === uri) {\n return i;\n }\n }\n return -1;\n }\n\n getStatsForParticipant(statsRequest: { [x: string]: any; uri: any }) {\n const index = this.getStreamIndex(statsRequest.uri);\n if (index === -1) {\n return;\n }\n if (this.localStats[index]) {\n for (const s in this.localStats[index]) {\n if (this.localStats[index].hasOwnProperty(s)) {\n statsRequest[s] = this.localStats[index][s];\n }\n }\n }\n }\n\n getStatsForStreamIndex(index: number, statsRequest: { [x: string]: any }) {\n let pc = this.peerConn;\n if (!this.isBundleSupported() && index > 0) {\n pc = this.additionalPeerConn[index];\n }\n if (!this.localStats[index]) {\n this.localStats[index] = {\n videoResolution: {\n height: 0,\n width: 0,\n },\n videoFrameRate: 0,\n videoDecodedFrameRate: 0,\n videoDisplayedFrameRate: 0,\n videoKBitsPerSecRecv: 0,\n firs: 0,\n nacks: 0,\n packetsLost: 0,\n lastBytesReceivedTS: Date.now(),\n noStats: true,\n };\n }\n for (const s in this.localStats[index]) {\n if (this.localStats[index].hasOwnProperty(s)) {\n statsRequest[s] = this.localStats[index][s];\n }\n }\n const self = this;\n const track = this.remoteStream[index].getVideoTracks()[0];\n this.webRTCAdapter.getWebRTCStats(pc, track, function (streamStats) {\n if (!streamStats.hasOwnProperty('bytesReceived')) {\n return;\n }\n if (self.localStats[index].bytesReceived) {\n const timeDiff =\n (Date.now() - self.localStats[index].lastBytesReceivedTS) / 1000;\n const bitDiff =\n ((streamStats.bytesReceived -\n self.localStats[index].bytesReceived) *\n 8) /\n 1000;\n streamStats.videoKBitsPerSecRecv = Math.floor(bitDiff / timeDiff);\n } else {\n streamStats.videoKBitsPerSecRecv = 0;\n streamStats.noStats = true;\n }\n self.localStats[index] = streamStats;\n self.localStats[index].lastBytesReceivedTS = Date.now();\n });\n }\n\n getSourceId(val) {\n if (!this.isSmartVideo) {\n if (this.isBundleSupported()) {\n if (this.pendingRequestId === -1) {\n window.postMessage(\n {\n type: 'VidyoRequestGetWindowsAndDesktops',\n },\n '*'\n );\n }\n return;\n }\n }\n const constraints = {\n video: {\n mediaSource: 'window',\n mozMediaSource: 'window',\n },\n };\n this.startLocalShare(constraints);\n }\n\n getWindowSizes() {\n const windowSizes = [];\n for (let i = 0; i < this.activeVideoStreams; i++) {\n // Firefox doesn't calculate video height/width same as Chrome, so use different method to calculate size\n const remoteView = (\n document.getElementById('remoteVideo' + i)\n );\n if (remoteView) {\n const windowsize = {};\n windowsize.width = remoteView.clientWidth;\n windowsize.height = remoteView.clientHeight;\n this.logInfo(\n 'getWindowSizes: Video window calculated at width: ' +\n windowsize.width +\n ', height: ' +\n windowsize.height\n );\n if (windowsize.width === 0 || windowsize.height === 0) {\n break;\n }\n let maxWidth = 640;\n let maxHeigth = 360;\n if (\n this.resolutionMap.hasOwnProperty(\n this.configurationRequest.videoPreferences\n )\n ) {\n maxWidth = this.resolutionMap[\n this.configurationRequest.videoPreferences\n ].w;\n maxHeigth = this.resolutionMap[\n this.configurationRequest.videoPreferences\n ].h;\n }\n if (windowsize.width > maxWidth) {\n windowsize.width = maxWidth;\n }\n if (windowsize.height > maxHeigth) {\n windowsize.height = maxHeigth;\n }\n windowSizes.push(windowsize);\n }\n }\n return windowSizes;\n }\n\n getEvents() {\n const self = this;\n if (this.callState !== this.CallStateEnum.IDLE) {\n const oReq = new XMLHttpRequest();\n oReq.open('post', this.webRTCServer + '/events', true);\n const params = {};\n params['session'] = self.session;\n params['callId'] = self.callId;\n oReq.onload = function () {\n if (oReq.status === 404 || oReq.status === 503) {\n self.logError(\n 'getEvents received ' + oReq.status + ' disconnecting call'\n );\n console.log(\n 'getEvents received ' + oReq.status + ' disconnecting call'\n );\n self.sendDisconnect(false);\n return;\n }\n self.logDebug('Received Events - ' + oReq.responseText);\n const evts = JSON.parse(oReq.responseText);\n for (let r = 0; r < evts.length; r++) {\n const res = evts[r];\n if (res.type === 'connectResponse') {\n self.handleConnectResponse(res);\n } else if (res.type === 'callDisconnected') {\n self.sendDisconnect(false);\n console.log('Received callDisconnected from Vidyo server');\n } else if (res.type === 'sdp') {\n self.conferenceName = res.conf;\n self.handleRemoteSdp(res.sdp);\n } else if (res.type === 'participantsChanged') {\n self.handleParticipantsChanged(res);\n } else if (res.type === 'activeTalkersChanged') {\n self.handleActiveTalkers(res.names);\n } else if (res.type === 'streamAdded') {\n self.addRemoteStream(res.label, res.id, res.sdp);\n } else if (res.type === 'shareAdded') {\n self.handleShareAdded(res);\n } else if (res.type === 'shareRemoved') {\n self.handleShareRemoved(res);\n } else if (res.type === 'shareStreamChanged') {\n self.handleShareStreamChange(res.label, res.sdp);\n } else if (res.type === 'startLocalShareResponse') {\n self.handleStartLocalShareResponse(res.sdp);\n } else if (res.type === 'serverMutedAudio') {\n self.handleServerMutedAudio(res.muted, res.unmuteable);\n } else if (res.type === 'serverMutedVideo') {\n self.handleServerMutedVideo(res.muted, res.unmuteable);\n } else if (res.type === 'recordingStatus') {\n self.handleRecordingStatus(res.status);\n } else if (res.type === 'webcastStatus') {\n self.handleWebcastStatus(res.status);\n } else if (res.type === 'groupChatMessage') {\n self.handleGroupChatMessage(res);\n } else if (res.type === 'privateChatMessage') {\n self.handlePrivateChatMessage(res);\n } else if (res.type === 'lectureModeStage') {\n self.handleLectureModeStage(res.stage);\n } else if (res.type === 'lectureHand') {\n self.handleLectureHand();\n } else if (res.type === 'lectureModePresenterChanged') {\n self.handleLectureModePresenterChanged(res.uriOfPresenter);\n } else if (res.type === 'candidateEvent') {\n self.handleCandidate(res);\n } else {\n self.logError('Unhandled event from server - ' + res.type);\n }\n }\n self.getEvents();\n };\n oReq.onerror = function (e) {\n self.logError('getEvents error');\n console.dir(e);\n self.sendDisconnect(false);\n console.log('Ajax error in WebRTCPlugin::getEvents');\n };\n oReq.send(JSON.stringify(params));\n }\n }\n\n setConfiguration(request: any) {\n for (const item in request) {\n if (request.hasOwnProperty(item)) {\n this.configurationRequest[item] = request[item];\n }\n }\n }\n\n sendAddStream(streamId: number, sdp: { sdp: any }, callback: any) {\n const params = {};\n params.session = this.session;\n params.callId = this.callId;\n params.streamId = streamId;\n params.sdp = sdp;\n this.logInfo('sendAddStream sdp - ' + sdp.sdp);\n this.postMessageToServer('/addstream', params, true, callback);\n }\n\n sendRemoveStream(streamId: number) {\n const params = {};\n params.session = this.session;\n params.callId = this.callId;\n params.streamId = streamId;\n this.postMessageToServer('/removestream', params, true, this.empty);\n }\n\n sendEvent(e: any) {\n const self = this;\n switch (e.type) {\n case 'PrivateInEventVcsoapGuestLink':\n this.sendConnect(e);\n this.numDesktops = this.getNumberOfLocalShares();\n break;\n case 'InEventLeave':\n this.logInfo('InEventLeave - hangup call');\n this.sendDisconnect(true);\n break;\n case 'EventPreview':\n this.updateSelfView(e.previewMode);\n break;\n case 'InEventLoginCancel':\n this.logInfo('InEventLoginCancel - Cancel call');\n this.sendDisconnect(true);\n break;\n case 'InEventMuteAudioIn':\n this.handleMuteAudioIn(e);\n break;\n case 'InEventMuteAudioOut':\n this.handleMuteAudioOut(e);\n break;\n case 'InEventMuteVideo':\n this.handleMuteVideo(e);\n break;\n case 'InEventShare':\n this.getSourceId(e.window);\n break;\n case 'InEventUnshare':\n this.stopLocalShare();\n break;\n case 'InEventLayout':\n this.logDebug('InEventLayout preferred - ' + e.numPreferred);\n this.numPreferred = e.numPreferred;\n this.windowSizes = this.getWindowSizes();\n this.windowSizeChanged(this.windowSizes);\n break;\n case 'InEventGroupChat':\n const params = {};\n params.callId = this.callId;\n params.session = this.session;\n params.message = e.message;\n this.postMessageToServer(\n '/groupchatmessage',\n params,\n true,\n this.empty\n );\n break;\n case 'InEventPrivateChat':\n const param = {};\n param.callId = this.callId;\n param.session = this.session;\n param.uri = e.uri;\n param.message = e.message;\n this.postMessageToServer(\n '/privatechatmessage',\n param,\n true,\n this.empty\n );\n break;\n case 'InEventSetFreezeImage':\n this.handleFreezeImage(e);\n break;\n case 'InEventToggleStats':\n this.showStats = e.show;\n if (this.showStats === false) {\n this.clearStats();\n } else {\n this.displayStats();\n }\n break;\n case 'InEventLectureClearRaiseHand':\n const lectureHandMsg = {};\n lectureHandMsg.callId = this.callId;\n lectureHandMsg.session = this.session;\n lectureHandMsg.raise = e.raise;\n this.postMessageToServer(\n '/lecturehand',\n lectureHandMsg,\n true,\n this.empty\n );\n break;\n default:\n this.logError('sendEvent unhandled - ' + JSON.stringify(e));\n return false;\n }\n return true;\n }\n\n sendRequest(request) {\n switch (request.type) {\n case 'RequestGetConfiguration':\n this.getConfiguration(request);\n break;\n case 'RequestActiveTalkers':\n let activeTalkerCount = 0;\n for (let index = 0; index < this.activeTalkers.length; index++) {\n const talker = this.activeTalkers[index];\n if (talker.active) {\n activeTalkerCount += 1;\n }\n }\n request.activeTalkers = this.activeTalkers;\n request.numActiveTalkers = activeTalkerCount;\n break;\n case 'RequestSetConfiguration':\n this.setConfiguration(request);\n break;\n case 'RequestGetCallState':\n if (\n this.callState === this.CallStateEnum.VIDEO_CONNECTED ||\n this.callState === this.CallStateEnum.VIDEO_STARTED\n ) {\n request.callState = 'InConference';\n } else {\n request.callState = 'Idle';\n }\n break;\n case 'RequestGetWindowsAndDesktops':\n request.appWindowAppName = [];\n request.appWindowId = [];\n request.appWindowName = [];\n if (this.numDesktops > 0) {\n request.numSystemDesktops = 1;\n request.sysDesktopName[0] = 'Display';\n request.sysDesktopId = [this.currentDesktopId.toString()];\n } else {\n request.numSystemDesktops = 0;\n request.sysDesktopName = [];\n request.sysDesktopId = [];\n }\n break;\n case 'RequestGetCurrentSessionDisplayInfo':\n this.logInfo(\n 'RequestGetCurrentSessionDisplayInfo - ' + this.conferenceName\n );\n request.sessionDisplayText = this.conferenceName;\n break;\n case 'RequestGetCurrentUser':\n request.currentUserDisplay = this.guestName;\n break;\n case 'RequestGetEncodeResolution':\n this.getLocalEncodeResolution(request.rect);\n break;\n case 'RequestGetVideoFrameRateInfo':\n this.getLocalFrameRates(request);\n break;\n case 'RequestGetMediaInfo':\n this.getLocalMediaInfo(request);\n break;\n case 'RequestGetNumParticipants':\n request.numParticipants = this.participants.length;\n this.logInfo(\n 'RequestGetNumParticipants - ' + request.numParticipants\n );\n break;\n case 'RequestGetParticipantStatisticsAt':\n request.result = true;\n request.uri = this.participantUris[request.index];\n request.name = this.participants[request.index];\n this.getStatsForParticipant(request);\n break;\n case 'RequestGetParticipants':\n request.name = this.participants;\n request.URI = this.participantUris;\n request.numberParticipants = this.participants.length;\n break;\n case 'RequestGetVolumeAudioOut':\n this.logDebug('RequestGetVolumeAudioOut - ' + this.volume);\n request.volume = this.volume;\n break;\n case 'RequestSetVolumeAudioOut':\n this.logDebug('RequestSetVolumeAudioOut - ' + request.volume);\n this.handleSetAudioVolume(request.volume);\n break;\n case 'RequestGetMutedAudioOut':\n this.logDebug('RequestGetMutedAudioOut - false');\n request.isMuted = this.audioOutMuted;\n break;\n case 'RequestGetMutedAudioIn':\n this.logDebug('RequestGetMutedAudioIn - false');\n request.isMuted = !this.localStream.getAudioTracks()[0].enabled;\n break;\n case 'RequestGetMutedVideo':\n this.logDebug('RequestGetMutedVideo - false');\n request.isMuted = this.videoMuted;\n break;\n case 'RequestGetMutedServerAudioIn':\n this.logDebug(\n 'RequestGetMutedServerAudioIn - ' + this.serverMutedAudio\n );\n request.isMuted = this.serverMutedAudio;\n break;\n case 'RequestGetMutedServerVideo':\n this.logDebug(\n 'RequestGetMutedServerVideo - ' + this.serverMutedVideo\n );\n request.isMuted = this.serverMutedVideo;\n break;\n case 'RequestGetWindowShares':\n request.requestType = 'ListSharingWindows';\n request.remoteAppUri = this.shareList.remoteAppUri;\n request.remoteAppName = this.shareList.remoteAppName;\n request.numApp = this.shareList.numApp;\n request.currApp = this.shareList.currApp;\n request.eventUri = this.shareList.eventUri;\n request.newApp = this.shareList.newApp;\n this.logDebug('RequestGetWindowShares - ' + JSON.stringify(request));\n break;\n case 'RequestSetWindowShares':\n this.logInfo('RequestSetWindowShares - ' + JSON.stringify(request));\n this.shareList.newApp = request.newApp;\n this.sendChangeShare(request.newApp);\n break;\n case 'RequestGetPreviewMode':\n this.logInfo('RequestGetPreviewMode - Attaching video streams');\n if (this.callState === this.CallStateEnum.VIDEO_CONNECTED) {\n this.changeCallState(this.CallStateEnum.VIDEO_STARTED);\n this.doPendingAttaches();\n }\n if (this.activeVideoStreams > 0) {\n this.updateActiveVideoStreams(this.activeVideoStreams);\n }\n break;\n case 'RequestGetConferenceInfo':\n request.recording = this.recording;\n request.webcasting = this.webcast;\n this.logDebug(\n 'RequestGetConferenceInfo - ' +\n request.recording +\n ', ' +\n request.webcasting\n );\n break;\n case 'RequestGetLectureModeStatus':\n request.inLectureMode = this.lectureModeStarted;\n request.inPresenterMode =\n this.lectureModeStarted && !this.lectureModeListener;\n request.isTherePresenter = this.lectureModePresenterUri !== '';\n break;\n default:\n this.logError('sendRequest unhandled - ' + JSON.stringify(request));\n return 'ErrorInvalidRequest';\n }\n return 'ErrorOk';\n }\n\n sendInConference() {\n if (\n this.callState !== this.CallStateEnum.VIDEO_CONNECTED &&\n this.callState !== this.CallStateEnum.VIDEO_STARTED\n ) {\n this.logInfo('InConference Event --> UI');\n this.changeCallState(this.CallStateEnum.VIDEO_CONNECTED);\n const evt = this.messages.event('OutEventCallState');\n evt.callState = 'InConference';\n evt.error = 0;\n evt.activeEid = -1;\n this.outEventCallbackObject.dispatchOutEvent(evt);\n const confActiveEvent = this.messages.event('OutEventConferenceActive');\n this.outEventCallbackObject.dispatchOutEvent(confActiveEvent);\n if (this.callState === this.CallStateEnum.VIDEO_CONNECTED) {\n this.changeCallState(this.CallStateEnum.VIDEO_STARTED);\n this.doPendingAttaches();\n }\n }\n }\n\n sendConnect(e: {\n portalUri: any;\n roomKey: any;\n pin: string;\n requestId: any;\n guestName: string;\n }) {\n const self = this;\n const oReq = new XMLHttpRequest();\n oReq.open('post', this.webRTCServer + '/connect', true);\n const params = {};\n params.portalUri = e.portalUri;\n params.roomKey = e.roomKey;\n if (e.pin) {\n console.log('sendConnect PIN: ' + e.pin);\n params.pin = e.pin;\n } else {\n params.pin = '';\n }\n params.sessionId = e.requestId;\n params.guestName = e.guestName;\n params.videoPreferences = this.configurationRequest.videoPreferences;\n params.callType = 'webrtc';\n this.guestName = e.guestName;\n if (this.callState === this.CallStateEnum.IDLE) {\n this.changeCallState(this.CallStateEnum.CALLING);\n } else {\n this.logError('Invalid state for ConnectRequest - ' + this.callState);\n }\n oReq.onload = function () {\n if (oReq.status === 404 || oReq.status === 503) {\n self.logError(\n '/connect received ' + oReq.status + ' disconnecting call'\n );\n self.handleConnectResponse({\n error: 'Server unreachable - ' + oReq.status,\n });\n return;\n }\n const response = JSON.parse(oReq.responseText);\n self.logInfo('Response for connect - ' + JSON.stringify(response));\n self.session = response.session;\n self.logInfo('sendConnect: Session: ' + self.session);\n self.callId = response.callId;\n self.configurationRequest.videoPreferences = response.maxResolution;\n self.maxSubscriptions = response.maxSubscriptions;\n self.sendShareResolution = response.maxShareResolution;\n self.remoteShareStreamIndex = response.maxSubscriptions + 1;\n self.pluginIceServer.iceServers.length = 0;\n self.pluginIceServer.iceServers.push({\n urls: 'stun:' + response.stunServer,\n });\n let addr = window.location.hostname;\n\n /* Check the connect response to see if it supplies a different host to use as\n the WebRTC session manager. In a load balancing situation, the initial WebRTC session manager FQDN\n may ultimately resolve down to a different machine. The host field in the response supplies the\n FQDN of the host we ultimately connected to. */\n if (response.host.length > 0) {\n self.webRTCServer = window.location.protocol + '//' + response.host;\n addr = response.host;\n console.log(\n '/connect json response contains host, resetting WebRTC session manager to: ' +\n response.host\n );\n }\n\n if (response.turnCreds) {\n const urls = response.turnCreds.urls;\n for (let k = 0; k < urls.length; k++) {\n if (urls[k].indexOf('self_address') !== -1) {\n urls[k] = urls[k].replace('self_address', addr);\n }\n }\n self.pluginIceServer.iceServers.push(response.turnCreds);\n }\n const server =\n self.webRTCServer === '' ? window.location.origin : self.webRTCServer;\n const statsUrl =\n server +\n '/web/stats.html?session=' +\n self.session +\n '&callid=' +\n self.callId;\n self.logInfo('Stats URL - ' + statsUrl);\n if (self.callState === self.CallStateEnum.CALLING) {\n self.changeCallState(self.CallStateEnum.CONNECTING);\n self.getEvents();\n } else {\n self.logError(\n 'Invalid state for ConnectResponse - ' + self.callState\n );\n }\n };\n oReq.onerror = function (error) {\n self.logError('Connect Error');\n self.handleConnectResponse({\n error: 'Server unreachable',\n });\n };\n const paramStr = JSON.stringify(params);\n this.logInfo('/connect - ' + paramStr);\n oReq.send(paramStr);\n }\n\n sendDisconnect(localDisconnect: boolean) {\n this.logInfo(\n 'Leaving the conference call state - ' +\n this.callState +\n ' LocalDisconnect: ' +\n localDisconnect\n );\n if (this.callState === this.CallStateEnum.IDLE) {\n return;\n }\n if (this.pendingRequestId !== -1) {\n window.postMessage(\n {\n type: 'VidyoCancelRequest',\n requestId: this.pendingRequestId,\n },\n '*'\n );\n this.pendingRequestId = -1;\n }\n const localVideo = (\n document.getElementById('localVideo')\n );\n this.webRTCAdapter.detachMediaStream(\n localVideo,\n this.localStream,\n true,\n true\n );\n let remoteView: HTMLVideoElement,\n elemId: string,\n participantElem: HTMLElement;\n for (let i = 0; i < this.maxSubscriptions; i++) {\n elemId = 'remoteVideo' + i;\n remoteView = document.getElementById(elemId) as HTMLVideoElement;\n this.webRTCAdapter.detachMediaStream(\n remoteView,\n this.remoteStream[i],\n false,\n true\n );\n participantElem = document.getElementById('participant' + i);\n if (participantElem) {\n participantElem.innerHTML = '';\n }\n if (this.additionalPeerConn[i]) {\n this.additionalPeerConn[i].close();\n this.additionalPeerConn[i] = null;\n }\n this.additionalPeerConn.length = 0;\n this.additionalPeerConnOffers.length = 0;\n }\n const shareView = (\n document.getElementById('shareVideo0')\n );\n this.webRTCAdapter.detachMediaStream(\n shareView,\n this.remoteShareStream,\n false,\n true\n );\n if (this.remoteSharePeerConn !== null) {\n this.remoteSharePeerConn.close();\n this.remoteSharePeerConn = null;\n this.remoteSharePeerOffer = null;\n this.remoteShareStream = null;\n }\n participantElem = document.getElementById('shareName');\n if (participantElem) {\n participantElem.innerHTML = '';\n }\n if (this.showStats) {\n this.clearStats();\n }\n this.showStats = false;\n this.localStats = {};\n this.stopLocalShare();\n if (this.peerConn !== null) {\n this.peerConn.close();\n this.peerConn = null;\n }\n this.remoteStream.length = 0;\n this.activeTalkers.length = 0;\n this.participants.length = 0;\n this.participantUris.length = 0;\n this.currentSubscriptions = 0;\n this.shareApp = 0;\n this.shareList = this.messages.requestWindowShares();\n this.activeVideoStreams = 0;\n this.lectureModeListener = false;\n this.lectureModeStarted = false;\n this.lectureModePresenterUri = '';\n clearInterval(this.watchInterval);\n this.windowSizes.length = 0;\n this.numPreferred = 0;\n this.changeCallState(this.CallStateEnum.IDLE);\n this.sdpState = this.SDPStateEnum.IDLE;\n this.audioOutMuted = false;\n this.videoMuted = false;\n this.serverMutedAudio = false;\n this.serverMutedVideo = false;\n this.recording = false;\n this.webcast = false;\n if (localDisconnect) {\n const params = {};\n params.session = this.session;\n params.callId = this.callId;\n params.callType = 'webrtc';\n this.postMessageToServer('/disconnect', params, true, this.empty);\n }\n this.handleDisconnectedEvent(localDisconnect);\n }\n\n sendChangeShareRequest(eventUri: string, sdp: { sdp: any }, callback: any) {\n const params = {};\n params.session = this.session;\n params.callId = this.callId;\n params.eventUri = eventUri;\n params.sdp = sdp;\n this.logInfo('sendChangeShareRequest sdp - ' + sdp.sdp);\n this.postMessageToServer('/changeshare', params, true, callback);\n }\n\n sendCandidate(streamId: number, candidate: RTCIceCandidate) {\n const params = {};\n params.session = this.session;\n params.callId = this.callId;\n params.streamId = streamId;\n params.candidate = candidate.candidate;\n params.sdpMid = candidate.sdpMid;\n params.sdpMlineIndex = candidate.sdpMLineIndex;\n this.postMessageToServer('/candidate', params, true, this.empty);\n }\n\n sendChangeShare(newApp: number) {\n const self = this;\n if (newApp === 0 && this.shareApp === 0) {\n return;\n }\n let eventUri = '';\n let remoteAppName = '';\n if (newApp > 0) {\n eventUri = this.shareList.remoteAppUri[newApp - 1];\n remoteAppName = this.shareList.remoteAppName[newApp - 1];\n }\n this.logInfo(\n 'Changing the share from ' +\n this.shareApp +\n ' to ' +\n newApp +\n ': Name - ' +\n remoteAppName +\n ' EventURI: ' +\n eventUri\n );\n if (this.isBundleSupported()) {\n this.sendChangeShareRequest(\n eventUri,\n {\n sdp: '',\n },\n this.empty\n );\n } else if (this.remoteSharePeerConn !== null) {\n this.sendChangeShareRequest(\n eventUri,\n {\n sdp: '',\n },\n this.empty\n );\n } else if (this.remoteSharePeerConn === null) {\n // this.remoteSharePeerConn = this.webRTCAdapter.getRTCPeerConnection(this.pluginIceServer);\n this.remoteSharePeerConn = new RTCPeerConnection(this.pluginIceServer);\n this.remoteSharePeerConn.onicecandidate = function (evt) {\n if (evt.candidate === null) {\n self.logInfo('RemoteSharePeerConn: Candidate collection complete');\n } else {\n self.sendCandidate(10, evt.candidate);\n }\n };\n this.remoteSharePeerConn.oniceconnectionstatechange = function (state) {\n self.logInfo(\n 'remote share: oniceconnectionstatechange called ' +\n state.target.iceConnectionState\n );\n self.postLogToServer(\n 'remote share: oniceconnectionstatechange called ' +\n state.target.iceConnectionState\n );\n };\n this.remoteSharePeerConn.onsignalingstatechange = function (state) {\n self.logInfo(\n 'remote share: onsignalingstatechange called - ' +\n (state.target ? state.target.signalingState : state)\n );\n self.postLogToServer(\n 'remote share: onsignalingstatechange called - ' +\n (state.target ? state.target.signalingState : state)\n );\n };\n const offerConstraints = {\n // offerToReceiveAudio: false,\n offerToReceiveAudio: true,\n offerToReceiveVideo: true,\n };\n this.remoteSharePeerConn.createOffer(\n function (offer) {\n self.logDebug('remote share: createOffer success ' + offer.sdp);\n self.remoteSharePeerOffer = offer;\n self.sendChangeShareRequest(eventUri, offer, function (s, e) {\n if (s) {\n if (self.remoteSharePeerOffer !== null) {\n self.remoteSharePeerOffer = null;\n self.remoteSharePeerConn.setLocalDescription(\n offer,\n function () {\n self.logDebug(\n 'remote share: setlocaldescription success '\n );\n },\n function (err) {\n self.logError('remote share: SetLocalDescription error');\n }\n );\n } else {\n self.logDebug('remote share: answer came first');\n }\n } else {\n self.logError('remote share: SetLocalDescription send error');\n }\n });\n },\n function (err) {\n self.logError('remote share: CreateOffer error');\n },\n offerConstraints\n );\n }\n if (newApp === 0) {\n const shareView = (\n document.getElementById('shareVideo0')\n );\n this.webRTCAdapter.detachMediaStream(\n shareView,\n this.remoteShareStream,\n false,\n false\n );\n this.shareApp = newApp;\n const shareName = document.getElementById('shareName');\n shareName.innerHTML = '';\n this.remoteSharePeerConn.close();\n this.remoteSharePeerConn = null;\n this.remoteShareStream = null;\n this.remoteSharePeerOffer = null;\n }\n }\n\n sendConferenceInfoEvent() {\n const y = this.messages.event('OutEventConferenceInfoUpdate');\n this.outEventCallbackObject.dispatchOutEvent(y);\n }\n\n sendSdp(sdp: { sdp?: string }, callback: any) {\n if (this.callState === this.CallStateEnum.CONNECTED) {\n const params = {};\n params.session = this.session;\n params.callId = this.callId;\n params.sdp = sdp;\n this.logInfo('main video sdp - ' + sdp.sdp);\n this.postMessageToServer('/setsdp', params, true, callback);\n }\n }\n\n muteLocalAudio(muted: boolean) {\n if (!this.localStream) {\n return;\n }\n const audioTrack = this.localStream.getAudioTracks()[0];\n let enabled = false;\n if (audioTrack) {\n enabled = this.localStream.getAudioTracks()[0].enabled;\n } else {\n return;\n }\n\n this.logDebug('MuteAudioIn - changing from ' + enabled + ' to ' + !muted);\n this.localStream.getAudioTracks()[0].enabled = !muted;\n const params = {};\n params.session = this.session;\n params.callId = this.callId;\n params.muted = muted;\n this.postMessageToServer('/muteaudio', params, true, this.empty);\n }\n\n muteLocalVideo(muted: boolean) {\n const params = {};\n params.session = this.session;\n params.callId = this.callId;\n params.muted = muted;\n this.videoMuted = muted;\n this.postMessageToServer('/mutevideo', params, true, this.empty);\n }\n\n handleMuteVideo(e: { willMute: boolean }) {\n this.muteLocalVideo(e.willMute);\n }\n\n handleFreezeImage(e: { freeze: any }) {\n const par = {};\n par.callId = this.callId;\n par.session = this.session;\n par.enable = e.freeze;\n this.postMessageToServer('/freezeimage', par, true, this.empty);\n const elem = document.getElementById('localVideo');\n if (elem) {\n if (e.freeze) {\n elem.pause();\n } else {\n elem.play();\n }\n }\n }\n\n handleMuteAudioIn(e: { willMute: boolean }) {\n this.muteLocalAudio(e.willMute);\n }\n\n handleMuteAudioOut(e: { willMute: boolean }) {\n for (let i = 0; i < this.maxSubscriptions; i++) {\n if (this.remoteStream[i]) {\n const audioTrack = this.remoteStream[i].getAudioTracks()[0];\n if (audioTrack) {\n const enabled = this.remoteStream[i].getAudioTracks()[0].enabled;\n this.logDebug(\n 'AudioTrack' +\n i +\n ' : MuteAudioOut - changing from ' +\n enabled +\n ' to ' +\n !e.willMute\n );\n this.remoteStream[i].getAudioTracks()[0].enabled = !e.willMute;\n }\n }\n }\n this.audioOutMuted = e.willMute;\n const y = this.messages.event('OutEventMutedAudioOut');\n y.isMuted = e.willMute;\n this.outEventCallbackObject.dispatchOutEvent(y);\n }\n\n handleSetAudioVolume(volume: number) {\n this.volume = volume;\n for (let i = 0; i < this.maxSubscriptions; i++) {\n const remoteView = (\n document.getElementById('remoteVideo' + i)\n );\n if (remoteView) {\n remoteView.volume = volume / 65000;\n }\n }\n }\n\n handleConnectResponse(response: {\n error: any;\n session?: any;\n callId?: any;\n secure?: any;\n }) {\n if (this.callState !== this.CallStateEnum.CONNECTING) {\n this.logError(\n 'Invalid state for InitConnection response - ' + this.callState\n );\n }\n if (response.error !== 0) {\n const x = this.messages.event('callState');\n x.activeEid = -1;\n this.session = null;\n this.callId = -1;\n this.changeCallState(this.CallStateEnum.IDLE);\n x.error = 500;\n if (response.error === 4) {\n this.logInfo('ConnectResponse - CONFERENCE LOCKED !!');\n x.fault = 'ConferenceLocked';\n if (this.localStream) {\n this.webRTCAdapter.stopMediaStream(this.localStream);\n }\n this.sdpState = this.SDPStateEnum.IDLE;\n } else if (response.error === 6) {\n this.logInfo('ConnectResponse - WRONG PIN!!');\n x.fault = 'WrongPin';\n if (this.localStream) {\n this.webRTCAdapter.stopMediaStream(this.localStream);\n }\n this.sdpState = this.SDPStateEnum.IDLE;\n } else if (response.error === 35) {\n x.error = 6;\n x.type = 'OutEventLinked';\n if (this.localStream) {\n this.webRTCAdapter.stopMediaStream(this.localStream);\n }\n this.sdpState = this.SDPStateEnum.IDLE;\n } else if (response.error === 1017) {\n x.error = 500;\n x.type = 'OutEventLinked';\n if (this.localStream) {\n this.webRTCAdapter.stopMediaStream(this.localStream);\n }\n this.sdpState = this.SDPStateEnum.IDLE;\n } else {\n x.fault = response.error.toString();\n if (this.localStream) {\n this.webRTCAdapter.stopMediaStream(this.localStream);\n }\n this.sdpState = this.SDPStateEnum.IDLE;\n }\n this.outEventCallbackObject.dispatchOutEvent(x);\n return;\n }\n this.session = response.session;\n this.callId = response.callId;\n this.changeCallState(this.CallStateEnum.CONNECTED);\n this.collectIceAndSendSdp();\n if (this.sdpState === this.SDPStateEnum.COLLECTED) {\n this.sendSdp(null, null);\n }\n if (response.secure) {\n const signInEvent = this.messages.event('OutEventSignIn');\n signInEvent.signinSecured = true;\n this.outEventCallbackObject.dispatchOutEvent(signInEvent);\n }\n }\n\n handleDisconnectedEvent(localDisconnect: boolean) {\n const self = this;\n const x = this.messages.event('OutEventCallState');\n x.callState = 'Idle';\n x.error = 0;\n x.activeEid = -1;\n this.logInfo('CallState Idle --> UI');\n this.outEventCallbackObject.dispatchOutEvent(x);\n setTimeout(function () {\n const y = self.messages.event('OutEventConferenceEnded');\n self.outEventCallbackObject.dispatchOutEvent(y);\n self.logInfo('OutEventConferenceEnded --> UI');\n if (!localDisconnect) {\n const z = self.messages.event('OutEventUserMessage');\n z.messageType = 'DisconnectedFromConference';\n self.outEventCallbackObject.dispatchOutEvent(z);\n }\n }, 500);\n }\n\n handleParticipantsChanged(response: {\n names: any[];\n count: number;\n uris: any[];\n }) {\n const curentPartipantCount = this.participants.length;\n this.participants.length = 0;\n this.participantUris.length = 0;\n if (response.names) {\n for (let i = 0; i < response.count; i++) {\n // Recorder is counted as a participant, so need to make sure we don't try to get it's stream\n // Monitoring supervisors also don't send a stream, so exclude them from list of participants\n // Effectively, we want to ignore these participants\n if (\n response.names[i] !== 'Recorder' &&\n response.names[i].includes('-Monitor') === false\n ) {\n this.participants.push(response.names[i]);\n this.participantUris.push(response.uris[i]);\n }\n }\n }\n const participantNames = this.participants.toString();\n // Only send the particpants changed event if the particpant count has changed\n // This way, ignored participants don't generate the outEvent\n if (curentPartipantCount !== this.participants.length) {\n console.log(\n 'Participants changed, current participants: ' + participantNames\n );\n const k = this.messages.event('OutEventParticipantsChanged');\n this.outEventCallbackObject.dispatchOutEvent(k);\n this.logInfo(\n 'OutEventParticipantsChanged --> UI count=' + response.names.length\n );\n }\n\n if (this.currentSubscriptions === 0) {\n this.sendInConference();\n }\n this.updateSubscriptions();\n }\n\n handleRemoteSdp(sdp: RTCSessionDescriptionInit) {\n const self = this;\n const br = this.resolutionMap.hasOwnProperty(\n this.configurationRequest.videoPreferences\n )\n ? this.resolutionMap[this.configurationRequest.videoPreferences].br\n : '768';\n sdp.sdp = sdp.sdp.replace(\n /a=mid:video\\r\\n/g,\n 'a=mid:video\\r\\nb=AS:' + br + '\\r\\n'\n );\n sdp.sdp = sdp.sdp.replace(\n /a=mid:sdparta_1\\r\\n/g,\n 'a=mid:sdparta_1\\r\\nb=AS:' + br + '\\r\\n'\n );\n if (\n sdp.sdp.indexOf('m=video 1 RTP/SAVPF 96') >= 0 &&\n sdp.sdp.indexOf('a=rtpmap:96') === -1\n ) {\n console.log('fixing bad SDP received from server');\n sdp.sdp = sdp.sdp.replace(\n /a=rtpmap:98/g,\n // tslint:disable-next-line:max-line-length\n 'a=rtpmap:96 VP8/90000\\r\\na=rtcp-fb:96 ccm fir\\r\\na=rtcp-fb:96 nack\\r\\na=rtcp-fb:96 nack pli\\r\\na=rtcp-fb:96 goog-remb\\r\\na=rtpmap:98'\n );\n }\n this.peerConn.setRemoteDescription(\n new RTCSessionDescription(sdp),\n function () {\n self.logInfo(\n 'Remote SDP set successfully with type ' +\n sdp.type +\n ' sdp - ' +\n sdp.sdp\n );\n },\n function (e) {\n self.logError('Remote SDP set error, sdp: ' + sdp.sdp);\n console.error(e);\n console.dir(e);\n setTimeout(() => {\n this.handleRemoteSdp(sdp);\n }, 1500);\n }\n );\n }\n\n handleActiveTalkers(names: any[]) {\n this.activeTalkers.length = 0;\n for (let j = 0; j < names.length; j++) {\n this.activeTalkers.push(names[j]);\n }\n if (this.callState !== this.CallStateEnum.VIDEO_STARTED) {\n return;\n }\n for (let index = 0; index < names.length; index++) {\n const activetalker = names[index];\n console.log('Active talker: ' + activetalker.name);\n }\n const count = names.length;\n let active = 0;\n for (let i = 0; i < this.currentSubscriptions && i < count; i++) {\n const elemId = 'participant' + i;\n const docElement = document.getElementById(elemId);\n const videoElem = document.getElementById('remoteVideo' + i);\n if (names[i].active) {\n active += 1;\n }\n if (docElement && videoElem) {\n const participantName = docElement.innerHTML;\n const newName = names[i].name;\n const newNameArray = newName.split('-');\n let newDisplayName = names[i].name;\n // Remove the -Customer suffix when displaying name\n if (newName.indexOf('-Customer') !== -1) {\n newDisplayName = newName.substring(0, newName.indexOf('-Customer'));\n }\n // Remove the InteractionId when displaying name\n newNameArray.forEach((element: any[]) => {\n if (element.length === 10 && !isNaN(+element)) {\n newDisplayName = newNameArray[0];\n }\n });\n if (names[i].active) {\n if (participantName !== newDisplayName) {\n document.getElementById(elemId).innerHTML = newDisplayName;\n videoElem.style.visibility = 'visible';\n console.log('Participant' + i + 'name set to ' + newDisplayName);\n }\n } else {\n // docElement.innerHTML = \"\";\n // videoElem.style.visibility = \"hidden\";\n }\n }\n }\n if (active !== this.activeVideoStreams) {\n this.updateActiveVideoStreams(active);\n }\n const k = this.messages.event('OutEventActiveTalkersChanged');\n this.outEventCallbackObject.dispatchOutEvent(k);\n }\n\n handleShareAdded(response: {\n shares: {\n remoteAppUri: string[];\n remoteAppName: any[];\n numApp: string | number;\n currApp: any;\n eventUri: string;\n newApp: number;\n };\n }) {\n this.shareList.remoteAppUri = response.shares.remoteAppUri.slice(1);\n this.shareList.remoteAppName = response.shares.remoteAppName.slice(1);\n this.shareList.numApp = response.shares.numApp;\n this.shareList.currApp = response.shares.currApp;\n if (response.shares.eventUri === '') {\n response.shares.eventUri =\n response.shares.remoteAppUri[response.shares.numApp];\n }\n this.shareList.eventUri = response.shares.eventUri;\n this.shareList.newApp = response.shares.newApp;\n this.logInfo('Share added, shares are ' + JSON.stringify(this.shareList));\n const k = this.messages.event('OutEventAddShare');\n k.URI = response.shares.eventUri;\n this.outEventCallbackObject.dispatchOutEvent(k);\n this.logInfo('OutEventAddShare --> UI - ' + response.shares.eventUri);\n }\n\n handleShareRemoved(response: {\n shares: {\n remoteAppUri: string[];\n remoteAppName: any[];\n numApp: any;\n currApp: any;\n eventUri: string;\n newApp: number;\n };\n }) {\n this.shareList.remoteAppUri = response.shares.remoteAppUri.slice(1);\n this.shareList.remoteAppName = response.shares.remoteAppName.slice(1);\n this.shareList.numApp = response.shares.numApp;\n this.shareList.currApp = response.shares.currApp;\n this.shareList.eventUri = response.shares.eventUri;\n this.shareList.newApp = response.shares.newApp;\n this.logInfo(\n 'Share removed, shares are - ' + JSON.stringify(this.shareList)\n );\n const k = this.messages.event('OutEventRemoveShare');\n k.URI = response.shares.eventUri;\n this.outEventCallbackObject.dispatchOutEvent(k);\n this.logInfo('OutEventRemoveShare --> UI - ' + response.shares.eventUri);\n }\n\n handleShareStreamChange(label: string, sdp: RTCSessionDescriptionInit) {\n const self = this;\n const shareName = document.getElementById('shareName');\n const dispName = this.shareList.remoteAppName[this.shareList.newApp - 1];\n const newNameArray = dispName.split('-');\n let newDisplayName = dispName;\n // Remove the -Customer suffix when displaying name\n if (dispName.indexOf('-Customer') !== -1) {\n newDisplayName = dispName.substring(0, dispName.indexOf('-Customer'));\n }\n // Remove the InteractionId when displaying name\n newNameArray.forEach((element) => {\n if (element.length === 10 && !isNaN(+element)) {\n newDisplayName = newNameArray[0];\n return;\n }\n });\n if (this.shareApp !== 0) {\n this.logInfo('Sharing going on, toggling, name - ' + newDisplayName);\n this.shareApp = this.shareList.newApp;\n shareName.innerHTML = newDisplayName;\n return;\n }\n if (this.shareList.newApp === 0) {\n this.logInfo('remote share: share stopped, returning');\n return;\n }\n if (!this.isBundleSupported()) {\n if (this.remoteSharePeerConn === null) {\n this.logInfo('remote share: share stopped, returning');\n return;\n }\n this.remoteSharePeerConn.onaddstream = function (evt) {\n self.logInfo('Remote Share: onaddstream called');\n self.remoteShareStream = evt.stream;\n self.remoteStream[self.remoteShareStreamIndex - 1] = evt.stream;\n self.shareApp = self.shareList.newApp;\n self.attachRemoteStream(\n label,\n self.remoteShareStreamIndex,\n 'shareVideo0'\n );\n };\n const setRemoteShareRemoteDescription = function () {\n if (sdp.sdp && sdp.sdp.length > 0) {\n self.remoteSharePeerConn.setRemoteDescription(\n new RTCSessionDescription(sdp),\n function () {\n self.logInfo(\n 'remote share: Remote SDP set successfully with type ' +\n sdp.type +\n ' sdp - ' +\n sdp.sdp\n );\n },\n function (e) {\n self.logError('remote share: Remote SDP set error');\n console.dir(e);\n }\n );\n }\n };\n if (this.remoteSharePeerOffer !== null) {\n this.logInfo('remote share: setLocalDescription first');\n const o = this.remoteSharePeerOffer;\n this.remoteSharePeerOffer = null;\n this.remoteSharePeerConn.setLocalDescription(\n o,\n function () {\n self.logDebug(\n 'remote share: setlocaldescription success answer firstcase '\n );\n setRemoteShareRemoteDescription();\n },\n function (err) {\n self.logError('remote share: SetLocalDescription error');\n }\n );\n } else {\n setRemoteShareRemoteDescription();\n }\n } else {\n this.shareApp = this.shareList.newApp;\n this.attachRemoteStream(\n label,\n self.remoteShareStreamIndex,\n 'shareVideo0'\n );\n }\n if (shareName) {\n shareName.innerHTML = newDisplayName;\n this.logInfo('Sharing setting name - ' + newDisplayName);\n }\n }\n\n handleStartLocalShareResponse(sdp: RTCSessionDescriptionInit) {\n const self = this;\n const setShareRemoteDescription = function () {\n self.localSharePeerConn.setRemoteDescription(\n new RTCSessionDescription(sdp),\n function () {\n self.logInfo(\n 'Share: Remote SDP set successfully with type ' +\n sdp.type +\n ' sdp - ' +\n sdp.sdp\n );\n },\n function (e) {\n self.logError('Share: Remote SDP set error');\n console.dir(e);\n }\n );\n };\n if (this.localShareOffer !== null) {\n const o = this.localShareOffer;\n this.localShareOffer = null;\n this.logInfo('handleStartLocalShareResponse - setting offer first');\n this.localSharePeerConn.setLocalDescription(\n o,\n function () {\n setShareRemoteDescription();\n },\n function (err) {\n self.logError('Share: SetLocalDescription error');\n }\n );\n } else {\n setShareRemoteDescription();\n }\n }\n\n handleServerMutedAudio(muted: boolean, unmuteable: any) {\n if (unmuteable) {\n const k = this.messages.event('OutEventMutedAudioIn');\n k.isMuted = muted;\n this.outEventCallbackObject.dispatchOutEvent(k);\n } else {\n this.serverMutedAudio = muted;\n this.muteLocalAudio(muted);\n const y = this.messages.event('OutEventMutedServerAudioIn');\n y.isMuted = muted;\n this.outEventCallbackObject.dispatchOutEvent(y);\n }\n }\n\n handleServerMutedVideo(muted: boolean, unmuteable: any) {\n if (unmuteable) {\n const j = this.messages.event('OutEventMutedVideo');\n j.isMuted = muted;\n this.outEventCallbackObject.dispatchOutEvent(j);\n } else {\n this.serverMutedVideo = muted;\n this.muteLocalVideo(muted);\n const y = this.messages.event('OutEventMutedServerVideo');\n y.isMuted = muted;\n this.outEventCallbackObject.dispatchOutEvent(y);\n }\n }\n\n handleRecordingStatus(status: boolean) {\n if (status !== this.recording) {\n this.logInfo(\n 'Recording changed from ' + this.recording + ' to ' + status\n );\n this.recording = status;\n }\n this.sendConferenceInfoEvent();\n }\n\n handleWebcastStatus(status: boolean) {\n if (status !== this.webcast) {\n this.logInfo('Webcast changed from ' + this.webcast + ' to ' + status);\n this.webcast = status;\n }\n this.sendConferenceInfoEvent();\n }\n\n handleGroupChatMessage(response: {\n uri: any;\n displayName: any;\n message: any;\n }) {\n const groupChatEvent = this.messages.event('OutEventGroupChat');\n groupChatEvent.uri = response.uri;\n groupChatEvent.displayName = response.displayName;\n groupChatEvent.message = response.message;\n this.outEventCallbackObject.dispatchOutEvent(groupChatEvent);\n }\n\n handlePrivateChatMessage(response: {\n uri: any;\n displayName: any;\n message: any;\n }) {\n const privateChatEvent = this.messages.event('OutEventPrivateChat');\n privateChatEvent.uri = response.uri;\n privateChatEvent.displayName = response.displayName;\n privateChatEvent.message = response.message;\n this.outEventCallbackObject.dispatchOutEvent(privateChatEvent);\n }\n\n handleLectureModeStage(stage: number) {\n let strStage = '';\n switch (stage) {\n case 0:\n strStage = 'LectureModeListen';\n this.lectureModeListener = true;\n this.updateSubscriptions();\n break;\n case 1:\n strStage = 'LectureModePresenter';\n this.lectureModeListener = false;\n this.updateSubscriptions();\n break;\n case 2:\n strStage = 'LectureModeAllowedToSpeak';\n break;\n case 3:\n strStage = 'LectureModeStarted';\n this.logInfo('Lecture Mode Started');\n this.lectureModeStarted = true;\n break;\n case 10:\n strStage = 'LectureModeStopped';\n this.logInfo('Lecture Mode Stopped');\n this.lectureModeListener = false;\n this.lectureModeStarted = false;\n this.updateSubscriptions();\n break;\n default:\n this.logError('Unknown LectureModeStage - ' + stage);\n break;\n }\n const lectureModeStageEvt = this.messages.event(\n 'OutEventLectureModeStage'\n );\n lectureModeStageEvt.stage = strStage;\n this.outEventCallbackObject.dispatchOutEvent(lectureModeStageEvt);\n }\n\n handleLectureHand() {\n const lectureHandClearedEvt = this.messages.event(\n 'OutEventLectureModeHandCleared'\n );\n this.outEventCallbackObject.dispatchOutEvent(lectureHandClearedEvt);\n }\n\n handleLectureModePresenterChanged(uriPresenter: string) {\n this.lectureModePresenterUri = uriPresenter;\n const lectureModePresenterChanged = this.messages.event(\n 'OutEventLectureModePresenterChanged'\n );\n lectureModePresenterChanged.uriOfPresenter = uriPresenter;\n this.outEventCallbackObject.dispatchOutEvent(lectureModePresenterChanged);\n }\n\n handleCandidate(candidate: {\n candidate: any;\n sdpMid: any;\n sdpMlineIndex: any;\n streamId: number;\n }) {\n const o = {\n candidate: candidate.candidate,\n sdpMid: candidate.sdpMid,\n sdpMLineIndex: candidate.sdpMlineIndex,\n };\n const c = new RTCIceCandidate(o);\n switch (candidate.streamId) {\n case 0:\n this.localSharePeerConn.addIceCandidate(c);\n break;\n case 1:\n this.peerConn.addIceCandidate(c);\n break;\n case 10:\n this.remoteSharePeerConn.addIceCandidate(c);\n break;\n default:\n if (this.additionalPeerConn[candidate.streamId - 1]) {\n this.additionalPeerConn[candidate.streamId - 1].addIceCandidate(c);\n }\n break;\n }\n }\n\n localDescCreated(description: RTCSessionDescriptionInit) {\n const self = this;\n this.sendSdp(description, function (s: any, e: any) {\n if (s) {\n self.peerConn.setLocalDescription(\n description,\n function () {\n self.logDebug(\n `LocalDescCreated: Changing SDP State to COLLECTED from ${self.sdpState}`\n );\n self.sdpState = self.SDPStateEnum.COLLECTED;\n if (self.callState === self.CallStateEnum.IDLE) {\n self.webRTCAdapter.stopMediaStream(self.localStream);\n self.sdpState = self.SDPStateEnum.IDLE;\n } else {\n }\n },\n function (err) {\n self.logError('SetLocalDescription error');\n console.dir(err);\n }\n );\n } else {\n self.webRTCAdapter.stopMediaStream(self.localStream);\n self.sdpState = self.SDPStateEnum.IDLE;\n self.logError('SetLocalDescription send error');\n }\n });\n }\n\n postMessageToServer(\n url: string,\n params: any,\n doLog: boolean,\n callback: any\n ) {\n const oReq = new XMLHttpRequest();\n const self = this;\n oReq.open('post', this.webRTCServer + url, true);\n oReq.onload = function () {\n if (doLog) {\n self.logDebug(\n '' +\n url +\n ' response received with status ' +\n oReq.status +\n ' : ' +\n oReq.statusText\n );\n }\n callback(true, oReq.status);\n };\n oReq.onerror = function (e) {\n self.logError('' + url + ' error response');\n console.dir(e);\n callback(false, e);\n };\n const paramStr = JSON.stringify(params);\n if (doLog) {\n self.logInfo('' + url + ' - ' + paramStr);\n }\n oReq.send(paramStr);\n }\n\n postLogToServer(log: string) {\n const params = {};\n params.session = this.session;\n params.callId = this.callId;\n params.log = log;\n this.postMessageToServer('/log', params, false, this.empty);\n }\n\n updateSelfView(val: any) {\n this.logDebug('UpdateSelfView - ' + val);\n }\n\n updateActiveVideoStreams(active: number) {\n this.logInfo(\n 'OutEventVideoStreamsChanged --> UI streamCount=' +\n active +\n ' prev=' +\n this.activeVideoStreams\n );\n this.activeVideoStreams = active;\n const streamsChangedEvent = this.messages.event(\n 'OutEventVideoStreamsChanged'\n );\n streamsChangedEvent.streamCount = active;\n this.outEventCallbackObject.dispatchOutEvent(streamsChangedEvent);\n this.windowSizes = this.getWindowSizes();\n this.windowSizeChanged(this.windowSizes);\n }\n\n updateSubscriptions() {\n let count = this.participants.length;\n this.logInfo(\n 'Updating subscriptions, current participant count: ' + count\n );\n if (count <= 0) {\n return;\n }\n if (this.lectureModeListener) {\n count = 1;\n }\n if (count > 1) {\n count -= 1;\n }\n if (count > this.maxSubscriptions) {\n count = this.maxSubscriptions;\n }\n if (this.currentSubscriptions !== count) {\n if (this.currentSubscriptions < count) {\n while (this.currentSubscriptions < count) {\n this.logInfo(\n 'Count increased to ' +\n count +\n ' adding subscription to ' +\n this.currentSubscriptions +\n ' Max is ' +\n this.maxSubscriptions\n );\n if (this.currentSubscriptions < this.maxSubscriptions) {\n this.addSubscription();\n }\n }\n } else {\n while (this.currentSubscriptions > count) {\n this.logInfo(\n 'Count decreased to ' +\n count +\n ' removing subscription from ' +\n this.currentSubscriptions\n );\n this.removeSubscription();\n if (this.activeVideoStreams > this.currentSubscriptions) {\n this.updateActiveVideoStreams(this.currentSubscriptions);\n }\n }\n }\n }\n }\n\n updateRemoteShareStats() {\n const self = this;\n if (this.shareApp > 0) {\n if (!this.localStats.remoteShare) {\n this.localStats.remoteShare = {\n videoResolution: {\n height: 0,\n width: 0,\n },\n videoFrameRate: 0,\n videoDecodedFrameRate: 0,\n videoDisplayedFrameRate: 0,\n videoKBitsPerSecRecv: 0,\n firs: 0,\n nacks: 0,\n packetsLost: 0,\n lastBytesReceivedTS: Date.now(),\n noStats: true,\n };\n }\n const track = this.remoteStream[\n this.remoteShareStreamIndex - 1\n ].getVideoTracks()[0];\n let pc = this.peerConn;\n if (!this.isBundleSupported()) {\n pc = this.remoteSharePeerConn;\n }\n this.webRTCAdapter.getWebRTCStats(pc, track, function (streamStats) {\n if (!streamStats.hasOwnProperty('bytesReceived')) {\n return;\n }\n if (self.localStats.remoteShare.bytesReceived) {\n const timeDiff =\n (Date.now() - self.localStats.remoteShare.lastBytesReceivedTS) /\n 1000;\n const bitDiff =\n ((streamStats.bytesReceived -\n self.localStats.remoteShare.bytesReceived) *\n 8) /\n 1000;\n streamStats.videoKBitsPerSecRecv = Math.floor(bitDiff / timeDiff);\n } else {\n streamStats.videoKBitsPerSecRecv = 0;\n streamStats.noStats = true;\n }\n self.localStats.remoteShare = streamStats;\n self.localStats.remoteShare.lastBytesReceivedTS = Date.now();\n });\n }\n }\n\n updateEncodeStats() {\n if (!this.localStats.local) {\n this.localStats.local = {\n videoResolution: {\n height: 0,\n width: 0,\n },\n captureFrameRate: 0,\n encodeFrameRate: 0,\n videoKBitsPerSecSend: 0,\n numFirs: 0,\n numNacks: 0,\n lastBytesSentTS: Date.now(),\n noStats: true,\n };\n }\n const self = this;\n let track = this.localStream.getVideoTracks()[0];\n this.webRTCAdapter.getWebRTCStats(self.peerConn, track, function (stats) {\n if (!stats.hasOwnProperty('bytesSent')) {\n return;\n }\n if (self.localStats.local.bytesSent) {\n const timeDiff =\n (Date.now() - self.localStats.local.lastBytesSentTS) / 1000;\n const bitDiff =\n ((stats.bytesSent - self.localStats.local.bytesSent) * 8) / 1000;\n stats.videoKBitsPerSecSend = Math.floor(bitDiff / timeDiff);\n } else {\n stats.videoKBitsPerSecSend = 0;\n stats.noStats = true;\n }\n self.localStats.local = stats;\n self.localStats.local.lastBytesSentTS = Date.now();\n });\n if (this.localShareStream !== null) {\n if (!this.localStats.localShare) {\n this.localStats.localShare = {\n videoResolution: {\n height: 0,\n width: 0,\n },\n captureFrameRate: 0,\n encodeFrameRate: 0,\n videoKBitsPerSecSend: 0,\n numFirs: 0,\n numNacks: 0,\n lastBytesSentTS: Date.now(),\n noStats: true,\n };\n }\n track = self.localShareStream.getVideoTracks()[0];\n this.webRTCAdapter.getWebRTCStats(\n self.localSharePeerConn,\n track,\n function (stats) {\n if (!stats.hasOwnProperty('bytesSent')) {\n return;\n }\n if (self.localStats.localShare.bytesSent) {\n const timeDiff =\n (Date.now() - self.localStats.localShare.lastBytesSentTS) /\n 1000;\n const bitDiff =\n ((stats.bytesSent - self.localStats.localShare.bytesSent) * 8) /\n 1000;\n stats.videoKBitsPerSecSend = Math.floor(bitDiff / timeDiff);\n } else {\n stats.videoKBitsPerSecSend = 0;\n stats.noStats = true;\n }\n self.localStats.localShare = stats;\n self.localStats.localShare.lastBytesSentTS = Date.now();\n }\n );\n }\n }\n\n watchForViewChange() {\n const self = this;\n this.watchInterval = setInterval(function () {\n const windowSizes = self.getWindowSizes();\n if (windowSizes.length !== self.windowSizes.length) {\n self.windowSizes = windowSizes;\n self.windowSizeChanged(windowSizes);\n } else {\n for (let i = 0; i < windowSizes.length; i++) {\n if (\n windowSizes[i].height !== self.windowSizes[i].height ||\n windowSizes[i].width !== self.windowSizes[i].width\n ) {\n self.windowSizes = windowSizes;\n self.windowSizeChanged(windowSizes);\n break;\n }\n }\n }\n self.updateEncodeStats();\n for (let k = 0; k < self.activeVideoStreams; k++) {\n const stats = {};\n self.getStatsForStreamIndex(k, stats);\n }\n if (self.shareApp > 0) {\n self.updateRemoteShareStats();\n }\n self.displayStats();\n }, 5000);\n }\n\n windowSizeChanged(windowSizes: any[]) {\n if (windowSizes.length <= 0) {\n return;\n }\n const reqObj = {};\n reqObj.windowSizes = windowSizes;\n reqObj.numPreferred = 0;\n if (\n (this.shareList.newApp === 0 && this.activeVideoStreams > 2) ||\n (this.numPreferred === 1 && this.activeVideoStreams > 2)\n ) {\n reqObj.numPreferred = 1;\n }\n const params = {};\n params.session = this.session;\n params.callId = this.callId;\n params.windows = reqObj;\n this.postMessageToServer('/windowsizes', params, true, this.empty);\n }\n\n webRTCGetSources(audioSources: any[], videoSources: any[]) {\n this.audioSources = audioSources;\n this.videoSources = videoSources;\n this.configurationRequest.cameras = [];\n this.configurationRequest.microphones = [];\n this.configurationRequest.speakers = [];\n for (let i = 0; i < this.videoSources.length; i++) {\n this.configurationRequest.cameras[i] = this.videoSources[i].label;\n this.logInfo('Source Camera: ' + this.videoSources[i].label);\n }\n this.configurationRequest.numberCameras = this.videoSources.length;\n this.configurationRequest.currentCamera = 0;\n for (let j = 0; j < this.audioSources.length; j++) {\n this.configurationRequest.microphones[j] = this.audioSources[j].label;\n this.logInfo('Source Mic: ' + this.audioSources[j].label);\n }\n this.configurationRequest.numberMicrophones = this.audioSources.length;\n this.configurationRequest.currentMicrophone = 0;\n this.configurationRequest.speakers[0] = 'Default';\n this.configurationRequest.numberSpeakers = 1;\n this.configurationRequest.currentSpeaker = 0;\n const devicesEvt = this.messages.event('OutEventDevicesChanged');\n this.outEventCallbackObject.dispatchOutEvent(devicesEvt);\n this.logInfo('OutEventPluginConnectionSuccess --> UI ');\n const evt = this.messages.event('OutEventPluginConnectionSuccess');\n this.outEventCallbackObject.dispatchOutEvent(evt);\n }\n }\n}\n"]}