Source: widget/companionCore/UACP.js

(function() {
    /**
     * @typedef {Object} Help4.widget.companionCore.UACP.CatalogueResponse
     * @property {string} status - response status information
     * @property {Help4.widget.help.catalogues.UACP.CatalogueProject[]} data - server response
     */

    /**
     * @typedef {Object} Help4.widget.companionCore.UACP.ProjectResponse
     * @property {string} status - response status information
     * @property {Help4.widget.help.project.UACP.Project} data - server response
     */

    /**
     * helper functionality for UACP backends
     */
    Help4.widget.companionCore.UACP = class {
        /**
         * @param {string} serverBaseUrl - the server base URL
         * @returns {string}
         */
        static getXCSRF(serverBaseUrl) {
            const {Ajax} = Help4.ajax;

            const url = serverBaseUrl + '/';
            let id = Ajax.getXCSRF(url);
            if (id) return id;

            id = Help4.createId();
            Ajax.setXCSRF({id, url});
            return id;
        }

        /**
         * @param {Help4.typedef.SystemConfiguration} config - the system configuration
         * @param {boolean} [allowDuplicates = false] - whether to allow duplicate language codes
         * @returns {string[]}
         */
        static getLanguages({core: {language, defaultLanguage}}, allowDuplicates = false) {
            const languagesList = [language.uacp].concat(defaultLanguage.uacp);
            return allowDuplicates ? languagesList : Help4.uniqueArray(languagesList);
        }

        /**
         * @param {string} url
         * @returns {Promise<*>}
         */
        static doGetRequest(url) {
            return new Help4.Promise(resolve => {
                /**
                 * @param {*} data
                 * @param {Help4.typedef.XmlHttpResponse} xhr
                 */
                const afterRequest = (data, xhr) => {
                    Help4.widget.companionCore.Core.broadcastXhrStatus(xhr);
                    resolve(data);
                };

                // XRAY-1490: do not use XCSRF ID here
                Help4.ajax.Ajax({
                    url,
                    saml: true,
                    success: afterRequest,
                    error: afterRequest
                });
            });
        }
    }
})();