| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 | // @flow
import { VPAAS_TENANT_PREFIX } from './constants';
import logger from './logger';
/**
 * Returns the full vpaas tenant if available, given a path.
 *
 * @param {string} path - The meeting url path.
 * @returns {string}
 */
function extractVpaasTenantFromPath(path: string) {
    const [ , tenant ] = path.split('/');
    if (tenant.startsWith(VPAAS_TENANT_PREFIX)) {
        return tenant;
    }
    return '';
}
/**
 * Returns the vpaas tenant.
 *
 * @param {Object} state - The global state.
 * @returns {string}
 */
export function getVpaasTenant(state: Object) {
    return extractVpaasTenantFromPath(state['features/base/connection'].locationURL.pathname);
}
/**
 * Returns true if the current meeting is a vpaas one.
 *
 * @param {Object} state - The state of the app.
 * @returns {boolean}
 */
export function isVpaasMeeting(state: Object) {
    const connection = state['features/base/connection'];
    if (connection?.locationURL?.pathname) {
        return Boolean(
            extractVpaasTenantFromPath(connection?.locationURL?.pathname)
        );
    }
    return false;
}
/**
 * Sends a request for retrieving jaas customer details.
 *
 * @param {Object} reqData - The request info.
 * @param {string} reqData.appId - The client appId.
 * @param {string} reqData.baseUrl - The base url for the request.
 * @returns {void}
 */
export async function sendGetDetailsRequest({ appId, baseUrl }: {
    appId: string,
    baseUrl: string,
}) {
    const fullUrl = `${baseUrl}/v1/public/tenants/${encodeURIComponent(appId)}`;
    try {
        const res = await fetch(fullUrl);
        if (res.ok) {
            return res.json();
        }
        throw new Error('Request not successful');
    } catch (err) {
        throw new Error(err);
    }
}
/**
 * Returns the billing id for vpaas meetings.
 *
 * @param {Object} state - The state of the app.
 * @param {string} feature - Feature to be looked up for disable state.
 * @returns {boolean}
 */
export function isFeatureDisabled(state: Object, feature: string) {
    return state['features/jaas'].disabledFeatures.includes(feature);
}
/**
 * Sends a request for retrieving jaas JWT.
 *
 * @param {Object} reqData - The request info.
 * @param {string} reqData.appId - The client appId.
 * @param {string} reqData.baseUrl - The base url for the request.
 * @returns {void}
 */
export async function sendGetJWTRequest({ appId, baseUrl }: {
    appId: string,
    baseUrl: string
}) {
    const fullUrl = `${baseUrl}/v1/public/token/${encodeURIComponent(appId)}`;
    try {
        const res = await fetch(fullUrl, {
            method: 'GET'
        });
        if (res.ok) {
            return res.json();
        }
        throw new Error('Request not successful');
    } catch (err) {
        throw new Error(err);
    }
}
/**
 * Gets a jaas JWT.
 *
 * @param {Object} state - Redux state.
 * @returns {string} The JWT.
 */
export async function getJaasJWT(state: Object) {
    const baseUrl = state['features/base/config'].jaasTokenUrl;
    const appId = getVpaasTenant(state);
    const shouldSendRequest = Boolean(baseUrl && appId);
    if (shouldSendRequest) {
        try {
            const jwt = await sendGetJWTRequest({
                appId,
                baseUrl
            });
            return jwt.token;
        } catch (err) {
            logger.error('Could not send request', err);
        }
    }
}
 |