UNPKG

strophe.js

Version:

Strophe.js is an XMPP library for JavaScript

190 lines (171 loc) 6.04 kB
/*global globalThis */ import * as utils from './utils.js'; import Bosh from './bosh.js'; import Builder, { $build, $msg, $pres, $iq } from './builder.js'; import Connection from './connection.js'; import Handler from './handler.js'; import Request from './request.js'; import SASLAnonymous from './sasl-anon.js'; import SASLExternal from './sasl-external.js'; import SASLMechanism from './sasl.js'; import SASLOAuthBearer from './sasl-oauthbearer.js'; import SASLPlain from './sasl-plain.js'; import SASLSHA1 from './sasl-sha1.js'; import SASLSHA256 from './sasl-sha256.js'; import SASLSHA384 from './sasl-sha384.js'; import SASLSHA512 from './sasl-sha512.js'; import SASLXOAuth2 from './sasl-xoauth2.js'; import TimedHandler from './timed-handler.js'; import Websocket from './websocket.js'; import WorkerWebsocket from './worker-websocket.js'; import log from './log.js'; import { ElementType, ErrorCondition, LOG_LEVELS, NS, Status, XHTML } from './constants.js'; import { stx, Stanza } from './stanza.js'; /** * A container for all Strophe library functions. * * This object is a container for all the objects and constants * used in the library. It is not meant to be instantiated, but to * provide a namespace for library objects, constants, and functions. * * @namespace Strophe * @property {Handler} Handler * @property {Builder} Builder * @property {Request} Request Represents HTTP Requests made for a BOSH connection * @property {Bosh} Bosh Support for XMPP-over-HTTP via XEP-0124 (BOSH) * @property {Websocket} Websocket Support for XMPP over websocket * @property {WorkerWebsocket} WorkerWebsocket Support for XMPP over websocket in a shared worker * @property {number} TIMEOUT=1.1 Timeout multiplier. A waiting BOSH HTTP request * will be considered failed after Math.floor(TIMEOUT * wait) seconds have elapsed. * This defaults to 1.1, and with default wait, 66 seconds. * @property {number} SECONDARY_TIMEOUT=0.1 Secondary timeout multiplier. * In cases where Strophe can detect early failure, it will consider the request * failed if it doesn't return after `Math.floor(SECONDARY_TIMEOUT * wait)` * seconds have elapsed. This defaults to 0.1, and with default wait, 6 seconds. * @property {SASLAnonymous} SASLAnonymous SASL ANONYMOUS authentication. * @property {SASLPlain} SASLPlain SASL PLAIN authentication * @property {SASLSHA1} SASLSHA1 SASL SCRAM-SHA-1 authentication * @property {SASLSHA256} SASLSHA256 SASL SCRAM-SHA-256 authentication * @property {SASLSHA384} SASLSHA384 SASL SCRAM-SHA-384 authentication * @property {SASLSHA512} SASLSHA512 SASL SCRAM-SHA-512 authentication * @property {SASLOAuthBearer} SASLOAuthBearer SASL OAuth Bearer authentication * @property {SASLExternal} SASLExternal SASL EXTERNAL authentication * @property {SASLXOAuth2} SASLXOAuth2 SASL X-OAuth2 authentication * @property {Status} Status * @property {Object.<string, string>} NS * @property {XHTML} XHTML */ const Strophe = { /** @constant: VERSION */ VERSION: '3.0.0', /** * @returns {number} */ get TIMEOUT() { return Bosh.getTimeoutMultplier(); }, /** * @param {number} n */ set TIMEOUT(n) { Bosh.setTimeoutMultiplier(n); }, /** * @returns {number} */ get SECONDARY_TIMEOUT() { return Bosh.getSecondaryTimeoutMultplier(); }, /** * @param {number} n */ set SECONDARY_TIMEOUT(n) { Bosh.setSecondaryTimeoutMultiplier(n); }, ...utils, ...log, Request, // Transports Bosh, Websocket, WorkerWebsocket, Connection, Handler, // Available authentication mechanisms SASLAnonymous, SASLPlain, SASLSHA1, SASLSHA256, SASLSHA384, SASLSHA512, SASLOAuthBearer, SASLExternal, SASLXOAuth2, Stanza, Builder, ElementType, ErrorCondition, LogLevel: LOG_LEVELS, /** @type {Object.<string, string>} */ NS, SASLMechanism, /** @type {Status} */ Status, TimedHandler, XHTML: { ...XHTML, validTag: utils.validTag, validCSS: utils.validCSS, validAttribute: utils.validAttribute, }, /** * Render a DOM element and all descendants to a String. * @method Strophe.serialize * @param {Element|Builder} elem - A DOM element. * @return {string} - The serialized element tree as a String. */ serialize(elem) { return Builder.serialize(elem); }, /** * @typedef {import('./constants').LogLevel} LogLevel * * Library consumers can use this function to set the log level of Strophe. * The default log level is Strophe.LogLevel.INFO. * @param {LogLevel} level * @example Strophe.setLogLevel(Strophe.LogLevel.DEBUG); */ setLogLevel(level) { log.setLogLevel(level); }, /** * This function is used to extend the current namespaces in * Strophe.NS. It takes a key and a value with the key being the * name of the new namespace, with its actual value. * @example: Strophe.addNamespace('PUBSUB', "http://jabber.org/protocol/pubsub"); * * @param {string} name - The name under which the namespace will be * referenced under Strophe.NS * @param {string} value - The actual namespace. */ addNamespace(name, value) { Strophe.NS[name] = value; }, /** * Extends the Strophe.Connection object with the given plugin. * @param {string} name - The name of the extension. * @param {Object} ptype - The plugin's prototype. */ addConnectionPlugin(name, ptype) { Connection.addConnectionPlugin(name, ptype); }, }; globalThis.$build = $build; globalThis.$iq = $iq; globalThis.$msg = $msg; globalThis.$pres = $pres; globalThis.Strophe = Strophe; globalThis.stx = stx; const toStanza = Stanza.toElement; globalThis.toStanza = Stanza.toElement; // Deprecated export { Builder, $build, $iq, $msg, $pres, Strophe, Stanza, stx, toStanza, Request };