Converse converse.js

Source: headless/shared/_converse.js

import i18n from './i18n.js';
import log from '../log.js';
import pluggable from 'pluggable.js/src/pluggable.js';
import { Events } from '@converse/skeletor/src/events.js';
import { Router } from '@converse/skeletor/src/router.js';
import { createStore, getDefaultStore } from '../utils/storage.js';
import { getInitSettings } from './settings/utils.js';
import { getOpenPromise } from '@converse/openpromise';
import { shouldClearCache } from '../utils/core.js';

import {
    ACTIVE,
    ANONYMOUS,
    CHATROOMS_TYPE,
    CLOSED,
    COMPOSING,
    CONTROLBOX_TYPE,
    DEFAULT_IMAGE,
    DEFAULT_IMAGE_TYPE,
    EXTERNAL,
    FAILURE,
    GONE,
    HEADLINES_TYPE,
    INACTIVE,
    LOGIN,
    LOGOUT,
    OPENED,
    PAUSED,
    PREBIND,
    PRIVATE_CHAT_TYPE,
    SUCCESS,
    VERSION_NAME
} from './constants';


/**
 * A private, closured object containing the private api (via {@link _converse.api})
 * as well as private methods and internal data-structures.
 * @global
 * @namespace _converse
 */
const _converse = {
    log,

    shouldClearCache, // TODO: Should be moved to utils with next major release
    VERSION_NAME,

    templates: {},
    promises: {
        'initialized': getOpenPromise()
    },

    // TODO: remove constants in next major release
    ANONYMOUS,
    CLOSED,
    EXTERNAL,
    LOGIN,
    LOGOUT,
    OPENED,
    PREBIND,

    SUCCESS,
    FAILURE,

    DEFAULT_IMAGE_TYPE,
    DEFAULT_IMAGE,

    INACTIVE,
    ACTIVE,
    COMPOSING,
    PAUSED,
    GONE,

    PRIVATE_CHAT_TYPE,
    CHATROOMS_TYPE,
    HEADLINES_TYPE,
    CONTROLBOX_TYPE,

    // Set as module attr so that we can override in tests.
    // TODO: replace with config settings
    TIMEOUTS: {
        PAUSED: 10000,
        INACTIVE: 90000
    },

    default_connection_options: {'explicitResourceBinding': true},
    router: new Router(),

    isTestEnv: () => {
        return getInitSettings()['bosh_service_url'] === 'montague.lit/http-bind';
    },

    getDefaultStore,
    createStore,

    /**
     * Translate the given string based on the current locale.
     * @method __
     * @private
     * @memberOf _converse
     * @param { String } str
     */
    '__': (...args) => i18n.__(...args),

    /**
     * A no-op method which is used to signal to gettext that the passed in string
     * should be included in the pot translation file.
     *
     * In contrast to the double-underscore method, the triple underscore method
     * doesn't actually translate the strings.
     *
     * One reason for this method might be because we're using strings we cannot
     * send to the translation function because they require variable interpolation
     * and we don't yet have the variables at scan time.
     *
     * @method ___
     * @private
     * @memberOf _converse
     * @param { String } str
     */
    '___': str => str
}

// Make _converse an event emitter
Object.assign(_converse, Events);

// Make _converse pluggable
pluggable.enable(_converse, '_converse', 'pluggable');

export default _converse;