| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | /* global config, createConnectionExternally */
import getRoomName from '../react/features/base/config/getRoomName';
import parseURLParams from '../react/features/base/config/parseURLParams';
/**
 * Implements external connect using createConnectionExternally function defined
 * in external_connect.js for Jitsi Meet. Parses the room name and JSON Web
 * Token (JWT) from the URL and executes createConnectionExternally.
 *
 * NOTE: If you are using lib-jitsi-meet without Jitsi Meet, you should use this
 * file as reference only because the implementation is Jitsi Meet-specific.
 *
 * NOTE: For optimal results this file should be included right after
 * external_connect.js.
 */
if (typeof createConnectionExternally === 'function') {
    // URL params have higher proirity than config params.
    let url
        = parseURLParams(window.location, true, 'hash')[
                'config.externalConnectUrl']
            || config.externalConnectUrl;
    let roomName;
    if (url && (roomName = getRoomName())) {
        url += `?room=${roomName}`;
        const token = parseURLParams(window.location, true, 'search').jwt;
        if (token) {
            url += `&token=${token}`;
        }
        createConnectionExternally(
            url,
            connectionInfo => {
                // Sets that global variable to be used later by connect method
                // in connection.js.
                window.XMPPAttachInfo = {
                    status: 'success',
                    data: connectionInfo
                };
                checkForConnectHandlerAndConnect();
            },
            errorCallback);
    } else {
        errorCallback();
    }
} else {
    errorCallback();
}
/**
 * Check if connect from connection.js was executed and executes the handler
 * that is going to finish the connect work.
 *
 * @returns {void}
 */
function checkForConnectHandlerAndConnect() {
    window.APP
        && window.APP.connect.status === 'ready'
        && window.APP.connect.handler();
}
/**
 * Implements a callback to be invoked if anything goes wrong.
 *
 * @param {Error} error - The specifics of what went wrong.
 * @returns {void}
 */
function errorCallback(error) {
    // The value of error is undefined if external connect is disabled.
    error && console.warn(error);
    // Sets that global variable to be used later by connect method in
    // connection.js.
    window.XMPPAttachInfo = {
        status: 'error'
    };
    checkForConnectHandlerAndConnect();
}
 |