| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | 
							- /* @flow */
 - 
 - import { setConfigFromURLParams } from '../../base/config';
 - import { loadScript } from '../../base/util';
 - 
 - import JitsiMeetJS from './_';
 - 
 - declare var APP: Object;
 - 
 - const JitsiConnectionErrors = JitsiMeetJS.errors.connection;
 - 
 - /**
 -  * Creates a JitsiLocalTrack model from the given device id.
 -  *
 -  * @param {string} type - The media type of track being created. Expected values
 -  * are "video" or "audio".
 -  * @param {string} deviceId - The id of the target media source.
 -  * @returns {Promise<JitsiLocalTrack>}
 -  */
 - export function createLocalTrack(type: string, deviceId: string) {
 -     return (
 -         JitsiMeetJS.createLocalTracks({
 -             cameraDeviceId: deviceId,
 -             devices: [ type ],
 - 
 -             // eslint-disable-next-line camelcase
 -             firefox_fake_device:
 -                 window.config && window.config.firefox_fake_device,
 -             micDeviceId: deviceId
 -         })
 -             .then(([ jitsiLocalTrack ]) => jitsiLocalTrack));
 - }
 - 
 - /**
 -  * Determines whether a specific JitsiConnectionErrors instance indicates a
 -  * fatal JitsiConnection error.
 -  *
 -  * FIXME Figure out the category of errors defined by the fucntion and describe
 -  * that category. I've currently named the category fatal because it appears to
 -  * be used in the cases of unrecoverable errors that necessitate a reload.
 -  *
 -  * @param {string} error - The JitsiConnectionErrors instance to
 -  * categorize/classify.
 -  * @returns {boolean} True if the specified JitsiConnectionErrors instance
 -  * indicates a fatal JitsiConnection error; otherwise, false.
 -  */
 - export function isFatalJitsiConnectionError(error: string) {
 -     return (
 -         error === JitsiConnectionErrors.CONNECTION_DROPPED_ERROR
 -             || error === JitsiConnectionErrors.OTHER_ERROR
 -             || error === JitsiConnectionErrors.SERVER_ERROR);
 - }
 - 
 - /**
 -  * Loads config.js from a specific remote server.
 -  *
 -  * @param {string} host - Host where config.js is hosted.
 -  * @param {string} path='config.js' - Relative pah to config.js file.
 -  * @returns {Promise<Object>}
 -  */
 - export function loadConfig(host: string, path: string = 'config.js') {
 -     let promise;
 - 
 -     if (typeof APP === 'undefined') {
 -         promise
 -             = loadScript(new URL(path, host).toString())
 -                 .then(() => {
 -                     const { config } = window;
 - 
 -                     // We don't want to pollute global scope.
 -                     window.config = undefined;
 - 
 -                     if (typeof config !== 'object') {
 -                         throw new Error('window.config is not an object');
 -                     }
 - 
 -                     return config;
 -                 })
 -                 .catch(err => {
 -                     console.error(`Failed to load ${path} from ${host}`, err);
 - 
 -                     throw err;
 -                 });
 -     } else {
 -         // Return config.js file from global scope. We can't use the version
 -         // that's being used for the React Native app because the old/current
 -         // Web app uses config from the global scope.
 -         promise = Promise.resolve(window.config);
 -     }
 - 
 -     // FIXME It's neither here nor there at the time of this writing where
 -     // config, interfaceConfig, and loggingConfig should be overwritten by URL
 -     // params.
 -     promise = promise.then(value => {
 -         setConfigFromURLParams();
 - 
 -         return value;
 -     });
 - 
 -     return promise;
 - }
 
 
  |